Release 4.7 net/ipv6/xfrm6_input.c
/*
* 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
| Person | Tokens | Prop | Commits | CommitProp |
herbert xu | herbert xu | 21 | 100.00% | 1 | 100.00% |
| Total | 21 | 100.00% | 1 | 100.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
| Person | Tokens | Prop | Commits | CommitProp |
herbert xu | herbert xu | 28 | 53.85% | 6 | 60.00% |
hideaki yoshifuji | hideaki yoshifuji | 19 | 36.54% | 2 | 20.00% |
patrick mchardy | patrick mchardy | 4 | 7.69% | 1 | 10.00% |
al viro | al viro | 1 | 1.92% | 1 | 10.00% |
| Total | 52 | 100.00% | 10 | 100.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
| Person | Tokens | Prop | Commits | CommitProp |
patrick mchardy | patrick mchardy | 43 | 41.35% | 2 | 18.18% |
herbert xu | herbert xu | 42 | 40.38% | 3 | 27.27% |
eric w. biederman | eric w. biederman | 7 | 6.73% | 1 | 9.09% |
arnaldo carvalho de melo | arnaldo carvalho de melo | 6 | 5.77% | 2 | 18.18% |
hideaki yoshifuji | hideaki yoshifuji | 3 | 2.88% | 1 | 9.09% |
david s. miller | david s. miller | 2 | 1.92% | 1 | 9.09% |
jan engelhardt | jan engelhardt | 1 | 0.96% | 1 | 9.09% |
| Total | 104 | 100.00% | 11 | 100.00% |
int xfrm6_rcv(struct sk_buff *skb)
{
return xfrm6_rcv_spi(skb, skb_network_header(skb)[IP6CB(skb)->nhoff],
0);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
herbert xu | herbert xu | 31 | 100.00% | 3 | 100.00% |
| Total | 31 | 100.00% | 3 | 100.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
| Person | Tokens | Prop | Commits | CommitProp |
masahide nakamura | masahide nakamura | 341 | 81.97% | 3 | 37.50% |
hideaki yoshifuji | hideaki yoshifuji | 44 | 10.58% | 1 | 12.50% |
alexey dobriyan | alexey dobriyan | 20 | 4.81% | 2 | 25.00% |
paul moore | paul moore | 7 | 1.68% | 1 | 12.50% |
jamal hadi salim | jamal hadi salim | 4 | 0.96% | 1 | 12.50% |
| Total | 416 | 100.00% | 8 | 100.00% |
EXPORT_SYMBOL(xfrm6_input_addr);
Overall Contributors
| Person | Tokens | Prop | Commits | CommitProp |
masahide nakamura | masahide nakamura | 341 | 51.82% | 3 | 9.68% |
herbert xu | herbert xu | 130 | 19.76% | 10 | 32.26% |
hideaki yoshifuji | hideaki yoshifuji | 85 | 12.92% | 4 | 12.90% |
patrick mchardy | patrick mchardy | 53 | 8.05% | 3 | 9.68% |
alexey dobriyan | alexey dobriyan | 20 | 3.04% | 2 | 6.45% |
paul moore | paul moore | 7 | 1.06% | 1 | 3.23% |
eric w. biederman | eric w. biederman | 7 | 1.06% | 1 | 3.23% |
arnaldo carvalho de melo | arnaldo carvalho de melo | 6 | 0.91% | 2 | 6.45% |
jamal hadi salim | jamal hadi salim | 4 | 0.61% | 1 | 3.23% |
david s. miller | david s. miller | 2 | 0.30% | 1 | 3.23% |
al viro | al viro | 1 | 0.15% | 1 | 3.23% |
jan engelhardt | jan engelhardt | 1 | 0.15% | 1 | 3.23% |
ian morris | ian morris | 1 | 0.15% | 1 | 3.23% |
| Total | 658 | 100.00% | 31 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.