Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
0002 /*
0003  * include/uapi/linux/if_macsec.h - MACsec device
0004  *
0005  * Copyright (c) 2015 Sabrina Dubroca <sd@queasysnail.net>
0006  *
0007  * This program is free software; you can redistribute it and/or modify
0008  * it under the terms of the GNU General Public License as published by
0009  * the Free Software Foundation; either version 2 of the License, or
0010  * (at your option) any later version.
0011  */
0012 
0013 #ifndef _UAPI_MACSEC_H
0014 #define _UAPI_MACSEC_H
0015 
0016 #include <linux/types.h>
0017 
0018 #define MACSEC_GENL_NAME "macsec"
0019 #define MACSEC_GENL_VERSION 1
0020 
0021 #define MACSEC_MAX_KEY_LEN 128
0022 
0023 #define MACSEC_KEYID_LEN 16
0024 
0025 /* cipher IDs as per IEEE802.1AE-2018 (Table 14-1) */
0026 #define MACSEC_CIPHER_ID_GCM_AES_128 0x0080C20001000001ULL
0027 #define MACSEC_CIPHER_ID_GCM_AES_256 0x0080C20001000002ULL
0028 #define MACSEC_CIPHER_ID_GCM_AES_XPN_128 0x0080C20001000003ULL
0029 #define MACSEC_CIPHER_ID_GCM_AES_XPN_256 0x0080C20001000004ULL
0030 
0031 /* deprecated cipher ID for GCM-AES-128 */
0032 #define MACSEC_DEFAULT_CIPHER_ID     0x0080020001000001ULL
0033 #define MACSEC_DEFAULT_CIPHER_ALT    MACSEC_CIPHER_ID_GCM_AES_128
0034 
0035 #define MACSEC_MIN_ICV_LEN 8
0036 #define MACSEC_MAX_ICV_LEN 32
0037 /* upper limit for ICV length as recommended by IEEE802.1AE-2006 */
0038 #define MACSEC_STD_ICV_LEN 16
0039 
0040 enum macsec_attrs {
0041     MACSEC_ATTR_UNSPEC,
0042     MACSEC_ATTR_IFINDEX,     /* u32, ifindex of the MACsec netdevice */
0043     MACSEC_ATTR_RXSC_CONFIG, /* config, nested macsec_rxsc_attrs */
0044     MACSEC_ATTR_SA_CONFIG,   /* config, nested macsec_sa_attrs */
0045     MACSEC_ATTR_SECY,        /* dump, nested macsec_secy_attrs */
0046     MACSEC_ATTR_TXSA_LIST,   /* dump, nested, macsec_sa_attrs for each TXSA */
0047     MACSEC_ATTR_RXSC_LIST,   /* dump, nested, macsec_rxsc_attrs for each RXSC */
0048     MACSEC_ATTR_TXSC_STATS,  /* dump, nested, macsec_txsc_stats_attr */
0049     MACSEC_ATTR_SECY_STATS,  /* dump, nested, macsec_secy_stats_attr */
0050     MACSEC_ATTR_OFFLOAD,     /* config, nested, macsec_offload_attrs */
0051     __MACSEC_ATTR_END,
0052     NUM_MACSEC_ATTR = __MACSEC_ATTR_END,
0053     MACSEC_ATTR_MAX = __MACSEC_ATTR_END - 1,
0054 };
0055 
0056 enum macsec_secy_attrs {
0057     MACSEC_SECY_ATTR_UNSPEC,
0058     MACSEC_SECY_ATTR_SCI,
0059     MACSEC_SECY_ATTR_ENCODING_SA,
0060     MACSEC_SECY_ATTR_WINDOW,
0061     MACSEC_SECY_ATTR_CIPHER_SUITE,
0062     MACSEC_SECY_ATTR_ICV_LEN,
0063     MACSEC_SECY_ATTR_PROTECT,
0064     MACSEC_SECY_ATTR_REPLAY,
0065     MACSEC_SECY_ATTR_OPER,
0066     MACSEC_SECY_ATTR_VALIDATE,
0067     MACSEC_SECY_ATTR_ENCRYPT,
0068     MACSEC_SECY_ATTR_INC_SCI,
0069     MACSEC_SECY_ATTR_ES,
0070     MACSEC_SECY_ATTR_SCB,
0071     MACSEC_SECY_ATTR_PAD,
0072     __MACSEC_SECY_ATTR_END,
0073     NUM_MACSEC_SECY_ATTR = __MACSEC_SECY_ATTR_END,
0074     MACSEC_SECY_ATTR_MAX = __MACSEC_SECY_ATTR_END - 1,
0075 };
0076 
0077 enum macsec_rxsc_attrs {
0078     MACSEC_RXSC_ATTR_UNSPEC,
0079     MACSEC_RXSC_ATTR_SCI,     /* config/dump, u64 */
0080     MACSEC_RXSC_ATTR_ACTIVE,  /* config/dump, u8 0..1 */
0081     MACSEC_RXSC_ATTR_SA_LIST, /* dump, nested */
0082     MACSEC_RXSC_ATTR_STATS,   /* dump, nested, macsec_rxsc_stats_attr */
0083     MACSEC_RXSC_ATTR_PAD,
0084     __MACSEC_RXSC_ATTR_END,
0085     NUM_MACSEC_RXSC_ATTR = __MACSEC_RXSC_ATTR_END,
0086     MACSEC_RXSC_ATTR_MAX = __MACSEC_RXSC_ATTR_END - 1,
0087 };
0088 
0089 enum macsec_sa_attrs {
0090     MACSEC_SA_ATTR_UNSPEC,
0091     MACSEC_SA_ATTR_AN,     /* config/dump, u8 0..3 */
0092     MACSEC_SA_ATTR_ACTIVE, /* config/dump, u8 0..1 */
0093     MACSEC_SA_ATTR_PN,     /* config/dump, u32/u64 (u64 if XPN) */
0094     MACSEC_SA_ATTR_KEY,    /* config, data */
0095     MACSEC_SA_ATTR_KEYID,  /* config/dump, 128-bit */
0096     MACSEC_SA_ATTR_STATS,  /* dump, nested, macsec_sa_stats_attr */
0097     MACSEC_SA_ATTR_PAD,
0098     MACSEC_SA_ATTR_SSCI,   /* config/dump, u32 - XPN only */
0099     MACSEC_SA_ATTR_SALT,   /* config, 96-bit - XPN only */
0100     __MACSEC_SA_ATTR_END,
0101     NUM_MACSEC_SA_ATTR = __MACSEC_SA_ATTR_END,
0102     MACSEC_SA_ATTR_MAX = __MACSEC_SA_ATTR_END - 1,
0103 };
0104 
0105 enum macsec_offload_attrs {
0106     MACSEC_OFFLOAD_ATTR_UNSPEC,
0107     MACSEC_OFFLOAD_ATTR_TYPE, /* config/dump, u8 0..2 */
0108     MACSEC_OFFLOAD_ATTR_PAD,
0109     __MACSEC_OFFLOAD_ATTR_END,
0110     NUM_MACSEC_OFFLOAD_ATTR = __MACSEC_OFFLOAD_ATTR_END,
0111     MACSEC_OFFLOAD_ATTR_MAX = __MACSEC_OFFLOAD_ATTR_END - 1,
0112 };
0113 
0114 enum macsec_nl_commands {
0115     MACSEC_CMD_GET_TXSC,
0116     MACSEC_CMD_ADD_RXSC,
0117     MACSEC_CMD_DEL_RXSC,
0118     MACSEC_CMD_UPD_RXSC,
0119     MACSEC_CMD_ADD_TXSA,
0120     MACSEC_CMD_DEL_TXSA,
0121     MACSEC_CMD_UPD_TXSA,
0122     MACSEC_CMD_ADD_RXSA,
0123     MACSEC_CMD_DEL_RXSA,
0124     MACSEC_CMD_UPD_RXSA,
0125     MACSEC_CMD_UPD_OFFLOAD,
0126 };
0127 
0128 /* u64 per-RXSC stats */
0129 enum macsec_rxsc_stats_attr {
0130     MACSEC_RXSC_STATS_ATTR_UNSPEC,
0131     MACSEC_RXSC_STATS_ATTR_IN_OCTETS_VALIDATED,
0132     MACSEC_RXSC_STATS_ATTR_IN_OCTETS_DECRYPTED,
0133     MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNCHECKED,
0134     MACSEC_RXSC_STATS_ATTR_IN_PKTS_DELAYED,
0135     MACSEC_RXSC_STATS_ATTR_IN_PKTS_OK,
0136     MACSEC_RXSC_STATS_ATTR_IN_PKTS_INVALID,
0137     MACSEC_RXSC_STATS_ATTR_IN_PKTS_LATE,
0138     MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_VALID,
0139     MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_USING_SA,
0140     MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNUSED_SA,
0141     MACSEC_RXSC_STATS_ATTR_PAD,
0142     __MACSEC_RXSC_STATS_ATTR_END,
0143     NUM_MACSEC_RXSC_STATS_ATTR = __MACSEC_RXSC_STATS_ATTR_END,
0144     MACSEC_RXSC_STATS_ATTR_MAX = __MACSEC_RXSC_STATS_ATTR_END - 1,
0145 };
0146 
0147 /* u32 per-{RX,TX}SA stats */
0148 enum macsec_sa_stats_attr {
0149     MACSEC_SA_STATS_ATTR_UNSPEC,
0150     MACSEC_SA_STATS_ATTR_IN_PKTS_OK,
0151     MACSEC_SA_STATS_ATTR_IN_PKTS_INVALID,
0152     MACSEC_SA_STATS_ATTR_IN_PKTS_NOT_VALID,
0153     MACSEC_SA_STATS_ATTR_IN_PKTS_NOT_USING_SA,
0154     MACSEC_SA_STATS_ATTR_IN_PKTS_UNUSED_SA,
0155     MACSEC_SA_STATS_ATTR_OUT_PKTS_PROTECTED,
0156     MACSEC_SA_STATS_ATTR_OUT_PKTS_ENCRYPTED,
0157     __MACSEC_SA_STATS_ATTR_END,
0158     NUM_MACSEC_SA_STATS_ATTR = __MACSEC_SA_STATS_ATTR_END,
0159     MACSEC_SA_STATS_ATTR_MAX = __MACSEC_SA_STATS_ATTR_END - 1,
0160 };
0161 
0162 /* u64 per-TXSC stats */
0163 enum macsec_txsc_stats_attr {
0164     MACSEC_TXSC_STATS_ATTR_UNSPEC,
0165     MACSEC_TXSC_STATS_ATTR_OUT_PKTS_PROTECTED,
0166     MACSEC_TXSC_STATS_ATTR_OUT_PKTS_ENCRYPTED,
0167     MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_PROTECTED,
0168     MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_ENCRYPTED,
0169     MACSEC_TXSC_STATS_ATTR_PAD,
0170     __MACSEC_TXSC_STATS_ATTR_END,
0171     NUM_MACSEC_TXSC_STATS_ATTR = __MACSEC_TXSC_STATS_ATTR_END,
0172     MACSEC_TXSC_STATS_ATTR_MAX = __MACSEC_TXSC_STATS_ATTR_END - 1,
0173 };
0174 
0175 /* u64 per-SecY stats */
0176 enum macsec_secy_stats_attr {
0177     MACSEC_SECY_STATS_ATTR_UNSPEC,
0178     MACSEC_SECY_STATS_ATTR_OUT_PKTS_UNTAGGED,
0179     MACSEC_SECY_STATS_ATTR_IN_PKTS_UNTAGGED,
0180     MACSEC_SECY_STATS_ATTR_OUT_PKTS_TOO_LONG,
0181     MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_TAG,
0182     MACSEC_SECY_STATS_ATTR_IN_PKTS_BAD_TAG,
0183     MACSEC_SECY_STATS_ATTR_IN_PKTS_UNKNOWN_SCI,
0184     MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_SCI,
0185     MACSEC_SECY_STATS_ATTR_IN_PKTS_OVERRUN,
0186     MACSEC_SECY_STATS_ATTR_PAD,
0187     __MACSEC_SECY_STATS_ATTR_END,
0188     NUM_MACSEC_SECY_STATS_ATTR = __MACSEC_SECY_STATS_ATTR_END,
0189     MACSEC_SECY_STATS_ATTR_MAX = __MACSEC_SECY_STATS_ATTR_END - 1,
0190 };
0191 
0192 #endif /* _UAPI_MACSEC_H */