diff options
author | Vishwesh M Rudramuni <vishwesh.m.rudramuni@intel.com> | 2017-06-06 04:11:25 +0530 |
---|---|---|
committer | Vishwesh M Rudramuni <vishwesh.m.rudramuni@intel.com> | 2017-07-14 06:08:28 +0530 |
commit | 0e51437be874b6831e95639f4c1ad6b0133c2a28 (patch) | |
tree | 20be5dcfe1a25b1c3f67e3845032e7796a29ac2d /common/VIL/pipeline_arpicmp/pipeline_arpicmp.c | |
parent | 82416b375a275837689cddfd1782d82996fecaca (diff) |
[l2l3 stack] implements new arp state machine & arp buffering
JIRA: SAMPLEVNF-23
This patch implements
~New arp state machine implementing new states
like INCOMPLETE, COMPLETE, PROBE, STALE.
~removing unwanted code in arpicmp pipeline
~Implementing arp buffering, when arp is unresolved.
~Integratig the new changes with vCGNAPT
~Integrating the new changes with vACL
~Integrating the new changes with vFW.
Change-Id: If467ec035bc8de58463ea50d9e603a97f168c1a2
Signed-off-by: Vishwesh M Rudramuni <vishwesh.m.rudramuni@intel.com>
Diffstat (limited to 'common/VIL/pipeline_arpicmp/pipeline_arpicmp.c')
-rw-r--r-- | common/VIL/pipeline_arpicmp/pipeline_arpicmp.c | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/common/VIL/pipeline_arpicmp/pipeline_arpicmp.c b/common/VIL/pipeline_arpicmp/pipeline_arpicmp.c index 1ea9e749..43e0be2d 100644 --- a/common/VIL/pipeline_arpicmp/pipeline_arpicmp.c +++ b/common/VIL/pipeline_arpicmp/pipeline_arpicmp.c @@ -92,9 +92,7 @@ cmd_arp_add_parsed(void *parsed_result, rte_cpu_to_be_32(params->ip.addr. ipv4.s_addr), params->port_id - #ifndef VNF_ACL , STATIC_ARP - #endif ); } else { memcpy(ipv6, params->ip.addr.ipv6.s6_addr, 16); @@ -167,13 +165,17 @@ cmd_arp_del_parsed(void *parsed_result, remove_arp_entry(rte_bswap32(req->key.key.ipv4.ip), req->key.key.ipv4.port_id); #endif + struct arp_key_ipv4 arp_key; + arp_key.port_id = params->port_id; + arp_key.ip = rte_cpu_to_be_32(params->ip.addr.ipv4.s_addr); + arp_key.filler1 = 0; + arp_key.filler2 = 0; + arp_key.filler3 = 0; + + struct arp_entry_data *new_arp_data = retrieve_arp_entry(arp_key, STATIC_ARP); + if (params->ip.family == AF_INET) { - remove_arp_entry(rte_cpu_to_be_32(params->ip.addr.ipv4.s_addr), - params->port_id - #ifndef VNF_ACL - , NULL - #endif - ); + remove_arp_entry(new_arp_data, &arp_key); } else { memcpy(ipv6, params->ip.addr.ipv6.s6_addr, 16); remove_nd_entry_ipv6(ipv6, params->port_id); @@ -235,7 +237,7 @@ cmd_arp_req_parsed(void *parsed_result, key.filler2 = 0; key.filler3 = 0; - struct arp_entry_data *arp_data = retrieve_arp_entry(key); + struct arp_entry_data *arp_data = retrieve_arp_entry(key, STATIC_ARP); if (arp_data) { if (ARPICMP_DEBUG) @@ -318,22 +320,24 @@ struct cmd_arp_ls_result { cmdline_fixed_string_t p_string; uint32_t p; cmdline_fixed_string_t arp_string; + uint32_t ip_type; }; static void cmd_arp_ls_parsed(__rte_unused void *parsed_result, __rte_unused struct cmdline *cl, __rte_unused void *data) { - printf("\nARP table ...\n"); - printf("-------------\n"); - print_arp_table(); - - printf - ("............................................................\n"); + struct cmd_arp_ls_result *params = parsed_result; - printf("\nND IPv6 table:\n"); - printf("--------------\n"); - print_nd_table(); + if (!params->ip_type) { + printf("\nARP table ...\n"); + printf("-------------\n"); + print_arp_table(); + } else { + printf("\nND IPv6 table:\n"); + printf("--------------\n"); + print_nd_table(); + } } static cmdline_parse_token_string_t cmd_arp_ls_p_string = @@ -347,6 +351,9 @@ static cmdline_parse_token_string_t cmd_arp_ls_arp_string = TOKEN_STRING_INITIALIZER(struct cmd_arp_ls_result, arp_string, "arpls"); +static cmdline_parse_token_num_t cmd_arp_ls_ip_type = +TOKEN_NUM_INITIALIZER(struct cmd_arp_ls_result, ip_type, UINT32); + static cmdline_parse_inst_t cmd_arp_ls = { .f = cmd_arp_ls_parsed, .data = NULL, @@ -355,6 +362,7 @@ static cmdline_parse_inst_t cmd_arp_ls = { (void *)&cmd_arp_ls_p_string, (void *)&cmd_arp_ls_p, (void *)&cmd_arp_ls_arp_string, + (void *)&cmd_arp_ls_ip_type, NULL, }, }; |