diff options
author | Tom Gundersen <teg@jklm.no> | 2013-11-09 22:19:42 +0100 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2013-11-09 23:41:17 +0100 |
commit | f52841825ad01e80465aa662358c57dc7addbb9a (patch) | |
tree | e71c5685c683122d3984541c4f1ee5e2d04f8755 /src/shared | |
parent | b226deba789ba1a0d2cbc742ddc8160b7feb09c4 (diff) |
net-util: add inet address/family parsing
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/net-util.c | 28 | ||||
-rw-r--r-- | src/shared/net-util.h | 2 |
2 files changed, 30 insertions, 0 deletions
diff --git a/src/shared/net-util.c b/src/shared/net-util.c index f853add1ec..2734d119ce 100644 --- a/src/shared/net-util.c +++ b/src/shared/net-util.c @@ -21,6 +21,7 @@ #include <netinet/ether.h> #include <net/if.h> +#include <arpa/inet.h> #include "net-util.h" #include "log.h" @@ -163,3 +164,30 @@ int config_parse_hwaddr(const char *unit, return 0; } + +int net_parse_inaddr(const char *address, unsigned char *family, void *dst) { + int r; + + assert(address); + assert(family); + assert(dst); + + /* IPv4 */ + r = inet_pton(AF_INET, address, dst); + if (r > 0) + *family = AF_INET; /* successfully parsed IPv4 address */ + else if (r < 0) + return -errno; + else { + /* not an IPv4 address, so let's try IPv6 */ + r = inet_pton(AF_INET6, address, dst); + if (r > 0) + *family = AF_INET6; /* successfully parsed IPv6 address */ + else if (r < 0) + return -errno; + else + return -EINVAL; + } + + return 0; +} diff --git a/src/shared/net-util.h b/src/shared/net-util.h index 54981725b0..eac394bffa 100644 --- a/src/shared/net-util.h +++ b/src/shared/net-util.h @@ -42,3 +42,5 @@ int config_parse_hwaddr(const char *unit, const char *filename, unsigned line, int config_parse_ifname(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); + +int net_parse_inaddr(const char *address, unsigned char *family, void *dst); |