diff options
author | Neale Ranns <nranns@cisco.com> | 2017-10-03 08:20:21 -0700 |
---|---|---|
committer | Damjan Marion <dmarion.lists@gmail.com> | 2017-10-05 09:50:26 +0000 |
commit | 6f6311560380d0e992f710558e213df1b098ef94 (patch) | |
tree | 237e34a2165ed5d2fc0848a1daec457ce57acc3e /src/vnet/ip | |
parent | d3c008d108aa2187d1a2afe2833b4de25ca2c2ab (diff) |
Distributed Virtual Router Support
A distributed virtual router works by attmpeting to switch a packet, but on failing to find a local consumer (i.e. the packet is destined to a locally attached host) then the packet is sent unmodified 'upstream' to where the rest of the 'distributed' router is present. When L3 switching a packet this means the L2 header must not be modifed. This patch adds a 'l2-bridge' object to the L3 FIB which re-injects packets from the L3 path back into the L2 path - use with extreme caution.
Change-Id: I069724eb45956647d7980cbe40a80a788ee6ee82
Signed-off-by: Neale Ranns <nranns@cisco.com>
Diffstat (limited to 'src/vnet/ip')
-rw-r--r-- | src/vnet/ip/ip.api | 1 | ||||
-rw-r--r-- | src/vnet/ip/ip_api.c | 5 |
2 files changed, 6 insertions, 0 deletions
diff --git a/src/vnet/ip/ip.api b/src/vnet/ip/ip.api index f26d79436a5..4b7019f087e 100644 --- a/src/vnet/ip/ip.api +++ b/src/vnet/ip/ip.api @@ -397,6 +397,7 @@ autoreply define ip_add_del_route u8 is_multipath; u8 is_resolve_host; u8 is_resolve_attached; + u8 is_l2_bridged; /* Is last/not-last message in group of multiple add/del messages. */ u8 not_last; u8 next_hop_weight; diff --git a/src/vnet/ip/ip_api.c b/src/vnet/ip/ip_api.c index 6981c84cb0e..c34ec57dc84 100644 --- a/src/vnet/ip/ip_api.c +++ b/src/vnet/ip/ip_api.c @@ -769,6 +769,7 @@ add_del_route_t_handler (u8 is_multipath, u8 is_resolve_attached, u8 is_interface_rx, u8 is_rpf_id, + u8 is_l2_bridged, u32 fib_index, const fib_prefix_t * prefix, dpo_proto_t next_hop_proto, @@ -806,6 +807,8 @@ add_del_route_t_handler (u8 is_multipath, path.frp_local_label = next_hop_via_label; path.frp_eos = MPLS_NON_EOS; } + if (is_l2_bridged) + path.frp_proto = DPO_PROTO_ETHERNET; if (is_resolve_host) path_flags |= FIB_ROUTE_PATH_RESOLVE_VIA_HOST; if (is_resolve_attached) @@ -1043,6 +1046,7 @@ ip4_add_del_route_t_handler (vl_api_ip_add_del_route_t * mp) mp->classify_table_index, mp->is_resolve_host, mp->is_resolve_attached, 0, 0, + mp->is_l2_bridged, fib_index, &pfx, DPO_PROTO_IP4, &nh, ntohl (mp->next_hop_sw_if_index), @@ -1102,6 +1106,7 @@ ip6_add_del_route_t_handler (vl_api_ip_add_del_route_t * mp) mp->classify_table_index, mp->is_resolve_host, mp->is_resolve_attached, 0, 0, + mp->is_l2_bridged, fib_index, &pfx, DPO_PROTO_IP6, &nh, ntohl (mp->next_hop_sw_if_index), next_hop_fib_index, |