X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=examples%2Fvm_power_manager%2Fchannel_monitor.c;h=1194f62f8ef7b02ec28caa0f0d87bdd70ad6d62c;hb=6d13ea8e8e49ab957deae2bba5ecf4a4bfe747d1;hp=1a3a0fa76816fa90464816800e55be335f73368f;hpb=d38e6a6a454d177852bc16b4cb0622fd32852f48;p=dpdk.git diff --git a/examples/vm_power_manager/channel_monitor.c b/examples/vm_power_manager/channel_monitor.c index 1a3a0fa768..1194f62f8e 100644 --- a/examples/vm_power_manager/channel_monitor.c +++ b/examples/vm_power_manager/channel_monitor.c @@ -21,6 +21,7 @@ #else #pragma message "Jansson dev libs unavailable, not including JSON parsing" #endif +#include #include #include #include @@ -55,12 +56,12 @@ static struct policy policies[MAX_CLIENTS]; #ifdef USE_JANSSON union PFID { - struct ether_addr addr; + struct rte_ether_addr addr; uint64_t pfid; }; static int -str_to_ether_addr(const char *a, struct ether_addr *ether_addr) +str_to_ether_addr(const char *a, struct rte_ether_addr *ether_addr) { int i; char *end; @@ -158,10 +159,11 @@ parse_json_to_pkt(json_t *element, struct channel_packet *pkt) if (ret) return ret; } else if (!strcmp(key, "name")) { - strcpy(pkt->vm_name, json_string_value(value)); + strlcpy(pkt->vm_name, json_string_value(value), + sizeof(pkt->vm_name)); } else if (!strcmp(key, "command")) { char command[32]; - snprintf(command, 32, "%s", json_string_value(value)); + strlcpy(command, json_string_value(value), 32); if (!strcmp(command, "power")) { pkt->command = CPU_POWER; } else if (!strcmp(command, "create")) { @@ -175,7 +177,7 @@ parse_json_to_pkt(json_t *element, struct channel_packet *pkt) } } else if (!strcmp(key, "policy_type")) { char command[32]; - snprintf(command, 32, "%s", json_string_value(value)); + strlcpy(command, json_string_value(value), 32); if (!strcmp(command, "TIME")) { pkt->policy_to_use = TIME; } else if (!strcmp(command, "TRAFFIC")) { @@ -191,7 +193,7 @@ parse_json_to_pkt(json_t *element, struct channel_packet *pkt) } } else if (!strcmp(key, "workload")) { char command[32]; - snprintf(command, 32, "%s", json_string_value(value)); + strlcpy(command, json_string_value(value), 32); if (!strcmp(command, "HIGH")) { pkt->workload = HIGH; } else if (!strcmp(command, "MEDIUM")) { @@ -237,8 +239,9 @@ parse_json_to_pkt(json_t *element, struct channel_packet *pkt) for (i = 0; i < size; i++) { char mac[32]; - snprintf(mac, 32, "%s", json_string_value( - json_array_get(value, i))); + strlcpy(mac, + json_string_value(json_array_get(value, i)), + 32); set_policy_mac(pkt, i, mac); } pkt->nb_mac_to_monitor = size; @@ -250,7 +253,7 @@ parse_json_to_pkt(json_t *element, struct channel_packet *pkt) (uint32_t)json_integer_value(value); } else if (!strcmp(key, "unit")) { char unit[32]; - snprintf(unit, 32, "%s", json_string_value(value)); + strlcpy(unit, json_string_value(value), 32); if (!strcmp(unit, "SCALE_UP")) { pkt->unit = CPU_POWER_SCALE_UP; } else if (!strcmp(unit, "SCALE_DOWN")) { @@ -401,7 +404,7 @@ get_pfid(struct policy *pol) RTE_ETH_FOREACH_DEV(x) { ret = rte_pmd_i40e_query_vfid_by_mac(x, - (struct ether_addr *)&(pol->pkt.vfid[i])); + (struct rte_ether_addr *)&(pol->pkt.vfid[i])); if (ret != -EINVAL) { pol->port[i] = x; break; @@ -435,9 +438,12 @@ update_policy(struct channel_packet *pkt) /* Copy the contents of *pkt into the policy.pkt */ policies[i].pkt = *pkt; get_pcpu_to_control(&policies[i]); - if (get_pfid(&policies[i]) == -1) { - updated = 1; - break; + /* Check Eth dev only for Traffic policy */ + if (policies[i].pkt.policy_to_use == TRAFFIC) { + if (get_pfid(&policies[i]) < 0) { + updated = 1; + break; + } } core_share_status(i); policies[i].enabled = 1; @@ -449,8 +455,13 @@ update_policy(struct channel_packet *pkt) if (policies[i].enabled == 0) { policies[i].pkt = *pkt; get_pcpu_to_control(&policies[i]); - if (get_pfid(&policies[i]) == -1) - break; + /* Check Eth dev only for Traffic policy */ + if (policies[i].pkt.policy_to_use == TRAFFIC) { + if (get_pfid(&policies[i]) < 0) { + updated = 1; + break; + } + } core_share_status(i); policies[i].enabled = 1; break; @@ -630,6 +641,8 @@ apply_policy(struct policy *pol) static int process_request(struct channel_packet *pkt, struct channel_info *chan_info) { + int ret; + if (chan_info == NULL) return -1; @@ -645,6 +658,9 @@ process_request(struct channel_packet *pkt, struct channel_info *chan_info) else core_num = pkt->resource_id; + RTE_LOG(DEBUG, CHANNEL_MONITOR, "Processing requested cmd for cpu:%d\n", + core_num); + switch (pkt->unit) { case(CPU_POWER_SCALE_MIN): power_manager_scale_core_min(core_num); @@ -677,9 +693,13 @@ process_request(struct channel_packet *pkt, struct channel_info *chan_info) } if (pkt->command == PKT_POLICY_REMOVE) { - RTE_LOG(INFO, CHANNEL_MONITOR, - "Removing policy %s\n", pkt->vm_name); - remove_policy(pkt); + ret = remove_policy(pkt); + if (ret == 0) + RTE_LOG(INFO, CHANNEL_MONITOR, + "Removed policy %s\n", pkt->vm_name); + else + RTE_LOG(INFO, CHANNEL_MONITOR, + "Policy %s does not exist\n", pkt->vm_name); } /* @@ -756,7 +776,7 @@ read_binary_packet(struct channel_info *chan_info) buffer, buffer_len); if (n_bytes == buffer_len) break; - if (n_bytes == -1) { + if (n_bytes < 0) { err = errno; RTE_LOG(DEBUG, CHANNEL_MONITOR, "Received error on " @@ -796,18 +816,13 @@ read_json_packet(struct channel_info *chan_info) indent--; if ((indent > 0) || (idx > 0)) idx++; - if (indent == 0) + if (indent <= 0) json_data[idx] = 0; if (idx >= MAX_JSON_STRING_LEN-1) break; } while (indent > 0); - if (indent > 0) - /* - * We've broken out of the read loop without getting - * a closing brace, so throw away the data - */ - json_data[idx] = 0; + json_data[idx] = '\0'; if (strlen(json_data) == 0) continue;