diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/nat/nat44-ed/nat44_ed.api | 26 | ||||
-rw-r--r-- | src/plugins/nat/nat44-ed/nat44_ed_api.c | 50 |
2 files changed, 76 insertions, 0 deletions
diff --git a/src/plugins/nat/nat44-ed/nat44_ed.api b/src/plugins/nat/nat44-ed/nat44_ed.api index dbcb15d8add..ad4ad698be0 100644 --- a/src/plugins/nat/nat44-ed/nat44_ed.api +++ b/src/plugins/nat/nat44-ed/nat44_ed.api @@ -235,6 +235,7 @@ autoreply define nat44_ed_add_del_vrf_route { define nat44_ed_vrf_tables_dump { u32 client_index; u32 context; + option deprecated; }; /** \brief NAT44-ED inter VRF NAT routing table details response @@ -248,6 +249,31 @@ define nat44_ed_vrf_tables_details { u32 table_vrf_id; u32 n_vrf_ids; u32 vrf_ids[n_vrf_ids]; + option deprecated; +}; + +/** \brief Dump NAT44-ED inter VRF NAT routing tables + @param client_index - opaque cookie to identify the sender + @param context - sender context, to match reply w/ request +*/ +define nat44_ed_vrf_tables_v2_dump { + u32 client_index; + u32 context; + option status="in_progress"; +}; + +/** \brief NAT44-ED inter VRF NAT routing table details response + @param context - sender context, to match reply w/ request + @param table_vrf_id - id of the VRF NAT routing table + @param n_vrf_ids - number of vrf_ids + @param vrf_ids - ids of resolving destination (tx) VRFs +*/ +define nat44_ed_vrf_tables_v2_details { + u32 context; + u32 table_vrf_id; + u32 n_vrf_ids; + u32 vrf_ids[n_vrf_ids]; + option status="in_progress"; }; /** \brief Set TCP MSS rewriting configuration diff --git a/src/plugins/nat/nat44-ed/nat44_ed_api.c b/src/plugins/nat/nat44-ed/nat44_ed_api.c index 681fcc0a50b..1f01410afce 100644 --- a/src/plugins/nat/nat44-ed/nat44_ed_api.c +++ b/src/plugins/nat/nat44-ed/nat44_ed_api.c @@ -1250,6 +1250,38 @@ nat44_ed_vrf_tables_send_details (vl_api_registration_t *rp, u32 context, } static void +nat44_ed_vrf_tables_send_details_v2 (vl_api_registration_t *rp, u32 context, + vrf_table_t *t) +{ + snat_main_t *sm = &snat_main; + vl_api_nat44_ed_vrf_tables_v2_details_t *mp; + + u32 *vrf_ids = 0; + vrf_route_t *r; + + mp = vl_msg_api_alloc_zero (sizeof (*mp) + + sizeof (mp->vrf_ids[0]) * vec_len (t->routes)); + mp->_vl_msg_id = clib_net_to_host_u16 (VL_API_NAT44_ED_VRF_TABLES_DETAILS + + sm->msg_id_base); + mp->context = context; + mp->n_vrf_ids = clib_net_to_host_u32 (vec_len (t->routes)); + mp->table_vrf_id = clib_net_to_host_u32 (t->table_vrf_id); + pool_foreach (r, t->routes) + { + vec_add1 (vrf_ids, clib_net_to_host_u32 (r->vrf_id)); + } + + // copy the records + clib_memcpy (mp->vrf_ids, vrf_ids, + sizeof (mp->vrf_ids[0]) * vec_len (t->routes)); + + vec_free (vrf_ids); + + // send the message + vl_api_send_msg (rp, (u8 *) mp); +} + +static void vl_api_nat44_ed_vrf_tables_dump_t_handler ( vl_api_nat44_ed_vrf_tables_dump_t *mp) { @@ -1267,6 +1299,24 @@ vl_api_nat44_ed_vrf_tables_dump_t_handler ( } } +static void +vl_api_nat44_ed_vrf_tables_v2_dump_t_handler ( + vl_api_nat44_ed_vrf_tables_v2_dump_t *mp) +{ + snat_main_t *sm = &snat_main; + vl_api_registration_t *rp; + vrf_table_t *t; + + rp = vl_api_client_index_to_registration (mp->client_index); + if (rp == 0) + return; + + pool_foreach (t, sm->vrf_tables) + { + nat44_ed_vrf_tables_send_details_v2 (rp, mp->context, t); + } +} + /* user (internal host) key */ typedef struct { |