neighbour: support for NTF_EXT_LEARNED flag
This patch extends NTF_EXT_LEARNED support to the neighbour system. Example use-case: An Ethernet VPN implementation (eg in FRR routing suite) can use this flag to add dynamic reachable external neigh entires learned via control plane. The use of neigh NTF_EXT_LEARNED in this patch is consistent with its use with bridge and vxlan fdb entries. Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
0aef78aa7b
commit
9ce33e4653
@@ -820,7 +820,8 @@ static void neigh_periodic_work(struct work_struct *work)
|
||||
write_lock(&n->lock);
|
||||
|
||||
state = n->nud_state;
|
||||
if (state & (NUD_PERMANENT | NUD_IN_TIMER)) {
|
||||
if ((state & (NUD_PERMANENT | NUD_IN_TIMER)) ||
|
||||
(n->flags & NTF_EXT_LEARNED)) {
|
||||
write_unlock(&n->lock);
|
||||
goto next_elt;
|
||||
}
|
||||
@@ -1136,6 +1137,8 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
|
||||
if (neigh->dead)
|
||||
goto out;
|
||||
|
||||
neigh_update_ext_learned(neigh, flags, ¬ify);
|
||||
|
||||
if (!(new & NUD_VALID)) {
|
||||
neigh_del_timer(neigh);
|
||||
if (old & NUD_CONNECTED)
|
||||
@@ -1781,6 +1784,9 @@ static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
flags &= ~NEIGH_UPDATE_F_OVERRIDE;
|
||||
}
|
||||
|
||||
if (ndm->ndm_flags & NTF_EXT_LEARNED)
|
||||
flags |= NEIGH_UPDATE_F_EXT_LEARNED;
|
||||
|
||||
if (ndm->ndm_flags & NTF_USE) {
|
||||
neigh_event_send(neigh, NULL);
|
||||
err = 0;
|
||||
|
Reference in New Issue
Block a user