mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-23 04:34:11 +08:00
dcb780fb27
MACsec offloading to underlying hardware devices is disabled by default (the software implementation is used). This patch adds support for changing this setting through the MACsec netlink interface. Many checks are done when enabling offloading on a given MACsec interface as there are limitations (it must be supported by the hardware, only a single interface can be offloaded on a given physical device at a time, rules can't be moved for now). Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com> Signed-off-by: David S. Miller <davem@davemloft.net>
189 lines
6.1 KiB
C
189 lines
6.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
|
|
/*
|
|
* include/uapi/linux/if_macsec.h - MACsec device
|
|
*
|
|
* Copyright (c) 2015 Sabrina Dubroca <sd@queasysnail.net>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*/
|
|
|
|
#ifndef _UAPI_MACSEC_H
|
|
#define _UAPI_MACSEC_H
|
|
|
|
#include <linux/types.h>
|
|
|
|
#define MACSEC_GENL_NAME "macsec"
|
|
#define MACSEC_GENL_VERSION 1
|
|
|
|
#define MACSEC_MAX_KEY_LEN 128
|
|
|
|
#define MACSEC_KEYID_LEN 16
|
|
|
|
/* cipher IDs as per IEEE802.1AEbn-2011 */
|
|
#define MACSEC_CIPHER_ID_GCM_AES_128 0x0080C20001000001ULL
|
|
#define MACSEC_CIPHER_ID_GCM_AES_256 0x0080C20001000002ULL
|
|
|
|
/* deprecated cipher ID for GCM-AES-128 */
|
|
#define MACSEC_DEFAULT_CIPHER_ID 0x0080020001000001ULL
|
|
#define MACSEC_DEFAULT_CIPHER_ALT MACSEC_CIPHER_ID_GCM_AES_128
|
|
|
|
#define MACSEC_MIN_ICV_LEN 8
|
|
#define MACSEC_MAX_ICV_LEN 32
|
|
/* upper limit for ICV length as recommended by IEEE802.1AE-2006 */
|
|
#define MACSEC_STD_ICV_LEN 16
|
|
|
|
enum macsec_attrs {
|
|
MACSEC_ATTR_UNSPEC,
|
|
MACSEC_ATTR_IFINDEX, /* u32, ifindex of the MACsec netdevice */
|
|
MACSEC_ATTR_RXSC_CONFIG, /* config, nested macsec_rxsc_attrs */
|
|
MACSEC_ATTR_SA_CONFIG, /* config, nested macsec_sa_attrs */
|
|
MACSEC_ATTR_SECY, /* dump, nested macsec_secy_attrs */
|
|
MACSEC_ATTR_TXSA_LIST, /* dump, nested, macsec_sa_attrs for each TXSA */
|
|
MACSEC_ATTR_RXSC_LIST, /* dump, nested, macsec_rxsc_attrs for each RXSC */
|
|
MACSEC_ATTR_TXSC_STATS, /* dump, nested, macsec_txsc_stats_attr */
|
|
MACSEC_ATTR_SECY_STATS, /* dump, nested, macsec_secy_stats_attr */
|
|
MACSEC_ATTR_OFFLOAD, /* config, nested, macsec_offload_attrs */
|
|
__MACSEC_ATTR_END,
|
|
NUM_MACSEC_ATTR = __MACSEC_ATTR_END,
|
|
MACSEC_ATTR_MAX = __MACSEC_ATTR_END - 1,
|
|
};
|
|
|
|
enum macsec_secy_attrs {
|
|
MACSEC_SECY_ATTR_UNSPEC,
|
|
MACSEC_SECY_ATTR_SCI,
|
|
MACSEC_SECY_ATTR_ENCODING_SA,
|
|
MACSEC_SECY_ATTR_WINDOW,
|
|
MACSEC_SECY_ATTR_CIPHER_SUITE,
|
|
MACSEC_SECY_ATTR_ICV_LEN,
|
|
MACSEC_SECY_ATTR_PROTECT,
|
|
MACSEC_SECY_ATTR_REPLAY,
|
|
MACSEC_SECY_ATTR_OPER,
|
|
MACSEC_SECY_ATTR_VALIDATE,
|
|
MACSEC_SECY_ATTR_ENCRYPT,
|
|
MACSEC_SECY_ATTR_INC_SCI,
|
|
MACSEC_SECY_ATTR_ES,
|
|
MACSEC_SECY_ATTR_SCB,
|
|
MACSEC_SECY_ATTR_PAD,
|
|
__MACSEC_SECY_ATTR_END,
|
|
NUM_MACSEC_SECY_ATTR = __MACSEC_SECY_ATTR_END,
|
|
MACSEC_SECY_ATTR_MAX = __MACSEC_SECY_ATTR_END - 1,
|
|
};
|
|
|
|
enum macsec_rxsc_attrs {
|
|
MACSEC_RXSC_ATTR_UNSPEC,
|
|
MACSEC_RXSC_ATTR_SCI, /* config/dump, u64 */
|
|
MACSEC_RXSC_ATTR_ACTIVE, /* config/dump, u8 0..1 */
|
|
MACSEC_RXSC_ATTR_SA_LIST, /* dump, nested */
|
|
MACSEC_RXSC_ATTR_STATS, /* dump, nested, macsec_rxsc_stats_attr */
|
|
MACSEC_RXSC_ATTR_PAD,
|
|
__MACSEC_RXSC_ATTR_END,
|
|
NUM_MACSEC_RXSC_ATTR = __MACSEC_RXSC_ATTR_END,
|
|
MACSEC_RXSC_ATTR_MAX = __MACSEC_RXSC_ATTR_END - 1,
|
|
};
|
|
|
|
enum macsec_sa_attrs {
|
|
MACSEC_SA_ATTR_UNSPEC,
|
|
MACSEC_SA_ATTR_AN, /* config/dump, u8 0..3 */
|
|
MACSEC_SA_ATTR_ACTIVE, /* config/dump, u8 0..1 */
|
|
MACSEC_SA_ATTR_PN, /* config/dump, u32 */
|
|
MACSEC_SA_ATTR_KEY, /* config, data */
|
|
MACSEC_SA_ATTR_KEYID, /* config/dump, 128-bit */
|
|
MACSEC_SA_ATTR_STATS, /* dump, nested, macsec_sa_stats_attr */
|
|
MACSEC_SA_ATTR_PAD,
|
|
__MACSEC_SA_ATTR_END,
|
|
NUM_MACSEC_SA_ATTR = __MACSEC_SA_ATTR_END,
|
|
MACSEC_SA_ATTR_MAX = __MACSEC_SA_ATTR_END - 1,
|
|
};
|
|
|
|
enum macsec_offload_attrs {
|
|
MACSEC_OFFLOAD_ATTR_UNSPEC,
|
|
MACSEC_OFFLOAD_ATTR_TYPE, /* config/dump, u8 0..2 */
|
|
MACSEC_OFFLOAD_ATTR_PAD,
|
|
__MACSEC_OFFLOAD_ATTR_END,
|
|
NUM_MACSEC_OFFLOAD_ATTR = __MACSEC_OFFLOAD_ATTR_END,
|
|
MACSEC_OFFLOAD_ATTR_MAX = __MACSEC_OFFLOAD_ATTR_END - 1,
|
|
};
|
|
|
|
enum macsec_nl_commands {
|
|
MACSEC_CMD_GET_TXSC,
|
|
MACSEC_CMD_ADD_RXSC,
|
|
MACSEC_CMD_DEL_RXSC,
|
|
MACSEC_CMD_UPD_RXSC,
|
|
MACSEC_CMD_ADD_TXSA,
|
|
MACSEC_CMD_DEL_TXSA,
|
|
MACSEC_CMD_UPD_TXSA,
|
|
MACSEC_CMD_ADD_RXSA,
|
|
MACSEC_CMD_DEL_RXSA,
|
|
MACSEC_CMD_UPD_RXSA,
|
|
MACSEC_CMD_UPD_OFFLOAD,
|
|
};
|
|
|
|
/* u64 per-RXSC stats */
|
|
enum macsec_rxsc_stats_attr {
|
|
MACSEC_RXSC_STATS_ATTR_UNSPEC,
|
|
MACSEC_RXSC_STATS_ATTR_IN_OCTETS_VALIDATED,
|
|
MACSEC_RXSC_STATS_ATTR_IN_OCTETS_DECRYPTED,
|
|
MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNCHECKED,
|
|
MACSEC_RXSC_STATS_ATTR_IN_PKTS_DELAYED,
|
|
MACSEC_RXSC_STATS_ATTR_IN_PKTS_OK,
|
|
MACSEC_RXSC_STATS_ATTR_IN_PKTS_INVALID,
|
|
MACSEC_RXSC_STATS_ATTR_IN_PKTS_LATE,
|
|
MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_VALID,
|
|
MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_USING_SA,
|
|
MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNUSED_SA,
|
|
MACSEC_RXSC_STATS_ATTR_PAD,
|
|
__MACSEC_RXSC_STATS_ATTR_END,
|
|
NUM_MACSEC_RXSC_STATS_ATTR = __MACSEC_RXSC_STATS_ATTR_END,
|
|
MACSEC_RXSC_STATS_ATTR_MAX = __MACSEC_RXSC_STATS_ATTR_END - 1,
|
|
};
|
|
|
|
/* u32 per-{RX,TX}SA stats */
|
|
enum macsec_sa_stats_attr {
|
|
MACSEC_SA_STATS_ATTR_UNSPEC,
|
|
MACSEC_SA_STATS_ATTR_IN_PKTS_OK,
|
|
MACSEC_SA_STATS_ATTR_IN_PKTS_INVALID,
|
|
MACSEC_SA_STATS_ATTR_IN_PKTS_NOT_VALID,
|
|
MACSEC_SA_STATS_ATTR_IN_PKTS_NOT_USING_SA,
|
|
MACSEC_SA_STATS_ATTR_IN_PKTS_UNUSED_SA,
|
|
MACSEC_SA_STATS_ATTR_OUT_PKTS_PROTECTED,
|
|
MACSEC_SA_STATS_ATTR_OUT_PKTS_ENCRYPTED,
|
|
__MACSEC_SA_STATS_ATTR_END,
|
|
NUM_MACSEC_SA_STATS_ATTR = __MACSEC_SA_STATS_ATTR_END,
|
|
MACSEC_SA_STATS_ATTR_MAX = __MACSEC_SA_STATS_ATTR_END - 1,
|
|
};
|
|
|
|
/* u64 per-TXSC stats */
|
|
enum macsec_txsc_stats_attr {
|
|
MACSEC_TXSC_STATS_ATTR_UNSPEC,
|
|
MACSEC_TXSC_STATS_ATTR_OUT_PKTS_PROTECTED,
|
|
MACSEC_TXSC_STATS_ATTR_OUT_PKTS_ENCRYPTED,
|
|
MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_PROTECTED,
|
|
MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_ENCRYPTED,
|
|
MACSEC_TXSC_STATS_ATTR_PAD,
|
|
__MACSEC_TXSC_STATS_ATTR_END,
|
|
NUM_MACSEC_TXSC_STATS_ATTR = __MACSEC_TXSC_STATS_ATTR_END,
|
|
MACSEC_TXSC_STATS_ATTR_MAX = __MACSEC_TXSC_STATS_ATTR_END - 1,
|
|
};
|
|
|
|
/* u64 per-SecY stats */
|
|
enum macsec_secy_stats_attr {
|
|
MACSEC_SECY_STATS_ATTR_UNSPEC,
|
|
MACSEC_SECY_STATS_ATTR_OUT_PKTS_UNTAGGED,
|
|
MACSEC_SECY_STATS_ATTR_IN_PKTS_UNTAGGED,
|
|
MACSEC_SECY_STATS_ATTR_OUT_PKTS_TOO_LONG,
|
|
MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_TAG,
|
|
MACSEC_SECY_STATS_ATTR_IN_PKTS_BAD_TAG,
|
|
MACSEC_SECY_STATS_ATTR_IN_PKTS_UNKNOWN_SCI,
|
|
MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_SCI,
|
|
MACSEC_SECY_STATS_ATTR_IN_PKTS_OVERRUN,
|
|
MACSEC_SECY_STATS_ATTR_PAD,
|
|
__MACSEC_SECY_STATS_ATTR_END,
|
|
NUM_MACSEC_SECY_STATS_ATTR = __MACSEC_SECY_STATS_ATTR_END,
|
|
MACSEC_SECY_STATS_ATTR_MAX = __MACSEC_SECY_STATS_ATTR_END - 1,
|
|
};
|
|
|
|
#endif /* _UAPI_MACSEC_H */
|