diff options
author | Vishwesh M Rudramuni <vishwesh.m.rudramuni@intel.com> | 2017-10-05 03:37:35 +0530 |
---|---|---|
committer | Deepak S <deepak.s@linux.intel.com> | 2017-10-06 17:41:18 -0700 |
commit | 2280f91c9c4a2261f44e19dadb4f450ef6c92e77 (patch) | |
tree | a71278588d30257e00660fe9ee05708c392ac70e /common/vnf_common | |
parent | cd3527b101c97a66d02069a0d60c4e53b4a7d863 (diff) |
common code: KW fixes for common code
This patch fixes KW issues seen with the common code.
Change-Id: I4f90369152345ea2ea9316b04ac946c0c69fd7d1
Signed-off-by: Vishwesh M Rudramuni <vishwesh.m.rudramuni@intel.com>
Diffstat (limited to 'common/vnf_common')
-rw-r--r-- | common/vnf_common/rest_api.c | 110 | ||||
-rw-r--r-- | common/vnf_common/thread.c | 5 | ||||
-rw-r--r-- | common/vnf_common/vnf_common.c | 5 |
3 files changed, 61 insertions, 59 deletions
diff --git a/common/vnf_common/rest_api.c b/common/vnf_common/rest_api.c index 62e9646a..7acbc36b 100644 --- a/common/vnf_common/rest_api.c +++ b/common/vnf_common/rest_api.c @@ -163,7 +163,7 @@ extern int USE_RTM_LOCKS; extern rte_rwlock_t rwlock; extern interface_main_t ifm; extern struct cmdline *pipe_cl; -extern uint16_t str2flowtype(char *string); +extern uint16_t str2flowtype(const char *string); extern void app_run_file(cmdline_parse_ctx_t *ctx, const char *file_name); extern int parse_flexbytes(const char *q_arg, uint8_t *flexbytes, uint16_t max_num); @@ -179,7 +179,7 @@ extern int app_routeadd_config_ipv6(__attribute__((unused)) uint32_t port_id, uint8_t ipv6[], uint32_t depth); -enum rte_eth_input_set_field str2inset(char *string); +enum rte_eth_input_set_field str2inset(const char *string); enum { MASTER = 0, @@ -381,11 +381,17 @@ int get_pipelines_tokens(char *buf) uint32_t id; token = strtok(buf, "/ "); + if (!token) + return -1; + if (strcmp(token, "pipelines")) { return -1; } token = strtok(NULL, "/ "); + if (!token) + return -1; + id = atoi(token); if (id > rapp->n_pipelines) { return -1; @@ -594,6 +600,11 @@ int set_hash_input_set_2(struct mg_connection *conn, uint32_t port_id, mg_printf(conn, "<html><body>"); mg_printf(conn, "</body></html>\n"); + if (!inset_field0 || !inset_field1 || !flow_type) { + mg_printf(conn, "inset_field0/1 or flow_type may be NULL!\n"); + return 1; + } + if (enable_flow_dir) { mg_printf(conn, "FDIR Filter is Defined!\n"); mg_printf(conn, "Please undefine FDIR_FILTER flag and define " @@ -610,10 +621,13 @@ int set_hash_input_set_2(struct mg_connection *conn, uint32_t port_id, memset(&info, 0, sizeof(info)); info.info_type = RTE_ETH_HASH_FILTER_INPUT_SET_SELECT; - info.info.input_set_conf.flow_type = str2flowtype(strdup(flow_type)); + info.info.input_set_conf.flow_type = str2flowtype(flow_type); + + if (inset_field0) + info.info.input_set_conf.field[0] = str2inset(inset_field0); - info.info.input_set_conf.field[0] = str2inset(strdup(inset_field0)); - info.info.input_set_conf.field[1] = str2inset(strdup(inset_field1)); + if (inset_field1) + info.info.input_set_conf.field[1] = str2inset(inset_field1); info.info.input_set_conf.inset_size = 2; @@ -830,11 +844,17 @@ int get_link_tokens(char *buf) int linkid; token = strtok(buf, "/ "); + if (!token) + return -1; + if (strcmp(token, "link")) { return -1; } token = strtok(NULL, "/ "); + if (!token) + return -1; + linkid = atoi(token); if (linkid > current_cfg.num_ports) { return -1; @@ -966,8 +986,8 @@ int arpls_handler(struct mg_connection *conn, __rte_unused void *cbdata) lib_arp_populate_called, lib_arp_delete_called, lib_arp_duplicate_found); - len += sprintf(buf + len, "ARP table key len is %lu\n<br/>", - sizeof(struct arp_key_ipv4)); + len += sprintf(buf + len, "ARP table key len is %d\n<br/>", + (uint32_t) sizeof(struct arp_key_ipv4)); mg_printf(conn, "%s\n<br/>", &buf[0]); return 1; } @@ -994,6 +1014,7 @@ void get_mac(struct ether_addr *mac_addr, char *buf) for (i = 0; i < MAC_NUM_BYTES; i++) { mac_addr->addr_bytes[i] = strtoul(byteStr[i], NULL, 16); } + free(buf); } int arp_handler(struct mg_connection *conn, __rte_unused void *cbdata) @@ -1126,7 +1147,14 @@ int arp_handler(struct mg_connection *conn, __rte_unused void *cbdata) nd_key.filler2 = 0; nd_key.filler3 = 0; new_nd_data = retrieve_nd_entry(nd_key, STATIC_ND); + + if(new_nd_data == NULL) { + /* KW Fix */ + mg_printf(conn,"Retrieve ND returned NULL\n"); + return 1; + } remove_nd_entry_ipv6(new_nd_data, &nd_key); + break; case 3: mg_printf(conn, "<p>ND REQ is not supported Yet!!!</p>"); break; @@ -1205,7 +1233,7 @@ int route_handler(struct mg_connection *conn, __rte_unused void *cbdata) json_object_object_foreach(jobj, key, val) { if (!strcmp(key, "portid")) { portid = atoi(json_object_get_string(val)); - if (portid > 64) { + if (portid >= 64) { mg_printf(conn, "Port not supported!!!\n"); return 1; } else if (current_route_parms[portid].enable) { @@ -1295,7 +1323,7 @@ int link_handler(struct mg_connection *conn, __rte_unused void *cbdata) if (!strcmp(key, "linkid")) { link = atoi(json_object_get_string(val)); mg_printf(conn, "linkid:%d \n", link); - if (link > 64) { + if (link >= 64) { mg_printf(conn, "Link id not supported beyond 64\n"); return 1; } @@ -1543,7 +1571,6 @@ int static_cfg_handler(struct mg_connection *conn, __rte_unused void *cbdata) json_object * jobj = json_tokener_parse(buf); len = 0; struct json_object *values; - char *str; i = 0; json_object_object_foreach(jobj, key, val) { @@ -1563,75 +1590,50 @@ int static_cfg_handler(struct mg_connection *conn, __rte_unused void *cbdata) json_object_object_get_ex(jobj, "num_worker", &values); if (values) { - str = strdup(json_object_get_string(values)); - if (str) - memcpy(¤t_cfg.ip_range[pub_ip++].value, str, - sizeof(str)); - } - - json_object_object_get_ex(jobj, "num_worker", &values); - if (values) { - str = strdup(json_object_get_string(values)); - if (str) - current_cfg.num_workers = atoi(str); + memcpy(¤t_cfg.ip_range[pub_ip++].value, json_object_get_string(values), + strlen(json_object_get_string(values))); } json_object_object_get_ex(jobj, "pkt_type", &values); if (values) { - str = strdup(json_object_get_string(values)); - if (str) - memcpy(¤t_cfg.pkt_type, str, - sizeof(current_cfg.pkt_type)); + memcpy(¤t_cfg.pkt_type, json_object_get_string(values), + sizeof(current_cfg.pkt_type)); } json_object_object_get_ex(jobj, "num_lb", &values); if (values) { - str = strdup(json_object_get_string(values)); - if (str) - current_cfg.num_lb = atoi(str); + current_cfg.num_lb = atoi(json_object_get_string(values)); } json_object_object_get_ex(jobj, "num_ports", &values); if (values) { - str = strdup(json_object_get_string(values)); - if (str) - current_cfg.num_ports = atoi(str); + current_cfg.num_ports = atoi(json_object_get_string(values)); } json_object_object_get_ex(jobj, "sw_lb", &values); if (values) { - str = strdup(json_object_get_string(values)); - if (str) - current_cfg.sw_lb = atoi(str); + current_cfg.sw_lb = atoi(json_object_get_string(values)); } json_object_object_get_ex(jobj, "sock_in", &values); if (values) { - str = strdup(json_object_get_string(values)); - if (str) - current_cfg.sock_in = atoi(str); + current_cfg.sock_in = atoi(json_object_get_string(values)); } json_object_object_get_ex(jobj, "hyperthread", &values); if (values) { - str = strdup(json_object_get_string(values)); - if (str) - current_cfg.hyper_thread = atoi(str); + current_cfg.hyper_thread = atoi(json_object_get_string(values)); } json_object_object_get_ex(jobj, "vnf_type", &values); if (values) { - str = strdup(json_object_get_string(values)); - if (str) - memcpy(¤t_cfg.vnf_type, str, - sizeof(current_cfg.vnf_type)); + memcpy(¤t_cfg.vnf_type, json_object_get_string(values), + sizeof(current_cfg.vnf_type)); } json_object_object_get_ex(jobj, "pci_white_list", &values); if (values) { - str = strdup(json_object_get_string(values)); - if (str) - memcpy(¤t_cfg.pci_white_list, str, + memcpy(¤t_cfg.pci_white_list, json_object_get_string(values), sizeof(current_cfg.pci_white_list)); mg_printf(conn, " Binding the ports \n"); bind_the_ports(conn, ¤t_cfg.pci_white_list[0]); @@ -1728,8 +1730,7 @@ void fix_pipelines_data_types(FILE *f, const char *sect_name, struct rte_cfgfile if (strncmp(entries[i].name, "pkt_type", strlen("pkt_type")) == 0) { - memcpy(entries[i].value, current_cfg.pkt_type, - strlen(entries[i].value)); + memcpy(entries[i].value, current_cfg.pkt_type, 24); if (!strcmp(current_cfg.pkt_type, "ipv4")) memcpy(&traffic_type, "4", 1); else @@ -1784,7 +1785,7 @@ void fix_pipelines_data_types(FILE *f, const char *sect_name, struct rte_cfgfile (strncmp(static_cfg[j].key, "nd_route_tbl", strlen(static_cfg[j].key)) == 0)) { memcpy(&entries[i].name, &static_cfg[j].key, - strlen(static_cfg[j].key)); + strlen(entries[i].name)); memcpy(&entries[i].value, &static_cfg[j].value, strlen(static_cfg[j].value)); i++; @@ -1976,8 +1977,6 @@ void fix_pipelines_data_types(FILE *f, const char *sect_name, struct rte_cfgfile workers = 0; } } else { - //if (((workers % (current_cfg.num_workers/current_cfg.num_lb)) == 0) && - // (workers != current_cfg.num_workers)) { if (workers == (current_cfg.num_workers/current_cfg.num_lb)) { tx_start_port += 2; rx_start_port += 2; @@ -2160,8 +2159,8 @@ int flow_director_handler(struct mg_connection *conn, __rte_unused void *cbdata) /* Handler may access the request info using mg_get_request_info */ const struct mg_request_info *req_info = mg_get_request_info(conn); uint32_t port_id = 0, tuple = 0; - char trans_type[24], buf[MAX_BUF_SIZE]; - char *str, field0[MAX_SIZE], field1[MAX_SIZE], field2[MAX_SIZE], + char buf[MAX_BUF_SIZE]; + char field0[MAX_SIZE], field1[MAX_SIZE], field2[MAX_SIZE], field3[MAX_SIZE], flow_type[MAX_SIZE]; if (!strcmp(req_info->request_method, "GET")) { @@ -2192,7 +2191,6 @@ int flow_director_handler(struct mg_connection *conn, __rte_unused void *cbdata) json_object * jobj = json_tokener_parse(buf); json_object_object_foreach(jobj, key, val) { if (!strcmp(key, "trans_type")) { - memcpy(&trans_type, str, sizeof(trans_type)); if (!strcmp(key, "udp")) { memcpy(field2,"udp-src-port", sizeof("udp-src-port")); memcpy(field3,"udp-dst-port", sizeof("udp-dst-port")); @@ -2441,8 +2439,6 @@ rest_api_init(struct app_params *app) app->config_file = strdup(buf); app->parser_file = strdup(buf); - printf("Config file loaded :%s %s\n", app->config_file, traffic_type); - end: return ctx; } diff --git a/common/vnf_common/thread.c b/common/vnf_common/thread.c index dcf272ff..f6f1105f 100644 --- a/common/vnf_common/thread.c +++ b/common/vnf_common/thread.c @@ -59,6 +59,8 @@ do { \ #endif +uint32_t exit_app_thread = 0; + static inline void * thread_msg_recv(struct rte_ring *r) { @@ -226,6 +228,9 @@ app_thread(void *arg) uint32_t n_regular = RTE_MIN(t->n_regular, RTE_DIM(t->regular)); uint32_t n_custom = RTE_MIN(t->n_custom, RTE_DIM(t->custom)); + if (exit_app_thread) + break; + /* Run regular pipelines */ for (j = 0; j < n_regular; j++) { struct app_thread_pipeline_data *data = &t->regular[j]; diff --git a/common/vnf_common/vnf_common.c b/common/vnf_common/vnf_common.c index 93687fd6..ff0039bc 100644 --- a/common/vnf_common/vnf_common.c +++ b/common/vnf_common/vnf_common.c @@ -141,10 +141,11 @@ void trim(char *input) char result[len + 1]; memset(result, 0, sizeof(result)); - for (i = 0; input[i] != '\0'; i++) { + for (i = 0; (input[i] != '\0') && (i < PIPELINE_MAX_ARGS); i++) { if (!isspace(input[i])) result[j++] = input[i]; } + result[j] = '\0'; - strncpy(input, result, len); + strncpy(input, result, strlen(result)); } |