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.
Unified · Split
| @@ -37,6 +37,8 @@ struct mctp_hdr { · 36 unmodified lines | ||
| 37 | 37 | |
| 38 | 38 | #define MCTP_HEADER_MAXLEN 4 |
| 39 | 39 | |
| 40 | +#define MCTP_INITIAL_DEFAULT_NET 1 | |
| 41 | + | |
| 40 | 42 | static inline bool mctp_address_ok(mctp_eid_t eid) |
| 41 | 43 | { |
| 42 | 44 | return eid >= 8 && eid < 255; |
| @@ -25,6 +25,9 @@ struct netns_mctp { · 24 unmodified lines | ||
| 25 | 25 | spinlock_t keys_lock; |
| 26 | 26 | struct hlist_head keys; |
| 27 | 27 | |
| 28 | + /* MCTP network */ | |
| 29 | + unsigned int default_net; | |
| 30 | + | |
| 28 | 31 | /* neighbour table */ |
| 29 | 32 | struct mutex neigh_lock; |
| 30 | 33 | struct list_head neighbours; |
| @@ -26,7 +26,6 @@ struct sockaddr_mctp { · 25 unmodified lines | ||
| 26 | 26 | }; |
| 27 | 27 | |
| 28 | 28 | #define MCTP_NET_ANY 0x0 |
| 29 | −#define MCTP_NET_DEFAULT 0x0 | |
| 30 | 29 | |
| 31 | 30 | #define MCTP_ADDR_NULL 0x00 |
| 32 | 31 | #define MCTP_ADDR_ANY 0xff |
| @@ -94,6 +94,9 @@ static int mctp_sendmsg(struct socket *sock, struct msghdr *msg, size_t len) · 93 unmodified lines | ||
| 94 | 94 | if (!capable(CAP_NET_RAW)) |
| 95 | 95 | return -EACCES; |
| 96 | 96 | |
| 97 | + if (addr->smctp_network == MCTP_NET_ANY) | |
| 98 | + addr->smctp_network = mctp_default_net(sock_net(sk)); | |
| 99 | + | |
| 97 | 100 | rt = mctp_route_lookup(sock_net(sk), addr->smctp_network, |
| 98 | 101 | addr->smctp_addr.s_addr); |
| 99 | 102 | if (!rt) |
| @@ -267,7 +267,7 @@ static struct mctp_dev *mctp_add_dev(struct net_device *dev) · 266 unmodified lines | ||
| 267 | 267 | |
| 268 | 268 | spin_lock_init(&mdev->addrs_lock); |
| 269 | 269 | |
| 270 | − mdev->net = MCTP_INITIAL_DEFAULT_NET; | |
| 270 | + mdev->net = mctp_default_net(dev_net(dev)); | |
| 271 | 271 | |
| 272 | 272 | /* associate to net_device */ |
| 273 | 273 | rcu_assign_pointer(dev->mctp_ptr, mdev); |
| @@ -433,6 +433,19 @@ static struct mctp_route *mctp_route_alloc(void) · 432 unmodified lines | ||
| 433 | 433 | return rt; |
| 434 | 434 | } |
| 435 | 435 | |
| 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 | + | |
| 436 | 449 | /* tag management */ |
| 437 | 450 | static void mctp_reserve_tag(struct net *net, struct mctp_sk_key *key, |
| 438 | 451 | struct mctp_sock *msk) |
| @@ -1045,6 +1058,7 @@ static int __net_init mctp_routes_net_init(struct net *net) · 606 unmodified lines | ||
| 1045 | 1058 | mutex_init(&ns->bind_lock); |
| 1046 | 1059 | INIT_HLIST_HEAD(&ns->keys); |
| 1047 | 1060 | spin_lock_init(&ns->keys_lock); |
| 1061 | + WARN_ON(mctp_default_net_set(net, MCTP_INITIAL_DEFAULT_NET)); | |
| 1048 | 1062 | return 0; |
| 1049 | 1063 | } |
| 1050 | 1064 | |