summaryrefslogtreecommitdiff
path: root/src/tools/irm/irm_ipcp_connect.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/irm/irm_ipcp_connect.c')
-rw-r--r--src/tools/irm/irm_ipcp_connect.c76
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;
}