Changeset 45aa22c in mainline for uspace/app/inetcfg/inetcfg.c


Ignore:
Timestamp:
2012-03-07T23:05:42Z (12 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
a88a6eac
Parents:
0e25780
Message:

Creating static addresses with inetcfg.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/inetcfg/inetcfg.c

    r0e25780 r45aa22c  
    3838#include <errno.h>
    3939#include <inet/inetcfg.h>
     40#include <loc.h>
    4041#include <stdio.h>
    4142#include <str_error.h>
     
    4647static void print_syntax(void)
    4748{
    48         printf("syntax: " NAME " xxx\n");
     49        printf("syntax: " NAME " create <addr>/<width> <link-name> <addr-name>\n");
     50}
     51
     52static int naddr_parse(const char *text, inet_naddr_t *naddr)
     53{
     54        unsigned long a[4], bits;
     55        char *cp = (char *)text;
     56        int i;
     57
     58        for (i = 0; i < 3; i++) {
     59                a[i] = strtoul(cp, &cp, 10);
     60                if (*cp != '.')
     61                        return EINVAL;
     62                ++cp;
     63        }
     64
     65        a[3] = strtoul(cp, &cp, 10);
     66        if (*cp != '/')
     67                return EINVAL;
     68        ++cp;
     69
     70        bits = strtoul(cp, &cp, 10);
     71        if (*cp != '\0')
     72                return EINVAL;
     73
     74        naddr->ipv4 = 0;
     75        for (i = 0; i < 4; i++) {
     76                if (a[i] > 255)
     77                        return EINVAL;
     78                naddr->ipv4 = (naddr->ipv4 << 8) | a[i];
     79        }
     80
     81        if (bits < 1 || bits > 31)
     82                return EINVAL;
     83
     84        naddr->bits = bits;
     85        return EOK;
     86}
     87
     88static int addr_create_static(int argc, char *argv[])
     89{
     90        char *aobj_name;
     91        char *addr_spec;
     92        char *link_name;
     93
     94        inet_naddr_t naddr;
     95        sysarg_t link_id;
     96        sysarg_t addr_id;
     97        int rc;
     98
     99        if (argc < 3) {
     100                printf(NAME ": Missing arguments.\n");
     101                print_syntax();
     102                return EINVAL;
     103        }
     104
     105        if (argc > 3) {
     106                printf(NAME ": Too many arguments.\n");
     107                print_syntax();
     108                return EINVAL;
     109        }
     110
     111        addr_spec = argv[0];
     112        link_name = argv[1];
     113        aobj_name = argv[2];
     114
     115        rc = loc_service_get_id(link_name, &link_id, 0);
     116        if (rc != EOK) {
     117                printf(NAME ": Service '%s' not found (%d).\n", link_name, rc);
     118                return ENOENT;
     119        }
     120
     121        rc = naddr_parse(addr_spec, &naddr);
     122        if (rc != EOK) {
     123                printf(NAME ": Invalid address format '%s'.\n", addr_spec);
     124                return EINVAL;
     125        }
     126
     127        rc = inetcfg_addr_create_static(aobj_name, &naddr, link_id, &addr_id);
     128        if (rc != EOK) {
     129                printf(NAME ": Failed creating static address '%s' (%d)\n",
     130                    "v4s", rc);
     131                return 1;
     132        }
     133
     134        return EOK;
    49135}
    50136
     
    52138{
    53139        int rc;
    54         inet_naddr_t naddr;
    55         sysarg_t addr_id;
    56140
    57         if (argc > 1) {
    58                 printf(NAME ": Invalid argument '%s'.\n", argv[1]);
     141        if (argc < 2) {
     142                printf(NAME ": Missing argument.\n");
    59143                print_syntax();
    60144                return 1;
    61145        }
    62 
    63         printf("initialize\n");
    64146
    65147        rc = inetcfg_init();
     
    70152        }
    71153
    72         printf("sleep\n");
    73         async_usleep(10*1000*1000);
    74         printf("create static addr\n");
    75 
    76         rc = inetcfg_addr_create_static("v4s", &naddr, &addr_id);
    77         if (rc != EOK) {
    78                 printf(NAME ": Failed creating static address '%s' (%d)\n",
    79                     "v4s", rc);
     154        if (str_cmp(argv[1], "create") == 0) {
     155                rc = addr_create_static(argc - 2, argv + 2);
     156                if (rc != EOK)
     157                        return 1;
     158        } else {
     159                printf(NAME ": Unknown command '%s'.\n", argv[1]);
     160                print_syntax();
    80161                return 1;
    81162        }
    82163
    83         printf("Success!\n");
    84164        return 0;
    85165}
Note: See TracChangeset for help on using the changeset viewer.