]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
add address family to/from string helper functions.
authorEric W. Biederman <ebiederm@xmission.com>
Sun, 15 Mar 2015 19:50:03 +0000 (14:50 -0500)
committerStephen Hemminger <shemming@brocade.com>
Tue, 24 Mar 2015 22:45:23 +0000 (15:45 -0700)
Add the functions family_name and read_family to convert an address
family to a string and to convernt a string to an address family.

Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
include/utils.h
ip/ip.c
lib/utils.c

index f9a7e32dea9dd20fa1c848f8681e0fc145fd7ba1..79c1da19188d4295e25ff60d40753f2780c46772 100644 (file)
@@ -109,6 +109,9 @@ extern const char *format_host(int af, int len, const void *addr,
 extern const char *rt_addr_n2a(int af, int len, const void *addr,
                               char *buf, int buflen);
 
+extern int read_family(const char *name);
+extern const char *family_name(int family);
+
 void missarg(const char *) __attribute__((noreturn));
 void invarg(const char *, const char *) __attribute__((noreturn));
 void duparg(const char *, const char *) __attribute__((noreturn));
diff --git a/ip/ip.c b/ip/ip.c
index da16b15f8b557ebedd6e4799255df43f7a229f10..85256d8ea0c11cf845a7f4667949bcfe2cbb1e08 100644 (file)
--- a/ip/ip.c
+++ b/ip/ip.c
@@ -190,21 +190,11 @@ int main(int argc, char **argv)
                        argv++;
                        if (argc <= 1)
                                usage();
-                       if (strcmp(argv[1], "inet") == 0)
-                               preferred_family = AF_INET;
-                       else if (strcmp(argv[1], "inet6") == 0)
-                               preferred_family = AF_INET6;
-                       else if (strcmp(argv[1], "dnet") == 0)
-                               preferred_family = AF_DECnet;
-                       else if (strcmp(argv[1], "link") == 0)
-                               preferred_family = AF_PACKET;
-                       else if (strcmp(argv[1], "ipx") == 0)
-                               preferred_family = AF_IPX;
-                       else if (strcmp(argv[1], "bridge") == 0)
-                               preferred_family = AF_BRIDGE;
-                       else if (strcmp(argv[1], "help") == 0)
+                       if (strcmp(argv[1], "help") == 0)
                                usage();
                        else
+                               preferred_family = read_family(argv[1]);
+                       if (preferred_family == AF_UNSPEC)
                                invarg("invalid protocol family", argv[1]);
                } else if (strcmp(opt, "-4") == 0) {
                        preferred_family = AF_INET;
index df570cb38f2e6db2e32137940ea975bb44d4e2e3..8aee3980ffc93088c27ea58f7ea7c3b5605436e0 100644 (file)
@@ -666,6 +666,41 @@ const char *rt_addr_n2a(int af, int len, const void *addr, char *buf, int buflen
        }
 }
 
+int read_family(const char *name)
+{
+       int family = AF_UNSPEC;
+       if (strcmp(name, "inet") == 0)
+               family = AF_INET;
+       else if (strcmp(name, "inet6") == 0)
+               family = AF_INET6;
+       else if (strcmp(name, "dnet") == 0)
+               family = AF_DECnet;
+       else if (strcmp(name, "link") == 0)
+               family = AF_PACKET;
+       else if (strcmp(name, "ipx") == 0)
+               family = AF_IPX;
+       else if (strcmp(name, "bridge") == 0)
+               family = AF_BRIDGE;
+       return family;
+}
+
+const char *family_name(int family)
+{
+       if (family == AF_INET)
+               return "inet";
+       if (family == AF_INET6)
+               return "inet6";
+       if (family == AF_DECnet)
+               return "dnet";
+       if (family == AF_PACKET)
+               return "link";
+       if (family == AF_IPX)
+               return "ipx";
+       if (family == AF_BRIDGE)
+               return "bridge";
+       return "???";
+}
+
 #ifdef RESOLVE_HOSTNAMES
 struct namerec
 {