Ignore:
File:
1 edited

Legend:

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

    rbf9e6fc rb8b1adb1  
    11/*
    2  * Copyright (c) 2012 Jiri Svoboda
     2 * Copyright (c) 2013 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3636
    3737#include <errno.h>
     38#include <inet/addr.h>
    3839#include <inet/inetcfg.h>
    3940#include <loc.h>
     
    4344#include <sys/types.h>
    4445
    45 #define NAME "inet"
     46#define NAME  "inet"
    4647
    4748static void print_syntax(void)
     
    5455}
    5556
    56 static int naddr_parse(const char *text, inet_naddr_t *naddr)
    57 {
    58         unsigned long a[4], bits;
    59         char *cp = (char *)text;
    60         int i;
    61 
    62         for (i = 0; i < 3; i++) {
    63                 a[i] = strtoul(cp, &cp, 10);
    64                 if (*cp != '.')
    65                         return EINVAL;
    66                 ++cp;
    67         }
    68 
    69         a[3] = strtoul(cp, &cp, 10);
    70         if (*cp != '/')
    71                 return EINVAL;
    72         ++cp;
    73 
    74         bits = strtoul(cp, &cp, 10);
    75         if (*cp != '\0')
    76                 return EINVAL;
    77 
    78         naddr->ipv4 = 0;
    79         for (i = 0; i < 4; i++) {
    80                 if (a[i] > 255)
    81                         return EINVAL;
    82                 naddr->ipv4 = (naddr->ipv4 << 8) | a[i];
    83         }
    84 
    85         if (bits > 31)
    86                 return EINVAL;
    87 
    88         naddr->bits = bits;
    89         return EOK;
    90 }
    91 
    92 static int addr_parse(const char *text, inet_addr_t *addr)
    93 {
    94         unsigned long a[4];
    95         char *cp = (char *)text;
    96         int i;
    97 
    98         for (i = 0; i < 3; i++) {
    99                 a[i] = strtoul(cp, &cp, 10);
    100                 if (*cp != '.')
    101                         return EINVAL;
    102                 ++cp;
    103         }
    104 
    105         a[3] = strtoul(cp, &cp, 10);
    106         if (*cp != '\0')
    107                 return EINVAL;
    108 
    109         addr->ipv4 = 0;
    110         for (i = 0; i < 4; i++) {
    111                 if (a[i] > 255)
    112                         return EINVAL;
    113                 addr->ipv4 = (addr->ipv4 << 8) | a[i];
    114         }
    115 
    116         return EOK;
    117 }
    118 
    119 static int naddr_format(inet_naddr_t *naddr, char **bufp)
    120 {
    121         int rc;
    122 
    123         rc = asprintf(bufp, "%d.%d.%d.%d/%d", naddr->ipv4 >> 24,
    124             (naddr->ipv4 >> 16) & 0xff, (naddr->ipv4 >> 8) & 0xff,
    125             naddr->ipv4 & 0xff, naddr->bits);
    126 
    127         if (rc < 0)
    128                 return ENOMEM;
    129 
    130         return EOK;
    131 }
    132 
    133 static int addr_format(inet_addr_t *addr, char **bufp)
    134 {
    135         int rc;
    136 
    137         rc = asprintf(bufp, "%d.%d.%d.%d", addr->ipv4 >> 24,
    138             (addr->ipv4 >> 16) & 0xff, (addr->ipv4 >> 8) & 0xff,
    139             addr->ipv4 & 0xff);
    140 
    141         if (rc < 0)
    142                 return ENOMEM;
    143 
    144         return EOK;
    145 }
    146 
    14757static int addr_create_static(int argc, char *argv[])
    14858{
     
    17888        }
    17989
    180         rc = naddr_parse(addr_spec, &naddr);
     90        rc = inet_naddr_parse(addr_spec, &naddr);
    18191        if (rc != EOK) {
    18292                printf(NAME ": Invalid network address format '%s'.\n",
     
    267177        route_name = argv[2];
    268178
    269         rc = naddr_parse(dest_str, &dest);
     179        rc = inet_naddr_parse(dest_str, &dest);
    270180        if (rc != EOK) {
    271181                printf(NAME ": Invalid network address format '%s'.\n",
     
    274184        }
    275185
    276         rc = addr_parse(router_str, &router);
     186        rc = inet_addr_parse(router_str, &router);
    277187        if (rc != EOK) {
    278188                printf(NAME ": Invalid address format '%s'.\n", router_str);
     
    347257        if (count > 0)
    348258                printf("    [Addr/Width] [Link-Name] [Addr-Name] [Def-MTU]\n");
    349         ainfo.name = linfo.name = astr = NULL;
     259        ainfo.name = NULL;
     260        linfo.name = NULL;
     261        astr = NULL;
    350262
    351263        for (i = 0; i < count; i++) {
     
    366278                }
    367279
    368                 rc = naddr_format(&ainfo.naddr, &astr);
     280                rc = inet_naddr_format(&ainfo.naddr, &astr);
    369281                if (rc != EOK) {
    370282                        printf("Memory allocation failed.\n");
     
    380292                free(astr);
    381293
    382                 ainfo.name = linfo.name = astr = NULL;
     294                ainfo.name = NULL;
     295                linfo.name = NULL;
     296                astr = NULL;
    383297        }
    384298
     
    398312}
    399313
     314static int link_list(void)
     315{
     316        sysarg_t *link_list;
     317        inet_link_info_t linfo;
     318
     319        size_t count;
     320        size_t i;
     321        int rc;
     322
     323        rc = inetcfg_get_link_list(&link_list, &count);
     324        if (rc != EOK) {
     325                printf(NAME ": Failed getting link list.\n");
     326                return rc;
     327        }
     328
     329        printf("IP links:\n");
     330        if (count > 0)
     331                printf("    [Link-layer Address] [Link-Name] [Def-MTU]\n");
     332
     333        for (i = 0; i < count; i++) {
     334                rc = inetcfg_link_get(link_list[i], &linfo);
     335                if (rc != EOK) {
     336                        printf("Failed getting properties of link %zu.\n",
     337                            (size_t)link_list[i]);
     338                        continue;
     339                }
     340
     341                printf("    %02x:%02x:%02x:%02x:%02x:%02x %s %zu\n",
     342                    linfo.mac_addr[0], linfo.mac_addr[1],
     343                    linfo.mac_addr[2], linfo.mac_addr[3],
     344                    linfo.mac_addr[4], linfo.mac_addr[5],
     345                    linfo.name, linfo.def_mtu);
     346
     347                free(linfo.name);
     348
     349                linfo.name = NULL;
     350        }
     351
     352        if (count == 0)
     353                printf("    None\n");
     354
     355        free(link_list);
     356
     357        return EOK;
     358}
     359
    400360static int sroute_list(void)
    401361{
     
    419379                printf("    [Dest/Width] [Router-Addr] [Route-Name]\n");
    420380
    421         srinfo.name = dest_str = router_str = NULL;
     381        srinfo.name = NULL;
     382        dest_str = NULL;
     383        router_str = NULL;
    422384
    423385        for (i = 0; i < count; i++) {
     
    430392                }
    431393
    432                 rc = naddr_format(&srinfo.dest, &dest_str);
     394                rc = inet_naddr_format(&srinfo.dest, &dest_str);
    433395                if (rc != EOK) {
    434396                        printf("Memory allocation failed.\n");
     
    437399                }
    438400
    439                 rc = addr_format(&srinfo.router, &router_str);
     401                rc = inet_addr_format(&srinfo.router, &router_str);
    440402                if (rc != EOK) {
    441403                        printf("Memory allocation failed.\n");
     
    450412                free(router_str);
    451413
    452                 router_str = srinfo.name = dest_str = NULL;
     414                router_str = NULL;
     415                srinfo.name = NULL;
     416                dest_str = NULL;
    453417        }
    454418
     
    486450                if (rc != EOK)
    487451                        return 1;
     452                rc = link_list();
     453                if (rc != EOK)
     454                        return 1;
    488455                return 0;
    489456        }
Note: See TracChangeset for help on using the changeset viewer.