diff options
author | Matus Fabian <matfabia@cisco.com> | 2017-02-02 01:43:00 -0800 |
---|---|---|
committer | Matus Fabian <matfabia@cisco.com> | 2017-02-03 01:09:45 -0800 |
commit | 09d96f4a611fa989bfbbfb7e683d668dbe73ac1a (patch) | |
tree | c3e99fad08357a2c1b9660de49cf01b2e7d20aee /src/plugins/snat/snat_test.c | |
parent | 85bb9172894870f0c6c72e1555a0decf4d37213f (diff) |
SNAT: Port allocation per protocol
Ports are allocated per protocol (UDP, TCP, ICMP)
1:1 NAT with port is configured for specific protocol
Change-Id: I37ae5eed3715b223d0620d4fdaed7a482bb7a834
Signed-off-by: Matus Fabian <matfabia@cisco.com>
Diffstat (limited to 'src/plugins/snat/snat_test.c')
-rw-r--r-- | src/plugins/snat/snat_test.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/src/plugins/snat/snat_test.c b/src/plugins/snat/snat_test.c index 50e81eaec46..85f9d57a35e 100644 --- a/src/plugins/snat/snat_test.c +++ b/src/plugins/snat/snat_test.c @@ -214,13 +214,14 @@ static int api_snat_add_static_mapping(vat_main_t * vam) unformat_input_t * i = vam->input; vl_api_snat_add_static_mapping_t * mp; u8 external_addr_set = 0; - u8 local_addr_set; + u8 local_addr_set = 0; u8 is_add = 1; u8 addr_only = 1; ip4_address_t local_addr, external_addr; u32 local_port = 0, external_port = 0, vrf_id = ~0; u32 sw_if_index = ~0; u8 sw_if_index_set = 0; + u32 proto = ~0; int ret; while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) @@ -239,7 +240,9 @@ static int api_snat_add_static_mapping(vat_main_t * vam) sw_if_index_set = 1; else if (unformat (i, "external_sw_if_index %d", &sw_if_index)) sw_if_index_set = 1; - else if (unformat (i, "vrf %u", &vrf_id)) + else if (unformat (i, "vrf %u", &vrf_id)) + ; + else if (unformat (i, "protocol %u", &proto)) ; else if (unformat (i, "del")) is_add = 0; @@ -269,6 +272,7 @@ static int api_snat_add_static_mapping(vat_main_t * vam) mp->external_port = ntohs ((u16) external_port); mp->external_sw_if_index = ntohl (sw_if_index); mp->vrf_id = ntohl (vrf_id); + mp->protocol = (u8) proto; memcpy (mp->local_ip_address, &local_addr, 4); memcpy (mp->external_ip_address, &external_addr, 4); @@ -300,17 +304,19 @@ static void vl_api_snat_static_mapping_details_t_handler vat_main_t *vam = sm->vat_main; if (mp->addr_only) - fformat (vam->ofp, "%15U%6s%15U%6s%11d\n", + fformat (vam->ofp, "%15U%6s%15U%6s%11d%6d\n", format_ip4_address, &mp->local_ip_address, "", format_ip4_address, &mp->external_ip_address, "", - ntohl (mp->vrf_id)); + ntohl (mp->vrf_id), + mp->protocol); else - fformat (vam->ofp, "%15U%6d%15U%6d%11d\n", + fformat (vam->ofp, "%15U%6d%15U%6d%11d%6d\n", format_ip4_address, &mp->local_ip_address, ntohs (mp->local_port), format_ip4_address, &mp->external_ip_address, ntohs (mp->external_port), - ntohl (mp->vrf_id)); + ntohl (mp->vrf_id), + mp->protocol); } @@ -327,8 +333,8 @@ static int api_snat_static_mapping_dump(vat_main_t * vam) } fformat (vam->ofp, "%21s%21s\n", "local", "external"); - fformat (vam->ofp, "%15s%6s%15s%6s%11s\n", "address", "port", "address", - "port", "vrf"); + fformat (vam->ofp, "%15s%6s%15s%6s%11s%6s\n", "address", "port", "address", + "port", "vrf", "proto"); M(SNAT_STATIC_MAPPING_DUMP, mp); S(mp); @@ -626,9 +632,10 @@ static int api_snat_add_del_interface_addr (vat_main_t * vam) _(snat_add_address_range, "<start-addr> [- <end-addr] [del]") \ _(snat_interface_add_del_feature, \ "<intfc> | sw_if_index <id> [in] [out] [del]") \ -_(snat_add_static_mapping, "local_addr <ip> external_addr <ip> " \ - "| external_if <intfc> | external_sw_if_ndex <id>) " \ - "[local_port <n>] [external_port <n>] [vrf <table-id>] [del]") \ +_(snat_add_static_mapping, "local_addr <ip> (external_addr <ip>" \ + " | external_if <intfc> | external_sw_if_ndex <id>) " \ + "[local_port <n>] [external_port <n>] [vrf <table-id>] [del] " \ + "protocol <n>") \ _(snat_set_workers, "<wokrers_bitmap>") \ _(snat_static_mapping_dump, "") \ _(snat_show_config, "") \ |