cregit-Linux how code gets into the kernel

Release 4.8 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, struct ip6_tnl *t) { XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip6 = t; 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 xu2841.18%650.00%
hideaki yoshifujihideaki yoshifuji1927.94%216.67%
alexey kodanevalexey kodanev1014.71%18.33%
nicolas dichtelnicolas dichtel68.82%18.33%
patrick mchardypatrick mchardy45.88%18.33%
al viroal viro11.47%18.33%
Total68100.00%12100.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_tnl(struct sk_buff *skb, struct ip6_tnl *t) { return xfrm6_rcv_spi(skb, skb_network_header(skb)[IP6CB(skb)->nhoff], 0, t); }

Contributors

PersonTokensPropCommitsCommitProp
herbert xuherbert xu2771.05%375.00%
nicolas dichtelnicolas dichtel1128.95%125.00%
Total38100.00%4100.00%

EXPORT_SYMBOL(xfrm6_rcv_tnl);
int xfrm6_rcv(struct sk_buff *skb) { return xfrm6_rcv_tnl(skb, NULL); }

Contributors

PersonTokensPropCommitsCommitProp
nicolas dichtelnicolas dichtel1583.33%150.00%
herbert xuherbert xu316.67%150.00%
Total18100.00%2100.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 nakamura34148.44%39.09%
herbert xuherbert xu12918.32%1030.30%
hideaki yoshifujihideaki yoshifuji8512.07%412.12%
patrick mchardypatrick mchardy537.53%39.09%
nicolas dichtelnicolas dichtel375.26%13.03%
alexey dobriyanalexey dobriyan202.84%26.06%
alexey kodanevalexey kodanev101.42%13.03%
eric w. biedermaneric w. biederman70.99%13.03%
paul moorepaul moore70.99%13.03%
arnaldo carvalho de meloarnaldo carvalho de melo60.85%26.06%
jamal hadi salimjamal hadi salim40.57%13.03%
david s. millerdavid s. miller20.28%13.03%
ian morrisian morris10.14%13.03%
al viroal viro10.14%13.03%
jan engelhardtjan engelhardt10.14%13.03%
Total704100.00%33100.00%
Directory: net/ipv6
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.