Home | History | Annotate | Download | only in lib

Lines Matching refs:addr

2  * lib/addr.c		Network Address
14 * @defgroup addr Network Address
26 * #include <netlink/addr.h>
33 #include <netlink/addr.h>
38 static inline uint16_t dn_ntohs(uint16_t addr)
44 .word = addr,
50 static inline int do_digit(char *str, uint16_t *addr, uint16_t scale,
53 uint16_t tmp = *addr / scale;
62 *addr -= (tmp * scale);
71 uint16_t addr = dn_ntohs(*(uint16_t *)addrbuf);
72 uint16_t area = addr >> 10;
79 addr &= 0x03ff;
97 if (do_digit(str + pos, &addr, 1000, &pos, len, &started))
100 if (do_digit(str + pos, &addr, 100, &pos, len, &started))
103 if (do_digit(str + pos, &addr, 10, &pos, len, &started))
106 if (do_digit(str + pos, &addr, 1, &pos, len, &started))
156 static void addr_destroy(struct nl_addr *addr)
158 if (!addr)
161 if (addr->a_refcnt != 1)
164 free(addr);
187 struct nl_addr *addr;
189 addr = calloc(1, sizeof(*addr) + maxsize);
190 if (!addr)
193 addr->a_refcnt = 1;
194 addr->a_maxsize = maxsize;
196 return addr;
218 struct nl_addr *addr;
220 addr = nl_addr_alloc(size);
221 if (!addr)
224 addr->a_family = family;
225 addr->a_len = size;
226 addr->a_prefixlen = size*8;
229 memcpy(addr->a_addr, buf, size);
231 return addr;
295 struct nl_addr *addr = NULL; /* gcc ain't that smart */
428 addr = nl_addr_alloc(len);
429 if (!addr) {
434 nl_addr_set_family(addr, family);
437 nl_addr_set_binary_addr(addr, buf, len);
443 addr_destroy(addr);
447 nl_addr_set_prefixlen(addr, pl);
449 nl_addr_set_prefixlen(addr, len * 8);
451 *result = addr;
461 * @arg addr Abstract address object
471 struct nl_addr *nl_addr_clone(struct nl_addr *addr)
475 new = nl_addr_build(addr->a_family, addr->a_addr, addr->a_len);
477 new->a_prefixlen = addr->a_prefixlen;
491 * @arg addr Abstract address
501 struct nl_addr *nl_addr_get(struct nl_addr *addr)
503 addr->a_refcnt++;
505 return addr;
510 * @arg addr Abstract addr
517 void nl_addr_put(struct nl_addr *addr)
519 if (!addr)
522 if (addr->a_refcnt == 1)
523 addr_destroy(addr);
525 addr->a_refcnt--;
530 * @arg addr Abstract address object.
534 int nl_addr_shared(struct nl_addr *addr)
536 return addr->a_refcnt > 1;
616 * @arg addr Abstract address
620 int nl_addr_iszero(struct nl_addr *addr)
624 for (i = 0; i < addr->a_len; i++)
625 if (addr->a_addr[i])
633 * @arg addr Address represented as character string.
639 int nl_addr_valid(char *addr, int family)
647 ret = inet_pton(family, addr, buf);
653 ret = dnet_pton(addr, buf);
659 if (sscanf(addr, "%*02x:%*02x:%*02x:%*02x:%*02x:%*02x") != 6)
669 * @arg addr Abstract address object.
673 int nl_addr_guess_family(struct nl_addr *addr)
675 switch (addr->a_len) {
689 * @arg addr Abstract address object.
700 int nl_addr_fill_sockaddr(struct nl_addr *addr, struct sockaddr *sa,
703 switch (addr->a_family) {
710 sai->sin_family = addr->a_family;
711 memcpy(&sai->sin_addr, addr->a_addr, 4);
722 sa6->sin6_family = addr->a_family;
723 memcpy(&sa6->sin6_addr, addr->a_addr, 16);
745 * @arg addr Abstract address object.
756 int nl_addr_info(struct nl_addr *addr, struct addrinfo **result)
762 .ai_family = addr->a_family,
765 nl_addr2str(addr, buf, sizeof(buf));
789 * @arg addr Abstract address object.
800 int nl_addr_resolve(struct nl_addr *addr, char *host, size_t hostlen)
806 err = nl_addr_fill_sockaddr(addr, (struct sockaddr *) &buf, &salen);
827 * @arg addr Abstract address object
832 void nl_addr_set_family(struct nl_addr *addr, int family)
834 addr->a_family = family;
839 * @arg addr Abstract address object
845 int nl_addr_get_family(struct nl_addr *addr)
847 return addr->a_family;
852 * @arg addr Abstract address object.
870 int nl_addr_set_binary_addr(struct nl_addr *addr, void *buf, size_t len)
872 if (len > addr->a_maxsize)
875 addr->a_len = len;
876 memset(addr->a_addr, 0, addr->a_maxsize);
879 memcpy(addr->a_addr, buf, len);
886 * @arg addr Abstract address object.
893 void *nl_addr_get_binary_addr(struct nl_addr *addr)
895 return addr->a_addr;
900 * @arg addr Abstract address object.
905 unsigned int nl_addr_get_len(struct nl_addr *addr)
907 return addr->a_len;
912 * @arg addr Abstract address object
917 void nl_addr_set_prefixlen(struct nl_addr *addr, int prefixlen)
919 addr->a_prefixlen = prefixlen;
924 * @arg addr Abstract address object
928 unsigned int nl_addr_get_prefixlen(struct nl_addr *addr)
930 return addr->a_prefixlen;
942 * @arg addr Abstract address object.
951 char *nl_addr2str(struct nl_addr *addr, char *buf, size_t size)
956 if (!addr || !addr->a_len) {
958 if (addr)
964 switch (addr->a_family) {
966 inet_ntop(AF_INET, addr->a_addr, buf, size);
970 inet_ntop(AF_INET6, addr->a_addr, buf, size);
974 dnet_ntop(addr->a_addr, addr->a_len, buf, size);
980 (unsigned char) addr->a_addr[0]);
981 for (i = 1; i < addr->a_len; i++) {
983 (unsigned char) addr->a_addr[i]);
990 if (addr->a_prefixlen != (8 * addr->a_len)) {
991 snprintf(tmp, sizeof(tmp), "/%u", addr->a_prefixlen);