diff options
Diffstat (limited to 'src/tools/irm/irm_ipcp_connect.c')
| -rw-r--r-- | src/tools/irm/irm_ipcp_connect.c | 76 |
1 files changed, 52 insertions, 24 deletions
diff --git a/src/tools/irm/irm_ipcp_connect.c b/src/tools/irm/irm_ipcp_connect.c index 42c07354..68e13bd0 100644 --- a/src/tools/irm/irm_ipcp_connect.c +++ b/src/tools/irm/irm_ipcp_connect.c @@ -1,10 +1,10 @@ /* - * Ouroboros - Copyright (C) 2016 - 2018 + * Ouroboros - Copyright (C) 2016 - 2024 * - * Connect components of normal IPC Processes + * Connect components of unicast or broadcast IPC processes * - * Dimitri Staessens <dimitri.staessens@ugent.be> - * Sander Vrijders <sander.vrijders@ugent.be> + * Dimitri Staessens <dimitri@ouroboros.rocks> + * Sander Vrijders <sander@ouroboros.rocks> * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -37,6 +37,7 @@ */ #include <ouroboros/irm.h> +#include <ouroboros/qos.h> #include "irm_ops.h" #include "irm_utils.h" @@ -45,28 +46,34 @@ #include <stdlib.h> #include <string.h> -#define DT "dt" -#define MGMT "mgmt" +#define DT "dt" +#define MGMT "mgmt" static void usage(void) { printf("Usage: irm ipcp connect\n" " name <ipcp name>\n" - " component [COMPONENT]\n" - " dst <name of destination IPCP>\n\n" - "where COMPONENT = {" DT " " MGMT "}\n"); + " dst <name of destination IPCP>\n" + " [component [COMPONENT]]\n" + "where COMPONENT in {" DT " " MGMT "}\n\n" + "if COMPONENT == " DT "\n" + " [qos [QOS]\n" + "where QOS in {raw, best, voice, video, data}\n"); } int do_connect_ipcp(int argc, char ** argv) { - char * ipcp = NULL; - char * dst = NULL; - char * comp = NULL; - struct ipcp_info * ipcps; - ssize_t len = 0; - pid_t pid = -1; - ssize_t i; + char * ipcp = NULL; + char * dst = NULL; + char * comp = "*"; + char * component = NULL; + char * qos = NULL; + struct ipcp_list_info * ipcps; + ssize_t len = 0; + pid_t pid = -1; + ssize_t i; + qosspec_t qs = qos_raw; while (argc > 0) { if (matches(*argv, "name") == 0) { @@ -75,9 +82,11 @@ 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 " - "ipcpi connect\".\n", *argv); + "ipcp connect\".\n", *argv); return -1; } @@ -90,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) @@ -100,14 +124,18 @@ int do_connect_ipcp(int argc, if (pid == -1) return -1; - if (!strcmp(comp, DT)) - comp = DT_COMP; - - if (!strcmp(comp , MGMT)) - comp = MGMT_COMP; + if (wildcard_match(comp, MGMT) == 0) { + component = MGMT_COMP; + /* FIXME: move to qos_data when stable */ + if (irm_connect_ipcp(pid, dst, component, qos_raw)) + return -1; + } - if (irm_connect_ipcp(pid, dst, comp)) - return -1; + if (wildcard_match(comp, DT) == 0) { + component = DT_COMP; + if (irm_connect_ipcp(pid, dst, component, qs)) + return -1; + } return 0; } |
