Lines Matching full:addr

22  * struct rtnl_addr *addr = rtnl_addr_alloc();
27 * rtnl_addr_set_ifindex(addr, ifindex);
28 * rtnl_addr_set_local(addr, local_addr);
32 * rtnl_addr_set_label(addr, "mylabel");
38 * rtnl_addr_set_peer(addr, peer_addr);
43 * rtnl_addr_set_scope(addr, rtnl_str2scope("site"));
48 * rtnl_addr_set_broadcast(addr, broadcast_addr);
54 * rtnl_addr_add(sk, addr, 0);
57 * rtnl_addr_put(addr);
65 * struct rtnl_addr *addr = rtnl_addr_alloc();
71 * rtnl_addr_set_ifindex(addr, ifindex);
75 * rtnl_addr_set_family(addr, AF_INET);
79 * rtnl_addr_set_local(addr, local_addr);
83 * rtnl_addr_set_label(addr, "mylabel");
89 * rtnl_addr_set_peer(addr, peer_addr);
95 * rtnl_addr_delete(sk, addr, 0);
98 * rtnl_addr_put(addr);
107 #include <netlink/route/addr.h>
172 struct rtnl_addr *addr = nl_object_priv(obj); in addr_constructor() local
174 addr->a_scope = RT_SCOPE_NOWHERE; in addr_constructor()
179 struct rtnl_addr *addr = nl_object_priv(obj); in addr_free_data() local
181 if (!addr) in addr_free_data()
184 nl_addr_put(addr->a_peer); in addr_free_data()
185 nl_addr_put(addr->a_local); in addr_free_data()
186 nl_addr_put(addr->a_bcast); in addr_free_data()
187 nl_addr_put(addr->a_multicast); in addr_free_data()
188 nl_addr_put(addr->a_anycast); in addr_free_data()
189 rtnl_link_put(addr->a_link); in addr_free_data()
241 struct rtnl_addr *addr; in addr_msg_parser() local
248 addr = rtnl_addr_alloc(); in addr_msg_parser()
249 if (!addr) in addr_msg_parser()
252 addr->ce_msgtype = nlh->nlmsg_type; in addr_msg_parser()
259 addr->a_family = family = ifa->ifa_family; in addr_msg_parser()
260 addr->a_prefixlen = ifa->ifa_prefixlen; in addr_msg_parser()
261 addr->a_scope = ifa->ifa_scope; in addr_msg_parser()
262 addr->a_flags = tb[IFA_FLAGS] ? nla_get_u32(tb[IFA_FLAGS]) : in addr_msg_parser()
264 addr->a_ifindex = ifa->ifa_index; in addr_msg_parser()
266 addr->ce_mask = (ADDR_ATTR_FAMILY | ADDR_ATTR_PREFIXLEN | in addr_msg_parser()
270 nla_strlcpy(addr->a_label, tb[IFA_LABEL], IFNAMSIZ); in addr_msg_parser()
271 addr->ce_mask |= ADDR_ATTR_LABEL; in addr_msg_parser()
279 addr->a_cacheinfo.aci_prefered = ca->ifa_prefered; in addr_msg_parser()
280 addr->a_cacheinfo.aci_valid = ca->ifa_valid; in addr_msg_parser()
281 addr->a_cacheinfo.aci_cstamp = ca->cstamp; in addr_msg_parser()
282 addr->a_cacheinfo.aci_tstamp = ca->tstamp; in addr_msg_parser()
283 addr->ce_mask |= ADDR_ATTR_CACHEINFO; in addr_msg_parser()
292 addr->a_local = nl_addr_alloc_attr(tb[IFA_LOCAL], family); in addr_msg_parser()
294 addr->a_local = nl_addr_build(family, &null, sizeof (null)); in addr_msg_parser()
295 if (!addr->a_local) in addr_msg_parser()
297 addr->ce_mask |= ADDR_ATTR_LOCAL; in addr_msg_parser()
300 addr->a_peer = nl_addr_alloc_attr(tb[IFA_ADDRESS], family); in addr_msg_parser()
302 addr->a_peer = nl_addr_build(family, &null, sizeof (null)); in addr_msg_parser()
303 if (!addr->a_peer) in addr_msg_parser()
306 if (!nl_addr_cmp (addr->a_local, addr->a_peer)) { in addr_msg_parser()
313 nl_addr_put(addr->a_peer); in addr_msg_parser()
314 addr->a_peer = NULL; in addr_msg_parser()
316 addr->ce_mask |= ADDR_ATTR_PEER; in addr_msg_parser()
318 plen_addr = addr->a_local; in addr_msg_parser()
321 addr->a_local = nl_addr_alloc_attr(tb[IFA_LOCAL], family); in addr_msg_parser()
322 if (!addr->a_local) in addr_msg_parser()
324 addr->ce_mask |= ADDR_ATTR_LOCAL; in addr_msg_parser()
325 plen_addr = addr->a_local; in addr_msg_parser()
338 if (!tb[IFA_LOCAL] || !nl_addr_cmp(a, addr->a_local)) { in addr_msg_parser()
339 nl_addr_put(addr->a_local); in addr_msg_parser()
340 addr->a_local = a; in addr_msg_parser()
341 addr->ce_mask |= ADDR_ATTR_LOCAL; in addr_msg_parser()
343 addr->a_peer = a; in addr_msg_parser()
344 addr->ce_mask |= ADDR_ATTR_PEER; in addr_msg_parser()
352 nl_addr_set_prefixlen(plen_addr, addr->a_prefixlen); in addr_msg_parser()
356 addr->a_bcast = nl_addr_alloc_attr(tb[IFA_BROADCAST], family); in addr_msg_parser()
357 if (!addr->a_bcast) in addr_msg_parser()
360 addr->ce_mask |= ADDR_ATTR_BROADCAST; in addr_msg_parser()
365 addr->a_multicast = nl_addr_alloc_attr(tb[IFA_MULTICAST], in addr_msg_parser()
367 if (!addr->a_multicast) in addr_msg_parser()
370 addr->ce_mask |= ADDR_ATTR_MULTICAST; in addr_msg_parser()
375 addr->a_anycast = nl_addr_alloc_attr(tb[IFA_ANYCAST], in addr_msg_parser()
377 if (!addr->a_anycast) in addr_msg_parser()
380 addr->ce_mask |= ADDR_ATTR_ANYCAST; in addr_msg_parser()
386 if ((link = rtnl_link_get(link_cache, addr->a_ifindex))) { in addr_msg_parser()
387 rtnl_addr_set_link(addr, link); in addr_msg_parser()
394 err = pp->pp_cb((struct nl_object *) addr, pp); in addr_msg_parser()
396 rtnl_addr_put(addr); in addr_msg_parser()
412 struct rtnl_addr *addr = (struct rtnl_addr *) obj; in addr_dump_line() local
418 if (addr->ce_mask & ADDR_ATTR_LOCAL) in addr_dump_line()
420 nl_addr2str(addr->a_local, buf, sizeof(buf))); in addr_dump_line()
424 if (addr->ce_mask & ADDR_ATTR_PEER) in addr_dump_line()
426 nl_addr2str(addr->a_peer, buf, sizeof(buf))); in addr_dump_line()
428 nl_dump(p, " %s ", nl_af2str(addr->a_family, buf, sizeof(buf))); in addr_dump_line()
432 rtnl_link_i2name(link_cache, addr->a_ifindex, in addr_dump_line()
435 nl_dump(p, "dev %d ", addr->a_ifindex); in addr_dump_line()
438 rtnl_scope2str(addr->a_scope, buf, sizeof(buf))); in addr_dump_line()
440 rtnl_addr_flags2str(addr->a_flags, buf, sizeof(buf)); in addr_dump_line()
452 struct rtnl_addr *addr = (struct rtnl_addr *) obj; in addr_dump_details() local
457 if (addr->ce_mask & (ADDR_ATTR_LABEL | ADDR_ATTR_BROADCAST | in addr_dump_details()
461 if (addr->ce_mask & ADDR_ATTR_LABEL) in addr_dump_details()
462 nl_dump(p, " label %s", addr->a_label); in addr_dump_details()
464 if (addr->ce_mask & ADDR_ATTR_BROADCAST) in addr_dump_details()
466 nl_addr2str(addr->a_bcast, buf, sizeof(buf))); in addr_dump_details()
468 if (addr->ce_mask & ADDR_ATTR_MULTICAST) in addr_dump_details()
470 nl_addr2str(addr->a_multicast, buf, in addr_dump_details()
473 if (addr->ce_mask & ADDR_ATTR_ANYCAST) in addr_dump_details()
475 nl_addr2str(addr->a_anycast, buf, in addr_dump_details()
481 if (addr->ce_mask & ADDR_ATTR_CACHEINFO) { in addr_dump_details()
482 struct rtnl_addr_cacheinfo *ci = &addr->a_cacheinfo; in addr_dump_details()
495 nl_msec2str(addr->a_cacheinfo.aci_cstamp * 10, in addr_dump_details()
499 nl_msec2str(addr->a_cacheinfo.aci_tstamp * 10, in addr_dump_details()
511 struct rtnl_addr *addr = (struct rtnl_addr *)obj; in addr_id_attrs_get() local
514 switch (addr->a_family) { in addr_id_attrs_get()
518 if (addr->a_peer) in addr_id_attrs_get()
605 void rtnl_addr_put(struct rtnl_addr *addr) in rtnl_addr_put() argument
607 nl_object_put((struct nl_object *) addr); in rtnl_addr_put()
626 * @arg addr Local address part
637 struct nl_addr *addr) in rtnl_addr_get() argument
649 !nl_addr_cmp(a->a_local, addr)) { in rtnl_addr_get()
742 * @arg addr Address object representing the new address.
762 int rtnl_addr_build_add_request(struct rtnl_addr *addr, int flags, in rtnl_addr_build_add_request() argument
768 if ((addr->ce_mask & required) != required) in rtnl_addr_build_add_request()
771 return build_addr_msg(addr, RTM_NEWADDR, NLM_F_CREATE | flags, result); in rtnl_addr_build_add_request()
777 * @arg addr Address object representing the new address.
788 int rtnl_addr_add(struct nl_sock *sk, struct rtnl_addr *addr, int flags) in rtnl_addr_add() argument
793 if ((err = rtnl_addr_build_add_request(addr, flags, &msg)) < 0) in rtnl_addr_add()
813 * @arg addr Address object to be deleteted.
835 int rtnl_addr_build_delete_request(struct rtnl_addr *addr, int flags, in rtnl_addr_build_delete_request() argument
840 if ((addr->ce_mask & required) != required) in rtnl_addr_build_delete_request()
843 return build_addr_msg(addr, RTM_DELADDR, flags, result); in rtnl_addr_build_delete_request()
849 * @arg addr Address object to be deleted.
860 int rtnl_addr_delete(struct nl_sock *sk, struct rtnl_addr *addr, int flags) in rtnl_addr_delete() argument
865 if ((err = rtnl_addr_build_delete_request(addr, flags, &msg)) < 0) in rtnl_addr_delete()
883 int rtnl_addr_set_label(struct rtnl_addr *addr, const char *label) in rtnl_addr_set_label() argument
885 if (strlen(label) > sizeof(addr->a_label) - 1) in rtnl_addr_set_label()
888 strcpy(addr->a_label, label); in rtnl_addr_set_label()
889 addr->ce_mask |= ADDR_ATTR_LABEL; in rtnl_addr_set_label()
894 char *rtnl_addr_get_label(struct rtnl_addr *addr) in rtnl_addr_get_label() argument
896 if (addr->ce_mask & ADDR_ATTR_LABEL) in rtnl_addr_get_label()
897 return addr->a_label; in rtnl_addr_get_label()
902 void rtnl_addr_set_ifindex(struct rtnl_addr *addr, int ifindex) in rtnl_addr_set_ifindex() argument
904 addr->a_ifindex = ifindex; in rtnl_addr_set_ifindex()
905 addr->ce_mask |= ADDR_ATTR_IFINDEX; in rtnl_addr_set_ifindex()
908 int rtnl_addr_get_ifindex(struct rtnl_addr *addr) in rtnl_addr_get_ifindex() argument
910 return addr->a_ifindex; in rtnl_addr_get_ifindex()
913 void rtnl_addr_set_link(struct rtnl_addr *addr, struct rtnl_link *link) in rtnl_addr_set_link() argument
915 rtnl_link_put(addr->a_link); in rtnl_addr_set_link()
921 addr->a_link = link; in rtnl_addr_set_link()
922 addr->a_ifindex = link->l_index; in rtnl_addr_set_link()
923 addr->ce_mask |= ADDR_ATTR_IFINDEX; in rtnl_addr_set_link()
926 struct rtnl_link *rtnl_addr_get_link(struct rtnl_addr *addr) in rtnl_addr_get_link() argument
928 if (addr->a_link) { in rtnl_addr_get_link()
929 nl_object_get(OBJ_CAST(addr->a_link)); in rtnl_addr_get_link()
930 return addr->a_link; in rtnl_addr_get_link()
936 void rtnl_addr_set_family(struct rtnl_addr *addr, int family) in rtnl_addr_set_family() argument
938 addr->a_family = family; in rtnl_addr_set_family()
939 addr->ce_mask |= ADDR_ATTR_FAMILY; in rtnl_addr_set_family()
942 int rtnl_addr_get_family(struct rtnl_addr *addr) in rtnl_addr_get_family() argument
944 return addr->a_family; in rtnl_addr_get_family()
949 * @arg addr Address
963 void rtnl_addr_set_prefixlen(struct rtnl_addr *addr, int prefixlen) in rtnl_addr_set_prefixlen() argument
965 addr->a_prefixlen = prefixlen; in rtnl_addr_set_prefixlen()
968 addr->ce_mask |= ADDR_ATTR_PREFIXLEN; in rtnl_addr_set_prefixlen()
970 addr->ce_mask &= ~ADDR_ATTR_PREFIXLEN; in rtnl_addr_set_prefixlen()
976 if (addr->a_peer) in rtnl_addr_set_prefixlen()
977 nl_addr_set_prefixlen(addr->a_peer, prefixlen); in rtnl_addr_set_prefixlen()
978 else if (addr->a_local) in rtnl_addr_set_prefixlen()
979 nl_addr_set_prefixlen(addr->a_local, prefixlen); in rtnl_addr_set_prefixlen()
982 int rtnl_addr_get_prefixlen(struct rtnl_addr *addr) in rtnl_addr_get_prefixlen() argument
984 return addr->a_prefixlen; in rtnl_addr_get_prefixlen()
987 void rtnl_addr_set_scope(struct rtnl_addr *addr, int scope) in rtnl_addr_set_scope() argument
989 addr->a_scope = scope; in rtnl_addr_set_scope()
990 addr->ce_mask |= ADDR_ATTR_SCOPE; in rtnl_addr_set_scope()
993 int rtnl_addr_get_scope(struct rtnl_addr *addr) in rtnl_addr_get_scope() argument
995 return addr->a_scope; in rtnl_addr_get_scope()
998 void rtnl_addr_set_flags(struct rtnl_addr *addr, unsigned int flags) in rtnl_addr_set_flags() argument
1000 addr->a_flag_mask |= flags; in rtnl_addr_set_flags()
1001 addr->a_flags |= flags; in rtnl_addr_set_flags()
1002 addr->ce_mask |= ADDR_ATTR_FLAGS; in rtnl_addr_set_flags()
1005 void rtnl_addr_unset_flags(struct rtnl_addr *addr, unsigned int flags) in rtnl_addr_unset_flags() argument
1007 addr->a_flag_mask |= flags; in rtnl_addr_unset_flags()
1008 addr->a_flags &= ~flags; in rtnl_addr_unset_flags()
1009 addr->ce_mask |= ADDR_ATTR_FLAGS; in rtnl_addr_unset_flags()
1012 unsigned int rtnl_addr_get_flags(struct rtnl_addr *addr) in rtnl_addr_get_flags() argument
1014 return addr->a_flags; in rtnl_addr_get_flags()
1017 static inline int __assign_addr(struct rtnl_addr *addr, struct nl_addr **pos, in __assign_addr() argument
1021 if (addr->ce_mask & ADDR_ATTR_FAMILY) { in __assign_addr()
1022 if (new->a_family != addr->a_family) in __assign_addr()
1025 addr->a_family = new->a_family; in __assign_addr()
1031 addr->ce_mask |= (flag | ADDR_ATTR_FAMILY); in __assign_addr()
1037 addr->ce_mask &= ~flag; in __assign_addr()
1043 int rtnl_addr_set_local(struct rtnl_addr *addr, struct nl_addr *local) in rtnl_addr_set_local() argument
1048 if ((addr->ce_mask & ADDR_ATTR_PEER) && local && in rtnl_addr_set_local()
1052 err = __assign_addr(addr, &addr->a_local, local, ADDR_ATTR_LOCAL); in rtnl_addr_set_local()
1057 if (!(addr->ce_mask & ADDR_ATTR_PEER)) in rtnl_addr_set_local()
1058 rtnl_addr_set_prefixlen(addr, local ? nl_addr_get_prefixlen(local) : 0); in rtnl_addr_set_local()
1063 struct nl_addr *rtnl_addr_get_local(struct rtnl_addr *addr) in rtnl_addr_get_local() argument
1065 return addr->a_local; in rtnl_addr_get_local()
1068 int rtnl_addr_set_peer(struct rtnl_addr *addr, struct nl_addr *peer) in rtnl_addr_set_peer() argument
1075 err = __assign_addr(addr, &addr->a_peer, peer, ADDR_ATTR_PEER); in rtnl_addr_set_peer()
1079 rtnl_addr_set_prefixlen(addr, peer ? nl_addr_get_prefixlen(peer) : 0); in rtnl_addr_set_peer()
1084 struct nl_addr *rtnl_addr_get_peer(struct rtnl_addr *addr) in rtnl_addr_get_peer() argument
1086 return addr->a_peer; in rtnl_addr_get_peer()
1089 int rtnl_addr_set_broadcast(struct rtnl_addr *addr, struct nl_addr *bcast) in rtnl_addr_set_broadcast() argument
1094 return __assign_addr(addr, &addr->a_bcast, bcast, ADDR_ATTR_BROADCAST); in rtnl_addr_set_broadcast()
1097 struct nl_addr *rtnl_addr_get_broadcast(struct rtnl_addr *addr) in rtnl_addr_get_broadcast() argument
1099 return addr->a_bcast; in rtnl_addr_get_broadcast()
1102 int rtnl_addr_set_multicast(struct rtnl_addr *addr, struct nl_addr *multicast) in rtnl_addr_set_multicast() argument
1107 return __assign_addr(addr, &addr->a_multicast, multicast, in rtnl_addr_set_multicast()
1111 struct nl_addr *rtnl_addr_get_multicast(struct rtnl_addr *addr) in rtnl_addr_get_multicast() argument
1113 return addr->a_multicast; in rtnl_addr_get_multicast()
1116 int rtnl_addr_set_anycast(struct rtnl_addr *addr, struct nl_addr *anycast) in rtnl_addr_set_anycast() argument
1121 return __assign_addr(addr, &addr->a_anycast, anycast, in rtnl_addr_set_anycast()
1125 struct nl_addr *rtnl_addr_get_anycast(struct rtnl_addr *addr) in rtnl_addr_get_anycast() argument
1127 return addr->a_anycast; in rtnl_addr_get_anycast()
1130 uint32_t rtnl_addr_get_valid_lifetime(struct rtnl_addr *addr) in rtnl_addr_get_valid_lifetime() argument
1132 if (addr->ce_mask & ADDR_ATTR_CACHEINFO) in rtnl_addr_get_valid_lifetime()
1133 return addr->a_cacheinfo.aci_valid; in rtnl_addr_get_valid_lifetime()
1138 void rtnl_addr_set_valid_lifetime(struct rtnl_addr *addr, uint32_t lifetime) in rtnl_addr_set_valid_lifetime() argument
1140 addr->a_cacheinfo.aci_valid = lifetime; in rtnl_addr_set_valid_lifetime()
1141 addr->ce_mask |= ADDR_ATTR_CACHEINFO; in rtnl_addr_set_valid_lifetime()
1144 uint32_t rtnl_addr_get_preferred_lifetime(struct rtnl_addr *addr) in rtnl_addr_get_preferred_lifetime() argument
1146 if (addr->ce_mask & ADDR_ATTR_CACHEINFO) in rtnl_addr_get_preferred_lifetime()
1147 return addr->a_cacheinfo.aci_prefered; in rtnl_addr_get_preferred_lifetime()
1152 void rtnl_addr_set_preferred_lifetime(struct rtnl_addr *addr, uint32_t lifetime) in rtnl_addr_set_preferred_lifetime() argument
1154 addr->a_cacheinfo.aci_prefered = lifetime; in rtnl_addr_set_preferred_lifetime()
1155 addr->ce_mask |= ADDR_ATTR_CACHEINFO; in rtnl_addr_set_preferred_lifetime()
1158 uint32_t rtnl_addr_get_create_time(struct rtnl_addr *addr) in rtnl_addr_get_create_time() argument
1160 return addr->a_cacheinfo.aci_cstamp; in rtnl_addr_get_create_time()
1163 uint32_t rtnl_addr_get_last_update_time(struct rtnl_addr *addr) in rtnl_addr_get_last_update_time() argument
1165 return addr->a_cacheinfo.aci_tstamp; in rtnl_addr_get_last_update_time()
1202 .oo_name = "route/addr",
1226 .co_name = "route/addr",