summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorMatt Johnston <matt@codeconstruct.com.au>2021-07-29 05:20:47 +0300
committerDavid S. Miller <davem@davemloft.net>2021-07-29 17:06:50 +0300
commit4d8b9319282ae84f5a17b28d8b5b5d1e7e537312 (patch)
tree761ff24a307a22a4e86aa137ed65757eec346f5b /include
parent06d2f4c583a7d892300920fc85d654d48a15e914 (diff)
downloadlinux-4d8b9319282ae84f5a17b28d8b5b5d1e7e537312.tar.xz
mctp: Add neighbour implementation
Add an initial neighbour table implementation, to be used in the route output path. Signed-off-by: Matt Johnston <matt@codeconstruct.com.au> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/net/mctp.h25
-rw-r--r--include/net/mctpdevice.h1
-rw-r--r--include/net/netns/mctp.h4
3 files changed, 30 insertions, 0 deletions
diff --git a/include/net/mctp.h b/include/net/mctp.h
index bc36e37e8198..53f035c8b59c 100644
--- a/include/net/mctp.h
+++ b/include/net/mctp.h
@@ -117,6 +117,31 @@ int mctp_route_add_local(struct mctp_dev *mdev, mctp_eid_t addr);
int mctp_route_remove_local(struct mctp_dev *mdev, mctp_eid_t addr);
void mctp_route_remove_dev(struct mctp_dev *mdev);
+/* neighbour definitions */
+enum mctp_neigh_source {
+ MCTP_NEIGH_STATIC,
+ MCTP_NEIGH_DISCOVER,
+};
+
+struct mctp_neigh {
+ struct mctp_dev *dev;
+ mctp_eid_t eid;
+ enum mctp_neigh_source source;
+
+ unsigned char ha[MAX_ADDR_LEN];
+
+ struct list_head list;
+ struct rcu_head rcu;
+};
+
+int mctp_neigh_init(void);
+void mctp_neigh_exit(void);
+
+// ret_hwaddr may be NULL, otherwise must have space for MAX_ADDR_LEN
+int mctp_neigh_lookup(struct mctp_dev *dev, mctp_eid_t eid,
+ void *ret_hwaddr);
+void mctp_neigh_remove_dev(struct mctp_dev *mdev);
+
int mctp_routes_init(void);
void mctp_routes_exit(void);
diff --git a/include/net/mctpdevice.h b/include/net/mctpdevice.h
index 71a11012fac7..57e773ff08bb 100644
--- a/include/net/mctpdevice.h
+++ b/include/net/mctpdevice.h
@@ -31,5 +31,6 @@ struct mctp_dev {
struct mctp_dev *mctp_dev_get_rtnl(const struct net_device *dev);
struct mctp_dev *__mctp_dev_get(const struct net_device *dev);
+struct mctp_dev *mctp_dev_get_rtnl(const struct net_device *dev);
#endif /* __NET_MCTPDEVICE_H */
diff --git a/include/net/netns/mctp.h b/include/net/netns/mctp.h
index 508459b08a59..2f5ebeeb320e 100644
--- a/include/net/netns/mctp.h
+++ b/include/net/netns/mctp.h
@@ -11,6 +11,10 @@
struct netns_mctp {
/* Only updated under RTNL, entries freed via RCU */
struct list_head routes;
+
+ /* neighbour table */
+ struct mutex neigh_lock;
+ struct list_head neighbours;
};
#endif /* __NETNS_MCTP_H__ */