[IPV6] MIP6: Add receiving mobility header functions through raw socket.
Like ICMPv6, mobility header is handled through raw socket. In inbound case, check only whether ICMPv6 error should be sent as a reply or not by kernel. Based on MIPL2 kernel patch. This patch was also written by: Ville Nuorvala <vnuorval@tcs.hut.fi> This patch was also written by: Antti Tuominen <anttit@tcs.hut.fi> Signed-off-by: Masahide NAKAMURA <nakam@linux-ipv6.org> Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
2b741653b6
commit
7be96f7628
@ -50,6 +50,9 @@
|
||||
#include <net/udp.h>
|
||||
#include <net/inet_common.h>
|
||||
#include <net/tcp_states.h>
|
||||
#ifdef CONFIG_IPV6_MIP6
|
||||
#include <net/mip6.h>
|
||||
#endif
|
||||
|
||||
#include <net/rawv6.h>
|
||||
#include <net/xfrm.h>
|
||||
@ -169,8 +172,32 @@ int ipv6_raw_deliver(struct sk_buff *skb, int nexthdr)
|
||||
sk = __raw_v6_lookup(sk, nexthdr, daddr, saddr, IP6CB(skb)->iif);
|
||||
|
||||
while (sk) {
|
||||
int filtered;
|
||||
|
||||
delivered = 1;
|
||||
if (nexthdr != IPPROTO_ICMPV6 || !icmpv6_filter(sk, skb)) {
|
||||
switch (nexthdr) {
|
||||
case IPPROTO_ICMPV6:
|
||||
filtered = icmpv6_filter(sk, skb);
|
||||
break;
|
||||
#ifdef CONFIG_IPV6_MIP6
|
||||
case IPPROTO_MH:
|
||||
/* XXX: To validate MH only once for each packet,
|
||||
* this is placed here. It should be after checking
|
||||
* xfrm policy, however it doesn't. The checking xfrm
|
||||
* policy is placed in rawv6_rcv() because it is
|
||||
* required for each socket.
|
||||
*/
|
||||
filtered = mip6_mh_filter(sk, skb);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
filtered = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (filtered < 0)
|
||||
break;
|
||||
if (filtered == 0) {
|
||||
struct sk_buff *clone = skb_clone(skb, GFP_ATOMIC);
|
||||
|
||||
/* Not releasing hash table! */
|
||||
|
Reference in New Issue
Block a user