NAT: update nat_show_config_reply API (VPP-1403) 11/14411/2
authorMatus Fabian <matfabia@cisco.com>
Wed, 22 Aug 2018 08:27:10 +0000 (01:27 -0700)
committerNeale Ranns <nranns@cisco.com>
Wed, 22 Aug 2018 13:39:00 +0000 (13:39 +0000)
Change-Id: I85383e428cb54c4c09ab387811dd6390f7c61d97
Signed-off-by: Matus Fabian <matfabia@cisco.com>
src/plugins/nat/nat.api
src/plugins/nat/nat.c
src/plugins/nat/nat_api.c
test/test_nat.py

index 6a9472b..45e504f 100644 (file)
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-option version = "3.0.0";
+option version = "3.1.0";
 
 /**
  * @file nat.api
@@ -67,6 +67,8 @@ define nat_show_config
     @param static_mapping_only - if 1 dynamic translations disabled
     @param static_mapping_connection_tracking - if 1 create session data
     @param deterministic - if 1 deterministic mapping
+    @param endpoint_dependent - if 1 endpoint-dependent mode
+    @param out2in_dpo - if 1 out2in dpo mode
     @param translation_buckets - number of translation hash buckets
     @param translation_memory_size - translation hash memory size
     @param user_buckets - number of user hash buckets
@@ -74,6 +76,11 @@ define nat_show_config
     @param max_translations_per_user - maximum number of translations per user
     @param outside_vrf_id - outside VRF id
     @param inside_vrf_id - default inside VRF id
+    @param dslite_ce - if DS-Lite is CE/B4 element, if 0 AFTR elemet
+    @param nat64_bib_buckets - number of NAT64 BIB hash buckets
+    @param nat64_bib_memory_size - memory size of NAT64 BIB hash
+    @param nat64_st_buckets - number of NAT64 session table hash buckets
+    @param nat64_st_memory_size - memory size of NAT64 session table hash
 */
 define nat_show_config_reply
 {
@@ -82,6 +89,8 @@ define nat_show_config_reply
   u8 static_mapping_only;
   u8 static_mapping_connection_tracking;
   u8 deterministic;
+  u8 endpoint_dependent;
+  u8 out2in_dpo;
   u32 translation_buckets;
   u32 translation_memory_size;
   u32 user_buckets;
@@ -89,6 +98,11 @@ define nat_show_config_reply
   u32 max_translations_per_user;
   u32 outside_vrf_id;
   u32 inside_vrf_id;
+  u8 dslite_ce;
+  u32 nat64_bib_buckets;
+  u32 nat64_bib_memory_size;
+  u32 nat64_st_buckets;
+  u32 nat64_st_memory_size;
 };
 
 /** \brief Set NAT workers
index ff3b2ed..bb82e92 100755 (executable)
@@ -2812,6 +2812,18 @@ snat_config (vlib_main_t * vm, unformat_input_t * input)
                                  format_unformat_error, input);
     }
 
+  if (sm->deterministic && sm->endpoint_dependent)
+    return clib_error_return (
+      0, "deterministic and endpoint-dependent modes are mutually exclusive");
+
+  if (static_mapping_only && (sm->deterministic || sm->endpoint_dependent))
+    return clib_error_return (
+      0, "static mapping only mode available only for simple nat");
+
+  if (sm->out2in_dpo && (sm->deterministic || sm->endpoint_dependent))
+    return clib_error_return (
+      0, "out2in dpo mode available only for simple nat");
+
   /* for show commands, etc. */
   sm->translation_buckets = translation_buckets;
   sm->translation_memory_size = translation_memory_size;
index d467861..629045f 100644 (file)
@@ -97,6 +97,8 @@ vl_api_nat_show_config_t_handler (vl_api_nat_show_config_t * mp)
 {
   vl_api_nat_show_config_reply_t *rmp;
   snat_main_t *sm = &snat_main;
+  dslite_main_t *dm = &dslite_main;
+  nat64_main_t *n64m = &nat64_main;
   int rv = 0;
 
   /* *INDENT-OFF* */
@@ -113,6 +115,13 @@ vl_api_nat_show_config_t_handler (vl_api_nat_show_config_t * mp)
     rmp->static_mapping_connection_tracking =
       sm->static_mapping_connection_tracking;
     rmp->deterministic = sm->deterministic;
+    rmp->endpoint_dependent = sm->endpoint_dependent;
+    rmp->out2in_dpo = sm->out2in_dpo;
+    rmp->dslite_ce = dm->is_ce;
+    rmp->nat64_bib_buckets = n64m->bib_buckets;
+    rmp->nat64_bib_memory_size = n64m->bib_memory_size;
+    rmp->nat64_st_buckets = n64m->st_buckets;
+    rmp->nat64_st_memory_size = n64m->st_memory_size;
   }));
   /* *INDENT-ON* */
 }
index 76cc733..286c74a 100644 (file)
@@ -3345,6 +3345,9 @@ class TestNAT44EndpointDependent(MethodHolder):
         self.vapi.nat44_interface_add_del_feature(self.pg1.sw_if_index,
                                                   is_inside=0)
 
+        nat_config = self.vapi.nat_show_config()
+        self.assertEqual(1, nat_config.endpoint_dependent)
+
         # in2out
         pkts = self.create_stream_in(self.pg0, self.pg1)
         self.pg0.add_stream(pkts)
@@ -4979,6 +4982,9 @@ class TestNAT44Out2InDPO(MethodHolder):
     def test_464xlat_ce(self):
         """ Test 464XLAT CE with NAT44 """
 
+        nat_config = self.vapi.nat_show_config()
+        self.assertEqual(1, nat_config.out2in_dpo)
+
         self.configure_xlat()
 
         self.vapi.nat44_interface_add_del_feature(self.pg0.sw_if_index)
@@ -6961,6 +6967,9 @@ class TestDSlite(MethodHolder):
 
     def test_dslite(self):
         """ Test DS-Lite """
+        nat_config = self.vapi.nat_show_config()
+        self.assertEqual(0, nat_config.dslite_ce)
+
         self.vapi.dslite_add_del_pool_addr_range(self.nat_addr_n,
                                                  self.nat_addr_n)
         aftr_ip4 = '192.0.0.1'
@@ -7121,6 +7130,9 @@ class TestDSliteCE(MethodHolder):
     def test_dslite_ce(self):
         """ Test DS-Lite CE """
 
+        nat_config = self.vapi.nat_show_config()
+        self.assertEqual(1, nat_config.dslite_ce)
+
         b4_ip4 = '192.0.0.2'
         b4_ip4_n = socket.inet_pton(socket.AF_INET, b4_ip4)
         b4_ip6 = '2001:db8:62aa::375e:f4c1:1'