X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fgbp%2Fgbp_contract.c;h=e12b33145ce7d7b7021bbfd980f14062cb770e18;hb=59f71132e;hp=f0bb00a0154465492524cd24ebc633a24e034124;hpb=160c923f99c2adc103495fab1bfcefe965fe7fb8;p=vpp.git diff --git a/src/plugins/gbp/gbp_contract.c b/src/plugins/gbp/gbp_contract.c index f0bb00a0154..e12b33145ce 100644 --- a/src/plugins/gbp/gbp_contract.c +++ b/src/plugins/gbp/gbp_contract.c @@ -19,10 +19,17 @@ #include #include #include +#include #include #include +char *gbp_contract_error_strings[] = { +#define _(sym,string) string, + foreach_gbp_contract_error +#undef _ +}; + /** * Single contract DB instance */ @@ -66,6 +73,12 @@ gbp_rule_alloc (gbp_rule_action_t action, return (gu - gbp_rule_pool); } +void +gbp_rule_free (index_t gui) +{ + pool_put_index (gbp_rule_pool, gui); +} + index_t gbp_next_hop_alloc (const ip46_address_t * ip, index_t grd, const mac_address_t * mac, index_t gbd) @@ -132,6 +145,8 @@ gbp_contract_rules_free (index_t * rules) adj_unlock (gnh->gnh_ai[fproto]); } } + + gbp_rule_free (*gui); } vec_free (rules); } @@ -152,7 +167,7 @@ format_gbp_next_hop (u8 * s, va_list * args) return (s); } -static u8 * +u8 * format_gbp_rule_action (u8 * s, va_list * args) { gbp_rule_action_t action = va_arg (*args, gbp_rule_action_t); @@ -213,7 +228,7 @@ format_gbp_rule (u8 * s, va_list * args) { case GBP_RULE_PERMIT: case GBP_RULE_DENY: - break; + return (s); case GBP_RULE_REDIRECT: s = format (s, ", %U", format_gbp_hash_mode, gu->gu_hash_mode); break; @@ -221,19 +236,19 @@ format_gbp_rule (u8 * s, va_list * args) vec_foreach (gnhi, gu->gu_nhs) { - s = format (s, "\n [%U]", format_gbp_next_hop, *gnhi); + s = format (s, "\n [%U]", format_gbp_next_hop, *gnhi); } FOR_EACH_GBP_POLICY_NODE (pnode) { - s = format (s, "\n policy-%U", format_gbp_policy_node, pnode); + s = format (s, "\n policy-%U", format_gbp_policy_node, pnode); FOR_EACH_FIB_IP_PROTOCOL (fproto) { if (dpo_id_is_valid (&gu->gu_dpo[pnode][fproto])) { s = - format (s, "\n %U", format_dpo_id, + format (s, "\n %U", format_dpo_id, &gu->gu_dpo[pnode][fproto], 8); } } @@ -268,7 +283,10 @@ gbp_contract_mk_adj (gbp_next_hop_t * gnh, fib_protocol_t fproto) gnh->gnh_ai[fproto] = adj_nbr_add_or_lock_w_rewrite (fproto, fib_proto_to_link (fproto), - &gnh->gnh_ip, ge->ge_fwd.gef_itf, rewrite); + &gnh->gnh_ip, + gbp_itf_get_sw_if_index (ge-> + ge_fwd.gef_itf), + rewrite); adj_unlock (old_ai); } @@ -642,23 +660,27 @@ format_gbp_contract (u8 * s, va_list * args) s = format (s, "[%d] %U: acl-index:%d", gci, format_gbp_contract_key, &gc->gc_key, gc->gc_acl_index); + s = format (s, "\n rules:"); vec_foreach (gui, gc->gc_rules) { - s = format (s, "\n %d: %U", *gui, format_gbp_rule, *gui); + s = format (s, "\n %d: %U", *gui, format_gbp_rule, *gui); } - s = format (s, "\n allowed-ethertypes:["); + s = format (s, "\n allowed-ethertypes:"); + s = format (s, "\n ["); vec_foreach (et, gc->gc_allowed_ethertypes) { int host_et = clib_net_to_host_u16 (*et); if (0 != host_et) s = format (s, "0x%x, ", host_et); } + s = format (s, "]"); + s = format (s, "\n stats:"); vlib_get_combined_counter (&gbp_contract_drop_counters, gci, &counts); - s = format (s, "\n drop:[%Ld:%Ld]", counts.packets, counts.bytes); + s = format (s, "\n drop:[%Ld:%Ld]", counts.packets, counts.bytes); vlib_get_combined_counter (&gbp_contract_permit_counters, gci, &counts); - s = format (s, "\n permit:[%Ld:%Ld]", counts.packets, counts.bytes); + s = format (s, "\n permit:[%Ld:%Ld]", counts.packets, counts.bytes); s = format (s, "]");