From: Marek Vavrusa Date: Mon, 11 Jan 2016 04:29:00 +0000 (-0800) Subject: lib/utils: added function for addr family X-Git-Tag: v1.0.0-beta3~22^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2629d35f572bc7ebc832a6916a01dfc52bcc6cf3;p=thirdparty%2Fknot-resolver.git lib/utils: added function for addr family the field length is platform-dependent --- diff --git a/daemon/lua/kres.lua b/daemon/lua/kres.lua index 357c1a673..a041c3b70 100644 --- a/daemon/lua/kres.lua +++ b/daemon/lua/kres.lua @@ -254,6 +254,7 @@ int kr_pkt_put(knot_pkt_t *pkt, const knot_dname_t *name, uint32_t ttl, uint16_t rclass, uint16_t rtype, const uint8_t *rdata, uint16_t rdlen); int kr_pkt_recycle(knot_pkt_t *pkt); const char *kr_inaddr(const struct sockaddr *addr); +int kr_inaddr_family(const struct sockaddr *addr); int kr_inaddr_len(const struct sockaddr *addr); int kr_straddr_family(const char *addr); int kr_straddr_subnet(void *dst, const char *addr); @@ -281,6 +282,7 @@ ffi.metatype( sockaddr_t, { __index = { len = function(sa) return C.kr_inaddr_len(sa) end, ip = function (sa) return C.kr_inaddr(sa) end, + family = function (sa) return C.kr_inaddr_family(sa) end, } }) @@ -435,4 +437,4 @@ local kres = { context = function () return ffi.cast('struct kr_context *', __engine) end, } -return kres \ No newline at end of file +return kres diff --git a/lib/utils.c b/lib/utils.c index ff824edcf..00e5d65fe 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -239,6 +239,13 @@ const char *kr_inaddr(const struct sockaddr *addr) } } +int kr_inaddr_family(const struct sockaddr *addr) +{ + if (!addr) + return AF_UNSPEC; + return addr->sa_family; +} + int kr_inaddr_len(const struct sockaddr *addr) { if (!addr) { diff --git a/lib/utils.h b/lib/utils.h index 8690beadc..698bd6e07 100644 --- a/lib/utils.h +++ b/lib/utils.h @@ -111,6 +111,9 @@ int kr_pkt_put(knot_pkt_t *pkt, const knot_dname_t *name, uint32_t ttl, /** Address bytes for given family. */ KR_EXPORT KR_PURE const char *kr_inaddr(const struct sockaddr *addr); +/** Address family. */ +KR_EXPORT KR_PURE +int kr_inaddr_family(const struct sockaddr *addr); /** Address length for given family. */ KR_EXPORT KR_PURE int kr_inaddr_len(const struct sockaddr *addr);