mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-12-26 03:16:18 +00:00
In ip6_input(), accept solicited node packets that match the receiving
netif addresses, when multicast is disabled. Change-Id: I3f59258ee605a820f0a525b696b1dede0d53948f
This commit is contained in:
parent
bfa28f4c30
commit
6e81f722ad
@ -405,15 +405,24 @@ ip6_input(struct pbuf *p, struct netif *inp)
|
|||||||
ip6_addr_isallnodes_linklocal(ip6_current_dest_addr())) {
|
ip6_addr_isallnodes_linklocal(ip6_current_dest_addr())) {
|
||||||
netif = inp;
|
netif = inp;
|
||||||
}
|
}
|
||||||
#if LWIP_IPV6_MLD
|
#if 0
|
||||||
else if (mld6_lookfor_group(inp, ip6_current_dest_addr())) {
|
else if (mld6_lookfor_group(inp, ip6_current_dest_addr())) {
|
||||||
netif = inp;
|
netif = inp;
|
||||||
}
|
}
|
||||||
#else /* LWIP_IPV6_MLD */
|
#else /* LWIP_IPV6_MLD */
|
||||||
else if (ip6_addr_issolicitednode(ip6_current_dest_addr())) {
|
else if (ip6_addr_issolicitednode(ip6_current_dest_addr())) {
|
||||||
/* Accept all solicited node packets when MLD is not enabled
|
/* Filter solicited node packets when MLD is not enabled
|
||||||
* (for Neighbor discovery). */
|
* (for Neighbor discovery). */
|
||||||
netif = inp;
|
netif = NULL;
|
||||||
|
for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) {
|
||||||
|
if (ip6_addr_isvalid(netif_ip6_addr_state(inp, i)) &&
|
||||||
|
ip6_addr_cmp_solicitednode(ip6_current_dest_addr(), netif_ip6_addr(inp, i))) {
|
||||||
|
netif = inp;
|
||||||
|
LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: solicited node packet accepted on interface %c%c\n",
|
||||||
|
netif->name[0], netif->name[1]));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif /* LWIP_IPV6_MLD */
|
#endif /* LWIP_IPV6_MLD */
|
||||||
else {
|
else {
|
||||||
|
@ -234,6 +234,10 @@ Little-endian version, stored in network order (no htonl). */
|
|||||||
(ip6addr)->addr[2] = PP_HTONL(0x00000001UL); \
|
(ip6addr)->addr[2] = PP_HTONL(0x00000001UL); \
|
||||||
(ip6addr)->addr[3] = htonl(0xff000000UL | (htonl(if_id) & 0x00ffffffUL));}while(0)
|
(ip6addr)->addr[3] = htonl(0xff000000UL | (htonl(if_id) & 0x00ffffffUL));}while(0)
|
||||||
|
|
||||||
|
#define ip6_addr_cmp_solicitednode(ip6addr, sn_addr) (((ip6addr)->addr[0] == PP_HTONL(0xff020000UL)) && \
|
||||||
|
((ip6addr)->addr[1] == 0) && \
|
||||||
|
((ip6addr)->addr[2] == PP_HTONL(0x00000001UL)) && \
|
||||||
|
((ip6addr)->addr[3] == htonl(0xff000000UL | (htonl((sn_addr)->addr[3]) & 0x00ffffffUL))))
|
||||||
|
|
||||||
/* IPv6 address states. */
|
/* IPv6 address states. */
|
||||||
#define IP6_ADDR_INVALID 0x00
|
#define IP6_ADDR_INVALID 0x00
|
||||||
|
Loading…
Reference in New Issue
Block a user