cregit-Linux how code gets into the kernel

Release 4.7 net/ipv6/xfrm6_input.c

Directory: net/ipv6
/*
 * xfrm6_input.c: based on net/ipv4/xfrm4_input.c
 *
 * Authors:
 *      Mitsuru KANDA @USAGI
 *      Kazunori MIYAZAWA @USAGI
 *      Kunihiro Ishiguro <kunihiro@ipinfusion.com>
 *      YOSHIFUJI Hideaki @USAGI
 *              IPv6 support
 */

#include <linux/module.h>
#include <linux/string.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv6.h>
#include <net/ipv6.h>
#include <net/xfrm.h>


int xfrm6_extract_input(struct xfrm_state *x, struct sk_buff *skb) { return xfrm6_extract_header(skb); }

Contributors

PersonTokensPropCommitsCommitProp
herbert xuherbert xu21100.00%1100.00%
Total21100.00%1100.00%


int xfrm6_rcv_spi(struct sk_buff *skb, int nexthdr, __be32 spi) { XFRM_SPI_SKB_CB(skb)->family = AF_INET6; XFRM_SPI_SKB_CB(skb)->daddroff = offsetof(struct ipv6hdr, daddr); return xfrm_input(skb, nexthdr, spi, 0); }

Contributors

PersonTokensPropCommitsCommitProp
herbert xuherbert xu2853.85%660.00%
hideaki yoshifujihideaki yoshifuji1936.54%220.00%
patrick mchardypatrick mchardy47.69%110.00%
al viroal viro11.92%110.00%
Total52100.00%10100.00%

EXPORT_SYMBOL(xfrm6_rcv_spi);
int xfrm6_transport_finish(struct sk_buff *skb, int async) { skb_network_header(skb)[IP6CB(skb)->nhoff] = XFRM_MODE_SKB_CB(skb)->protocol; #ifndef CONFIG_NETFILTER if (!async) return 1; #endif ipv6_hdr(skb)->payload_len = htons(skb->len); __skb_push(skb, skb->data - skb_network_header(skb)); NF_HOOK(NFPROTO_IPV6, NF_INET_PRE_ROUTING, dev_net(skb->dev), NULL, skb, skb->dev, NULL, ip6_rcv_finish); return -1; }

Contributors

PersonTokensPropCommitsCommitProp
patrick mchardypatrick mchardy4341.35%218.18%
herbert xuherbert xu4240.38%327.27%
eric w. biedermaneric w. biederman76.73%19.09%
arnaldo carvalho de meloarnaldo carvalho de melo65.77%218.18%
hideaki yoshifujihideaki yoshifuji32.88%19.09%
david s. millerdavid s. miller21.92%19.09%
jan engelhardtjan engelhardt10.96%19.09%
Total104100.00%11100.00%


int xfrm6_rcv(struct sk_buff *skb) { return xfrm6_rcv_spi(skb, skb_network_header(skb)[IP6CB(skb)->nhoff], 0); }

Contributors

PersonTokensPropCommitsCommitProp
herbert xuherbert xu31100.00%3100.00%
Total31100.00%3100.00%

EXPORT_SYMBOL(xfrm6_rcv);
int xfrm6_input_addr(struct sk_buff *skb, xfrm_address_t *daddr, xfrm_address_t *saddr, u8 proto) { struct net *net = dev_net(skb->dev); struct xfrm_state *x = NULL; int i = 0; /* Allocate new secpath or COW existing one. */ if (!skb->sp || atomic_read(&skb->sp->refcnt) != 1) { struct sec_path *sp; sp = secpath_dup(skb->sp); if (!sp) { XFRM_INC_STATS(net, LINUX_MIB_XFRMINERROR); goto drop; } if (skb->sp) secpath_put(skb->sp); skb->sp = sp; } if (1 + skb->sp->len == XFRM_MAX_DEPTH) { XFRM_INC_STATS(net, LINUX_MIB_XFRMINBUFFERERROR); goto drop; } for (i = 0; i < 3; i++) { xfrm_address_t *dst, *src; switch (i) { case 0: dst = daddr; src = saddr; break; case 1: /* lookup state with wild-card source address */ dst = daddr; src = (xfrm_address_t *)&in6addr_any; break; default: /* lookup state with wild-card addresses */ dst = (xfrm_address_t *)&in6addr_any; src = (xfrm_address_t *)&in6addr_any; break; } x = xfrm_state_lookup_byaddr(net, skb->mark, dst, src, proto, AF_INET6); if (!x) continue; spin_lock(&x->lock); if ((!i || (x->props.flags & XFRM_STATE_WILDRECV)) && likely(x->km.state == XFRM_STATE_VALID) && !xfrm_state_check_expire(x)) { spin_unlock(&x->lock); if (x->type->input(x, skb) > 0) { /* found a valid state */ break; } } else spin_unlock(&x->lock); xfrm_state_put(x); x = NULL; } if (!x) { XFRM_INC_STATS(net, LINUX_MIB_XFRMINNOSTATES); xfrm_audit_state_notfound_simple(skb, AF_INET6); goto drop; } skb->sp->xvec[skb->sp->len++] = x; spin_lock(&x->lock); x->curlft.bytes += skb->len; x->curlft.packets++; spin_unlock(&x->lock); return 1; drop: return -1; }

Contributors

PersonTokensPropCommitsCommitProp
masahide nakamuramasahide nakamura34181.97%337.50%
hideaki yoshifujihideaki yoshifuji4410.58%112.50%
alexey dobriyanalexey dobriyan204.81%225.00%
paul moorepaul moore71.68%112.50%
jamal hadi salimjamal hadi salim40.96%112.50%
Total416100.00%8100.00%

EXPORT_SYMBOL(xfrm6_input_addr);

Overall Contributors

PersonTokensPropCommitsCommitProp
masahide nakamuramasahide nakamura34151.82%39.68%
herbert xuherbert xu13019.76%1032.26%
hideaki yoshifujihideaki yoshifuji8512.92%412.90%
patrick mchardypatrick mchardy538.05%39.68%
alexey dobriyanalexey dobriyan203.04%26.45%
paul moorepaul moore71.06%13.23%
eric w. biedermaneric w. biederman71.06%13.23%
arnaldo carvalho de meloarnaldo carvalho de melo60.91%26.45%
jamal hadi salimjamal hadi salim40.61%13.23%
david s. millerdavid s. miller20.30%13.23%
al viroal viro10.15%13.23%
jan engelhardtjan engelhardt10.15%13.23%
ian morrisian morris10.15%13.23%
Total658100.00%31100.00%
Directory: net/ipv6
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
{% endraw %}