nat: adding a new api nat44_ed_vrf_tables_v2_dump 51/38551/3
authorDaniel Béreš <daniel.beres@pantheon.tech>
Fri, 24 Mar 2023 09:33:49 +0000 (02:33 -0700)
committerOle Tr�an <otroan@employees.org>
Thu, 13 Apr 2023 08:03:59 +0000 (08:03 +0000)
Adding api nat44_ed_vrf_tables_v2_dump which may replace
nat44_ed_vrf_tables_dump in the future.
 - fixing endianess

Type: improvement

Signed-off-by: Daniel Béreš <daniel.beres@pantheon.tech>
Change-Id: I40d09ea3252589bdcb61db9f1629dacd87f69978

src/plugins/nat/nat44-ed/nat44_ed.api
src/plugins/nat/nat44-ed/nat44_ed_api.c

index dbcb15d..ad4ad69 100644 (file)
@@ -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
index 681fcc0..1f01410 100644 (file)
@@ -1249,6 +1249,38 @@ nat44_ed_vrf_tables_send_details (vl_api_registration_t *rp, u32 context,
   vl_api_send_msg (rp, (u8 *) mp);
 }
 
+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
 {