examples/guest_cli: add send policy to host
authorRory Sexton <rory.sexton@intel.com>
Wed, 11 Oct 2017 16:18:54 +0000 (17:18 +0100)
committerFerruh Yigit <ferruh.yigit@intel.com>
Wed, 11 Oct 2017 23:46:50 +0000 (00:46 +0100)
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>
examples/vm_power_manager/guest_cli/vm_power_cli_guest.c
examples/vm_power_manager/guest_cli/vm_power_cli_guest.h

index 4e982bd..dc9efc2 100644 (file)
 #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,
 };
index 0c4bdd5..277eab3 100644 (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