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

mctp: Allow MCTP on tun devices



Allowing TUN is useful for testing, to route packets to userspace or to
tunnel between machines.

Signed-off-by: default avatarMatt Johnston <matt@codeconstruct.com.au>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7c2dcfa2
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -356,9 +356,12 @@ static int mctp_register(struct net_device *dev)
	if (rtnl_dereference(dev->mctp_ptr))
		return 0;

	/* only register specific types; MCTP-specific and loopback for now */
	if (dev->type != ARPHRD_MCTP && dev->type != ARPHRD_LOOPBACK)
	/* only register specific types (inc. NONE for TUN devices) */
	if (!(dev->type == ARPHRD_MCTP ||
	      dev->type == ARPHRD_LOOPBACK ||
	      dev->type == ARPHRD_NONE)) {
		return 0;
	}

	mdev = mctp_add_dev(dev);
	if (IS_ERR(mdev))
+8 −5
Original line number Diff line number Diff line
@@ -821,13 +821,18 @@ static int mctp_pkttype_receive(struct sk_buff *skb, struct net_device *dev,
				struct net_device *orig_dev)
{
	struct net *net = dev_net(dev);
	struct mctp_dev *mdev;
	struct mctp_skb_cb *cb;
	struct mctp_route *rt;
	struct mctp_hdr *mh;

	rcu_read_lock();
	mdev = __mctp_dev_get(dev);
	rcu_read_unlock();
	if (!mdev) {
		/* basic non-data sanity checks */
	if (dev->type != ARPHRD_MCTP)
		goto err_drop;
	}

	if (!pskb_may_pull(skb, sizeof(struct mctp_hdr)))
		goto err_drop;
@@ -841,9 +846,7 @@ static int mctp_pkttype_receive(struct sk_buff *skb, struct net_device *dev,
		goto err_drop;

	cb = __mctp_cb(skb);
	rcu_read_lock();
	cb->net = READ_ONCE(__mctp_dev_get(dev)->net);
	rcu_read_unlock();
	cb->net = READ_ONCE(mdev->net);

	rt = mctp_route_lookup(net, cb->net, mh->dest);
	if (!rt)