@@ -1268,7 +1268,7 @@ nd6_send_rs(struct netif *netif)
1268
1268
ip6_addr_set_allrouters_linklocal (& multicast_address );
1269
1269
1270
1270
/* Allocate a packet. */
1271
- if (src_addr != IP6_ADDR_ANY6 ) {
1271
+ if (src_addr != IP6_ADDR_ANY6 && netif -> hwaddr_len ) {
1272
1272
lladdr_opt_len = ((netif -> hwaddr_len + 2 ) >> 3 ) + (((netif -> hwaddr_len + 2 ) & 0x07 ) ? 1 : 0 );
1273
1273
}
1274
1274
p = pbuf_alloc (PBUF_IP , sizeof (struct rs_header ) + (lladdr_opt_len << 3 ), PBUF_RAM );
@@ -1285,7 +1285,7 @@ nd6_send_rs(struct netif *netif)
1285
1285
rs_hdr -> chksum = 0 ;
1286
1286
rs_hdr -> reserved = 0 ;
1287
1287
1288
- if (src_addr != IP6_ADDR_ANY6 ) {
1288
+ if (src_addr != IP6_ADDR_ANY6 && lladdr_opt_len ) {
1289
1289
/* Include our hw address. */
1290
1290
lladdr_opt = (struct lladdr_option * )((u8_t * )p -> payload + sizeof (struct rs_header ));
1291
1291
lladdr_opt -> type = ND6_OPTION_TYPE_SOURCE_LLADDR ;
@@ -1736,9 +1736,13 @@ nd6_new_router(const ip6_addr_t *router_addr, struct netif *netif)
1736
1736
ip6_addr_set (& (neighbor_cache [neighbor_index ].next_hop_address ), router_addr );
1737
1737
neighbor_cache [neighbor_index ].netif = netif ;
1738
1738
neighbor_cache [neighbor_index ].q = NULL ;
1739
- neighbor_cache [neighbor_index ].state = ND6_INCOMPLETE ;
1740
- neighbor_cache [neighbor_index ].counter .probes_sent = 1 ;
1741
- nd6_send_neighbor_cache_probe (& neighbor_cache [neighbor_index ], ND6_SEND_FLAG_MULTICAST_DEST );
1739
+ if (netif -> hwaddr_len ) {
1740
+ neighbor_cache [neighbor_index ].state = ND6_INCOMPLETE ;
1741
+ neighbor_cache [neighbor_index ].counter .probes_sent = 1 ;
1742
+ nd6_send_neighbor_cache_probe (& neighbor_cache [neighbor_index ], ND6_SEND_FLAG_MULTICAST_DEST );
1743
+ } else {
1744
+ neighbor_cache [neighbor_index ].state = ND6_STALE ;
1745
+ }
1742
1746
}
1743
1747
1744
1748
/* Mark neighbor as router. */
0 commit comments