diff options
Diffstat (limited to 'src/tools')
| -rw-r--r-- | src/tools/irm/irm_ipcp_connect.c | 42 | 
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;          }  | 
