diff options
author | Neale Ranns <nranns@cisco.com> | 2017-12-13 01:44:25 -0800 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2017-12-13 21:53:11 +0000 |
commit | cf3561bde53173a7be9aa02ed4897c7f2d55bd0a (patch) | |
tree | d299339b27fa848210b3098d3f8b81f1a7b3146b /src/vnet | |
parent | 7e665d64eb172f8ff42009a0d412ad05ffae7432 (diff) |
IP bi-direction multicast - same cable check on egress
Change-Id: I655382f7f74181dd7c795a2b22f151f76b50e793
Signed-off-by: Neale Ranns <nranns@cisco.com>
Diffstat (limited to 'src/vnet')
-rw-r--r-- | src/vnet/ip/ip4_error.h | 1 | ||||
-rwxr-xr-x | src/vnet/ip/ip4_forward.c | 17 |
2 files changed, 17 insertions, 1 deletions
diff --git a/src/vnet/ip/ip4_error.h b/src/vnet/ip/ip4_error.h index d2775636539..d9b56bc2f49 100644 --- a/src/vnet/ip/ip4_error.h +++ b/src/vnet/ip/ip4_error.h @@ -59,6 +59,7 @@ _ (SRC_LOOKUP_MISS, "ip4 source lookup miss") \ _ (DROP, "ip4 drop") \ _ (PUNT, "ip4 punt") \ + _ (SAME_INTERFACE, "ip4 egrees interface same as ingress") \ \ /* Errors signalled by ip4-local. */ \ _ (UNKNOWN_PROTOCOL, "unknown ip protocol") \ diff --git a/src/vnet/ip/ip4_forward.c b/src/vnet/ip/ip4_forward.c index c7cf362a3c0..2f3f340264f 100755 --- a/src/vnet/ip/ip4_forward.c +++ b/src/vnet/ip/ip4_forward.c @@ -2477,6 +2477,16 @@ ip4_rewrite_inline (vlib_main_t * vm, rewrite_header.max_l3_packet_bytes ? IP4_ERROR_MTU_EXCEEDED : error1); + if (is_mcast) + { + error0 = ((adj0[0].rewrite_header.sw_if_index == + vnet_buffer (p0)->sw_if_index[VLIB_RX]) ? + IP4_ERROR_SAME_INTERFACE : error0); + error1 = ((adj1[0].rewrite_header.sw_if_index == + vnet_buffer (p1)->sw_if_index[VLIB_RX]) ? + IP4_ERROR_SAME_INTERFACE : error1); + } + /* Don't adjust the buffer for ttl issue; icmp-error node wants * to see the IP headerr */ if (PREDICT_TRUE (error0 == IP4_ERROR_NONE)) @@ -2636,7 +2646,12 @@ ip4_rewrite_inline (vlib_main_t * vm, error0 = (vlib_buffer_length_in_chain (vm, p0) > adj0[0].rewrite_header.max_l3_packet_bytes ? IP4_ERROR_MTU_EXCEEDED : error0); - + if (is_mcast) + { + error0 = ((adj0[0].rewrite_header.sw_if_index == + vnet_buffer (p0)->sw_if_index[VLIB_RX]) ? + IP4_ERROR_SAME_INTERFACE : error0); + } p0->error = error_node->errors[error0]; /* Don't adjust the buffer for ttl issue; icmp-error node wants |