diff options
Diffstat (limited to 'src/tools/irm')
| -rw-r--r-- | src/tools/irm/CMakeLists.txt | 6 | ||||
| -rw-r--r-- | src/tools/irm/irm.c | 4 | ||||
| -rw-r--r-- | src/tools/irm/irm_bind.c | 87 | ||||
| -rw-r--r-- | src/tools/irm/irm_bind_ap.c | 98 | ||||
| -rw-r--r-- | src/tools/irm/irm_bind_api.c | 68 | ||||
| -rw-r--r-- | src/tools/irm/irm_ipcp.c | 2 | ||||
| -rw-r--r-- | src/tools/irm/irm_ops.h | 10 | ||||
| -rw-r--r-- | src/tools/irm/irm_unbind.c | 58 | ||||
| -rw-r--r-- | src/tools/irm/irm_unbind_ap.c | 68 | ||||
| -rw-r--r-- | src/tools/irm/irm_unbind_api.c | 69 | 
10 files changed, 390 insertions, 80 deletions
| diff --git a/src/tools/irm/CMakeLists.txt b/src/tools/irm/CMakeLists.txt index 68297615..f59d9af0 100644 --- a/src/tools/irm/CMakeLists.txt +++ b/src/tools/irm/CMakeLists.txt @@ -7,10 +7,16 @@ include_directories(${CMAKE_BINARY_DIR}/include)  set(SOURCE_FILES          # Add source files here          irm.c +        irm_bind_ap.c +        irm_bind_api.c +        irm_bind_ipcp.c          irm_ipcp_create.c          irm_ipcp_destroy.c          irm_ipcp_bootstrap.c          irm_ipcp_enroll.c +        irm_unbind_ap.c +        irm_unbind_api.c +        irm_unbind_ipcp.c          irm_unbind.c          irm_bind.c          irm_ipcp.c diff --git a/src/tools/irm/irm.c b/src/tools/irm/irm.c index 14420207..c260feb9 100644 --- a/src/tools/irm/irm.c +++ b/src/tools/irm/irm.c @@ -46,8 +46,8 @@ static const struct cmd {          int (* func)(int argc, char ** argv);  } cmds[] = {          { "ipcp",            ipcp_cmd }, -        { "bind",            do_bind }, -        { "unbind",          do_unbind }, +        { "bind",            bind_cmd }, +        { "unbind",          unbind_cmd },          { "register",        do_register },          { "unregister",      do_unregister },          { "help",            do_help }, diff --git a/src/tools/irm/irm_bind.c b/src/tools/irm/irm_bind.c index 061aeef5..9b37e800 100644 --- a/src/tools/irm/irm_bind.c +++ b/src/tools/irm/irm_bind.c @@ -1,8 +1,9 @@  /*   * Ouroboros - Copyright (C) 2016   * - * Bind AP to a name + * Bind names in the processing system   * + *    Dimitri Staessens <dimitri.staessens@intec.ugent.be>   *    Sander Vrijders   <sander.vrijders@intec.ugent.be>   *   * This program is free software; you can redistribute it and/or modify @@ -21,75 +22,57 @@   */  #include <stdio.h> -#include <string.h>  #include <ouroboros/irm.h> -#include <ouroboros/errno.h>  #include "irm_ops.h"  #include "irm_utils.h"  static void usage()  { -        printf("Usage: irm bind\n" -               "           name <name>\n" -               "           apn <application process name>\n" -               "           [auto] (instantiate apn if not running)\n" -               "           [unique] (there can only be one instantiation)\n" -               "           [-- <application arguments>]\n"); +        printf("Usage: irm bind [OPERATION]\n" +               "where OPERATION = {ap api ipcp help}\n");  } - -int do_bind(int argc, char ** argv) +static int do_help(int argc, char **argv)  { -        char * name = NULL; -        char * ap_name = NULL; -        uint16_t flags = 0; -        int ret = 0; +        usage(); +        return 0; +} -        while (argc > 0) { -                if (matches(*argv, "name") == 0) { -                        name = *(argv + 1); -                        ++argv; -                        --argc; -                } else if (matches(*argv, "apn") == 0) { -                        ap_name = *(argv + 1); -                        ++argv; -                        --argc; -                } else if (strcmp(*argv, "auto") == 0) { -                        flags |= BIND_AP_AUTO; -                } else if (strcmp(*argv, "unique") == 0) { -                        flags |= BIND_AP_UNIQUE; -                } else if (strcmp(*argv, "--") == 0) { -                        ++argv; -                        --argc; -                        break; -                } else { -                        printf("\"%s\" is unknown, try \"irm " -                               "bind\".\n", *argv); -                        return -1; -                } +static const struct cmd { +        const char * cmd; +        int (* func)(int argc, char ** argv); +} cmds[] = { +        { "ap",   do_bind_ap }, +        { "api",  do_bind_api }, +        { "ipcp", do_bind_ipcp }, +        { "help", do_help }, +        { 0 } +}; -                ++argv; -                --argc; -        } +static int do_cmd(const char * argv0, +                  int argc, +                  char ** argv) +{ +        const struct cmd * c; -        if (name == NULL || ap_name == NULL) { -                usage(); -                return -1; +        for (c = cmds; c->cmd; ++c) { +                if (!matches(argv0, c->cmd)) +                        return c->func(argc, argv);          } -        ret = irm_bind(name, ap_name, flags, argc, argv); -        if (ret == -ENOENT) { -                printf("%s does not exist.\n", ap_name); -                return -1; -        } +        fprintf(stderr, "\"%s\" is unknown, try \"irm bind help\".\n", argv0); + +        return -1; +} -        if (ret == -EPERM) { -                printf("Cannot execute %s, please check permissions.\n", -                        ap_name); +int bind_cmd(int argc, char ** argv) +{ +        if (argc < 1) { +                usage();                  return -1;          } -        return ret; +        return do_cmd(argv[0], argc, argv);  } diff --git a/src/tools/irm/irm_bind_ap.c b/src/tools/irm/irm_bind_ap.c new file mode 100644 index 00000000..a525c077 --- /dev/null +++ b/src/tools/irm/irm_bind_ap.c @@ -0,0 +1,98 @@ +/* + * Ouroboros - Copyright (C) 2016 + * + * Bind AP to a name + * + *    Dimitri Staessens <dimitri.staessens@intec.ugent.be> + *    Sander Vrijders   <sander.vrijders@intec.ugent.be> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <stdio.h> +#include <string.h> + +#include <ouroboros/irm.h> +#include <ouroboros/errno.h> + +#include "irm_ops.h" +#include "irm_utils.h" + +static void usage() +{ +        printf("Usage: irm bind ap <ap>\n" +               "           name <name>\n" +               "           [auto] (instantiate apn if not running)\n" +               "           [loc] (location-dependent application)\n" +               "           [unique] (there can only be one instantiation)\n" +               "           [-- <application arguments>]\n"); +} + + +int do_bind_ap(int argc, char ** argv) +{ +        char * name = NULL; +        char * ap_name = NULL; +        uint16_t flags = 0; +        int ret = 0; + +        while (argc > 0) { +                if (matches(*argv, "name") == 0) { +                        name = *(argv + 1); +                        ++argv; +                        --argc; +                } else if (matches(*argv, "ap") == 0) { +                        ap_name = *(argv + 1); +                        ++argv; +                        --argc; +                } else if (strcmp(*argv, "auto") == 0) { +                        flags |= BIND_AP_AUTO; +                } else if (strcmp(*argv, "unique") == 0) { +                        flags |= BIND_AP_UNIQUE; +                } else if (strcmp(*argv, "loc") == 0) { +                        flags |= BIND_AP_LOC; +                } else if (strcmp(*argv, "--") == 0) { +                        ++argv; +                        --argc; +                        break; +                } else { +                        printf("\"%s\" is unknown, try \"irm " +                               "bind\".\n", *argv); +                        return -1; +                } + +                ++argv; +                --argc; +        } + +        if (name == NULL || ap_name == NULL) { +                usage(); +                return -1; +        } + +        ret = irm_bind_ap(ap_name, name, flags, argc, argv); +        if (ret == -ENOENT) { +                printf("%s does not exist.\n", ap_name); +                return -1; +        } + +        if (ret == -EPERM) { +                printf("Cannot execute %s, please check permissions.\n", +                        ap_name); +                return -1; +        } + +        return ret; +} diff --git a/src/tools/irm/irm_bind_api.c b/src/tools/irm/irm_bind_api.c new file mode 100644 index 00000000..b21d305c --- /dev/null +++ b/src/tools/irm/irm_bind_api.c @@ -0,0 +1,68 @@ +/* + * Ouroboros - Copyright (C) 2016 + * + * Bind AP-I to a name + * + *    Dimitri Staessens <dimitri.staessens@intec.ugent.be> + *    Sander Vrijders   <sander.vrijders@intec.ugent.be> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <stdio.h> +#include <stdlib.h> + +#include <ouroboros/irm.h> +#include <ouroboros/errno.h> + +#include "irm_ops.h" +#include "irm_utils.h" + +static void usage() +{ +        printf("Usage: irm bind api <pid> name <name>\n"); +} + +int do_bind_api(int argc, char ** argv) +{ +        pid_t api = -1; +        char * name = NULL; + +        while (argc > 0) { +                if (matches(*argv, "name") == 0) { +                        name = *(argv + 1); +                        ++argv; +                        --argc; +                } else if (matches(*argv, "api") == 0) { +                        api = strtol(*(argv + 1), NULL, 10); +                        ++argv; +                        --argc; +                } else { +                        printf("\"%s\" is unknown, try \"irm " +                               "bind api\".\n", *argv); +                        return -1; +                } + +                ++argv; +                --argc; +        } + +        if (api < 0 || name == NULL) { +                usage(); +                return -1; +        } + +        return irm_bind_api(api, name); +} diff --git a/src/tools/irm/irm_ipcp.c b/src/tools/irm/irm_ipcp.c index f658ead5..1b523feb 100644 --- a/src/tools/irm/irm_ipcp.c +++ b/src/tools/irm/irm_ipcp.c @@ -29,7 +29,7 @@ static void usage()  {          printf("Usage: irm ipcp [OPERATION]\n\n"                 "where OPERATION = {create destroy\n" -               "                   bootstrap enroll help\n"); +               "                   bootstrap enroll help}\n");  }  static int do_help(int argc, char **argv) diff --git a/src/tools/irm/irm_ops.h b/src/tools/irm/irm_ops.h index 24eee0df..9a59d69a 100644 --- a/src/tools/irm/irm_ops.h +++ b/src/tools/irm/irm_ops.h @@ -26,7 +26,13 @@ int do_destroy_ipcp(int argc, char ** argv);  int do_bootstrap_ipcp(int argc, char ** argv);  int do_enroll_ipcp(int argc, char ** argv); -int do_bind(int argc, char ** argv); -int do_unbind(int argc, char ** argv); +int bind_cmd(int argc, char ** argv); +int do_bind_ap(int argc, char ** argv); +int do_bind_api(int argc, char ** argv); +int do_bind_ipcp(int argc, char ** argv); +int unbind_cmd(int argc, char ** argv); +int do_unbind_ap(int argc, char ** argv); +int do_unbind_api(int argc, char ** argv); +int do_unbind_ipcp(int argc, char ** argv);  int do_register(int argc, char ** argv);  int do_unregister(int argc, char ** argv); diff --git a/src/tools/irm/irm_unbind.c b/src/tools/irm/irm_unbind.c index 9e8f3c9c..0290e678 100644 --- a/src/tools/irm/irm_unbind.c +++ b/src/tools/irm/irm_unbind.c @@ -3,6 +3,7 @@   *   * Unbind names in the processing system   * + *    Dimitri Staessens <dimitri.staessens@intec.ugent.be>   *    Sander Vrijders   <sander.vrijders@intec.ugent.be>   *   * This program is free software; you can redistribute it and/or modify @@ -29,35 +30,46 @@  static void usage()  { -        printf("Usage: irm unbind\n" -               "           name <name>\n" -               "           ap <application process name>\n"); +        printf("Usage: irm unbind [OPERATION]\n" +               "where OPERATION = {ap api ipcp help}\n");  } -int do_unbind(int argc, char ** argv) +static int do_help(int argc, char **argv)  { -        char * name = NULL; -        char * ap_name = NULL; - -        while (argc > 0) { -                if (matches(*argv, "name") == 0) { -                        name = *(argv + 1); -                } else if (matches(*argv, "ap") == 0) { -                        ap_name = *(argv + 1); -                } else { -                        printf("\"%s\" is unknown, try \"irm " -                               "unbind\".\n", *argv); -                        return -1; -                } - -                argc -= 2; -                argv += 2; -        } +        usage(); +        return 0; +} + +static const struct cmd { +        const char * cmd; +        int (* func)(int argc, char ** argv); +} cmds[] = { +        { "ap",   do_unbind_ap }, +        { "api",  do_unbind_api }, +        { "ipcp", do_unbind_ipcp }, +        { "help", do_help }, +        { 0 } +}; + +static int do_cmd(const char * argv0, int argc, char ** argv) +{ +        const struct cmd * c; -        if (name == NULL && ap_name == NULL) { +        for (c = cmds; c->cmd; ++c) +                if (!matches(argv0, c->cmd)) +                        return c->func(argc, argv); + +        fprintf(stderr, "\"%s\" is unknown, try \"irm unbind help\".\n", argv0); + +        return -1; +} + +int unbind_cmd(int argc, char ** argv) +{ +        if (argc < 1) {                  usage();                  return -1;          } -        return irm_unbind(name, ap_name, 0); +        return do_cmd(argv[0], argc, argv);  } diff --git a/src/tools/irm/irm_unbind_ap.c b/src/tools/irm/irm_unbind_ap.c new file mode 100644 index 00000000..bdfcbaad --- /dev/null +++ b/src/tools/irm/irm_unbind_ap.c @@ -0,0 +1,68 @@ +/* + * Ouroboros - Copyright (C) 2016 + * + * Unbind AP names + * + *    Dimitri Staessens <dimitri.staessens@intec.ugent.be> + *    Sander Vrijders <sander.vrijders@intec.ugent.be> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <stdio.h> +#include <stdlib.h> + +#include <ouroboros/irm.h> + +#include "irm_ops.h" +#include "irm_utils.h" + +static void usage() +{ +        printf("Usage: irm unbind ap <ap>\n" +               "          [name <name>, omit: remove all AP info]\n"); +} + +int do_unbind_ap(int argc, char ** argv) +{ +        char * name = NULL; +        char * ap_name = NULL; + +        while (argc > 0) { +                if (matches(*argv, "name") == 0) { +                        name = *(argv + 1); +                        ++argv; +                        --argc; +                } else if (matches(*argv, "ap") == 0) { +                        ap_name = *(argv + 1); +                        ++argv; +                        --argc; +                } else { +                        printf("\"%s\" is unknown, try \"irm " +                               "unbind ap\".\n", *argv); +                        return -1; +                } + +                ++argv; +                --argc; +        } + +        if (ap_name == NULL) { +                usage(); +                return -1; +        } + +        return irm_unbind_ap(ap_name, name); +} diff --git a/src/tools/irm/irm_unbind_api.c b/src/tools/irm/irm_unbind_api.c new file mode 100644 index 00000000..b69a4579 --- /dev/null +++ b/src/tools/irm/irm_unbind_api.c @@ -0,0 +1,69 @@ +/* + * Ouroboros - Copyright (C) 2016 + * + * Unbind AP-I names + * + *    Dimitri Staessens <dimitri.staessens@intec.ugent.be> + *    Sander Vrijders   <sander.vrijders@intec.ugent.be> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> + +#include <ouroboros/irm.h> + +#include "irm_ops.h" +#include "irm_utils.h" + +static void usage() +{ +        printf("Usage: irm unbind api <pid>\n" +               "          [name <name>, omit: remove all AP-I info]\n"); +} + +int do_unbind_api(int argc, char ** argv) +{ +        pid_t api = -1; +        char * name = NULL; + +        while (argc > 0) { +                if (matches(*argv, "name") == 0) { +                        name = *(argv + 1); +                        ++argv; +                        --argc; +                } else if (matches(*argv, "api") == 0) { +                        api = strtol(*(argv + 1), NULL, 10); +                        ++argv; +                        --argc; +                } else { +                        printf("\"%s\" is unknown, try \"irm " +                               "unbind api\".\n", *argv); +                        return -1; +                } + +                ++argv; +                --argc; +        } + +        if (api < 0) { +                usage(); +                return -1; +        } + +        return irm_unbind_api(api, name); +} | 
