diff options
Diffstat (limited to 'src/tools')
| -rw-r--r-- | src/tools/irm/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/tools/irm/irm_ipcp.c | 18 | ||||
| -rw-r--r-- | src/tools/irm/irm_ipcp_connect.c | 94 | ||||
| -rw-r--r-- | src/tools/irm/irm_ipcp_disconnect.c | 94 | ||||
| -rw-r--r-- | src/tools/irm/irm_ops.h | 6 | 
5 files changed, 206 insertions, 8 deletions
| diff --git a/src/tools/irm/CMakeLists.txt b/src/tools/irm/CMakeLists.txt index 300ad982..895bc746 100644 --- a/src/tools/irm/CMakeLists.txt +++ b/src/tools/irm/CMakeLists.txt @@ -14,6 +14,8 @@ set(SOURCE_FILES    irm_ipcp_destroy.c    irm_ipcp_bootstrap.c    irm_ipcp_enroll.c +  irm_ipcp_connect.c +  irm_ipcp_disconnect.c    irm_unbind_ap.c    irm_unbind_api.c    irm_unbind_ipcp.c diff --git a/src/tools/irm/irm_ipcp.c b/src/tools/irm/irm_ipcp.c index 2850ac89..2f7b01c9 100644 --- a/src/tools/irm/irm_ipcp.c +++ b/src/tools/irm/irm_ipcp.c @@ -45,17 +45,19 @@ static const struct cmd {          const char * cmd;          int (* func)(int argc, char ** argv);  } cmds[] = { -        { "create",    do_create_ipcp }, -        { "destroy",   do_destroy_ipcp }, -        { "bootstrap", do_bootstrap_ipcp }, -        { "enroll",    do_enroll_ipcp }, -        { "help",      do_help }, -        { NULL,        NULL } +        { "create",     do_create_ipcp }, +        { "destroy",    do_destroy_ipcp }, +        { "bootstrap",  do_bootstrap_ipcp }, +        { "enroll",     do_enroll_ipcp }, +        { "connect",    do_connect_ipcp }, +        { "disconnect", do_disconnect_ipcp }, +        { "help",       do_help }, +        { NULL,         NULL }  };  static int do_cmd(const char * argv0, -                  int argc, -                  char ** argv) +                  int          argc, +                  char **      argv)  {          const struct cmd * c; diff --git a/src/tools/irm/irm_ipcp_connect.c b/src/tools/irm/irm_ipcp_connect.c new file mode 100644 index 00000000..168c8d17 --- /dev/null +++ b/src/tools/irm/irm_ipcp_connect.c @@ -0,0 +1,94 @@ +/* + * Ouroboros - Copyright (C) 2016 - 2017 + * + * Connect components of normal IPC Processes + * + *    Dimitri Staessens <dimitri.staessens@ugent.be> + *    Sander Vrijders   <sander.vrijders@ugent.be> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., http://www.fsf.org/about/contact/. + */ + +#include <ouroboros/irm.h> + +#include "irm_ops.h" +#include "irm_utils.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#define DT      "dt" +#define MGMT    "mgmt" + +static void usage(void) +{ +        printf("Usage: irm ipcp connect\n" +               "                name <ipcp name>\n" +               "                comp <COMPONENT>\n" +               "                dst  <name of destination IPCP>\n" +               "where COMPONENT = {" DT " " MGMT "},\n\n"); +} + +int do_connect_ipcp(int     argc, +                    char ** argv) +{ +        char *  name      = NULL; +        char *  dst_name  = NULL; +        char *  comp_name = NULL; +        pid_t * apis      = NULL; +        ssize_t len       = 0; + +        while (argc > 0) { +                if (strcmp(*argv, "name") == 0) { +                        name = *(argv + 1); +                } else if (matches(*argv, "dst") == 0) { +                        dst_name = *(argv + 1); +                } else if (matches(*argv, "comp") == 0) { +                        comp_name = *(argv + 1); +                } else { +                        printf("\"%s\" is unknown, try \"irm " +                               "ipcpi connect\".\n", *argv); +                        return -1; +                } + +                argc -= 2; +                argv += 2; +        } + +        if (name == NULL || dst_name == NULL || comp_name == NULL) { +                usage(); +                return -1; +        } + +        len = irm_list_ipcps(name, &apis); +        if (len != 1) +                return -1; + +        if (!strcmp(comp_name, DT)) +                comp_name = DT_AE; + +        if (!strcmp(comp_name , MGMT)) +                comp_name = MGMT_AE; + +        if (irm_connect_ipcp(apis[0], dst_name, comp_name)) { +                free(apis); +                return -1; +        } + +        if (apis != NULL) +                free(apis); + +        return 0; +} diff --git a/src/tools/irm/irm_ipcp_disconnect.c b/src/tools/irm/irm_ipcp_disconnect.c new file mode 100644 index 00000000..8f83f3e8 --- /dev/null +++ b/src/tools/irm/irm_ipcp_disconnect.c @@ -0,0 +1,94 @@ +/* + * Ouroboros - Copyright (C) 2016 - 2017 + * + * Connect components of normal IPC Processes + * + *    Dimitri Staessens <dimitri.staessens@ugent.be> + *    Sander Vrijders   <sander.vrijders@ugent.be> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., http://www.fsf.org/about/contact/. + */ + +#include <ouroboros/irm.h> + +#include "irm_ops.h" +#include "irm_utils.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#define DT      "dt" +#define MGMT    "mgmt" + +static void usage(void) +{ +        printf("Usage: irm ipcp disconnect\n" +               "                name <ipcp name>\n" +               "                comp <COMPONENT>\n" +               "                dst  <name of destination IPCP>\n" +               "where COMPONENT = {" DT " " MGMT "},\n\n"); +} + +int do_disconnect_ipcp(int     argc, +                       char ** argv) +{ +        char *  name      = NULL; +        char *  dst_name  = NULL; +        char *  comp_name = NULL; +        pid_t * apis      = NULL; +        ssize_t len       = 0; + +        while (argc > 0) { +                if (strcmp(*argv, "name") == 0) { +                        name = *(argv + 1); +                } else if (matches(*argv, "dst") == 0) { +                        dst_name = *(argv + 1); +                } else if (matches(*argv, "comp") == 0) { +                        comp_name = *(argv + 1); +                } else { +                        printf("\"%s\" is unknown, try \"irm " +                               "ipcpi connect\".\n", *argv); +                        return -1; +                } + +                argc -= 2; +                argv += 2; +        } + +        if (name == NULL || dst_name == NULL || comp_name == NULL) { +                usage(); +                return -1; +        } + +        len = irm_list_ipcps(name, &apis); +        if (len != 1) +                return -1; + +        if (!strcmp(comp_name, DT)) +                comp_name = DT_AE; + +        if (!strcmp(comp_name , MGMT)) +                comp_name = MGMT_AE; + +        if (irm_disconnect_ipcp(apis[0], dst_name, comp_name)) { +                free(apis); +                return -1; +        } + +        if (apis != NULL) +                free(apis); + +        return 0; +} diff --git a/src/tools/irm/irm_ops.h b/src/tools/irm/irm_ops.h index 749ea13d..a2bc40b4 100644 --- a/src/tools/irm/irm_ops.h +++ b/src/tools/irm/irm_ops.h @@ -35,6 +35,12 @@ int do_bootstrap_ipcp(int     argc,  int do_enroll_ipcp(int     argc,                     char ** argv); +int do_connect_ipcp(int     argc, +                    char ** argv); + +int do_disconnect_ipcp(int     argc, +                       char ** argv); +  int bind_cmd(int     argc,               char ** argv); | 
