aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/nat/nat.api16
-rwxr-xr-xsrc/plugins/nat/nat.c12
-rw-r--r--src/plugins/nat/nat_api.c9
-rw-r--r--test/test_nat.py12
4 files changed, 48 insertions, 1 deletions
diff --git a/src/plugins/nat/nat.api b/src/plugins/nat/nat.api
index 6a9472bb4b1..45e504fa2ff 100644
--- a/src/plugins/nat/nat.api
+++ b/src/plugins/nat/nat.api
@@ -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
diff --git a/src/plugins/nat/nat.c b/src/plugins/nat/nat.c
index ff3b2ed8a5f..bb82e924947 100755
--- a/src/plugins/nat/nat.c
+++ b/src/plugins/nat/nat.c
@@ -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;
diff --git a/src/plugins/nat/nat_api.c b/src/plugins/nat/nat_api.c
index d467861d94c..629045f8c31 100644
--- a/src/plugins/nat/nat_api.c
+++ b/src/plugins/nat/nat_api.c
@@ -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* */
}
diff --git a/test/test_nat.py b/test/test_nat.py
index 76cc7338c5a..286c74a8037 100644
--- a/test/test_nat.py
+++ b/test/test_nat.py
@@ -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'