neighbor: Add protocol attribute
Subsystems (2)
PATCH 1/1 neighbor: Add protocol attribute
From: David Ahern <[email protected]>
Similar to routes and rules, add protocol attribute to neighbor entries for easier tracking of how each was created.
Signed-off-by David Ahern <[email protected]>
--- include/net/neighbour.h | 2 ++ include/uapi/linux/neighbour.h | 1 + net/core/neighbour.c | 24 +++++++++++++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-)
include/net/neighbour.h +2 -0
@@ -149,6 +149,7 @@ struct neighbour {__u8 nud_state;__u8 type;__u8 dead; +u8 protocol;seqlock_t ha_lock;unsigned char ha[ALIGN (MAX_ADDR_LEN ,sizeof (unsigned long ))]__aligned(8) ;struct hh_cache hh;
@@ -173,6 +174,7 @@ struct pneigh_entry {possible_net_t net;struct net_device *dev;u8 flags; +u8 protocol;u8 key[0 ]; };
include/uapi/linux/neighbour.h +1 -0
@@ -28,6 +28,7 @@ enum {NDA_MASTER ,NDA_LINK_NETNSID ,NDA_SRC_VNI , +NDA_PROTOCOL ,/* Originator of entry */ __NDA_MAX };
net/core/neighbour.c +23 -1
@@ -1828,6 +1828,7 @@ static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh,struct net_device *dev =NULL ;struct neighbour *neigh;void *dst, *lladdr; +u8 protocol =0 ;int err;ASSERT_RTNL ();
@@ -1867,6 +1868,14 @@ static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh, dst =nla_data (tb[NDA_DST ]); lladdr = tb[NDA_LLADDR ] ?nla_data (tb[NDA_LLADDR ]) :NULL ; +if (tb[NDA_PROTOCOL ]) { +if (nla_len (tb[NDA_PROTOCOL ]) !=sizeof (u8)) { +NL_SET_ERR_MSG (extack,"Invalid protocol attribute" ); + goto out; + } + protocol =nla_get_u8 (tb[NDA_PROTOCOL ]); + } +if (ndm->ndm_flags &NTF_PROXY ) {struct pneigh_entry *pn;
@@ -1874,6 +1883,8 @@ static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh, pn =pneigh_lookup (tbl, net, dst, dev,1 );if (pn) { pn->flags = ndm->ndm_flags; +if (protocol) + pn->protocol = protocol; err =0 ; } goto out;
@@ -1924,6 +1935,10 @@ static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh, }else err =__neigh_update (neigh, lladdr, ndm->ndm_state, flags,NETLINK_CB (skb).portid, extack); + +if (protocol) + neigh->protocol = protocol; +neigh_release (neigh); out:
@@ -2417,6 +2432,9 @@ static int neigh_fill_info(struct sk_buff *skb, struct neighbour *neigh, nla_put(skb, NDA_CACHEINFO, sizeof(ci), &ci)) goto nla_put_failure; +if (neigh->protocol &&nla_put_u8 (skb,NDA_PROTOCOL , neigh->protocol)) + goto nla_put_failure; +nlmsg_end (skb, nlh);return 0 ;
@@ -2448,6 +2466,9 @@ static int pneigh_fill_info(struct sk_buff *skb, struct pneigh_entry *pn,if (nla_put (skb,NDA_DST , tbl->key_len, pn->key)) goto nla_put_failure; +if (pn->protocol &&nla_put_u8 (skb,NDA_PROTOCOL , pn->protocol)) + goto nla_put_failure; +nlmsg_end (skb, nlh);return 0 ;
@@ -3103,7 +3124,8 @@ static inline size_t neigh_nlmsg_size(void) +nla_total_size (MAX_ADDR_LEN )/* NDA_DST */ +nla_total_size (MAX_ADDR_LEN )/* NDA_LLADDR */ +nla_total_size (sizeof (struct nda_cacheinfo )) - +nla_total_size (4 );/* NDA_PROBES */ + +nla_total_size (4 )/* NDA_PROBES */ + +nla_total_size (1 );/* NDA_PROTOCOL */ } static void __neigh_notify(struct neighbour *n, int type, int flags,
Signature · 1 line
2.11.0
From: David Ahern <[email protected]>
Date: Sat, 15 Dec 2018 14:09:06 -0800
Quoted 6 lines
From: David Ahern <[email protected]>
Similar to routes and rules, add protocol attribute to neighbor entries for easier tracking of how each was created.
Signed-off-by David Ahern <[email protected]>
Applied, thanks David.