From 619502f7178fef30e726ba57b5a49b61c1c1a276 Mon Sep 17 00:00:00 2001 From: Dimitri Staessens Date: Fri, 19 Oct 2018 11:38:54 +0200 Subject: tools: Specify QoS cube for data transfer flows The ipcp connect command can now set a specific qos cube for data transfer flows. For management flows, the tool ignores this and defaults to raw until data flows are stable enough. Signed-off-by: Dimitri Staessens Signed-off-by: Sander Vrijders --- src/tools/irm/irm_ipcp_connect.c | 42 +++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) (limited to 'src/tools/irm') diff --git a/src/tools/irm/irm_ipcp_connect.c b/src/tools/irm/irm_ipcp_connect.c index 0b377dce..9fab5245 100644 --- a/src/tools/irm/irm_ipcp_connect.c +++ b/src/tools/irm/irm_ipcp_connect.c @@ -37,6 +37,7 @@ */ #include +#include #include "irm_ops.h" #include "irm_utils.h" @@ -53,21 +54,26 @@ static void usage(void) printf("Usage: irm ipcp connect\n" " name \n" " dst \n" - " [component [COMPONENT]]\n\n" - "where COMPONENT = {" DT " " MGMT "}\n"); + " [component [COMPONENT]]\n" + "where COMPONENT = {" DT " " MGMT "}\n\n" + "if COMPONENT == " DT "\n" + " [qos [QOS]\n" + "where QOS = {raw, best, voice, video, data}\n\n"); } int do_connect_ipcp(int argc, char ** argv) { - char * ipcp = NULL; - char * dst = NULL; - char * comp = "*"; + char * ipcp = NULL; + char * dst = NULL; + char * comp = "*"; char * component = NULL; + char * qos = NULL; struct ipcp_info * ipcps; - ssize_t len = 0; - pid_t pid = -1; + ssize_t len = 0; + pid_t pid = -1; ssize_t i; + qosspec_t qs = qos_raw; while (argc > 0) { if (matches(*argv, "name") == 0) { @@ -76,6 +82,8 @@ int do_connect_ipcp(int argc, dst = *(argv + 1); } else if (matches(*argv, "component") == 0) { comp = *(argv + 1); + } else if (matches(*argv, "qos") == 0) { + qos = *(argv + 1); } else { printf("\"%s\" is unknown, try \"irm " "ipcp connect\".\n", *argv); @@ -91,6 +99,21 @@ int do_connect_ipcp(int argc, return -1; } + if (qos != NULL) { + if (strcmp(qos, "best") == 0) + qs = qos_best_effort; + else if (strcmp(qos, "raw") == 0) + qs = qos_raw; + else if (strcmp(qos, "video") == 0) + qs = qos_video; + else if (strcmp(qos, "voice") == 0) + qs = qos_voice; + else if (strcmp(qos, "data") == 0) + qs = qos_data; + else + printf("Unknown QoS cube, defaulting to raw.\n"); + } + len = irm_list_ipcps(&ipcps); for (i = 0; i < len; i++) if (strcmp(ipcps[i].name, ipcp) == 0) @@ -103,13 +126,14 @@ int do_connect_ipcp(int argc, if (wildcard_match(comp, MGMT) == 0) { component = MGMT_COMP; - if (irm_connect_ipcp(pid, dst, component)) + /* FIXME: move to qos_data when stable */ + if (irm_connect_ipcp(pid, dst, component, qos_raw)) return -1; } if (wildcard_match(comp, DT) == 0) { component = DT_COMP; - if (irm_connect_ipcp(pid, dst, component)) + if (irm_connect_ipcp(pid, dst, component, qs)) return -1; } -- cgit v1.2.3