@@ -27,7 +27,6 @@
#include <libvirt/libvirt.h>
#include "channel_manager.h"
-#include "channel_commands.h"
#include "channel_monitor.h"
#include "power_manager.h"
@@ -35,7 +35,6 @@
#include <libvirt/libvirt.h>
#include "channel_monitor.h"
-#include "channel_commands.h"
#include "channel_manager.h"
#include "power_manager.h"
#include "oob_monitor.h"
@@ -108,7 +107,7 @@ str_to_ether_addr(const char *a, struct rte_ether_addr *ether_addr)
}
static int
-set_policy_mac(struct channel_packet *pkt, int idx, char *mac)
+set_policy_mac(struct rte_power_channel_packet *pkt, int idx, char *mac)
{
union PFID pfid;
int ret;
@@ -165,7 +164,7 @@ get_resource_id_from_vmname(const char *vm_name)
}
static int
-parse_json_to_pkt(json_t *element, struct channel_packet *pkt,
+parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt,
const char *vm_name)
{
const char *key;
@@ -173,14 +172,14 @@ parse_json_to_pkt(json_t *element, struct channel_packet *pkt,
int ret;
int resource_id;
- memset(pkt, 0, sizeof(struct channel_packet));
+ memset(pkt, 0, sizeof(struct rte_power_channel_packet));
pkt->nb_mac_to_monitor = 0;
pkt->t_boost_status.tbEnabled = false;
- pkt->workload = LOW;
- pkt->policy_to_use = TIME;
- pkt->command = PKT_POLICY;
- pkt->core_type = CORE_TYPE_PHYSICAL;
+ pkt->workload = RTE_POWER_WL_LOW;
+ pkt->policy_to_use = RTE_POWER_POLICY_TIME;
+ pkt->command = RTE_POWER_PKT_POLICY;
+ pkt->core_type = RTE_POWER_CORE_TYPE_PHYSICAL;
if (vm_name == NULL) {
RTE_LOG(ERR, CHANNEL_MONITOR,
@@ -203,11 +202,11 @@ parse_json_to_pkt(json_t *element, struct channel_packet *pkt,
char command[32];
strlcpy(command, json_string_value(value), 32);
if (!strcmp(command, "power")) {
- pkt->command = CPU_POWER;
+ pkt->command = RTE_POWER_CPU_POWER;
} else if (!strcmp(command, "create")) {
- pkt->command = PKT_POLICY;
+ pkt->command = RTE_POWER_PKT_POLICY;
} else if (!strcmp(command, "destroy")) {
- pkt->command = PKT_POLICY_REMOVE;
+ pkt->command = RTE_POWER_PKT_POLICY_REMOVE;
} else {
RTE_LOG(ERR, CHANNEL_MONITOR,
"Invalid command received in JSON\n");
@@ -217,13 +216,17 @@ parse_json_to_pkt(json_t *element, struct channel_packet *pkt,
char command[32];
strlcpy(command, json_string_value(value), 32);
if (!strcmp(command, "TIME")) {
- pkt->policy_to_use = TIME;
+ pkt->policy_to_use =
+ RTE_POWER_POLICY_TIME;
} else if (!strcmp(command, "TRAFFIC")) {
- pkt->policy_to_use = TRAFFIC;
+ pkt->policy_to_use =
+ RTE_POWER_POLICY_TRAFFIC;
} else if (!strcmp(command, "WORKLOAD")) {
- pkt->policy_to_use = WORKLOAD;
+ pkt->policy_to_use =
+ RTE_POWER_POLICY_WORKLOAD;
} else if (!strcmp(command, "BRANCH_RATIO")) {
- pkt->policy_to_use = BRANCH_RATIO;
+ pkt->policy_to_use =
+ RTE_POWER_POLICY_BRANCH_RATIO;
} else {
RTE_LOG(ERR, CHANNEL_MONITOR,
"Wrong policy_type received in JSON\n");
@@ -233,11 +236,11 @@ parse_json_to_pkt(json_t *element, struct channel_packet *pkt,
char command[32];
strlcpy(command, json_string_value(value), 32);
if (!strcmp(command, "HIGH")) {
- pkt->workload = HIGH;
+ pkt->workload = RTE_POWER_WL_HIGH;
} else if (!strcmp(command, "MEDIUM")) {
- pkt->workload = MEDIUM;
+ pkt->workload = RTE_POWER_WL_MEDIUM;
} else if (!strcmp(command, "LOW")) {
- pkt->workload = LOW;
+ pkt->workload = RTE_POWER_WL_LOW;
} else {
RTE_LOG(ERR, CHANNEL_MONITOR,
"Wrong workload received in JSON\n");
@@ -283,17 +286,17 @@ parse_json_to_pkt(json_t *element, struct channel_packet *pkt,
char unit[32];
strlcpy(unit, json_string_value(value), 32);
if (!strcmp(unit, "SCALE_UP")) {
- pkt->unit = CPU_POWER_SCALE_UP;
+ pkt->unit = RTE_POWER_SCALE_UP;
} else if (!strcmp(unit, "SCALE_DOWN")) {
- pkt->unit = CPU_POWER_SCALE_DOWN;
+ pkt->unit = RTE_POWER_SCALE_DOWN;
} else if (!strcmp(unit, "SCALE_MAX")) {
- pkt->unit = CPU_POWER_SCALE_MAX;
+ pkt->unit = RTE_POWER_SCALE_MAX;
} else if (!strcmp(unit, "SCALE_MIN")) {
- pkt->unit = CPU_POWER_SCALE_MIN;
+ pkt->unit = RTE_POWER_SCALE_MIN;
} else if (!strcmp(unit, "ENABLE_TURBO")) {
- pkt->unit = CPU_POWER_ENABLE_TURBO;
+ pkt->unit = RTE_POWER_ENABLE_TURBO;
} else if (!strcmp(unit, "DISABLE_TURBO")) {
- pkt->unit = CPU_POWER_DISABLE_TURBO;
+ pkt->unit = RTE_POWER_DISABLE_TURBO;
} else {
RTE_LOG(ERR, CHANNEL_MONITOR,
"Invalid command received in JSON\n");
@@ -312,7 +315,7 @@ parse_json_to_pkt(json_t *element, struct channel_packet *pkt,
vm_name);
return -1;
}
- strlcpy(pkt->vm_name, vm_name, VM_MAX_NAME_SZ);
+ strlcpy(pkt->vm_name, vm_name, RTE_POWER_VM_MAX_NAME_SZ);
pkt->resource_id = resource_id;
}
return 0;
@@ -367,7 +370,7 @@ pcpu_monitor(struct policy *pol, struct core_info *ci, int pcpu, int count)
{
int ret = 0;
- if (pol->pkt.policy_to_use == BRANCH_RATIO) {
+ if (pol->pkt.policy_to_use == RTE_POWER_POLICY_BRANCH_RATIO) {
ci->cd[pcpu].oob_enabled = 1;
ret = add_core_to_monitor(pcpu);
if (ret == 0)
@@ -407,7 +410,7 @@ get_pcpu_to_control(struct policy *pol)
* differenciate between them when adding them to the branch monitor.
* Virtual cores need to be converted to physical cores.
*/
- if (pol->pkt.core_type == CORE_TYPE_VIRTUAL) {
+ if (pol->pkt.core_type == RTE_POWER_CORE_TYPE_VIRTUAL) {
/*
* If the cores in the policy are virtual, we need to map them
* to physical core. We look up the vm info and use that for
@@ -463,7 +466,7 @@ get_pfid(struct policy *pol)
}
static int
-update_policy(struct channel_packet *pkt)
+update_policy(struct rte_power_channel_packet *pkt)
{
unsigned int updated = 0;
@@ -479,7 +482,8 @@ update_policy(struct channel_packet *pkt)
policies[i].pkt = *pkt;
get_pcpu_to_control(&policies[i]);
/* Check Eth dev only for Traffic policy */
- if (policies[i].pkt.policy_to_use == TRAFFIC) {
+ if (policies[i].pkt.policy_to_use ==
+ RTE_POWER_POLICY_TRAFFIC) {
if (get_pfid(&policies[i]) < 0) {
updated = 1;
break;
@@ -496,7 +500,8 @@ update_policy(struct channel_packet *pkt)
policies[i].pkt = *pkt;
get_pcpu_to_control(&policies[i]);
/* Check Eth dev only for Traffic policy */
- if (policies[i].pkt.policy_to_use == TRAFFIC) {
+ if (policies[i].pkt.policy_to_use ==
+ RTE_POWER_POLICY_TRAFFIC) {
if (get_pfid(&policies[i]) < 0) {
updated = 1;
break;
@@ -512,7 +517,7 @@ update_policy(struct channel_packet *pkt)
}
static int
-remove_policy(struct channel_packet *pkt __rte_unused)
+remove_policy(struct rte_power_channel_packet *pkt __rte_unused)
{
unsigned int i;
@@ -615,7 +620,7 @@ apply_time_profile(struct policy *pol)
/* Format the date and time, down to a single second. */
strftime(time_string, sizeof(time_string), "%Y-%m-%d %H:%M:%S", ptm);
- for (x = 0; x < HOURS; x++) {
+ for (x = 0; x < RTE_POWER_HOURS_PER_DAY; x++) {
if (ptm->tm_hour == pol->pkt.timer_policy.busy_hours[x]) {
for (count = 0; count < pol->pkt.num_vcpu; count++) {
@@ -648,19 +653,19 @@ apply_workload_profile(struct policy *pol)
int count;
- if (pol->pkt.workload == HIGH) {
+ if (pol->pkt.workload == RTE_POWER_WL_HIGH) {
for (count = 0; count < pol->pkt.num_vcpu; count++) {
if (pol->core_share[count].status != 1)
power_manager_scale_core_max(
pol->core_share[count].pcpu);
}
- } else if (pol->pkt.workload == MEDIUM) {
+ } else if (pol->pkt.workload == RTE_POWER_WL_MEDIUM) {
for (count = 0; count < pol->pkt.num_vcpu; count++) {
if (pol->core_share[count].status != 1)
power_manager_scale_core_med(
pol->core_share[count].pcpu);
}
- } else if (pol->pkt.workload == LOW) {
+ } else if (pol->pkt.workload == RTE_POWER_WL_LOW) {
for (count = 0; count < pol->pkt.num_vcpu; count++) {
if (pol->core_share[count].status != 1)
power_manager_scale_core_min(
@@ -673,14 +678,14 @@ static void
apply_policy(struct policy *pol)
{
- struct channel_packet *pkt = &pol->pkt;
+ struct rte_power_channel_packet *pkt = &pol->pkt;
/*Check policy to use*/
- if (pkt->policy_to_use == TRAFFIC)
+ if (pkt->policy_to_use == RTE_POWER_POLICY_TRAFFIC)
apply_traffic_profile(pol);
- else if (pkt->policy_to_use == TIME)
+ else if (pkt->policy_to_use == RTE_POWER_POLICY_TIME)
apply_time_profile(pol);
- else if (pkt->policy_to_use == WORKLOAD)
+ else if (pkt->policy_to_use == RTE_POWER_POLICY_WORKLOAD)
apply_workload_profile(pol);
}
@@ -715,24 +720,24 @@ write_binary_packet(void *buffer,
}
static int
-send_freq(struct channel_packet *pkt,
+send_freq(struct rte_power_channel_packet *pkt,
struct channel_info *chan_info,
bool freq_list)
{
unsigned int vcore_id = pkt->resource_id;
- struct channel_packet_freq_list channel_pkt_freq_list;
+ struct rte_power_channel_packet_freq_list channel_pkt_freq_list;
struct vm_info info;
if (get_info_vm(pkt->vm_name, &info) != 0)
return -1;
- if (!freq_list && vcore_id >= MAX_VCPU_PER_VM)
+ if (!freq_list && vcore_id >= RTE_POWER_MAX_VCPU_PER_VM)
return -1;
if (!info.allow_query)
return -1;
- channel_pkt_freq_list.command = CPU_POWER_FREQ_LIST;
+ channel_pkt_freq_list.command = RTE_POWER_FREQ_LIST;
channel_pkt_freq_list.num_vcpu = info.num_vcpus;
if (freq_list) {
@@ -751,12 +756,12 @@ send_freq(struct channel_packet *pkt,
}
static int
-send_capabilities(struct channel_packet *pkt,
+send_capabilities(struct rte_power_channel_packet *pkt,
struct channel_info *chan_info,
bool list_requested)
{
unsigned int vcore_id = pkt->resource_id;
- struct channel_packet_caps_list channel_pkt_caps_list;
+ struct rte_power_channel_packet_caps_list channel_pkt_caps_list;
struct vm_info info;
struct rte_power_core_capabilities caps;
int ret;
@@ -764,13 +769,13 @@ send_capabilities(struct channel_packet *pkt,
if (get_info_vm(pkt->vm_name, &info) != 0)
return -1;
- if (!list_requested && vcore_id >= MAX_VCPU_PER_VM)
+ if (!list_requested && vcore_id >= RTE_POWER_MAX_VCPU_PER_VM)
return -1;
if (!info.allow_query)
return -1;
- channel_pkt_caps_list.command = CPU_POWER_CAPS_LIST;
+ channel_pkt_caps_list.command = RTE_POWER_CAPS_LIST;
channel_pkt_caps_list.num_vcpu = info.num_vcpus;
if (list_requested) {
@@ -805,18 +810,19 @@ send_capabilities(struct channel_packet *pkt,
}
static int
-send_ack_for_received_cmd(struct channel_packet *pkt,
+send_ack_for_received_cmd(struct rte_power_channel_packet *pkt,
struct channel_info *chan_info,
uint32_t command)
{
pkt->command = command;
return write_binary_packet(pkt,
- sizeof(struct channel_packet),
+ sizeof(struct rte_power_channel_packet),
chan_info);
}
static int
-process_request(struct channel_packet *pkt, struct channel_info *chan_info)
+process_request(struct rte_power_channel_packet *pkt,
+ struct channel_info *chan_info)
{
int ret;
@@ -827,10 +833,10 @@ process_request(struct channel_packet *pkt, struct channel_info *chan_info)
CHANNEL_MGR_CHANNEL_PROCESSING) == 0)
return -1;
- if (pkt->command == CPU_POWER) {
+ if (pkt->command == RTE_POWER_CPU_POWER) {
unsigned int core_num;
- if (pkt->core_type == CORE_TYPE_VIRTUAL)
+ if (pkt->core_type == RTE_POWER_CORE_TYPE_VIRTUAL)
core_num = get_pcpu(chan_info, pkt->resource_id);
else
core_num = pkt->resource_id;
@@ -842,22 +848,22 @@ process_request(struct channel_packet *pkt, struct channel_info *chan_info)
bool valid_unit = true;
switch (pkt->unit) {
- case(CPU_POWER_SCALE_MIN):
+ case(RTE_POWER_SCALE_MIN):
scale_res = power_manager_scale_core_min(core_num);
break;
- case(CPU_POWER_SCALE_MAX):
+ case(RTE_POWER_SCALE_MAX):
scale_res = power_manager_scale_core_max(core_num);
break;
- case(CPU_POWER_SCALE_DOWN):
+ case(RTE_POWER_SCALE_DOWN):
scale_res = power_manager_scale_core_down(core_num);
break;
- case(CPU_POWER_SCALE_UP):
+ case(RTE_POWER_SCALE_UP):
scale_res = power_manager_scale_core_up(core_num);
break;
- case(CPU_POWER_ENABLE_TURBO):
+ case(RTE_POWER_ENABLE_TURBO):
scale_res = power_manager_enable_turbo_core(core_num);
break;
- case(CPU_POWER_DISABLE_TURBO):
+ case(RTE_POWER_DISABLE_TURBO):
scale_res = power_manager_disable_turbo_core(core_num);
break;
default:
@@ -869,8 +875,8 @@ process_request(struct channel_packet *pkt, struct channel_info *chan_info)
ret = send_ack_for_received_cmd(pkt,
chan_info,
scale_res >= 0 ?
- CPU_POWER_CMD_ACK :
- CPU_POWER_CMD_NACK);
+ RTE_POWER_CMD_ACK :
+ RTE_POWER_CMD_NACK);
if (ret < 0)
RTE_LOG(ERR, CHANNEL_MONITOR, "Error during sending ack command.\n");
} else
@@ -878,19 +884,19 @@ process_request(struct channel_packet *pkt, struct channel_info *chan_info)
}
- if (pkt->command == PKT_POLICY) {
+ if (pkt->command == RTE_POWER_PKT_POLICY) {
RTE_LOG(INFO, CHANNEL_MONITOR, "Processing policy request %s\n",
pkt->vm_name);
int ret = send_ack_for_received_cmd(pkt,
chan_info,
- CPU_POWER_CMD_ACK);
+ RTE_POWER_CMD_ACK);
if (ret < 0)
RTE_LOG(ERR, CHANNEL_MONITOR, "Error during sending ack command.\n");
update_policy(pkt);
policy_is_set = 1;
}
- if (pkt->command == PKT_POLICY_REMOVE) {
+ if (pkt->command == RTE_POWER_PKT_POLICY_REMOVE) {
ret = remove_policy(pkt);
if (ret == 0)
RTE_LOG(INFO, CHANNEL_MONITOR,
@@ -900,26 +906,26 @@ process_request(struct channel_packet *pkt, struct channel_info *chan_info)
"Policy %s does not exist\n", pkt->vm_name);
}
- if (pkt->command == CPU_POWER_QUERY_FREQ_LIST ||
- pkt->command == CPU_POWER_QUERY_FREQ) {
+ if (pkt->command == RTE_POWER_QUERY_FREQ_LIST ||
+ pkt->command == RTE_POWER_QUERY_FREQ) {
RTE_LOG(INFO, CHANNEL_MONITOR,
"Frequency for %s requested.\n", pkt->vm_name);
int ret = send_freq(pkt,
chan_info,
- pkt->command == CPU_POWER_QUERY_FREQ_LIST);
+ pkt->command == RTE_POWER_QUERY_FREQ_LIST);
if (ret < 0)
RTE_LOG(ERR, CHANNEL_MONITOR, "Error during frequency sending.\n");
}
- if (pkt->command == CPU_POWER_QUERY_CAPS_LIST ||
- pkt->command == CPU_POWER_QUERY_CAPS) {
+ if (pkt->command == RTE_POWER_QUERY_CAPS_LIST ||
+ pkt->command == RTE_POWER_QUERY_CAPS) {
RTE_LOG(INFO, CHANNEL_MONITOR,
"Capabilities for %s requested.\n", pkt->vm_name);
int ret = send_capabilities(pkt,
chan_info,
- pkt->command == CPU_POWER_QUERY_CAPS_LIST);
+ pkt->command == RTE_POWER_QUERY_CAPS_LIST);
if (ret < 0)
RTE_LOG(ERR, CHANNEL_MONITOR, "Error during sending capabilities.\n");
}
@@ -988,7 +994,7 @@ channel_monitor_init(void)
static void
read_binary_packet(struct channel_info *chan_info)
{
- struct channel_packet pkt;
+ struct rte_power_channel_packet pkt;
void *buffer = &pkt;
int buffer_len = sizeof(pkt);
int n_bytes, err = 0;
@@ -1019,7 +1025,7 @@ read_binary_packet(struct channel_info *chan_info)
static void
read_json_packet(struct channel_info *chan_info)
{
- struct channel_packet pkt;
+ struct rte_power_channel_packet pkt;
int n_bytes, ret;
json_t *root;
json_error_t error;
@@ -5,8 +5,8 @@
#ifndef CHANNEL_MONITOR_H_
#define CHANNEL_MONITOR_H_
+#include <rte_power.h>
#include "channel_manager.h"
-#include "channel_commands.h"
struct core_share {
unsigned int pcpu;
@@ -18,11 +18,11 @@ struct core_share {
};
struct policy {
- struct channel_packet pkt;
- uint32_t pfid[MAX_VFS];
- uint32_t port[MAX_VFS];
+ struct rte_power_channel_packet pkt;
+ uint32_t pfid[RTE_POWER_MAX_VFS];
+ uint32_t port[RTE_POWER_MAX_VFS];
unsigned int enabled;
- struct core_share core_share[MAX_VCPU_PER_VM];
+ struct core_share core_share[RTE_POWER_MAX_VCPU_PER_VM];
};
#ifdef __cplusplus
@@ -48,10 +48,10 @@ parse_args(int argc, char **argv)
{ "policy", required_argument, 0, 'o'},
{NULL, 0, 0, 0}
};
- struct channel_packet *policy;
+ struct rte_power_channel_packet *policy;
unsigned short int hours[MAX_HOURS];
- unsigned short int cores[MAX_VCPU_PER_VM];
- unsigned short int ports[MAX_VCPU_PER_VM];
+ unsigned short int cores[RTE_POWER_MAX_VCPU_PER_VM];
+ unsigned short int ports[RTE_POWER_MAX_VCPU_PER_VM];
int i, cnt, idx;
policy = get_policy();
@@ -69,7 +69,8 @@ parse_args(int argc, char **argv)
switch (opt) {
/* portmask */
case 'n':
- strlcpy(policy->vm_name, optarg, VM_MAX_NAME_SZ);
+ strlcpy(policy->vm_name, optarg,
+ RTE_POWER_VM_MAX_NAME_SZ);
printf("Setting VM Name to [%s]\n", policy->vm_name);
break;
case 'b':
@@ -97,14 +98,15 @@ parse_args(int argc, char **argv)
}
break;
case 'l':
- cnt = parse_set(optarg, cores, MAX_VCPU_PER_VM);
+ cnt = parse_set(optarg, cores,
+ RTE_POWER_MAX_VCPU_PER_VM);
if (cnt < 0) {
printf("Invalid value passed to vcpu-list - [%s]\n",
optarg);
break;
}
idx = 0;
- for (i = 0; i < MAX_VCPU_PER_VM; i++) {
+ for (i = 0; i < RTE_POWER_MAX_VCPU_PER_VM; i++) {
if (cores[i]) {
printf("***Using core %d\n", i);
policy->vcpu_to_control[idx++] = i;
@@ -114,14 +116,15 @@ parse_args(int argc, char **argv)
printf("Total cores: %d\n", idx);
break;
case 'p':
- cnt = parse_set(optarg, ports, MAX_VCPU_PER_VM);
+ cnt = parse_set(optarg, ports,
+ RTE_POWER_MAX_VCPU_PER_VM);
if (cnt < 0) {
printf("Invalid value passed to port-list - [%s]\n",
optarg);
break;
}
idx = 0;
- for (i = 0; i < MAX_VCPU_PER_VM; i++) {
+ for (i = 0; i < RTE_POWER_MAX_VCPU_PER_VM; i++) {
if (ports[i]) {
printf("***Using port %d\n", i);
if (set_policy_mac(i, idx++) != 0) {
@@ -135,13 +138,17 @@ parse_args(int argc, char **argv)
break;
case 'o':
if (!strcmp(optarg, "TRAFFIC"))
- policy->policy_to_use = TRAFFIC;
+ policy->policy_to_use =
+ RTE_POWER_POLICY_TRAFFIC;
else if (!strcmp(optarg, "TIME"))
- policy->policy_to_use = TIME;
+ policy->policy_to_use =
+ RTE_POWER_POLICY_TIME;
else if (!strcmp(optarg, "WORKLOAD"))
- policy->policy_to_use = WORKLOAD;
+ policy->policy_to_use =
+ RTE_POWER_POLICY_WORKLOAD;
else if (!strcmp(optarg, "BRANCH_RATIO"))
- policy->policy_to_use = BRANCH_RATIO;
+ policy->policy_to_use =
+ RTE_POWER_POLICY_BRANCH_RATIO;
else {
printf("Invalid policy specified: %s\n",
optarg);
@@ -19,7 +19,7 @@
#include <rte_ethdev.h>
#include <rte_power.h>
-#include <guest_channel.h>
+#include <rte_power_guest_channel.h>
#include "vm_power_cli_guest.h"
@@ -38,9 +38,9 @@ union PFID {
uint64_t pfid;
};
-static struct channel_packet policy;
+static struct rte_power_channel_packet policy;
-struct channel_packet *
+struct rte_power_channel_packet *
get_policy(void)
{
return &policy;
@@ -49,7 +49,7 @@ get_policy(void)
int
set_policy_mac(int port, int idx)
{
- struct channel_packet *policy;
+ struct rte_power_channel_packet *policy;
union PFID pfid;
int ret;
@@ -73,7 +73,7 @@ set_policy_mac(int port, int idx)
}
int
-set_policy_defaults(struct channel_packet *pkt)
+set_policy_defaults(struct rte_power_channel_packet *pkt)
{
int ret;
@@ -103,10 +103,10 @@ set_policy_defaults(struct channel_packet *pkt)
pkt->timer_policy.hours_to_use_traffic_profile[0] = 8;
pkt->timer_policy.hours_to_use_traffic_profile[1] = 10;
- pkt->core_type = CORE_TYPE_VIRTUAL;
- pkt->workload = LOW;
- pkt->policy_to_use = TIME;
- pkt->command = PKT_POLICY;
+ pkt->core_type = RTE_POWER_CORE_TYPE_VIRTUAL;
+ pkt->workload = RTE_POWER_WL_LOW;
+ pkt->policy_to_use = RTE_POWER_POLICY_TIME;
+ pkt->command = RTE_POWER_PKT_POLICY;
strlcpy(pkt->vm_name, "ubuntu2", sizeof(pkt->vm_name));
return 0;
@@ -145,7 +145,7 @@ struct cmd_freq_list_result {
};
static int
-query_data(struct channel_packet *pkt, unsigned int lcore_id)
+query_data(struct rte_power_channel_packet *pkt, unsigned int lcore_id)
{
int ret;
ret = rte_power_guest_channel_send_msg(pkt, lcore_id);
@@ -157,19 +157,19 @@ query_data(struct channel_packet *pkt, unsigned int lcore_id)
}
static int
-receive_freq_list(struct channel_packet_freq_list *pkt_freq_list,
+receive_freq_list(struct rte_power_channel_packet_freq_list *pkt_freq_list,
unsigned int lcore_id)
{
int ret;
ret = rte_power_guest_channel_receive_msg(pkt_freq_list,
- sizeof(struct channel_packet_freq_list),
+ sizeof(struct rte_power_channel_packet_freq_list),
lcore_id);
if (ret < 0) {
RTE_LOG(ERR, GUEST_CLI, "Error receiving message.\n");
return -1;
}
- if (pkt_freq_list->command != CPU_POWER_FREQ_LIST) {
+ if (pkt_freq_list->command != RTE_POWER_FREQ_LIST) {
RTE_LOG(ERR, GUEST_CLI, "Unexpected message received.\n");
return -1;
}
@@ -183,14 +183,15 @@ cmd_query_freq_list_parsed(void *parsed_result,
{
struct cmd_freq_list_result *res = parsed_result;
unsigned int lcore_id;
- struct channel_packet_freq_list pkt_freq_list;
- struct channel_packet pkt;
+ struct rte_power_channel_packet_freq_list pkt_freq_list;
+ struct rte_power_channel_packet pkt;
bool query_list = false;
int ret;
char *ep;
- memset(&pkt, 0, sizeof(struct channel_packet));
- memset(&pkt_freq_list, 0, sizeof(struct channel_packet_freq_list));
+ memset(&pkt, 0, sizeof(struct rte_power_channel_packet));
+ memset(&pkt_freq_list, 0,
+ sizeof(struct rte_power_channel_packet_freq_list));
if (!strcmp(res->cpu_num, "all")) {
@@ -203,18 +204,18 @@ cmd_query_freq_list_parsed(void *parsed_result,
return;
}
- pkt.command = CPU_POWER_QUERY_FREQ_LIST;
+ pkt.command = RTE_POWER_QUERY_FREQ_LIST;
strlcpy(pkt.vm_name, policy.vm_name, sizeof(pkt.vm_name));
query_list = true;
} else {
errno = 0;
lcore_id = (unsigned int)strtol(res->cpu_num, &ep, 10);
- if (errno != 0 || lcore_id >= MAX_VCPU_PER_VM ||
+ if (errno != 0 || lcore_id >= RTE_POWER_MAX_VCPU_PER_VM ||
ep == res->cpu_num) {
cmdline_printf(cl, "Invalid parameter provided.\n");
return;
}
- pkt.command = CPU_POWER_QUERY_FREQ;
+ pkt.command = RTE_POWER_QUERY_FREQ;
strlcpy(pkt.vm_name, policy.vm_name, sizeof(pkt.vm_name));
pkt.resource_id = lcore_id;
}
@@ -267,19 +268,19 @@ struct cmd_query_caps_result {
};
static int
-receive_capabilities(struct channel_packet_caps_list *pkt_caps_list,
+receive_capabilities(struct rte_power_channel_packet_caps_list *pkt_caps_list,
unsigned int lcore_id)
{
int ret;
ret = rte_power_guest_channel_receive_msg(pkt_caps_list,
- sizeof(struct channel_packet_caps_list),
+ sizeof(struct rte_power_channel_packet_caps_list),
lcore_id);
if (ret < 0) {
RTE_LOG(ERR, GUEST_CLI, "Error receiving message.\n");
return -1;
}
- if (pkt_caps_list->command != CPU_POWER_CAPS_LIST) {
+ if (pkt_caps_list->command != RTE_POWER_CAPS_LIST) {
RTE_LOG(ERR, GUEST_CLI, "Unexpected message received.\n");
return -1;
}
@@ -293,14 +294,15 @@ cmd_query_caps_list_parsed(void *parsed_result,
{
struct cmd_query_caps_result *res = parsed_result;
unsigned int lcore_id;
- struct channel_packet_caps_list pkt_caps_list;
- struct channel_packet pkt;
+ struct rte_power_channel_packet_caps_list pkt_caps_list;
+ struct rte_power_channel_packet pkt;
bool query_list = false;
int ret;
char *ep;
- memset(&pkt, 0, sizeof(struct channel_packet));
- memset(&pkt_caps_list, 0, sizeof(struct channel_packet_caps_list));
+ memset(&pkt, 0, sizeof(struct rte_power_channel_packet));
+ memset(&pkt_caps_list, 0,
+ sizeof(struct rte_power_channel_packet_caps_list));
if (!strcmp(res->cpu_num, "all")) {
@@ -313,18 +315,18 @@ cmd_query_caps_list_parsed(void *parsed_result,
return;
}
- pkt.command = CPU_POWER_QUERY_CAPS_LIST;
+ pkt.command = RTE_POWER_QUERY_CAPS_LIST;
strlcpy(pkt.vm_name, policy.vm_name, sizeof(pkt.vm_name));
query_list = true;
} else {
errno = 0;
lcore_id = (unsigned int)strtol(res->cpu_num, &ep, 10);
- if (errno != 0 || lcore_id >= MAX_VCPU_PER_VM ||
+ if (errno != 0 || lcore_id >= RTE_POWER_MAX_VCPU_PER_VM ||
ep == res->cpu_num) {
cmdline_printf(cl, "Invalid parameter provided.\n");
return;
}
- pkt.command = CPU_POWER_QUERY_CAPS;
+ pkt.command = RTE_POWER_QUERY_CAPS;
strlcpy(pkt.vm_name, policy.vm_name, sizeof(pkt.vm_name));
pkt.resource_id = lcore_id;
}
@@ -380,7 +382,7 @@ cmdline_parse_inst_t cmd_query_caps_list = {
static int
check_response_cmd(unsigned int lcore_id, int *result)
{
- struct channel_packet pkt;
+ struct rte_power_channel_packet pkt;
int ret;
ret = rte_power_guest_channel_receive_msg(&pkt, sizeof pkt, lcore_id);
@@ -388,10 +390,10 @@ check_response_cmd(unsigned int lcore_id, int *result)
return -1;
switch (pkt.command) {
- case(CPU_POWER_CMD_ACK):
+ case(RTE_POWER_CMD_ACK):
*result = 1;
break;
- case(CPU_POWER_CMD_NACK):
+ case(RTE_POWER_CMD_NACK):
*result = 0;
break;
default:
@@ -473,7 +475,7 @@ struct cmd_send_policy_result {
};
static inline int
-send_policy(struct channel_packet *pkt, struct cmdline *cl)
+send_policy(struct rte_power_channel_packet *pkt, struct cmdline *cl)
{
int ret;
@@ -9,13 +9,11 @@
extern "C" {
#endif
-#include "channel_commands.h"
-
-struct channel_packet *get_policy(void);
+struct rte_power_channel_packet *get_policy(void);
int set_policy_mac(int port, int idx);
-int set_policy_defaults(struct channel_packet *pkt);
+int set_policy_defaults(struct rte_power_channel_packet *pkt);
void run_cli(__rte_unused void *arg);
@@ -394,7 +394,7 @@ main(int argc, char **argv)
"Cannot init port %"PRIu8 "\n",
portid);
- for (w = 0; w < MAX_VFS; w++) {
+ for (w = 0; w < RTE_POWER_MAX_VFS; w++) {
eth.addr_bytes[5] = w + 0xf0;
ret = -ENOTSUP;
@@ -21,7 +21,6 @@
#include "channel_manager.h"
#include "channel_monitor.h"
#include "power_manager.h"
-#include "channel_commands.h"
struct cmd_quit_result {
cmdline_fixed_string_t quit;
deleted file mode 100644
@@ -1,125 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2010-2014 Intel Corporation
- */
-
-#ifndef CHANNEL_COMMANDS_H_
-#define CHANNEL_COMMANDS_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdint.h>
-#include <stdbool.h>
-
-/* --- Incoming messages --- */
-
-/* Valid Commands */
-#define CPU_POWER 1
-#define CPU_POWER_CONNECT 2
-#define PKT_POLICY 3
-#define PKT_POLICY_REMOVE 4
-
-/* CPU Power Command Scaling */
-#define CPU_POWER_SCALE_UP 1
-#define CPU_POWER_SCALE_DOWN 2
-#define CPU_POWER_SCALE_MAX 3
-#define CPU_POWER_SCALE_MIN 4
-#define CPU_POWER_ENABLE_TURBO 5
-#define CPU_POWER_DISABLE_TURBO 6
-
-/* CPU Power Queries */
-#define CPU_POWER_QUERY_FREQ_LIST 7
-#define CPU_POWER_QUERY_FREQ 8
-#define CPU_POWER_QUERY_CAPS_LIST 9
-#define CPU_POWER_QUERY_CAPS 10
-
-/* --- Outgoing messages --- */
-
-/* Generic Power Command Response */
-#define CPU_POWER_CMD_ACK 1
-#define CPU_POWER_CMD_NACK 2
-
-/* CPU Power Query Responses */
-#define CPU_POWER_FREQ_LIST 3
-#define CPU_POWER_CAPS_LIST 4
-
-#define HOURS 24
-
-#define MAX_VFS 10
-#define VM_MAX_NAME_SZ 32
-
-#define MAX_VCPU_PER_VM 8
-
-struct t_boost_status {
- bool tbEnabled;
-};
-
-struct timer_profile {
- int busy_hours[HOURS];
- int quiet_hours[HOURS];
- int hours_to_use_traffic_profile[HOURS];
-};
-
-enum workload {HIGH, MEDIUM, LOW};
-enum policy_to_use {
- TRAFFIC,
- TIME,
- WORKLOAD,
- BRANCH_RATIO
-};
-
-struct traffic {
- uint32_t min_packet_thresh;
- uint32_t avg_max_packet_thresh;
- uint32_t max_max_packet_thresh;
-};
-
-#define CORE_TYPE_VIRTUAL 0
-#define CORE_TYPE_PHYSICAL 1
-
-struct channel_packet {
- uint64_t resource_id; /**< core_num, device */
- uint32_t unit; /**< scale down/up/min/max */
- uint32_t command; /**< Power, IO, etc */
- char vm_name[VM_MAX_NAME_SZ];
-
- uint64_t vfid[MAX_VFS];
- int nb_mac_to_monitor;
- struct traffic traffic_policy;
- uint8_t vcpu_to_control[MAX_VCPU_PER_VM];
- uint8_t num_vcpu;
- struct timer_profile timer_policy;
- bool core_type;
- enum workload workload;
- enum policy_to_use policy_to_use;
- struct t_boost_status t_boost_status;
-};
-
-struct channel_packet_freq_list {
- uint64_t resource_id; /**< core_num, device */
- uint32_t unit; /**< scale down/up/min/max */
- uint32_t command; /**< Power, IO, etc */
- char vm_name[VM_MAX_NAME_SZ];
-
- uint32_t freq_list[MAX_VCPU_PER_VM];
- uint8_t num_vcpu;
-};
-
-struct channel_packet_caps_list {
- uint64_t resource_id; /**< core_num, device */
- uint32_t unit; /**< scale down/up/min/max */
- uint32_t command; /**< Power, IO, etc */
- char vm_name[VM_MAX_NAME_SZ];
-
- uint64_t turbo[MAX_VCPU_PER_VM];
- uint64_t priority[MAX_VCPU_PER_VM];
- uint8_t num_vcpu;
-};
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* CHANNEL_COMMANDS_H_ */
@@ -15,9 +15,9 @@
#include <rte_log.h>
+#include <rte_power.h>
#include "guest_channel.h"
-#include "channel_commands.h"
#define RTE_LOGTYPE_GUEST_CHANNEL RTE_LOGTYPE_USER1
@@ -55,7 +55,7 @@ int
guest_channel_host_connect(const char *path, unsigned int lcore_id)
{
int flags, ret;
- struct channel_packet pkt;
+ struct rte_power_channel_packet pkt;
char fd_path[PATH_MAX];
int fd = -1;
@@ -100,7 +100,7 @@ guest_channel_host_connect(const char *path, unsigned int lcore_id)
/* Send a test packet, this command is ignored by the host, but a successful
* send indicates that the host endpoint is monitoring.
*/
- pkt.command = CPU_POWER_CONNECT;
+ pkt.command = RTE_POWER_CPU_POWER_CONNECT;
global_fds[lcore_id] = fd;
ret = guest_channel_send_msg(&pkt, lcore_id);
if (ret != 0) {
@@ -119,7 +119,8 @@ guest_channel_host_connect(const char *path, unsigned int lcore_id)
}
int
-guest_channel_send_msg(struct channel_packet *pkt, unsigned int lcore_id)
+guest_channel_send_msg(struct rte_power_channel_packet *pkt,
+ unsigned int lcore_id)
{
int ret, buffer_len = sizeof(*pkt);
void *buffer = pkt;
@@ -149,7 +150,7 @@ guest_channel_send_msg(struct channel_packet *pkt, unsigned int lcore_id)
return 0;
}
-int rte_power_guest_channel_send_msg(struct channel_packet *pkt,
+int rte_power_guest_channel_send_msg(struct rte_power_channel_packet *pkt,
unsigned int lcore_id)
{
return guest_channel_send_msg(pkt, lcore_id);
@@ -8,7 +8,7 @@
extern "C" {
#endif
-#include <channel_commands.h>
+struct rte_power_channel_packet;
/**
* Check if any Virtio-Serial VM end-points exist in path.
@@ -63,23 +63,9 @@ void guest_channel_host_disconnect(unsigned int lcore_id);
* - Negative on channel not connected.
* - errno on write to channel error.
*/
-int guest_channel_send_msg(struct channel_packet *pkt, unsigned int lcore_id);
+int guest_channel_send_msg(struct rte_power_channel_packet *pkt,
+ unsigned int lcore_id);
-/**
- * Send a message contained in pkt over the Virtio-Serial to the host endpoint.
- *
- * @param pkt
- * Pointer to a populated struct channel_packet
- *
- * @param lcore_id
- * lcore_id.
- *
- * @return
- * - 0 on success.
- * - Negative on error.
- */
-int rte_power_guest_channel_send_msg(struct channel_packet *pkt,
- unsigned int lcore_id);
/**
* Read a message contained in pkt over the Virtio-Serial
@@ -103,31 +89,6 @@ int power_guest_channel_read_msg(void *pkt,
size_t pkt_len,
unsigned int lcore_id);
-/**
- * Receive a message contained in pkt over the Virtio-Serial
- * from the host endpoint.
- *
- * @param pkt
- * Pointer to channel_packet or
- * channel_packet_freq_list struct.
- *
- * @param pkt_len
- * Size of expected data packet.
- *
- * @param lcore_id
- * lcore_id.
- *
- * @return
- * - 0 on success.
- * - Negative on error.
- */
-__rte_experimental
-int
-rte_power_guest_channel_receive_msg(void *pkt,
- size_t pkt_len,
- unsigned int lcore_id);
-
-
#ifdef __cplusplus
}
#endif
@@ -10,5 +10,6 @@ sources = files('rte_power.c', 'power_acpi_cpufreq.c',
'rte_power_empty_poll.c',
'power_pstate_cpufreq.c',
'power_common.c')
-headers = files('rte_power.h','rte_power_empty_poll.h')
+headers = files('rte_power.h','rte_power_empty_poll.h',
+ 'rte_power_guest_channel.h')
deps += ['timer']
@@ -7,13 +7,12 @@
#include <rte_log.h>
#include "guest_channel.h"
-#include "channel_commands.h"
#include "power_kvm_vm.h"
#include "power_common.h"
#define FD_PATH "/dev/virtio-ports/virtio.serial.port.poweragent"
-static struct channel_packet pkt[RTE_MAX_LCORE];
+static struct rte_power_channel_packet pkt[RTE_MAX_LCORE];
int
power_kvm_vm_check_supported(void)
@@ -29,7 +28,7 @@ power_kvm_vm_init(unsigned int lcore_id)
lcore_id, RTE_MAX_LCORE-1);
return -1;
}
- pkt[lcore_id].command = CPU_POWER;
+ pkt[lcore_id].command = RTE_POWER_CPU_POWER;
pkt[lcore_id].resource_id = lcore_id;
return guest_channel_host_connect(FD_PATH, lcore_id);
}
@@ -90,25 +89,25 @@ send_msg(unsigned int lcore_id, uint32_t scale_direction)
int
power_kvm_vm_freq_up(unsigned int lcore_id)
{
- return send_msg(lcore_id, CPU_POWER_SCALE_UP);
+ return send_msg(lcore_id, RTE_POWER_SCALE_UP);
}
int
power_kvm_vm_freq_down(unsigned int lcore_id)
{
- return send_msg(lcore_id, CPU_POWER_SCALE_DOWN);
+ return send_msg(lcore_id, RTE_POWER_SCALE_DOWN);
}
int
power_kvm_vm_freq_max(unsigned int lcore_id)
{
- return send_msg(lcore_id, CPU_POWER_SCALE_MAX);
+ return send_msg(lcore_id, RTE_POWER_SCALE_MAX);
}
int
power_kvm_vm_freq_min(unsigned int lcore_id)
{
- return send_msg(lcore_id, CPU_POWER_SCALE_MIN);
+ return send_msg(lcore_id, RTE_POWER_SCALE_MIN);
}
int
@@ -121,13 +120,13 @@ power_kvm_vm_turbo_status(__rte_unused unsigned int lcore_id)
int
power_kvm_vm_enable_turbo(unsigned int lcore_id)
{
- return send_msg(lcore_id, CPU_POWER_ENABLE_TURBO);
+ return send_msg(lcore_id, RTE_POWER_ENABLE_TURBO);
}
int
power_kvm_vm_disable_turbo(unsigned int lcore_id)
{
- return send_msg(lcore_id, CPU_POWER_DISABLE_TURBO);
+ return send_msg(lcore_id, RTE_POWER_DISABLE_TURBO);
}
struct rte_power_core_capabilities;
@@ -14,6 +14,7 @@
#include <rte_byteorder.h>
#include <rte_log.h>
#include <rte_string_fns.h>
+#include <rte_power_guest_channel.h>
#ifdef __cplusplus
extern "C" {
new file mode 100644
@@ -0,0 +1,160 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2010-2020 Intel Corporation
+ */
+#ifndef RTE_POWER_GUEST_CHANNEL_H
+#define RTE_POWER_GUEST_CHANNEL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define RTE_POWER_MAX_VFS 10
+#define RTE_POWER_VM_MAX_NAME_SZ 32
+#define RTE_POWER_MAX_VCPU_PER_VM 8
+#define RTE_POWER_HOURS_PER_DAY 24
+
+/* Valid Commands */
+#define RTE_POWER_CPU_POWER 1
+#define RTE_POWER_CPU_POWER_CONNECT 2
+#define RTE_POWER_PKT_POLICY 3
+#define RTE_POWER_PKT_POLICY_REMOVE 4
+
+#define RTE_POWER_CORE_TYPE_VIRTUAL 0
+#define RTE_POWER_CORE_TYPE_PHYSICAL 1
+
+/* CPU Power Command Scaling */
+#define RTE_POWER_SCALE_UP 1
+#define RTE_POWER_SCALE_DOWN 2
+#define RTE_POWER_SCALE_MAX 3
+#define RTE_POWER_SCALE_MIN 4
+#define RTE_POWER_ENABLE_TURBO 5
+#define RTE_POWER_DISABLE_TURBO 6
+
+/* CPU Power Queries */
+#define RTE_POWER_QUERY_FREQ_LIST 7
+#define RTE_POWER_QUERY_FREQ 8
+#define RTE_POWER_QUERY_CAPS_LIST 9
+#define RTE_POWER_QUERY_CAPS 10
+
+/* Generic Power Command Response */
+#define RTE_POWER_CMD_ACK 1
+#define RTE_POWER_CMD_NACK 2
+
+/* CPU Power Query Responses */
+#define RTE_POWER_FREQ_LIST 3
+#define RTE_POWER_CAPS_LIST 4
+
+struct rte_power_traffic_policy {
+ uint32_t min_packet_thresh;
+ uint32_t avg_max_packet_thresh;
+ uint32_t max_max_packet_thresh;
+};
+
+struct rte_power_timer_profile {
+ int busy_hours[RTE_POWER_HOURS_PER_DAY];
+ int quiet_hours[RTE_POWER_HOURS_PER_DAY];
+ int hours_to_use_traffic_profile[RTE_POWER_HOURS_PER_DAY];
+};
+
+enum rte_power_workload_level {
+ RTE_POWER_WL_HIGH,
+ RTE_POWER_WL_MEDIUM,
+ RTE_POWER_WL_LOW
+};
+
+enum rte_power_policy {
+ RTE_POWER_POLICY_TRAFFIC,
+ RTE_POWER_POLICY_TIME,
+ RTE_POWER_POLICY_WORKLOAD,
+ RTE_POWER_POLICY_BRANCH_RATIO
+};
+
+struct rte_power_turbo_status {
+ bool tbEnabled;
+};
+
+struct rte_power_channel_packet {
+ uint64_t resource_id; /**< core_num, device */
+ uint32_t unit; /**< scale down/up/min/max */
+ uint32_t command; /**< Power, IO, etc */
+ char vm_name[RTE_POWER_VM_MAX_NAME_SZ];
+
+ uint64_t vfid[RTE_POWER_MAX_VFS];
+ int nb_mac_to_monitor;
+ struct rte_power_traffic_policy traffic_policy;
+ uint8_t vcpu_to_control[RTE_POWER_MAX_VCPU_PER_VM];
+ uint8_t num_vcpu;
+ struct rte_power_timer_profile timer_policy;
+ bool core_type;
+ enum rte_power_workload_level workload;
+ enum rte_power_policy policy_to_use;
+ struct rte_power_turbo_status t_boost_status;
+};
+
+struct rte_power_channel_packet_freq_list {
+ uint64_t resource_id; /**< core_num, device */
+ uint32_t unit; /**< scale down/up/min/max */
+ uint32_t command; /**< Power, IO, etc */
+ char vm_name[RTE_POWER_VM_MAX_NAME_SZ];
+
+ uint32_t freq_list[RTE_POWER_MAX_VCPU_PER_VM];
+ uint8_t num_vcpu;
+};
+
+struct rte_power_channel_packet_caps_list {
+ uint64_t resource_id; /**< core_num, device */
+ uint32_t unit; /**< scale down/up/min/max */
+ uint32_t command; /**< Power, IO, etc */
+ char vm_name[RTE_POWER_VM_MAX_NAME_SZ];
+
+ uint64_t turbo[RTE_POWER_MAX_VCPU_PER_VM];
+ uint64_t priority[RTE_POWER_MAX_VCPU_PER_VM];
+ uint8_t num_vcpu;
+};
+
+/**
+ * Send a message contained in pkt over the Virtio-Serial to the host endpoint.
+ *
+ * @param pkt
+ * Pointer to a populated struct channel_packet
+ *
+ * @param lcore_id
+ * lcore_id.
+ *
+ * @return
+ * - 0 on success.
+ * - Negative on error.
+ */
+int rte_power_guest_channel_send_msg(struct rte_power_channel_packet *pkt,
+ unsigned int lcore_id);
+
+/**
+ * Receive a message contained in pkt over the Virtio-Serial
+ * from the host endpoint.
+ *
+ * @param pkt
+ * Pointer to channel_packet or
+ * channel_packet_freq_list struct.
+ *
+ * @param pkt_len
+ * Size of expected data packet.
+ *
+ * @param lcore_id
+ * lcore_id.
+ *
+ * @return
+ * - 0 on success.
+ * - Negative on error.
+ */
+__rte_experimental
+int
+rte_power_guest_channel_receive_msg(void *pkt,
+ size_t pkt_len,
+ unsigned int lcore_id);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif