diff options
Diffstat (limited to 'src/vnet/ip6-nd/ip6_nd.c')
-rw-r--r-- | src/vnet/ip6-nd/ip6_nd.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/vnet/ip6-nd/ip6_nd.c b/src/vnet/ip6-nd/ip6_nd.c index 772c811ae20..513d2bf6e87 100644 --- a/src/vnet/ip6-nd/ip6_nd.c +++ b/src/vnet/ip6-nd/ip6_nd.c @@ -90,6 +90,7 @@ icmp6_neighbor_solicitation_or_advertisement (vlib_main_t * vm, icmp6_neighbor_discovery_ethernet_link_layer_address_option_t *o0; u32 bi0, options_len0, sw_if_index0, next0, error0; u32 ip6_sadd_link_local, ip6_sadd_unspecified; + ip_neighbor_counter_type_t c_type; int is_rewrite0; u32 ni0; @@ -230,16 +231,24 @@ icmp6_neighbor_solicitation_or_advertisement (vlib_main_t * vm, } if (is_solicitation) - next0 = (error0 != ICMP6_ERROR_NONE - ? ICMP6_NEIGHBOR_SOLICITATION_NEXT_DROP - : ICMP6_NEIGHBOR_SOLICITATION_NEXT_REPLY); + { + next0 = (error0 != ICMP6_ERROR_NONE ? + ICMP6_NEIGHBOR_SOLICITATION_NEXT_DROP : + ICMP6_NEIGHBOR_SOLICITATION_NEXT_REPLY); + c_type = IP_NEIGHBOR_CTR_REQUEST; + } else { next0 = 0; error0 = error0 == ICMP6_ERROR_NONE ? ICMP6_ERROR_NEIGHBOR_ADVERTISEMENTS_RX : error0; + c_type = IP_NEIGHBOR_CTR_REPLY; } + vlib_increment_simple_counter ( + &ip_neighbor_counters[AF_IP6].ipnc[VLIB_RX][c_type], + vm->thread_index, sw_if_index0, 1); + if (is_solicitation && error0 == ICMP6_ERROR_NONE) { icmp6_send_neighbor_advertisement (vm, p0, ip0, h0, o0, |