examples/guest_cli: add send policy to host

Here we're adding an example of setting up a policy, and allowing the
vm_cli_guest app to send it to the host using the cli command
"send_policy now"

Signed-off-by: Nemanja Marjanovic <nemanja.marjanovic@intel.com>
Signed-off-by: Rory Sexton <rory.sexton@intel.com>
Signed-off-by: David Hunt <david.hunt@intel.com>
Reviewed-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
This commit is contained in:
Rory Sexton 2017-10-11 17:18:54 +01:00 committed by Ferruh Yigit
parent db0dc9b32a
commit 88a81aa43b
2 changed files with 97 additions and 6 deletions

View File

@ -45,8 +45,10 @@
#include <cmdline.h>
#include <rte_log.h>
#include <rte_lcore.h>
#include <rte_ethdev.h>
#include <rte_power.h>
#include <guest_channel.h>
#include "vm_power_cli_guest.h"
@ -139,8 +141,103 @@ cmdline_parse_inst_t cmd_set_cpu_freq_set = {
},
};
struct cmd_send_policy_result {
cmdline_fixed_string_t send_policy;
cmdline_fixed_string_t cmd;
};
union PFID {
struct ether_addr addr;
uint64_t pfid;
};
static inline int
send_policy(void)
{
struct channel_packet pkt;
int ret;
union PFID pfid;
/* Use port MAC address as the vfid */
rte_eth_macaddr_get(0, &pfid.addr);
printf("Port %u MAC: %02" PRIx8 ":%02" PRIx8 ":%02" PRIx8 ":"
"%02" PRIx8 ":%02" PRIx8 ":%02" PRIx8 "\n",
1,
pfid.addr.addr_bytes[0], pfid.addr.addr_bytes[1],
pfid.addr.addr_bytes[2], pfid.addr.addr_bytes[3],
pfid.addr.addr_bytes[4], pfid.addr.addr_bytes[5]);
pkt.vfid[0] = pfid.pfid;
pkt.nb_mac_to_monitor = 1;
pkt.t_boost_status.tbEnabled = false;
pkt.vcpu_to_control[0] = 0;
pkt.vcpu_to_control[1] = 1;
pkt.num_vcpu = 2;
/* Dummy Population. */
pkt.traffic_policy.min_packet_thresh = 96000;
pkt.traffic_policy.avg_max_packet_thresh = 1800000;
pkt.traffic_policy.max_max_packet_thresh = 2000000;
pkt.timer_policy.busy_hours[0] = 3;
pkt.timer_policy.busy_hours[1] = 4;
pkt.timer_policy.busy_hours[2] = 5;
pkt.timer_policy.quiet_hours[0] = 11;
pkt.timer_policy.quiet_hours[1] = 12;
pkt.timer_policy.quiet_hours[2] = 13;
pkt.timer_policy.hours_to_use_traffic_profile[0] = 8;
pkt.timer_policy.hours_to_use_traffic_profile[1] = 10;
pkt.workload = LOW;
pkt.policy_to_use = TIME;
pkt.command = PKT_POLICY;
strcpy(pkt.vm_name, "ubuntu2");
ret = rte_power_guest_channel_send_msg(&pkt, 1);
if (ret == 0)
return 1;
RTE_LOG(DEBUG, POWER, "Error sending message: %s\n",
ret > 0 ? strerror(ret) : "channel not connected");
return -1;
}
static void
cmd_send_policy_parsed(void *parsed_result, struct cmdline *cl,
__attribute__((unused)) void *data)
{
int ret = -1;
struct cmd_send_policy_result *res = parsed_result;
if (!strcmp(res->cmd, "now")) {
printf("Sending Policy down now!\n");
ret = send_policy();
}
if (ret != 1)
cmdline_printf(cl, "Error sending message: %s\n",
strerror(ret));
}
cmdline_parse_token_string_t cmd_send_policy =
TOKEN_STRING_INITIALIZER(struct cmd_send_policy_result,
send_policy, "send_policy");
cmdline_parse_token_string_t cmd_send_policy_cmd_cmd =
TOKEN_STRING_INITIALIZER(struct cmd_send_policy_result,
cmd, "now");
cmdline_parse_inst_t cmd_send_policy_set = {
.f = cmd_send_policy_parsed,
.data = NULL,
.help_str = "send_policy now",
.tokens = {
(void *)&cmd_send_policy,
(void *)&cmd_send_policy_cmd_cmd,
NULL,
},
};
cmdline_parse_ctx_t main_ctx[] = {
(cmdline_parse_inst_t *)&cmd_quit,
(cmdline_parse_inst_t *)&cmd_send_policy_set,
(cmdline_parse_inst_t *)&cmd_set_cpu_freq_set,
NULL,
};

View File

@ -40,12 +40,6 @@ extern "C" {
#include "channel_commands.h"
int guest_channel_host_connect(unsigned lcore_id);
int guest_channel_send_msg(struct channel_packet *pkt, unsigned lcore_id);
void guest_channel_host_disconnect(unsigned lcore_id);
void run_cli(__attribute__((unused)) void *arg);
#ifdef __cplusplus