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:
parent
db0dc9b32a
commit
88a81aa43b
@ -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,
|
||||
};
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user