X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fsnat%2Fsnat_test.c;h=c97b813e24e6612280bdb2b82745f68cd2320336;hb=99617f7a2649674dff35e8bfa3d9b84244236778;hp=85f9d57a35e03de37b6abdbf047e82de14a9a867;hpb=09d96f4a611fa989bfbbfb7e683d668dbe73ac1a;p=vpp.git diff --git a/src/plugins/snat/snat_test.c b/src/plugins/snat/snat_test.c index 85f9d57a35e..c97b813e24e 100644 --- a/src/plugins/snat/snat_test.c +++ b/src/plugins/snat/snat_test.c @@ -104,7 +104,9 @@ _(SNAT_ADD_DEL_INTERFACE_ADDR_REPLY, \ snat_add_del_interface_addr_reply) \ _(SNAT_INTERFACE_ADDR_DETAILS, snat_interface_addr_details) \ _(SNAT_IPFIX_ENABLE_DISABLE_REPLY, \ - snat_ipfix_enable_disable_reply) + snat_ipfix_enable_disable_reply) \ +_(SNAT_USER_DETAILS, snat_user_details) \ +_(SNAT_USER_SESSION_DETAILS, snat_user_session_details) static int api_snat_add_address_range (vat_main_t * vam) { @@ -222,6 +224,7 @@ static int api_snat_add_static_mapping(vat_main_t * vam) u32 sw_if_index = ~0; u8 sw_if_index_set = 0; u32 proto = ~0; + u8 proto_set = 0; int ret; while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) @@ -243,7 +246,7 @@ static int api_snat_add_static_mapping(vat_main_t * vam) else if (unformat (i, "vrf %u", &vrf_id)) ; else if (unformat (i, "protocol %u", &proto)) - ; + proto_set = 1; else if (unformat (i, "del")) is_add = 0; else @@ -253,6 +256,12 @@ static int api_snat_add_static_mapping(vat_main_t * vam) } } + if (!addr_only && !proto_set) + { + errmsg ("protocol required\n"); + return -99; + } + if (!local_addr_set) { errmsg ("local addr required\n"); @@ -303,12 +312,26 @@ static void vl_api_snat_static_mapping_details_t_handler snat_test_main_t * sm = &snat_test_main; vat_main_t *vam = sm->vat_main; - if (mp->addr_only) + if (mp->addr_only && mp->external_sw_if_index != ~0) + fformat (vam->ofp, "%15U%6s%15d%6s%11d%6d\n", + format_ip4_address, &mp->local_ip_address, "", + ntohl (mp->external_sw_if_index), "", + ntohl (mp->vrf_id), + mp->protocol); + else if (mp->addr_only && mp->external_sw_if_index == ~0) 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), mp->protocol); + else if (!mp->addr_only && mp->external_sw_if_index != ~0) + fformat (vam->ofp, "%15U%6d%15d%6d%11d%6d\n", + format_ip4_address, &mp->local_ip_address, + ntohs (mp->local_port), + ntohl (mp->external_sw_if_index), + ntohs (mp->external_port), + ntohl (mp->vrf_id), + mp->protocol); else fformat (vam->ofp, "%15U%6d%15U%6d%11d%6d\n", format_ip4_address, &mp->local_ip_address, @@ -333,8 +356,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%6s\n", "address", "port", "address", - "port", "vrf", "proto"); + fformat (vam->ofp, "%15s%6s%15s%6s%11s%6s\n", "address", "port", + "address/if_idx", "port", "vrf", "proto"); M(SNAT_STATIC_MAPPING_DUMP, mp); S(mp); @@ -519,7 +542,7 @@ static int api_snat_worker_dump(vat_main_t * vam) return ret; } -static int api_snat_ipfix_enable_disable (vat_main_t * vam) +static int api_snat_add_del_interface_addr (vat_main_t * vam) { unformat_input_t * i = vam->input; vl_api_snat_add_del_interface_addr_t * mp; @@ -590,7 +613,7 @@ static int api_snat_interface_addr_dump(vat_main_t * vam) return ret; } -static int api_snat_add_del_interface_addr (vat_main_t * vam) +static int api_snat_ipfix_enable_disable (vat_main_t * vam) { unformat_input_t * i = vam->input; vl_api_snat_ipfix_enable_disable_t * mp; @@ -624,6 +647,78 @@ static int api_snat_add_del_interface_addr (vat_main_t * vam) return ret; } +static void vl_api_snat_user_session_details_t_handler + (vl_api_snat_user_session_details_t *mp) +{ + snat_test_main_t * sm = &snat_test_main; + vat_main_t *vam = sm->vat_main; + + fformat(vam->ofp, "%s session %U:%d to %U:%d protocol id %d " + "total packets %d total bytes %d\n", + mp->is_static ? "static" : "dynamic", + format_ip4_address, mp->inside_ip_address, ntohl(mp->inside_port), + format_ip4_address, mp->outside_ip_address, ntohl(mp->outside_port), + ntohl(mp->protocol), ntohl(mp->total_pkts), ntohl(mp->total_bytes)); +} + +static int api_snat_user_session_dump(vat_main_t * vam) +{ + vl_api_snat_user_session_dump_t * mp; + vl_api_snat_control_ping_t *mp_ping; + int ret; + + if (vam->json_output) + { + clib_warning ("JSON output not supported for snat_address_dump"); + return -99; + } + + M(SNAT_USER_SESSION_DUMP, mp); + S(mp); + + /* Use a control ping for synchronization */ + M(SNAT_CONTROL_PING, mp_ping); + S(mp_ping); + + W (ret); + return ret; +} + +static void vl_api_snat_user_details_t_handler + (vl_api_snat_user_details_t *mp) +{ + snat_test_main_t * sm = &snat_test_main; + vat_main_t *vam = sm->vat_main; + + fformat(vam->ofp, "user with ip %U with vrf_id %d " + "with %d sessions and %d static sessions\n", + format_ip4_address, mp->ip_address, ntohl(mp->vrf_id), + ntohl(mp->nsessions), ntohl(mp->nstaticsessions)); +} + +static int api_snat_user_dump(vat_main_t * vam) +{ + vl_api_snat_user_dump_t * mp; + vl_api_snat_control_ping_t *mp_ping; + int ret; + + if (vam->json_output) + { + clib_warning ("JSON output not supported for snat_address_dump"); + return -99; + } + + M(SNAT_USER_DUMP, mp); + S(mp); + + /* Use a control ping for synchronization */ + M(SNAT_CONTROL_PING, mp_ping); + S(mp_ping); + + W (ret); + return ret; +} + /* * List of messages that the api test plugin sends, * and that the data plane plugin processes @@ -646,7 +741,9 @@ _(snat_add_del_interface_addr, \ " | sw_if_index [del]") \ _(snat_interface_addr_dump, "") \ _(snat_ipfix_enable_disable, "[domain ] [src_port ] " \ - "[disable]") + "[disable]") \ +_(snat_user_dump, "") \ +_(snat_user_session_dump, "ip_address vrf_id ") static void snat_vat_api_hookup (vat_main_t *vam) @@ -666,8 +763,7 @@ snat_vat_api_hookup (vat_main_t *vam) /* API messages we can send */ #define _(n,h) \ - hash_set_mem (vam->function_by_name, #n, api_##n); \ - clib_warning ("vam %llx add '%s' handler %llx", vam, #n, api_##n); + hash_set_mem (vam->function_by_name, #n, api_##n); foreach_vpe_api_msg; #undef _