[IPV6] NDISC: Don't rely on node-type hint from L2 unless required.
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
This commit is contained in:
parent
52eeeb8481
commit
de357cc013
@ -313,7 +313,9 @@ struct sk_buff {
|
|||||||
__u16 tc_verd; /* traffic control verdict */
|
__u16 tc_verd; /* traffic control verdict */
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_IPV6_NDISC_NODETYPE
|
||||||
__u8 ndisc_nodetype:2;
|
__u8 ndisc_nodetype:2;
|
||||||
|
#endif
|
||||||
/* 14 bit hole */
|
/* 14 bit hole */
|
||||||
|
|
||||||
#ifdef CONFIG_NET_DMA
|
#ifdef CONFIG_NET_DMA
|
||||||
|
@ -168,6 +168,7 @@ config IPV6_SIT
|
|||||||
tristate "IPv6: IPv6-in-IPv4 tunnel (SIT driver)"
|
tristate "IPv6: IPv6-in-IPv4 tunnel (SIT driver)"
|
||||||
depends on IPV6
|
depends on IPV6
|
||||||
select INET_TUNNEL
|
select INET_TUNNEL
|
||||||
|
select IPV6_NDISC_NODETYPE
|
||||||
default y
|
default y
|
||||||
---help---
|
---help---
|
||||||
Tunneling means encapsulating data of one protocol type within
|
Tunneling means encapsulating data of one protocol type within
|
||||||
@ -178,6 +179,9 @@ config IPV6_SIT
|
|||||||
|
|
||||||
Saying M here will produce a module called sit.ko. If unsure, say Y.
|
Saying M here will produce a module called sit.ko. If unsure, say Y.
|
||||||
|
|
||||||
|
config IPV6_NDISC_NODETYPE
|
||||||
|
bool
|
||||||
|
|
||||||
config IPV6_TUNNEL
|
config IPV6_TUNNEL
|
||||||
tristate "IPv6: IP-in-IPv6 tunnel (RFC2473)"
|
tristate "IPv6: IP-in-IPv6 tunnel (RFC2473)"
|
||||||
select INET6_TUNNEL
|
select INET6_TUNNEL
|
||||||
|
@ -1092,11 +1092,13 @@ static void ndisc_router_discovery(struct sk_buff *skb)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_IPV6_NDISC_NODETYPE
|
||||||
if (skb->ndisc_nodetype == NDISC_NODETYPE_HOST) {
|
if (skb->ndisc_nodetype == NDISC_NODETYPE_HOST) {
|
||||||
ND_PRINTK2(KERN_WARNING
|
ND_PRINTK2(KERN_WARNING
|
||||||
"ICMPv6 RA: from host or unauthorized router\n");
|
"ICMPv6 RA: from host or unauthorized router\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* set the RA_RECV flag in the interface
|
* set the RA_RECV flag in the interface
|
||||||
@ -1121,9 +1123,11 @@ static void ndisc_router_discovery(struct sk_buff *skb)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_IPV6_NDISC_NODETYPE
|
||||||
/* skip link-specific parameters from interior routers */
|
/* skip link-specific parameters from interior routers */
|
||||||
if (skb->ndisc_nodetype == NDISC_NODETYPE_NODEFAULT)
|
if (skb->ndisc_nodetype == NDISC_NODETYPE_NODEFAULT)
|
||||||
goto skip_linkparms;
|
goto skip_linkparms;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (in6_dev->if_flags & IF_RS_SENT) {
|
if (in6_dev->if_flags & IF_RS_SENT) {
|
||||||
/*
|
/*
|
||||||
@ -1239,7 +1243,9 @@ skip_defrtr:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_IPV6_NDISC_NODETYPE
|
||||||
skip_linkparms:
|
skip_linkparms:
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Process options.
|
* Process options.
|
||||||
@ -1286,9 +1292,11 @@ skip_linkparms:
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_IPV6_NDISC_NODETYPE
|
||||||
/* skip link-specific ndopts from interior routers */
|
/* skip link-specific ndopts from interior routers */
|
||||||
if (skb->ndisc_nodetype == NDISC_NODETYPE_NODEFAULT)
|
if (skb->ndisc_nodetype == NDISC_NODETYPE_NODEFAULT)
|
||||||
goto out;
|
goto out;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (in6_dev->cnf.accept_ra_pinfo && ndopts.nd_opts_pi) {
|
if (in6_dev->cnf.accept_ra_pinfo && ndopts.nd_opts_pi) {
|
||||||
struct nd_opt_hdr *p;
|
struct nd_opt_hdr *p;
|
||||||
@ -1353,6 +1361,7 @@ static void ndisc_redirect_rcv(struct sk_buff *skb)
|
|||||||
int optlen;
|
int optlen;
|
||||||
u8 *lladdr = NULL;
|
u8 *lladdr = NULL;
|
||||||
|
|
||||||
|
#ifdef CONFIG_IPV6_NDISC_NODETYPE
|
||||||
switch (skb->ndisc_nodetype) {
|
switch (skb->ndisc_nodetype) {
|
||||||
case NDISC_NODETYPE_HOST:
|
case NDISC_NODETYPE_HOST:
|
||||||
case NDISC_NODETYPE_NODEFAULT:
|
case NDISC_NODETYPE_NODEFAULT:
|
||||||
@ -1360,6 +1369,7 @@ static void ndisc_redirect_rcv(struct sk_buff *skb)
|
|||||||
"ICMPv6 Redirect: from host or unauthorized router\n");
|
"ICMPv6 Redirect: from host or unauthorized router\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!(ipv6_addr_type(&ipv6_hdr(skb)->saddr) & IPV6_ADDR_LINKLOCAL)) {
|
if (!(ipv6_addr_type(&ipv6_hdr(skb)->saddr) & IPV6_ADDR_LINKLOCAL)) {
|
||||||
ND_PRINTK2(KERN_WARNING
|
ND_PRINTK2(KERN_WARNING
|
||||||
|
Loading…
Reference in New Issue
Block a user