mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-05 17:03:47 -04:00
Merge branch 'few-NTF_ROUTER-related-updates'
Roopa Prabhu says: ==================== few NTF_ROUTER related updates This series allows setting of NTF_ROUTER by an external entity (eg BGP E-VPN control plane). Also fixes missing netlink notification on neigh NTF_ROUTER flag changes. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -544,4 +544,19 @@ static inline void neigh_update_ext_learned(struct neighbour *neigh, u32 flags,
|
||||
*notify = 1;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void neigh_update_is_router(struct neighbour *neigh, u32 flags,
|
||||
int *notify)
|
||||
{
|
||||
u8 ndm_flags = 0;
|
||||
|
||||
ndm_flags |= (flags & NEIGH_UPDATE_F_ISROUTER) ? NTF_ROUTER : 0;
|
||||
if ((neigh->flags ^ ndm_flags) & NTF_ROUTER) {
|
||||
if (ndm_flags & NTF_ROUTER)
|
||||
neigh->flags |= NTF_ROUTER;
|
||||
else
|
||||
neigh->flags &= ~NTF_ROUTER;
|
||||
*notify = 1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1280,11 +1280,8 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
|
||||
neigh->arp_queue_len_bytes = 0;
|
||||
}
|
||||
out:
|
||||
if (update_isrouter) {
|
||||
neigh->flags = (flags & NEIGH_UPDATE_F_ISROUTER) ?
|
||||
(neigh->flags | NTF_ROUTER) :
|
||||
(neigh->flags & ~NTF_ROUTER);
|
||||
}
|
||||
if (update_isrouter)
|
||||
neigh_update_is_router(neigh, flags, ¬ify);
|
||||
write_unlock_bh(&neigh->lock);
|
||||
|
||||
if (notify)
|
||||
@@ -1712,7 +1709,8 @@ static int neigh_delete(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
int flags = NEIGH_UPDATE_F_ADMIN | NEIGH_UPDATE_F_OVERRIDE;
|
||||
int flags = NEIGH_UPDATE_F_ADMIN | NEIGH_UPDATE_F_OVERRIDE |
|
||||
NEIGH_UPDATE_F_OVERRIDE_ISROUTER;
|
||||
struct net *net = sock_net(skb->sk);
|
||||
struct ndmsg *ndm;
|
||||
struct nlattr *tb[NDA_MAX+1];
|
||||
@@ -1787,12 +1785,16 @@ static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
}
|
||||
|
||||
if (!(nlh->nlmsg_flags & NLM_F_REPLACE))
|
||||
flags &= ~NEIGH_UPDATE_F_OVERRIDE;
|
||||
flags &= ~(NEIGH_UPDATE_F_OVERRIDE |
|
||||
NEIGH_UPDATE_F_OVERRIDE_ISROUTER);
|
||||
}
|
||||
|
||||
if (ndm->ndm_flags & NTF_EXT_LEARNED)
|
||||
flags |= NEIGH_UPDATE_F_EXT_LEARNED;
|
||||
|
||||
if (ndm->ndm_flags & NTF_ROUTER)
|
||||
flags |= NEIGH_UPDATE_F_ISROUTER;
|
||||
|
||||
if (ndm->ndm_flags & NTF_USE) {
|
||||
neigh_event_send(neigh, NULL);
|
||||
err = 0;
|
||||
|
||||
Reference in New Issue
Block a user