diff options
Diffstat (limited to 'VNFs/vCGNAPT')
-rw-r--r-- | VNFs/vCGNAPT/init.c | 66 | ||||
-rw-r--r-- | VNFs/vCGNAPT/pipeline/pipeline_cgnapt_be.c | 22 |
2 files changed, 82 insertions, 6 deletions
diff --git a/VNFs/vCGNAPT/init.c b/VNFs/vCGNAPT/init.c index d61e419c..2716f751 100644 --- a/VNFs/vCGNAPT/init.c +++ b/VNFs/vCGNAPT/init.c @@ -98,14 +98,20 @@ app_init_eal(struct app_params *app) uint32_t i; int status; + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(app->app_name); app_core_build_core_mask_string(app, core_mask_str); snprintf(buffer, sizeof(buffer), "-c%s", core_mask_str); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); if (p->coremap) { snprintf(buffer, sizeof(buffer), "--lcores=%s", p->coremap); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } @@ -114,19 +120,27 @@ app_init_eal(struct app_params *app) sizeof(buffer), "--master-lcore=%" PRIu32, p->master_lcore); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } snprintf(buffer, sizeof(buffer), "-n%" PRIu32, p->channels); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); if (p->memory_present) { snprintf(buffer, sizeof(buffer), "-m%" PRIu32, p->memory); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } if (p->ranks_present) { snprintf(buffer, sizeof(buffer), "-r%" PRIu32, p->ranks); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } @@ -138,6 +152,8 @@ app_init_eal(struct app_params *app) sizeof(buffer), "--pci-blacklist=%s", p->pci_blacklist[i]); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } @@ -150,8 +166,10 @@ app_init_eal(struct app_params *app) sizeof(buffer), "--pci-whitelist=%s", p->pci_whitelist[i]); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; if (n_args < 255) - app->eal_argv[n_args++] = strdup(buffer); + app->eal_argv[n_args++] = strdup(buffer); } else for (i = 0; i < app->n_links; i++) { @@ -161,6 +179,8 @@ app_init_eal(struct app_params *app) sizeof(buffer), "--pci-whitelist=%s", pci_bdf); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } @@ -172,11 +192,15 @@ app_init_eal(struct app_params *app) sizeof(buffer), "--vdev=%s", p->vdev[i]); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } if ((p->vmware_tsc_map_present) && p->vmware_tsc_map) { snprintf(buffer, sizeof(buffer), "--vmware-tsc-map"); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } @@ -185,11 +209,15 @@ app_init_eal(struct app_params *app) sizeof(buffer), "--proc-type=%s", p->proc_type); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } if (p->syslog) { snprintf(buffer, sizeof(buffer), "--syslog=%s", p->syslog); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } @@ -198,41 +226,57 @@ app_init_eal(struct app_params *app) sizeof(buffer), "--log-level=%" PRIu32, p->log_level); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } if ((p->version_present) && p->version) { snprintf(buffer, sizeof(buffer), "-v"); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } if ((p->help_present) && p->help) { snprintf(buffer, sizeof(buffer), "--help"); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } if ((p->no_huge_present) && p->no_huge) { snprintf(buffer, sizeof(buffer), "--no-huge"); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } if ((p->no_pci_present) && p->no_pci) { snprintf(buffer, sizeof(buffer), "--no-pci"); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } if ((p->no_hpet_present) && p->no_hpet) { snprintf(buffer, sizeof(buffer), "--no-hpet"); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } if ((p->no_shconf_present) && p->no_shconf) { snprintf(buffer, sizeof(buffer), "--no-shconf"); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } if (p->add_driver) { snprintf(buffer, sizeof(buffer), "-d=%s", p->add_driver); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } @@ -241,11 +285,15 @@ app_init_eal(struct app_params *app) sizeof(buffer), "--socket-mem=%s", p->socket_mem); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } if (p->huge_dir) { snprintf(buffer, sizeof(buffer), "--huge-dir=%s", p->huge_dir); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } @@ -254,6 +302,8 @@ app_init_eal(struct app_params *app) sizeof(buffer), "--file-prefix=%s", p->file_prefix); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } @@ -262,11 +312,15 @@ app_init_eal(struct app_params *app) sizeof(buffer), "--base-virtaddr=%s", p->base_virtaddr); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } if ((p->create_uio_dev_present) && p->create_uio_dev) { snprintf(buffer, sizeof(buffer), "--create-uio-dev"); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } @@ -275,15 +329,21 @@ app_init_eal(struct app_params *app) sizeof(buffer), "--vfio-intr=%s", p->vfio_intr); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } if ((p->xen_dom0_present) && (p->xen_dom0)) { snprintf(buffer, sizeof(buffer), "--xen-dom0"); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); } snprintf(buffer, sizeof(buffer), "--"); + if (unlikely (n_args >= APP_EAL_ARGC)) + goto error_exit; app->eal_argv[n_args++] = strdup(buffer); app->eal_argc = n_args; @@ -299,8 +359,10 @@ app_init_eal(struct app_params *app) } status = rte_eal_init(app->eal_argc, app->eal_argv); - if (status < 0) + if (status < 0) { +error_exit: rte_panic("EAL init error\n"); + } } #if 0 static void diff --git a/VNFs/vCGNAPT/pipeline/pipeline_cgnapt_be.c b/VNFs/vCGNAPT/pipeline/pipeline_cgnapt_be.c index 7758c5b3..a1779aa0 100644 --- a/VNFs/vCGNAPT/pipeline/pipeline_cgnapt_be.c +++ b/VNFs/vCGNAPT/pipeline/pipeline_cgnapt_be.c @@ -2235,7 +2235,7 @@ static int cgnapt_in_port_ah_mix(struct rte_pipeline *rte_p, *outport_id = p_nat->outport_id[dest_if]; ret_arp_data = get_dest_mac_addr_ipv4(nhip, - dest_if, (struct ether_addr *)eth_dest); + dest_if, (struct ether_addr *)&hw_addr); if (unlikely(ret_arp_data == NULL)) { @@ -3695,6 +3695,12 @@ pkt_work_cgnapt_ipv4_prv( src_port = RTE_MBUF_METADATA_UINT16_PTR(pkt, src_port_offset); dst_port = RTE_MBUF_METADATA_UINT16_PTR(pkt, dst_port_offset); break; + default: /* KW fix: unknown is treated as TCP/UDP */ + src_port_offset = SRC_PRT_OFST_IP4_TCP; + dst_port_offset = DST_PRT_OFST_IP4_TCP; + src_port = RTE_MBUF_METADATA_UINT16_PTR(pkt, src_port_offset); + dst_port = RTE_MBUF_METADATA_UINT16_PTR(pkt, dst_port_offset); + break; } uint8_t *eth_dest = RTE_MBUF_METADATA_UINT8_PTR(pkt, MBUF_HDR_ROOM); @@ -4481,6 +4487,14 @@ pkt4_work_cgnapt_ipv4_prv( dst_port = RTE_MBUF_METADATA_UINT16_PTR(pkt, dst_port_offset); break; + default: /* KW fix: unknown is treated as TCP/UDP */ + src_port_offset = SRC_PRT_OFST_IP4_TCP; + dst_port_offset = DST_PRT_OFST_IP4_TCP; + src_port = RTE_MBUF_METADATA_UINT16_PTR(pkt, + src_port_offset); + dst_port = RTE_MBUF_METADATA_UINT16_PTR(pkt, + dst_port_offset); + break; } @@ -8107,7 +8121,7 @@ static void *pipeline_cgnapt_init(struct pipeline_params *params, void *arg) all_pipeline_cgnapt[n_cgnapt_pipeline++] = p_nat; - strcpy(p->name, params->name); + strncpy(p->name, params->name,PIPELINE_NAME_SIZE); p->log_level = params->log_level; PLOG(p, HIGH, "CG-NAPT"); @@ -10502,7 +10516,7 @@ void all_cgnapt_stats(char *buf) len += sprintf(buf + len, "egress %" PRIu64 "\n", p_nat->enaptedPktCount); len += sprintf(buf + len, "arpicmp pkts %" PRIu64 "\n", p_nat->arpicmpPktCount); - printf("\nCG-NAPT Packet Stats:\n"); + printf("\nCG-NAPT Packet Stats:\n"); printf("pipeline %d stats:\n", p_nat->pipeline_num); printf("Received %" PRIu64 ",", p_nat->receivedPktCount); printf("Missed %" PRIu64 ",", p_nat->missedPktCount); @@ -10557,7 +10571,7 @@ void all_cgnapt_stats(char *buf) len += sprintf(buf + len, "egress %" PRIu64 "\n", enaptedPktCount); len += sprintf(buf + len, "arpicmp pkts %" PRIu64 "\n", arpicmpPktCount); - printf("\nTotal pipeline stats:\n"); + printf("\nTotal pipeline stats:\n"); printf("Received %" PRIu64 ",", receivedPktCount); printf("Missed %" PRIu64 ",", missedPktCount); printf("Dropped %" PRIu64 ",", naptDroppedPktCount); |