Lines Matching defs:neigh

2  * lib/route/neigh.c	Neighbours
14 * @defgroup neigh Neighbours
68 * struct rtnl_neigh *neigh = rtnl_neigh_get(cache, ifindex, dst_addr);
71 * rtnl_neigh_put(neigh);
78 * struct rtnl_neigh *neigh = rtnl_neigh_alloc();
81 * rtnl_neigh_set_ifindex(neigh, ifindex);
82 * rtnl_neigh_set_dst(neigh, dst_addr);
83 * rtnl_neigh_set_state(neigh, rtnl_neigh_str2state("permanent"));
89 * rtnl_neigh_add(sk, neigh, NLM_F_CREATE);
92 * rtnl_neigh_put(neigh);
100 * struct rtnl_neigh *neigh = rtnl_neigh_alloc();
105 * rtnl_neigh_set_ifindex(neigh, ifindex);
106 * rtnl_neigh_set_dst(neigh, dst_addr);
112 * rtnl_neigh_delete(sk, neigh, 0);
115 * rtnl_neigh_put(neigh);
123 * struct rtnl_neigh *neigh = rtnl_neigh_alloc();
127 * rtnl_neigh_set_ifindex(neigh, ifindex);
128 * rtnl_neigh_set_dst(neigh, dst_addr);
132 * rtnl_neigh_set_lladdr(neigh, lladdr);
136 * rtnl_neigh_set_state(neigh, state);
142 * rtnl_neigh_add(sk, neigh, NLM_F_REPLACE);
145 * rtnl_neigh_put(neigh);
174 struct rtnl_neigh *neigh = nl_object_priv(c);
176 if (!neigh)
179 nl_addr_put(neigh->n_lladdr);
180 nl_addr_put(neigh->n_dst);
255 struct rtnl_neigh *neigh;
260 neigh = rtnl_neigh_alloc();
261 if (!neigh) {
266 neigh->ce_msgtype = n->nlmsg_type;
273 neigh->n_family = nm->ndm_family;
274 neigh->n_ifindex = nm->ndm_ifindex;
275 neigh->n_state = nm->ndm_state;
276 neigh->n_flags = nm->ndm_flags;
277 neigh->n_type = nm->ndm_type;
279 neigh->ce_mask |= (NEIGH_ATTR_FAMILY | NEIGH_ATTR_IFINDEX |
284 neigh->n_lladdr = nl_addr_alloc_attr(tb[NDA_LLADDR], AF_UNSPEC);
285 if (!neigh->n_lladdr) {
289 nl_addr_set_family(neigh->n_lladdr,
290 nl_addr_guess_family(neigh->n_lladdr));
291 neigh->ce_mask |= NEIGH_ATTR_LLADDR;
295 neigh->n_dst = nl_addr_alloc_attr(tb[NDA_DST], neigh->n_family);
296 if (!neigh->n_dst) {
300 neigh->ce_mask |= NEIGH_ATTR_DST;
306 neigh->n_cacheinfo.nci_confirmed = ci->ndm_confirmed;
307 neigh->n_cacheinfo.nci_used = ci->ndm_used;
308 neigh->n_cacheinfo.nci_updated = ci->ndm_updated;
309 neigh->n_cacheinfo.nci_refcnt = ci->ndm_refcnt;
311 neigh->ce_mask |= NEIGH_ATTR_CACHEINFO;
315 neigh->n_probes = nla_get_u32(tb[NDA_PROBES]);
316 neigh->ce_mask |= NEIGH_ATTR_PROBES;
319 err = pp->pp_cb((struct nl_object *) neigh, pp);
321 rtnl_neigh_put(neigh);
388 struct rtnl_neigh *neigh = (struct rtnl_neigh *) obj;
392 nl_af2str(neigh->n_family, buf, sizeof(buf)));
394 if (neigh->ce_mask & NEIGH_ATTR_LLADDR)
396 nl_addr2str(neigh->n_lladdr, buf, sizeof(buf)));
398 if (neigh->ce_mask & NEIGH_ATTR_DST)
400 nl_addr2str(neigh->n_dst, buf, sizeof(buf)));
402 if (neigh->ce_mask & NEIGH_ATTR_IFINDEX) {
405 nl_dump_line(p, "NEIGH_IFINDEX=%u\n", neigh->n_ifindex);
411 neigh->n_ifindex,
415 if (neigh->ce_mask & NEIGH_ATTR_PROBES)
416 nl_dump_line(p, "NEIGH_PROBES=%u\n", neigh->n_probes);
418 if (neigh->ce_mask & NEIGH_ATTR_TYPE)
420 nl_rtntype2str(neigh->n_type, buf, sizeof(buf)));
422 rtnl_neigh_flags2str(neigh->n_flags, buf, sizeof(buf));
426 rtnl_neigh_state2str(neigh->n_state, buf, sizeof(buf));
441 void rtnl_neigh_put(struct rtnl_neigh *neigh)
443 nl_object_put((struct nl_object *) neigh);
478 struct rtnl_neigh *neigh;
480 nl_list_for_each_entry(neigh, &cache->c_items, ce_list) {
481 if (neigh->n_ifindex == ifindex &&
482 !nl_addr_cmp(neigh->n_dst, dst)) {
483 nl_object_get((struct nl_object *) neigh);
484 return neigh;
604 * @arg neigh neighbour to delete
611 * or supplemented as needed. \a neigh must point to an existing
616 int rtnl_neigh_build_delete_request(struct rtnl_neigh *neigh, int flags,
619 return build_neigh_msg(neigh, RTM_DELNEIGH, flags, result);
625 * @arg neigh neighbour to delete
634 int rtnl_neigh_delete(struct nl_sock *sk, struct rtnl_neigh *neigh,
640 if ((err = rtnl_neigh_build_delete_request(neigh, flags, &msg)) < 0)
710 void rtnl_neigh_set_state(struct rtnl_neigh *neigh, int state)
712 neigh->n_state_mask |= state;
713 neigh->n_state |= state;
714 neigh->ce_mask |= NEIGH_ATTR_STATE;
717 int rtnl_neigh_get_state(struct rtnl_neigh *neigh)
719 if (neigh->ce_mask & NEIGH_ATTR_STATE)
720 return neigh->n_state;
725 void rtnl_neigh_unset_state(struct rtnl_neigh *neigh, int state)
727 neigh->n_state_mask |= state;
728 neigh->n_state &= ~state;
729 neigh->ce_mask |= NEIGH_ATTR_STATE;
732 void rtnl_neigh_set_flags(struct rtnl_neigh *neigh, unsigned int flags)
734 neigh->n_flag_mask |= flags;
735 neigh->n_flags |= flags;
736 neigh->ce_mask |= NEIGH_ATTR_FLAGS;
739 unsigned int rtnl_neigh_get_flags(struct rtnl_neigh *neigh)
741 return neigh->n_flags;
744 void rtnl_neigh_unset_flags(struct rtnl_neigh *neigh, unsigned int flags)
746 neigh->n_flag_mask |= flags;
747 neigh->n_flags &= ~flags;
748 neigh->ce_mask |= NEIGH_ATTR_FLAGS;
751 void rtnl_neigh_set_ifindex(struct rtnl_neigh *neigh, int ifindex)
753 neigh->n_ifindex = ifindex;
754 neigh->ce_mask |= NEIGH_ATTR_IFINDEX;
757 int rtnl_neigh_get_ifindex(struct rtnl_neigh *neigh)
759 return neigh->n_ifindex;
762 static inline int __assign_addr(struct rtnl_neigh *neigh, struct nl_addr **pos,
766 if (neigh->ce_mask & NEIGH_ATTR_FAMILY) {
767 if (new->a_family != neigh->n_family)
770 neigh->n_family = new->a_family;
771 neigh->ce_mask |= NEIGH_ATTR_FAMILY;
781 neigh->ce_mask |= flag;
786 void rtnl_neigh_set_lladdr(struct rtnl_neigh *neigh, struct nl_addr *addr)
788 __assign_addr(neigh, &neigh->n_lladdr, addr, NEIGH_ATTR_LLADDR, 1);
791 struct nl_addr *rtnl_neigh_get_lladdr(struct rtnl_neigh *neigh)
793 if (neigh->ce_mask & NEIGH_ATTR_LLADDR)
794 return neigh->n_lladdr;
799 int rtnl_neigh_set_dst(struct rtnl_neigh *neigh, struct nl_addr *addr)
801 return __assign_addr(neigh, &neigh->n_dst, addr,
805 struct nl_addr *rtnl_neigh_get_dst(struct rtnl_neigh *neigh)
807 if (neigh->ce_mask & NEIGH_ATTR_DST)
808 return neigh->n_dst;
813 void rtnl_neigh_set_family(struct rtnl_neigh *neigh, int family)
815 neigh->n_family = family;
816 neigh->ce_mask |= NEIGH_ATTR_FAMILY;
819 int rtnl_neigh_get_family(struct rtnl_neigh *neigh)
821 return neigh->n_family;
824 void rtnl_neigh_set_type(struct rtnl_neigh *neigh, int type)
826 neigh->n_type = type;
827 neigh->ce_mask = NEIGH_ATTR_TYPE;
830 int rtnl_neigh_get_type(struct rtnl_neigh *neigh)
832 if (neigh->ce_mask & NEIGH_ATTR_TYPE)
833 return neigh->n_type;
841 .oo_name = "route/neigh",
862 .co_name = "route/neigh",