Commit 4d8b9319 authored by Matt Johnston's avatar Matt Johnston Committed by David S. Miller
Browse files

mctp: Add neighbour implementation



Add an initial neighbour table implementation, to be used in the route
output path.

Signed-off-by: default avatarMatt Johnston <matt@codeconstruct.com.au>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 06d2f4c5
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -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);

+1 −0
Original line number Diff line number Diff line
@@ -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 */
+4 −0
Original line number Diff line number Diff line
@@ -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__ */
+1 −1
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0
obj-$(CONFIG_MCTP) += mctp.o
mctp-objs := af_mctp.o device.o route.o
mctp-objs := af_mctp.o device.o route.o neigh.o
+5 −0
Original line number Diff line number Diff line
@@ -161,6 +161,10 @@ static __init int mctp_init(void)
	if (rc)
		goto err_unreg_proto;

	rc = mctp_neigh_init();
	if (rc)
		goto err_unreg_proto;

	mctp_device_init();

	return 0;
@@ -176,6 +180,7 @@ static __init int mctp_init(void)
static __exit void mctp_exit(void)
{
	mctp_device_exit();
	mctp_neigh_exit();
	mctp_routes_exit();
	proto_unregister(&mctp_proto);
	sock_unregister(PF_MCTP);
Loading