History

mctp: Allow per-netns default networks

Currently we have a compile-time default network (MCTP_INITIAL_DEFAULT_NET). This change introduces a default_net field on the net namespace, allowing future configuration for new interfaces.

Matt Johnston committed 5 years ago

Commit 03f2bbc1 parent 26ab3fc6 files · +23 −2Browse files

Unified · Split

6 files
  1. include/net/mctp.h +2 −0
  2. include/net/netns/mctp.h +3 −0
  3. include/uapi/linux/mctp.h +0 −1
  4. net/mctp/af_mctp.c +3 −0
  5. net/mctp/device.c +1 −1
  6. net/mctp/route.c +14 −0
include/net/mctp.h+2−0
@@ -37,6 +37,8 @@ struct mctp_hdr { · 36 unmodified lines
3737
3838 #define MCTP_HEADER_MAXLEN 4
3939
40+#define MCTP_INITIAL_DEFAULT_NET 1
41+
4042 static inline bool mctp_address_ok(mctp_eid_t eid)
4143 {
4244 return eid >= 8 && eid < 255;
include/net/netns/mctp.h+3−0
@@ -25,6 +25,9 @@ struct netns_mctp { · 24 unmodified lines
2525 spinlock_t keys_lock;
2626 struct hlist_head keys;
2727
28+ /* MCTP network */
29+ unsigned int default_net;
30+
2831 /* neighbour table */
2932 struct mutex neigh_lock;
3033 struct list_head neighbours;
include/uapi/linux/mctp.h+0−1
@@ -26,7 +26,6 @@ struct sockaddr_mctp { · 25 unmodified lines
2626 };
2727
2828 #define MCTP_NET_ANY 0x0
29−#define MCTP_NET_DEFAULT 0x0
3029
3130 #define MCTP_ADDR_NULL 0x00
3231 #define MCTP_ADDR_ANY 0xff
net/mctp/af_mctp.c+3−0
@@ -94,6 +94,9 @@ static int mctp_sendmsg(struct socket *sock, struct msghdr *msg, size_t len) · 93 unmodified lines
9494 if (!capable(CAP_NET_RAW))
9595 return -EACCES;
9696
97+ if (addr->smctp_network == MCTP_NET_ANY)
98+ addr->smctp_network = mctp_default_net(sock_net(sk));
99+
97100 rt = mctp_route_lookup(sock_net(sk), addr->smctp_network,
98101 addr->smctp_addr.s_addr);
99102 if (!rt)
net/mctp/device.c+1−1
@@ -267,7 +267,7 @@ static struct mctp_dev *mctp_add_dev(struct net_device *dev) · 266 unmodified lines
267267
268268 spin_lock_init(&mdev->addrs_lock);
269269
270− mdev->net = MCTP_INITIAL_DEFAULT_NET;
270+ mdev->net = mctp_default_net(dev_net(dev));
271271
272272 /* associate to net_device */
273273 rcu_assign_pointer(dev->mctp_ptr, mdev);
net/mctp/route.c+14−0
@@ -433,6 +433,19 @@ static struct mctp_route *mctp_route_alloc(void) · 432 unmodified lines
433433 return rt;
434434 }
435435
436+unsigned int mctp_default_net(struct net *net)
437+{
438+ return READ_ONCE(net->mctp.default_net);
439+}
440+
441+int mctp_default_net_set(struct net *net, unsigned int index)
442+{
443+ if (index == 0)
444+ return -EINVAL;
445+ WRITE_ONCE(net->mctp.default_net, index);
446+ return 0;
447+}
448+
436449 /* tag management */
437450 static void mctp_reserve_tag(struct net *net, struct mctp_sk_key *key,
438451 struct mctp_sock *msk)
@@ -1045,6 +1058,7 @@ static int __net_init mctp_routes_net_init(struct net *net) · 606 unmodified lines
10451058 mutex_init(&ns->bind_lock);
10461059 INIT_HLIST_HEAD(&ns->keys);
10471060 spin_lock_init(&ns->keys_lock);
1061+ WARN_ON(mctp_default_net_set(net, MCTP_INITIAL_DEFAULT_NET));
10481062 return 0;
10491063 }
10501064