X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fgbp%2Fgbp_route_domain.c;h=99c6e168a5358a71665a1f4b431246825160591d;hb=cbe25aab3be72154f2c706c39eeba6a77f34450f;hp=7502a253440e7a9c6badb62427d08dadafadb95b;hpb=d7f92ddf4f96f28bfafeac376bf90497d41b5901;p=vpp.git diff --git a/src/plugins/gbp/gbp_route_domain.c b/src/plugins/gbp/gbp_route_domain.c index 7502a253440..99c6e168a53 100644 --- a/src/plugins/gbp/gbp_route_domain.c +++ b/src/plugins/gbp/gbp_route_domain.c @@ -18,7 +18,6 @@ #include #include -#include /** * A fixed MAC address to use as the source MAC for packets L3 switched @@ -53,6 +52,7 @@ typedef struct gbp_route_domain_db_t } gbp_route_domain_db_t; static gbp_route_domain_db_t gbp_route_domain_db; +static fib_source_t gbp_fib_source; /** * logger @@ -126,6 +126,7 @@ gbp_route_domain_db_remove (gbp_route_domain_t * grd) int gbp_route_domain_add_and_lock (u32 rd_id, + gbp_scope_t scope, u32 ip4_table_id, u32 ip6_table_id, u32 ip4_uu_sw_if_index, u32 ip6_uu_sw_if_index) @@ -142,6 +143,7 @@ gbp_route_domain_add_and_lock (u32 rd_id, pool_get_zero (gbp_route_domain_pool, grd); grd->grd_id = rd_id; + grd->grd_scope = scope; grd->grd_table_id[FIB_PROTOCOL_IP4] = ip4_table_id; grd->grd_table_id[FIB_PROTOCOL_IP6] = ip6_table_id; grd->grd_uu_sw_if_index[FIB_PROTOCOL_IP4] = ip4_uu_sw_if_index; @@ -152,7 +154,7 @@ gbp_route_domain_add_and_lock (u32 rd_id, grd->grd_fib_index[fproto] = fib_table_find_or_create_and_lock (fproto, grd->grd_table_id[fproto], - FIB_SOURCE_PLUGIN_HI); + gbp_fib_source); if (~0 != grd->grd_uu_sw_if_index[fproto]) { @@ -170,7 +172,7 @@ gbp_route_domain_add_and_lock (u32 rd_id, mac_address_to_bytes (gbp_route_domain_get_local_mac (), eth->src_address); mac_address_to_bytes (gbp_route_domain_get_remote_mac (), - eth->src_address); + eth->dst_address); /* * create an adjacency out of the uu-fwd interfaces that will @@ -219,8 +221,7 @@ gbp_route_domain_unlock (index_t index) FOR_EACH_FIB_IP_PROTOCOL (fproto) { - fib_table_unlock (grd->grd_fib_index[fproto], - fproto, FIB_SOURCE_PLUGIN_HI); + fib_table_unlock (grd->grd_fib_index[fproto], fproto, gbp_fib_source); if (INDEX_INVALID != grd->grd_adj[fproto]) adj_unlock (grd->grd_adj[fproto]); } @@ -241,6 +242,16 @@ gbp_route_domain_get_rd_id (index_t grdi) return (grd->grd_id); } +gbp_scope_t +gbp_route_domain_get_scope (index_t grdi) +{ + gbp_route_domain_t *grd; + + grd = gbp_route_domain_get (grdi); + + return (grd->grd_scope); +} + int gbp_route_domain_delete (u32 rd_id) { @@ -296,6 +307,7 @@ gbp_route_domain_cli (vlib_main_t * vm, u32 ip6_uu_sw_if_index = ~0; u32 ip4_table_id = ~0; u32 ip6_table_id = ~0; + u32 scope = ~0; u32 rd_id = ~0; u8 add = 1; @@ -317,6 +329,8 @@ gbp_route_domain_cli (vlib_main_t * vm, add = 0; else if (unformat (input, "rd %d", &rd_id)) ; + else if (unformat (input, "scope %d", &scope)) + ; else break; } @@ -331,7 +345,8 @@ gbp_route_domain_cli (vlib_main_t * vm, if (~0 == ip6_table_id) return clib_error_return (0, "IP6 table-ID must be specified"); - gbp_route_domain_add_and_lock (rd_id, ip4_table_id, + gbp_route_domain_add_and_lock (rd_id, scope, + ip4_table_id, ip6_table_id, ip4_uu_sw_if_index, ip6_uu_sw_if_index); } @@ -414,6 +429,9 @@ static clib_error_t * gbp_route_domain_init (vlib_main_t * vm) { grd_logger = vlib_log_register_class ("gbp", "rd"); + gbp_fib_source = fib_source_allocate ("gbp-rd", + FIB_SOURCE_PRIORITY_HI, + FIB_SOURCE_BH_DROP); return (NULL); }