15a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt/* 25a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt * IEEE 802.1X-2010 Key Agree Protocol of PAE state machine 35a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt * Copyright (c) 2013, Qualcomm Atheros, Inc. 45a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt * 55a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt * This software may be distributed under the terms of the BSD license. 65a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt * See README for more details. 75a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt */ 85a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 95a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#ifndef IEEE802_1X_KAY_H 105a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#define IEEE802_1X_KAY_H 115a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 125a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#include "utils/list.h" 135a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#include "common/defs.h" 145a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#include "common/ieee802_1x_defs.h" 155a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 165a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtstruct macsec_init_params; 175a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 189839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt#define MI_LEN 12 /* 96-bit Member Identifier */ 195a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#define MAX_KEY_LEN 32 /* 32 bytes, 256 bits */ 205a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#define MAX_CKN_LEN 32 /* 32 bytes, 256 bits */ 215a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 225a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt/* MKA timer, unit: millisecond */ 235a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#define MKA_HELLO_TIME 2000 245a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#define MKA_LIFE_TIME 6000 255a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#define MKA_SAK_RETIRE_TIME 3000 265a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 279839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt/** 289839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt * struct ieee802_1x_mka_ki - Key Identifier (KI) 299839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt * @mi: Key Server's Member Identifier 309839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt * @kn: Key Number, assigned by the Key Server 319839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt * IEEE 802.1X-2010 9.8 SAK generation, distribution, and selection 329839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt */ 335a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtstruct ieee802_1x_mka_ki { 345a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u8 mi[MI_LEN]; 355a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u32 kn; 365a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt}; 375a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 385a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtstruct ieee802_1x_mka_sci { 395a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u8 addr[ETH_ALEN]; 404ae50e65ef0eefe6d5c356acbc1839f8eac68af5Dmitry Shmidt be16 port; 415a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt}; 425a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 435a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtstruct mka_key { 445a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u8 key[MAX_KEY_LEN]; 455a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt size_t len; 465a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt}; 475a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 485a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtstruct mka_key_name { 495a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u8 name[MAX_CKN_LEN]; 505a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt size_t len; 515a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt}; 525a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 535a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtenum mka_created_mode { 545a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt PSK, 555a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt EAP_EXCHANGE, 565a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt}; 575a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 589839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidtstruct data_key { 599839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt u8 *key; 609839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt int key_len; 619839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct ieee802_1x_mka_ki key_identifier; 629839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt enum confidentiality_offset confidentiality_offset; 639839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt u8 an; 649839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt Boolean transmits; 659839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt Boolean receives; 669839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct os_time created_time; 679839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt u32 next_pn; 689839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 699839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt /* not defined data */ 709839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt Boolean rx_latest; 719839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt Boolean tx_latest; 729839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 739839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt int user; 749839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 759839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct dl_list list; 769839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt}; 779839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 789839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt/* TransmitSC in IEEE Std 802.1AE-2006, Figure 10-6 */ 799839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidtstruct transmit_sc { 809839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct ieee802_1x_mka_sci sci; /* const SCI sci */ 819839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt Boolean transmitting; /* bool transmitting (read only) */ 829839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 839839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct os_time created_time; /* Time createdTime */ 849839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 859839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt u8 encoding_sa; /* AN encodingSA (read only) */ 869839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt u8 enciphering_sa; /* AN encipheringSA (read only) */ 879839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 889839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt /* not defined data */ 899839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct dl_list list; 909839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct dl_list sa_list; 919839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt}; 929839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 939839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt/* TransmitSA in IEEE Std 802.1AE-2006, Figure 10-6 */ 949839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidtstruct transmit_sa { 959839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt Boolean in_use; /* bool inUse (read only) */ 969839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt u32 next_pn; /* PN nextPN (read only) */ 979839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct os_time created_time; /* Time createdTime */ 989839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 999839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt Boolean enable_transmit; /* bool EnableTransmit */ 1009839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 1019839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt u8 an; 1029839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt Boolean confidentiality; 1039839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct data_key *pkey; 1049839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 1059839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct transmit_sc *sc; 1069839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct dl_list list; /* list entry in struct transmit_sc::sa_list */ 1079839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt}; 1089839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 1099839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt/* ReceiveSC in IEEE Std 802.1AE-2006, Figure 10-6 */ 1109839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidtstruct receive_sc { 1119839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct ieee802_1x_mka_sci sci; /* const SCI sci */ 1129839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt Boolean receiving; /* bool receiving (read only) */ 1139839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 1149839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct os_time created_time; /* Time createdTime */ 1159839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 1169839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct dl_list list; 1179839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct dl_list sa_list; 1189839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt}; 1199839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 1209839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt/* ReceiveSA in IEEE Std 802.1AE-2006, Figure 10-6 */ 1219839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidtstruct receive_sa { 1229839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt Boolean enable_receive; /* bool enableReceive */ 1239839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt Boolean in_use; /* bool inUse (read only) */ 1249839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 1259839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt u32 next_pn; /* PN nextPN (read only) */ 1269839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt u32 lowest_pn; /* PN lowestPN (read only) */ 1279839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt u8 an; 1289839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct os_time created_time; 1299839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 1309839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct data_key *pkey; 1319839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct receive_sc *sc; /* list entry in struct receive_sc::sa_list */ 1329839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 1339839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct dl_list list; 1349839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt}; 1359839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 1365a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtstruct ieee802_1x_kay_ctx { 1375a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt /* pointer to arbitrary upper level context */ 1385a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt void *ctx; 1395a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1405a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt /* abstract wpa driver interface */ 1415a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt int (*macsec_init)(void *ctx, struct macsec_init_params *params); 1425a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt int (*macsec_deinit)(void *ctx); 1439839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt int (*macsec_get_capability)(void *priv, enum macsec_cap *cap); 1445a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt int (*enable_protect_frames)(void *ctx, Boolean enabled); 145abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt int (*enable_encrypt)(void *ctx, Boolean enabled); 1465a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt int (*set_replay_protect)(void *ctx, Boolean enabled, u32 window); 1477d17530e229db79208e99741071df97ea4faeec6Dmitry Shmidt int (*set_current_cipher_suite)(void *ctx, u64 cs); 1485a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt int (*enable_controlled_port)(void *ctx, Boolean enabled); 1499839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt int (*get_receive_lowest_pn)(void *ctx, struct receive_sa *sa); 1509839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt int (*get_transmit_next_pn)(void *ctx, struct transmit_sa *sa); 1519839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt int (*set_transmit_next_pn)(void *ctx, struct transmit_sa *sa); 1529839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt int (*create_receive_sc)(void *ctx, struct receive_sc *sc, 1535a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt enum validate_frames vf, 1545a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt enum confidentiality_offset co); 1559839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt int (*delete_receive_sc)(void *ctx, struct receive_sc *sc); 1569839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt int (*create_receive_sa)(void *ctx, struct receive_sa *sa); 1579839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt int (*delete_receive_sa)(void *ctx, struct receive_sa *sa); 1589839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt int (*enable_receive_sa)(void *ctx, struct receive_sa *sa); 1599839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt int (*disable_receive_sa)(void *ctx, struct receive_sa *sa); 1609839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt int (*create_transmit_sc)(void *ctx, struct transmit_sc *sc, 1615a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt enum confidentiality_offset co); 1629839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt int (*delete_transmit_sc)(void *ctx, struct transmit_sc *sc); 1639839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt int (*create_transmit_sa)(void *ctx, struct transmit_sa *sa); 1649839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt int (*delete_transmit_sa)(void *ctx, struct transmit_sa *sa); 1659839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt int (*enable_transmit_sa)(void *ctx, struct transmit_sa *sa); 1669839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt int (*disable_transmit_sa)(void *ctx, struct transmit_sa *sa); 1675a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt}; 1685a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1695a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtstruct ieee802_1x_kay { 1705a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt Boolean enable; 1715a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt Boolean active; 1725a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1735a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt Boolean authenticated; 1745a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt Boolean secured; 1755a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt Boolean failed; 1765a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1775a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_mka_sci actor_sci; 1785a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u8 actor_priority; 1795a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_mka_sci key_server_sci; 1805a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u8 key_server_priority; 1815a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1825a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt enum macsec_cap macsec_capable; 1835a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt Boolean macsec_desired; 1845a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt Boolean macsec_protect; 185abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt Boolean macsec_encrypt; 1865a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt Boolean macsec_replay_protect; 1875a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u32 macsec_replay_window; 1885a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt enum validate_frames macsec_validate; 1895a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt enum confidentiality_offset macsec_confidentiality; 1905a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1915a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u32 ltx_kn; 1925a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u8 ltx_an; 1935a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u32 lrx_kn; 1945a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u8 lrx_an; 1955a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1965a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u32 otx_kn; 1975a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u8 otx_an; 1985a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u32 orx_kn; 1995a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u8 orx_an; 2005a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2015a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt /* not defined in IEEE802.1X */ 2025a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ctx; 2035a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt Boolean is_key_server; 2045a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt Boolean is_obliged_key_server; 2055a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt char if_name[IFNAMSIZ]; 2065a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2077d17530e229db79208e99741071df97ea4faeec6Dmitry Shmidt unsigned int macsec_csindex; /* MACsec cipher suite table index */ 2085a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt int mka_algindex; /* MKA alg table index */ 2095a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2105a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u32 dist_kn; 211293335998d38c497293b1c41f7ad8342b507d458Dmitry Shmidt u32 rcvd_keys; 2125a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u8 dist_an; 2135a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt time_t dist_time; 2145a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2155a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u8 mka_version; 2165a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u8 algo_agility[4]; 2175a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2185a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u32 pn_exhaustion; 2195a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt Boolean port_enable; 2205a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt Boolean rx_enable; 2215a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt Boolean tx_enable; 2225a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2235a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct dl_list participant_list; 2245a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt enum macsec_policy policy; 2255a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2265a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_cp_sm *cp; 2275a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2285a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct l2_packet_data *l2_mka; 2295a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2305a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt enum validate_frames vf; 2315a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt enum confidentiality_offset co; 2325a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt}; 2335a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2345a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 235abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidtu64 mka_sci_u64(struct ieee802_1x_mka_sci *sci); 236abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt 2375a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtstruct ieee802_1x_kay * 2385a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtieee802_1x_kay_init(struct ieee802_1x_kay_ctx *ctx, enum macsec_policy policy, 239293335998d38c497293b1c41f7ad8342b507d458Dmitry Shmidt u16 port, u8 priority, const char *ifname, const u8 *addr); 2405a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtvoid ieee802_1x_kay_deinit(struct ieee802_1x_kay *kay); 2415a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2425a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtstruct ieee802_1x_mka_participant * 2435a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtieee802_1x_kay_create_mka(struct ieee802_1x_kay *kay, 2445a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct mka_key_name *ckn, struct mka_key *cak, 2455a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u32 life, enum mka_created_mode mode, 2465a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt Boolean is_authenticator); 2475a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtvoid ieee802_1x_kay_delete_mka(struct ieee802_1x_kay *kay, 2485a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct mka_key_name *ckn); 2495a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtvoid ieee802_1x_kay_mka_participate(struct ieee802_1x_kay *kay, 2505a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct mka_key_name *ckn, 2515a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt Boolean status); 2525a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint ieee802_1x_kay_new_sak(struct ieee802_1x_kay *kay); 2535a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint ieee802_1x_kay_change_cipher_suite(struct ieee802_1x_kay *kay, 2547d17530e229db79208e99741071df97ea4faeec6Dmitry Shmidt unsigned int cs_index); 2555a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2565a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint ieee802_1x_kay_set_latest_sa_attr(struct ieee802_1x_kay *kay, 2575a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_mka_ki *lki, u8 lan, 2585a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt Boolean ltx, Boolean lrx); 2595a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint ieee802_1x_kay_set_old_sa_attr(struct ieee802_1x_kay *kay, 2605a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_mka_ki *oki, 2615a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u8 oan, Boolean otx, Boolean orx); 2625a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint ieee802_1x_kay_create_sas(struct ieee802_1x_kay *kay, 2635a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_mka_ki *lki); 2645a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint ieee802_1x_kay_delete_sas(struct ieee802_1x_kay *kay, 2655a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_mka_ki *ki); 2665a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint ieee802_1x_kay_enable_tx_sas(struct ieee802_1x_kay *kay, 2675a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_mka_ki *lki); 2685a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint ieee802_1x_kay_enable_rx_sas(struct ieee802_1x_kay *kay, 2695a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_mka_ki *lki); 2705a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint ieee802_1x_kay_enable_new_info(struct ieee802_1x_kay *kay); 271293335998d38c497293b1c41f7ad8342b507d458Dmitry Shmidtint ieee802_1x_kay_get_status(struct ieee802_1x_kay *kay, char *buf, 272293335998d38c497293b1c41f7ad8342b507d458Dmitry Shmidt size_t buflen); 2735a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2745a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#endif /* IEEE802_1X_KAY_H */ 275