Lines Matching full:addr

8  * @defgroup addr Network Address
20 * #include <netlink/addr.h>
30 #include <netlink/addr.h>
38 static inline uint16_t dn_ntohs(uint16_t addr) in dn_ntohs() argument
44 .word = addr, in dn_ntohs()
50 static inline int do_digit(char *str, uint16_t *addr, uint16_t scale, in do_digit() argument
53 uint16_t tmp = *addr / scale; in do_digit()
62 *addr -= (tmp * scale); in do_digit()
71 uint16_t addr = dn_ntohs(*(uint16_t *)addrbuf); in dnet_ntop() local
72 uint16_t area = addr >> 10; in dnet_ntop()
79 addr &= 0x03ff; in dnet_ntop()
97 if (do_digit(str + pos, &addr, 1000, &pos, len, &started)) in dnet_ntop()
100 if (do_digit(str + pos, &addr, 100, &pos, len, &started)) in dnet_ntop()
103 if (do_digit(str + pos, &addr, 10, &pos, len, &started)) in dnet_ntop()
106 if (do_digit(str + pos, &addr, 1, &pos, len, &started)) in dnet_ntop()
156 static void addr_destroy(struct nl_addr *addr) in addr_destroy() argument
158 if (!addr) in addr_destroy()
161 if (addr->a_refcnt != 1) in addr_destroy()
164 free(addr); in addr_destroy()
187 struct nl_addr *addr; in nl_addr_alloc() local
189 addr = calloc(1, sizeof(*addr) + maxsize); in nl_addr_alloc()
190 if (!addr) in nl_addr_alloc()
193 addr->a_refcnt = 1; in nl_addr_alloc()
194 addr->a_maxsize = maxsize; in nl_addr_alloc()
196 return addr; in nl_addr_alloc()
218 struct nl_addr *addr; in nl_addr_build() local
220 addr = nl_addr_alloc(size); in nl_addr_build()
221 if (!addr) in nl_addr_build()
224 addr->a_family = family; in nl_addr_build()
225 addr->a_len = size; in nl_addr_build()
228 addr->a_prefixlen = 20; /* MPLS address is a 20-bit label */ in nl_addr_build()
231 addr->a_prefixlen = size*8; in nl_addr_build()
235 memcpy(addr->a_addr, buf, size); in nl_addr_build()
237 return addr; in nl_addr_build()
301 struct nl_addr *addr = NULL; /* gcc ain't that smart */ in nl_addr_parse() local
448 addr = nl_addr_alloc(len); in nl_addr_parse()
449 if (!addr) { in nl_addr_parse()
454 nl_addr_set_family(addr, family); in nl_addr_parse()
457 nl_addr_set_binary_addr(addr, buf, len); in nl_addr_parse()
459 addr->a_len = len; in nl_addr_parse()
465 addr_destroy(addr); in nl_addr_parse()
469 nl_addr_set_prefixlen(addr, pl); in nl_addr_parse()
473 nl_addr_set_prefixlen(addr, plen); in nl_addr_parse()
475 *result = addr; in nl_addr_parse()
485 * @arg addr Abstract address object
495 struct nl_addr *nl_addr_clone(const struct nl_addr *addr) in nl_addr_clone() argument
499 new = nl_addr_build(addr->a_family, addr->a_addr, addr->a_len); in nl_addr_clone()
501 new->a_prefixlen = addr->a_prefixlen; in nl_addr_clone()
515 * @arg addr Abstract address
525 struct nl_addr *nl_addr_get(struct nl_addr *addr) in nl_addr_get() argument
527 addr->a_refcnt++; in nl_addr_get()
529 return addr; in nl_addr_get()
534 * @arg addr Abstract addr
541 void nl_addr_put(struct nl_addr *addr) in nl_addr_put() argument
543 if (!addr) in nl_addr_put()
546 if (addr->a_refcnt == 1) in nl_addr_put()
547 addr_destroy(addr); in nl_addr_put()
549 addr->a_refcnt--; in nl_addr_put()
554 * @arg addr Abstract address object.
558 int nl_addr_shared(const struct nl_addr *addr) in nl_addr_shared() argument
560 return addr->a_refcnt > 1; in nl_addr_shared()
648 * @arg addr Abstract address
652 int nl_addr_iszero(const struct nl_addr *addr) in nl_addr_iszero() argument
656 for (i = 0; i < addr->a_len; i++) in nl_addr_iszero()
657 if (addr->a_addr[i]) in nl_addr_iszero()
665 * @arg addr Address represented as character string.
671 int nl_addr_valid(const char *addr, int family) in nl_addr_valid() argument
679 ret = inet_pton(family, addr, buf); in nl_addr_valid()
685 ret = mpls_pton(family, addr, buf, sizeof(buf)); in nl_addr_valid()
691 ret = dnet_pton(addr, buf); in nl_addr_valid()
697 if (sscanf(addr, "%*02x:%*02x:%*02x:%*02x:%*02x:%*02x") != 6) in nl_addr_valid()
707 * @arg addr Abstract address object.
711 int nl_addr_guess_family(const struct nl_addr *addr) in nl_addr_guess_family() argument
713 switch (addr->a_len) { in nl_addr_guess_family()
727 * @arg addr Abstract address object.
738 int nl_addr_fill_sockaddr(const struct nl_addr *addr, struct sockaddr *sa, in nl_addr_fill_sockaddr() argument
741 switch (addr->a_family) { in nl_addr_fill_sockaddr()
748 if (addr->a_len == 4) in nl_addr_fill_sockaddr()
749 memcpy(&sai->sin_addr, addr->a_addr, 4); in nl_addr_fill_sockaddr()
750 else if (addr->a_len != 0) in nl_addr_fill_sockaddr()
755 sai->sin_family = addr->a_family; in nl_addr_fill_sockaddr()
766 if (addr->a_len == 16) in nl_addr_fill_sockaddr()
767 memcpy(&sa6->sin6_addr, addr->a_addr, 16); in nl_addr_fill_sockaddr()
768 else if (addr->a_len != 0) in nl_addr_fill_sockaddr()
773 sa6->sin6_family = addr->a_family; in nl_addr_fill_sockaddr()
795 * @arg addr Abstract address object.
806 int nl_addr_info(const struct nl_addr *addr, struct addrinfo **result) in nl_addr_info() argument
812 .ai_family = addr->a_family, in nl_addr_info()
815 nl_addr2str(addr, buf, sizeof(buf)); in nl_addr_info()
839 * @arg addr Abstract address object.
850 int nl_addr_resolve(const struct nl_addr *addr, char *host, size_t hostlen) in nl_addr_resolve() argument
856 err = nl_addr_fill_sockaddr(addr, (struct sockaddr *) &buf, &salen); in nl_addr_resolve()
877 * @arg addr Abstract address object
882 void nl_addr_set_family(struct nl_addr *addr, int family) in nl_addr_set_family() argument
884 addr->a_family = family; in nl_addr_set_family()
889 * @arg addr Abstract address object
895 int nl_addr_get_family(const struct nl_addr *addr) in nl_addr_get_family() argument
897 return addr->a_family; in nl_addr_get_family()
902 * @arg addr Abstract address object.
920 int nl_addr_set_binary_addr(struct nl_addr *addr, const void *buf, size_t len) in nl_addr_set_binary_addr() argument
922 if (len > addr->a_maxsize) in nl_addr_set_binary_addr()
925 addr->a_len = len; in nl_addr_set_binary_addr()
926 memset(addr->a_addr, 0, addr->a_maxsize); in nl_addr_set_binary_addr()
929 memcpy(addr->a_addr, buf, len); in nl_addr_set_binary_addr()
936 * @arg addr Abstract address object.
943 void *nl_addr_get_binary_addr(const struct nl_addr *addr) in nl_addr_get_binary_addr() argument
945 return (void*)addr->a_addr; in nl_addr_get_binary_addr()
950 * @arg addr Abstract address object.
955 unsigned int nl_addr_get_len(const struct nl_addr *addr) in nl_addr_get_len() argument
957 return addr->a_len; in nl_addr_get_len()
962 * @arg addr Abstract address object
967 void nl_addr_set_prefixlen(struct nl_addr *addr, int prefixlen) in nl_addr_set_prefixlen() argument
969 addr->a_prefixlen = prefixlen; in nl_addr_set_prefixlen()
974 * @arg addr Abstract address object
978 unsigned int nl_addr_get_prefixlen(const struct nl_addr *addr) in nl_addr_get_prefixlen() argument
980 return addr->a_prefixlen; in nl_addr_get_prefixlen()
992 * @arg addr Abstract address object.
1001 char *nl_addr2str(const struct nl_addr *addr, char *buf, size_t size) in nl_addr2str() argument
1006 if (!addr || !addr->a_len) { in nl_addr2str()
1008 if (addr) in nl_addr2str()
1014 switch (addr->a_family) { in nl_addr2str()
1016 inet_ntop(AF_INET, addr->a_addr, buf, size); in nl_addr2str()
1020 inet_ntop(AF_INET6, addr->a_addr, buf, size); in nl_addr2str()
1024 mpls_ntop(AF_MPLS, addr->a_addr, buf, size); in nl_addr2str()
1028 dnet_ntop(addr->a_addr, addr->a_len, buf, size); in nl_addr2str()
1034 (unsigned char) addr->a_addr[0]); in nl_addr2str()
1035 for (i = 1; i < addr->a_len; i++) { in nl_addr2str()
1037 (unsigned char) addr->a_addr[i]); in nl_addr2str()
1044 if (addr->a_family != AF_MPLS && in nl_addr2str()
1045 (unsigned)addr->a_prefixlen != (8u * ((size_t)addr->a_len))) { in nl_addr2str()
1046 snprintf(tmp, sizeof(tmp), "/%d", addr->a_prefixlen); in nl_addr2str()