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.c42
1 files changed, 33 insertions, 9 deletions
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 <ouroboros/irm.h>
+#include <ouroboros/qos.h>
#include "irm_ops.h"
#include "irm_utils.h"
@@ -53,21 +54,26 @@ static void usage(void)
printf("Usage: irm ipcp connect\n"
" name <ipcp name>\n"
" dst <name of destination IPCP>\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;
}