Home | History | Annotate | Download | only in route

Lines Matching refs:addr

2  * lib/route/addr.c		Addresses
28 * struct rtnl_addr *addr = rtnl_addr_alloc();
33 * rtnl_addr_set_ifindex(addr, ifindex);
34 * rtnl_addr_set_local(addr, local_addr);
38 * rtnl_addr_set_label(addr, "mylabel");
44 * rtnl_addr_set_peer(addr, peer_addr);
49 * rtnl_addr_set_scope(addr, rtnl_str2scope("site"));
54 * rtnl_addr_set_broadcast(addr, broadcast_addr);
60 * rtnl_addr_add(sk, addr, 0);
63 * rtnl_addr_put(addr);
71 * struct rtnl_addr *addr = rtnl_addr_alloc();
77 * rtnl_addr_set_ifindex(addr, ifindex);
81 * rtnl_addr_set_family(addr, AF_INET);
85 * rtnl_addr_set_local(addr, local_addr);
89 * rtnl_addr_set_label(addr, "mylabel");
95 * rtnl_addr_set_peer(addr, peer_addr);
101 * rtnl_addr_delete(sk, addr, 0);
104 * rtnl_addr_put(addr);
112 #include <netlink/route/addr.h>
137 struct rtnl_addr *addr = nl_object_priv(obj);
139 addr->a_scope = RT_SCOPE_NOWHERE;
144 struct rtnl_addr *addr = nl_object_priv(obj);
146 if (!addr)
149 nl_addr_put(addr->a_peer);
150 nl_addr_put(addr->a_local);
151 nl_addr_put(addr->a_bcast);
152 nl_addr_put(addr->a_multicast);
153 nl_addr_put(addr->a_anycast);
154 rtnl_link_put(addr->a_link);
199 struct rtnl_addr *addr;
206 addr = rtnl_addr_alloc();
207 if (!addr)
210 addr->ce_msgtype = nlh->nlmsg_type;
217 addr->a_family = family = ifa->ifa_family;
218 addr->a_prefixlen = ifa->ifa_prefixlen;
219 addr->a_scope = ifa->ifa_scope;
220 addr->a_flags = tb[IFA_FLAGS] ? nla_get_u32(tb[IFA_FLAGS]) :
222 addr->a_ifindex = ifa->ifa_index;
224 addr->ce_mask = (ADDR_ATTR_FAMILY | ADDR_ATTR_PREFIXLEN |
228 nla_strlcpy(addr->a_label, tb[IFA_LABEL], IFNAMSIZ);
229 addr->ce_mask |= ADDR_ATTR_LABEL;
237 addr->a_cacheinfo.aci_prefered = ca->ifa_prefered;
238 addr->a_cacheinfo.aci_valid = ca->ifa_valid;
239 addr->a_cacheinfo.aci_cstamp = ca->cstamp;
240 addr->a_cacheinfo.aci_tstamp = ca->tstamp;
241 addr->ce_mask |= ADDR_ATTR_CACHEINFO;
245 addr->a_local = nl_addr_alloc_attr(tb[IFA_LOCAL], family);
246 if (!addr->a_local)
248 addr->ce_mask |= ADDR_ATTR_LOCAL;
249 plen_addr = addr->a_local;
262 if (!tb[IFA_LOCAL] || !nl_addr_cmp(a, addr->a_local)) {
263 nl_addr_put(addr->a_local);
264 addr->a_local = a;
265 addr->ce_mask |= ADDR_ATTR_LOCAL;
267 addr->a_peer = a;
268 addr->ce_mask |= ADDR_ATTR_PEER;
275 nl_addr_set_prefixlen(plen_addr, addr->a_prefixlen);
279 addr->a_bcast = nl_addr_alloc_attr(tb[IFA_BROADCAST], family);
280 if (!addr->a_bcast)
283 addr->ce_mask |= ADDR_ATTR_BROADCAST;
288 addr->a_multicast = nl_addr_alloc_attr(tb[IFA_MULTICAST],
290 if (!addr->a_multicast)
293 addr->ce_mask |= ADDR_ATTR_MULTICAST;
298 addr->a_anycast = nl_addr_alloc_attr(tb[IFA_ANYCAST],
300 if (!addr->a_anycast)
303 addr->ce_mask |= ADDR_ATTR_ANYCAST;
309 if ((link = rtnl_link_get(link_cache, addr->a_ifindex))) {
310 rtnl_addr_set_link(addr, link);
317 err = pp->pp_cb((struct nl_object *) addr, pp);
319 rtnl_addr_put(addr);
335 struct rtnl_addr *addr = (struct rtnl_addr *) obj;
341 if (addr->ce_mask & ADDR_ATTR_LOCAL)
343 nl_addr2str(addr->a_local, buf, sizeof(buf)));
347 if (addr->ce_mask & ADDR_ATTR_PEER)
349 nl_addr2str(addr->a_peer, buf, sizeof(buf)));
351 nl_dump(p, " %s ", nl_af2str(addr->a_family, buf, sizeof(buf)));
355 rtnl_link_i2name(link_cache, addr->a_ifindex,
358 nl_dump(p, "dev %d ", addr->a_ifindex);
361 rtnl_scope2str(addr->a_scope, buf, sizeof(buf)));
363 rtnl_addr_flags2str(addr->a_flags, buf, sizeof(buf));
375 struct rtnl_addr *addr = (struct rtnl_addr *) obj;
380 if (addr->ce_mask & (ADDR_ATTR_LABEL | ADDR_ATTR_BROADCAST |
384 if (addr->ce_mask & ADDR_ATTR_LABEL)
385 nl_dump(p, " label %s", addr->a_label);
387 if (addr->ce_mask & ADDR_ATTR_BROADCAST)
389 nl_addr2str(addr->a_bcast, buf, sizeof(buf)));
391 if (addr->ce_mask & ADDR_ATTR_MULTICAST)
393 nl_addr2str(addr->a_multicast, buf,
396 if (addr->ce_mask & ADDR_ATTR_ANYCAST)
398 nl_addr2str(addr->a_anycast, buf,
404 if (addr->ce_mask & ADDR_ATTR_CACHEINFO) {
405 struct rtnl_addr_cacheinfo *ci = &addr->a_cacheinfo;
418 nl_msec2str(addr->a_cacheinfo.aci_cstamp * 10,
422 nl_msec2str(addr->a_cacheinfo.aci_tstamp * 10,
493 void rtnl_addr_put(struct rtnl_addr *addr)
495 nl_object_put((struct nl_object *) addr);
514 * @arg addr Local address part
525 struct nl_addr *addr)
537 !nl_addr_cmp(a->a_local, addr)) {
630 * @arg addr Address object representing the new address.
650 int rtnl_addr_build_add_request(struct rtnl_addr *addr, int flags,
656 if ((addr->ce_mask & required) != required)
659 return build_addr_msg(addr, RTM_NEWADDR, NLM_F_CREATE | flags, result);
665 * @arg addr Address object representing the new address.
676 int rtnl_addr_add(struct nl_sock *sk, struct rtnl_addr *addr, int flags)
681 if ((err = rtnl_addr_build_add_request(addr, flags, &msg)) < 0)
701 * @arg addr Address object to be deleteted.
723 int rtnl_addr_build_delete_request(struct rtnl_addr *addr, int flags,
728 if ((addr->ce_mask & required) != required)
731 return build_addr_msg(addr, RTM_DELADDR, flags, result);
737 * @arg addr Address object to be deleted.
748 int rtnl_addr_delete(struct nl_sock *sk, struct rtnl_addr *addr, int flags)
753 if ((err = rtnl_addr_build_delete_request(addr, flags, &msg)) < 0)
771 int rtnl_addr_set_label(struct rtnl_addr *addr, const char *label)
773 if (strlen(label) > sizeof(addr->a_label) - 1)
776 strcpy(addr->a_label, label);
777 addr->ce_mask |= ADDR_ATTR_LABEL;
782 char *rtnl_addr_get_label(struct rtnl_addr *addr)
784 if (addr->ce_mask & ADDR_ATTR_LABEL)
785 return addr->a_label;
790 void rtnl_addr_set_ifindex(struct rtnl_addr *addr, int ifindex)
792 addr->a_ifindex = ifindex;
793 addr->ce_mask |= ADDR_ATTR_IFINDEX;
796 int rtnl_addr_get_ifindex(struct rtnl_addr *addr)
798 return addr->a_ifindex;
801 void rtnl_addr_set_link(struct rtnl_addr *addr, struct rtnl_link *link)
803 rtnl_link_put(addr->a_link);
809 addr->a_link = link;
810 addr->a_ifindex = link->l_index;
811 addr->ce_mask |= ADDR_ATTR_IFINDEX;
814 struct rtnl_link *rtnl_addr_get_link(struct rtnl_addr *addr)
816 if (addr->a_link) {
817 nl_object_get(OBJ_CAST(addr->a_link));
818 return addr->a_link;
824 void rtnl_addr_set_family(struct rtnl_addr *addr, int family)
826 addr->a_family = family;
827 addr->ce_mask |= ADDR_ATTR_FAMILY;
830 int rtnl_addr_get_family(struct rtnl_addr *addr)
832 return addr->a_family;
837 * @arg addr Address
851 void rtnl_addr_set_prefixlen(struct rtnl_addr *addr, int prefixlen)
853 addr->a_prefixlen = prefixlen;
856 addr->ce_mask |= ADDR_ATTR_PREFIXLEN;
858 addr->ce_mask &= ~ADDR_ATTR_PREFIXLEN;
864 if (addr->a_peer)
865 nl_addr_set_prefixlen(addr->a_peer, prefixlen);
866 else if (addr->a_local)
867 nl_addr_set_prefixlen(addr->a_local, prefixlen);
870 int rtnl_addr_get_prefixlen(struct rtnl_addr *addr)
872 return addr->a_prefixlen;
875 void rtnl_addr_set_scope(struct rtnl_addr *addr, int scope)
877 addr->a_scope = scope;
878 addr->ce_mask |= ADDR_ATTR_SCOPE;
881 int rtnl_addr_get_scope(struct rtnl_addr *addr)
883 return addr->a_scope;
886 void rtnl_addr_set_flags(struct rtnl_addr *addr, unsigned int flags)
888 addr->a_flag_mask |= flags;
889 addr->a_flags |= flags;
890 addr->ce_mask |= ADDR_ATTR_FLAGS;
893 void rtnl_addr_unset_flags(struct rtnl_addr *addr, unsigned int flags)
895 addr->a_flag_mask |= flags;
896 addr->a_flags &= ~flags;
897 addr->ce_mask |= ADDR_ATTR_FLAGS;
900 unsigned int rtnl_addr_get_flags(struct rtnl_addr *addr)
902 return addr->a_flags;
905 static inline int __assign_addr(struct rtnl_addr *addr, struct nl_addr **pos,
909 if (addr->ce_mask & ADDR_ATTR_FAMILY) {
910 if (new->a_family != addr->a_family)
913 addr->a_family = new->a_family;
919 addr->ce_mask |= (flag | ADDR_ATTR_FAMILY);
925 addr->ce_mask &= ~flag;
931 int rtnl_addr_set_local(struct rtnl_addr *addr, struct nl_addr *local)
936 if ((addr->ce_mask & ADDR_ATTR_PEER) && local &&
940 err = __assign_addr(addr, &addr->a_local, local, ADDR_ATTR_LOCAL);
945 if (!(addr->ce_mask & ADDR_ATTR_PEER))
946 rtnl_addr_set_prefixlen(addr, local ? nl_addr_get_prefixlen(local) : 0);
951 struct nl_addr *rtnl_addr_get_local(struct rtnl_addr *addr)
953 return addr->a_local;
956 int rtnl_addr_set_peer(struct rtnl_addr *addr, struct nl_addr *peer)
963 err = __assign_addr(addr, &addr->a_peer, peer, ADDR_ATTR_PEER);
967 rtnl_addr_set_prefixlen(addr, peer ? nl_addr_get_prefixlen(peer) : 0);
972 struct nl_addr *rtnl_addr_get_peer(struct rtnl_addr *addr)
974 return addr->a_peer;
977 int rtnl_addr_set_broadcast(struct rtnl_addr *addr, struct nl_addr *bcast)
982 return __assign_addr(addr, &addr->a_bcast, bcast, ADDR_ATTR_BROADCAST);
985 struct nl_addr *rtnl_addr_get_broadcast(struct rtnl_addr *addr)
987 return addr->a_bcast;
990 int rtnl_addr_set_multicast(struct rtnl_addr *addr, struct nl_addr *multicast)
995 return __assign_addr(addr, &addr->a_multicast, multicast,
999 struct nl_addr *rtnl_addr_get_multicast(struct rtnl_addr *addr)
1001 return addr->a_multicast;
1004 int rtnl_addr_set_anycast(struct rtnl_addr *addr, struct nl_addr *anycast)
1009 return __assign_addr(addr, &addr->a_anycast, anycast,
1013 struct nl_addr *rtnl_addr_get_anycast(struct rtnl_addr *addr)
1015 return addr->a_anycast;
1018 uint32_t rtnl_addr_get_valid_lifetime(struct rtnl_addr *addr)
1020 if (addr->ce_mask & ADDR_ATTR_CACHEINFO)
1021 return addr->a_cacheinfo.aci_valid;
1026 void rtnl_addr_set_valid_lifetime(struct rtnl_addr *addr, uint32_t lifetime)
1028 addr->a_cacheinfo.aci_valid = lifetime;
1029 addr->ce_mask |= ADDR_ATTR_CACHEINFO;
1032 uint32_t rtnl_addr_get_preferred_lifetime(struct rtnl_addr *addr)
1034 if (addr->ce_mask & ADDR_ATTR_CACHEINFO)
1035 return addr->a_cacheinfo.aci_prefered;
1040 void rtnl_addr_set_preferred_lifetime(struct rtnl_addr *addr, uint32_t lifetime)
1042 addr->a_cacheinfo.aci_prefered = lifetime;
1043 addr->ce_mask |= ADDR_ATTR_CACHEINFO;
1046 uint32_t rtnl_addr_get_create_time(struct rtnl_addr *addr)
1048 return addr->a_cacheinfo.aci_cstamp;
1051 uint32_t rtnl_addr_get_last_update_time(struct rtnl_addr *addr)
1053 return addr->a_cacheinfo.aci_tstamp;
1089 .oo_name = "route/addr",
1112 .co_name = "route/addr",