Commit 583be982 authored by Jeremy Kerr's avatar Jeremy Kerr Committed by David S. Miller
Browse files

mctp: Add device handling and netlink interface



This change adds the infrastructure for managing MCTP netdevices; we add
a pointer to the AF_MCTP-specific data to struct netdevice, and hook up
the rtnetlink operations for adding and removing addresses.

Includes changes from Matt Johnston <matt@codeconstruct.com.au>.

Signed-off-by: default avatarJeremy Kerr <jk@codeconstruct.com.au>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4b2e6930
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -11039,6 +11039,7 @@ L: netdev@vger.kernel.org
S:	Maintained
F:	drivers/net/mctp/
F:	include/net/mctp.h
F:	include/net/mctpdevice.h
F:	net/mctp/
MAN-PAGES: MANUAL PAGES FOR LINUX -- Sections 2, 3, 4, 5, and 7
+4 −0
Original line number Diff line number Diff line
@@ -1823,6 +1823,7 @@ enum netdev_ml_priv_type {
 *	@ieee802154_ptr: IEEE 802.15.4 low-rate Wireless Personal Area Network
 *			 device struct
 *	@mpls_ptr:	mpls_dev struct pointer
 *	@mctp_ptr:	MCTP specific data
 *
 *	@dev_addr:	Hw address (before bcast,
 *			because most packets are unicast)
@@ -2110,6 +2111,9 @@ struct net_device {
#if IS_ENABLED(CONFIG_MPLS_ROUTING)
	struct mpls_dev __rcu	*mpls_ptr;
#endif
#if IS_ENABLED(CONFIG_MCTP)
	struct mctp_dev __rcu	*mctp_ptr;
#endif

/*
 * Cache lines mostly used on receive path (including eth_type_trans())
+14 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@
#define __NET_MCTP_H

#include <linux/bits.h>
#include <linux/mctp.h>

/* MCTP packet definitions */
struct mctp_hdr {
@@ -32,4 +33,17 @@ struct mctp_hdr {
#define MCTP_HDR_TAG_SHIFT	0
#define MCTP_HDR_TAG_MASK	GENMASK(2, 0)

static inline bool mctp_address_ok(mctp_eid_t eid)
{
	return eid >= 8 && eid < 255;
}

static inline struct mctp_hdr *mctp_hdr(struct sk_buff *skb)
{
	return (struct mctp_hdr *)skb_network_header(skb);
}

void mctp_device_init(void);
void mctp_device_exit(void);

#endif /* __NET_MCTP_H */
+35 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Management Component Transport Protocol (MCTP) - device
 * definitions.
 *
 * Copyright (c) 2021 Code Construct
 * Copyright (c) 2021 Google
 */

#ifndef __NET_MCTPDEVICE_H
#define __NET_MCTPDEVICE_H

#include <linux/list.h>
#include <linux/types.h>
#include <linux/refcount.h>

struct mctp_dev {
	struct net_device	*dev;

	unsigned int		net;

	/* Only modified under RTNL. Reads have addrs_lock held */
	u8			*addrs;
	size_t			num_addrs;
	spinlock_t		addrs_lock;

	struct rcu_head		rcu;
};

#define MCTP_INITIAL_DEFAULT_NET	1

struct mctp_dev *mctp_dev_get_rtnl(const struct net_device *dev);
struct mctp_dev *__mctp_dev_get(const struct net_device *dev);

#endif /* __NET_MCTPDEVICE_H */
+3 −0
Original line number Diff line number Diff line
@@ -151,6 +151,9 @@
#define ETH_P_MAP	0x00F9		/* Qualcomm multiplexing and
					 * aggregation protocol
					 */
#define ETH_P_MCTP	0x00FA		/* Management component transport
					 * protocol packets
					 */

/*
 *	This is an Ethernet frame header.
Loading