[IPV6] MIP6: Loadable module support for MIPv6.
This patch makes MIPv6 loadable module named "mip6". Here is a modprobe.conf(5) example to load it automatically when user application uses XFRM state for MIPv6: alias xfrm-type-10-43 mip6 alias xfrm-type-10-60 mip6 Some MIPv6 feature is not included by this modular, however, it should not be affected to other features like either IPsec or IPv6 with and without the patch. We may discuss XFRM, MH (RAW socket) and ancillary data/sockopt separately for future work. Loadable features: * MH receiving check (to send ICMP error back) * RO header parsing and building (i.e. RH2 and HAO in DSTOPTS) * XFRM policy/state database handling for RO These are NOT covered as loadable: * Home Address flags and its rule on source address selection * XFRM sub policy (depends on its own kernel option) * XFRM functions to receive RO as IPv6 extension header * MH sending/receiving through raw socket if user application opens it (since raw socket allows to do so) * RH2 sending as ancillary data * RH2 operation with setsockopt(2) Signed-off-by: Masahide NAKAMURA <nakam@linux-ipv6.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
136ebf08b4
commit
59fbb3a61e
@ -74,7 +74,7 @@ bad:
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_IPV6_MIP6
|
||||
#if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE)
|
||||
/**
|
||||
* ipv6_rearrange_destopt - rearrange IPv6 destination options header
|
||||
* @iph: IPv6 header
|
||||
@ -228,7 +228,7 @@ static int ah6_output(struct xfrm_state *x, struct sk_buff *skb)
|
||||
u8 nexthdr;
|
||||
char tmp_base[8];
|
||||
struct {
|
||||
#ifdef CONFIG_IPV6_MIP6
|
||||
#if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE)
|
||||
struct in6_addr saddr;
|
||||
#endif
|
||||
struct in6_addr daddr;
|
||||
@ -255,7 +255,7 @@ static int ah6_output(struct xfrm_state *x, struct sk_buff *skb)
|
||||
err = -ENOMEM;
|
||||
goto error;
|
||||
}
|
||||
#ifdef CONFIG_IPV6_MIP6
|
||||
#if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE)
|
||||
memcpy(tmp_ext, &top_iph->saddr, extlen);
|
||||
#else
|
||||
memcpy(tmp_ext, &top_iph->daddr, extlen);
|
||||
@ -294,7 +294,7 @@ static int ah6_output(struct xfrm_state *x, struct sk_buff *skb)
|
||||
|
||||
memcpy(top_iph, tmp_base, sizeof(tmp_base));
|
||||
if (tmp_ext) {
|
||||
#ifdef CONFIG_IPV6_MIP6
|
||||
#if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE)
|
||||
memcpy(&top_iph->saddr, tmp_ext, extlen);
|
||||
#else
|
||||
memcpy(&top_iph->daddr, tmp_ext, extlen);
|
||||
|
Reference in New Issue
Block a user