15a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt /* 25a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt * SecY Operations 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#include "utils/includes.h" 105a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 115a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#include "utils/common.h" 125a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#include "utils/eloop.h" 135a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#include "common/defs.h" 145a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#include "drivers/driver.h" 155a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#include "pae/ieee802_1x_kay.h" 165a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#include "pae/ieee802_1x_kay_i.h" 175a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#include "pae/ieee802_1x_secy_ops.h" 185a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 195a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 205a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_cp_control_validate_frames(struct ieee802_1x_kay *kay, 215a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt enum validate_frames vf) 225a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 235a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt kay->vf = vf; 245a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return 0; 255a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 265a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 275a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 285a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_cp_control_protect_frames(struct ieee802_1x_kay *kay, Boolean enabled) 295a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 305a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 315a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 325a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay) { 335a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 345a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 355a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 365a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 375a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 385a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->enable_protect_frames) { 395a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 405a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy enable_protect_frames operation not supported"); 415a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 425a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 435a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 445a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->enable_protect_frames(ops->ctx, enabled); 455a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 465a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 475a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 48abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidtint secy_cp_control_encrypt(struct ieee802_1x_kay *kay, Boolean enabled) 49abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt{ 50abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt struct ieee802_1x_kay_ctx *ops; 51abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt 52abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt if (!kay) { 53abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 54abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt return -1; 55abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt } 56abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt 57abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt ops = kay->ctx; 58abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt if (!ops || !ops->enable_encrypt) { 59abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt wpa_printf(MSG_ERROR, 60abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt "KaY: secy enable_encrypt operation not supported"); 61abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt return -1; 62abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt } 63abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt 64abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt return ops->enable_encrypt(ops->ctx, enabled); 65abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt} 66abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt 67abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt 685a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_cp_control_replay(struct ieee802_1x_kay *kay, Boolean enabled, u32 win) 695a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 705a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 715a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 725a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay) { 735a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 745a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 755a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 765a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 775a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 785a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->set_replay_protect) { 795a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 805a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy set_replay_protect operation not supported"); 815a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 825a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 835a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 845a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->set_replay_protect(ops->ctx, enabled, win); 855a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 865a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 875a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 887d17530e229db79208e99741071df97ea4faeec6Dmitry Shmidtint secy_cp_control_current_cipher_suite(struct ieee802_1x_kay *kay, u64 cs) 895a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 905a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 915a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 925a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay) { 935a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 945a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 955a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 965a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 975a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 985a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->set_current_cipher_suite) { 995a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 1005a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy set_current_cipher_suite operation not supported"); 1015a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 1025a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 1035a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1047d17530e229db79208e99741071df97ea4faeec6Dmitry Shmidt return ops->set_current_cipher_suite(ops->ctx, cs); 1055a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 1065a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1075a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1085a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_cp_control_confidentiality_offset(struct ieee802_1x_kay *kay, 1095a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt enum confidentiality_offset co) 1105a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 1115a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt kay->co = co; 1125a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return 0; 1135a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 1145a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1155a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1165a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_cp_control_enable_port(struct ieee802_1x_kay *kay, Boolean enabled) 1175a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 1185a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 1195a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1205a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay) { 1215a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 1225a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 1235a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 1245a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1255a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 1265a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->enable_controlled_port) { 1275a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 1285a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy enable_controlled_port operation not supported"); 1295a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 1305a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 1315a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1325a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->enable_controlled_port(ops->ctx, enabled); 1335a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 1345a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1355a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1369839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidtint secy_get_capability(struct ieee802_1x_kay *kay, enum macsec_cap *cap) 1375a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 1385a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 1395a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1409839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt if (!kay) { 1415a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 1425a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 1435a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 1445a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1455a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 1469839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt if (!ops || !ops->macsec_get_capability) { 1475a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 1489839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt "KaY: secy macsec_get_capability operation not supported"); 1495a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 1505a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 1515a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1529839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt return ops->macsec_get_capability(ops->ctx, cap); 1535a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 1545a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1555a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1569839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidtint secy_get_receive_lowest_pn(struct ieee802_1x_kay *kay, 1579839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct receive_sa *rxsa) 1585a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 1595a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 1605a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1619839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt if (!kay || !rxsa) { 1625a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 1635a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 1645a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 1655a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1665a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 1679839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt if (!ops || !ops->get_receive_lowest_pn) { 1685a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 1695a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy get_receive_lowest_pn operation not supported"); 1705a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 1715a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 1725a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1739839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt return ops->get_receive_lowest_pn(ops->ctx, rxsa); 1745a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 1755a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1765a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1779839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidtint secy_get_transmit_next_pn(struct ieee802_1x_kay *kay, 1785a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct transmit_sa *txsa) 1795a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 1805a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 1815a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1825a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !txsa) { 1835a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 1845a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 1855a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 1865a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1875a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 1889839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt if (!ops || !ops->get_transmit_next_pn) { 1895a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 1905a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy get_receive_lowest_pn operation not supported"); 1915a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 1925a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 1935a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1949839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt return ops->get_transmit_next_pn(ops->ctx, txsa); 1955a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 1965a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1975a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1989839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidtint secy_set_transmit_next_pn(struct ieee802_1x_kay *kay, 1999839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct transmit_sa *txsa) 2005a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 2015a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 2025a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2039839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt if (!kay || !txsa) { 2045a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 2055a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 2065a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 2075a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2085a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 2099839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt if (!ops || !ops->set_transmit_next_pn) { 2105a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 2119839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt "KaY: secy get_receive_lowest_pn operation not supported"); 2125a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 2135a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 2145a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2159839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt return ops->set_transmit_next_pn(ops->ctx, txsa); 2165a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 2175a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2185a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2195a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_create_receive_sc(struct ieee802_1x_kay *kay, struct receive_sc *rxsc) 2205a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 2215a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 2225a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2235a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !rxsc) { 2245a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 2255a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 2265a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 2275a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2285a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 2295a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->create_receive_sc) { 2305a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 2315a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy create_receive_sc operation not supported"); 2325a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 2335a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 2345a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2359839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt return ops->create_receive_sc(ops->ctx, rxsc, kay->vf, kay->co); 2365a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 2375a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2385a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2395a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_delete_receive_sc(struct ieee802_1x_kay *kay, struct receive_sc *rxsc) 2405a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 2415a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 2425a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2435a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !rxsc) { 2445a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 2455a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 2465a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 2475a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2485a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 2495a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->delete_receive_sc) { 2505a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 2515a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy delete_receive_sc operation not supported"); 2525a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 2535a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 2545a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2559839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt return ops->delete_receive_sc(ops->ctx, rxsc); 2565a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 2575a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2585a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2595a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_create_receive_sa(struct ieee802_1x_kay *kay, struct receive_sa *rxsa) 2605a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 2615a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 2625a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2635a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !rxsa) { 2645a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 2655a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 2665a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 2675a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2685a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 2695a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->create_receive_sa) { 2705a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 2715a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy create_receive_sa operation not supported"); 2725a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 2735a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 2745a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2759839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt return ops->create_receive_sa(ops->ctx, rxsa); 2765a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 2775a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2785a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2799839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidtint secy_delete_receive_sa(struct ieee802_1x_kay *kay, struct receive_sa *rxsa) 2805a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 2815a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 2825a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2835a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !rxsa) { 2845a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 2855a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 2865a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 2875a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2885a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 2899839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt if (!ops || !ops->delete_receive_sa) { 2905a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 2919839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt "KaY: secy delete_receive_sa operation not supported"); 2925a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 2935a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 2945a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2959839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt return ops->delete_receive_sa(ops->ctx, rxsa); 2965a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 2975a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2985a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2999839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidtint secy_enable_receive_sa(struct ieee802_1x_kay *kay, struct receive_sa *rxsa) 3005a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 3015a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 3025a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3035a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !rxsa) { 3045a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 3055a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 3065a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 3075a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3085a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 3099839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt if (!ops || !ops->enable_receive_sa) { 3105a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 3119839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt "KaY: secy enable_receive_sa operation not supported"); 3125a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 3135a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 3145a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3159839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt rxsa->enable_receive = TRUE; 3165a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3179839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt return ops->enable_receive_sa(ops->ctx, rxsa); 3185a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 3195a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3205a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3219839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidtint secy_disable_receive_sa(struct ieee802_1x_kay *kay, struct receive_sa *rxsa) 3225a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 3235a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 3245a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3259839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt if (!kay || !rxsa) { 3265a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 3275a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 3285a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 3295a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3305a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 3319839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt if (!ops || !ops->disable_receive_sa) { 3325a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 3339839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt "KaY: secy disable_receive_sa operation not supported"); 3345a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 3355a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 3365a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3379839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt rxsa->enable_receive = FALSE; 3389839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 3399839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt return ops->disable_receive_sa(ops->ctx, rxsa); 3405a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 3415a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3425a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3435a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_create_transmit_sc(struct ieee802_1x_kay *kay, 3445a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct transmit_sc *txsc) 3455a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 3465a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 3475a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3485a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !txsc) { 3495a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 3505a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 3515a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 3525a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3535a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 3545a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->create_transmit_sc) { 3555a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 3565a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy create_transmit_sc operation not supported"); 3575a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 3585a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 3595a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3609839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt return ops->create_transmit_sc(ops->ctx, txsc, kay->co); 3615a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 3625a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3635a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3645a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_delete_transmit_sc(struct ieee802_1x_kay *kay, 3655a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct transmit_sc *txsc) 3665a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 3675a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 3685a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3695a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !txsc) { 3705a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 3715a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 3725a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 3735a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3745a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 3755a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->delete_transmit_sc) { 3765a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 3775a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy delete_transmit_sc operation not supported"); 3785a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 3795a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 3805a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3819839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt return ops->delete_transmit_sc(ops->ctx, txsc); 3825a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 3835a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3845a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3855a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_create_transmit_sa(struct ieee802_1x_kay *kay, 3865a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct transmit_sa *txsa) 3875a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 3885a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 3895a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3905a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !txsa) { 3915a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 3925a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 3935a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 3945a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3955a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 3965a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->create_transmit_sa) { 3975a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 3985a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy create_transmit_sa operation not supported"); 3995a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 4005a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 4015a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4029839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt return ops->create_transmit_sa(ops->ctx, txsa); 4039839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt} 4049839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 4059839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 4069839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidtint secy_delete_transmit_sa(struct ieee802_1x_kay *kay, 4079839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct transmit_sa *txsa) 4089839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt{ 4099839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt struct ieee802_1x_kay_ctx *ops; 4109839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 4119839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt if (!kay || !txsa) { 4129839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 4139839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt return -1; 4149839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt } 4159839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 4169839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt ops = kay->ctx; 4179839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt if (!ops || !ops->delete_transmit_sa) { 4189839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt wpa_printf(MSG_ERROR, 4199839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt "KaY: secy delete_transmit_sa operation not supported"); 4209839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt return -1; 4219839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt } 4229839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 4239839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt return ops->delete_transmit_sa(ops->ctx, txsa); 4245a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 4255a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4265a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4275a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_enable_transmit_sa(struct ieee802_1x_kay *kay, 4285a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct transmit_sa *txsa) 4295a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 4305a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 4315a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4325a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !txsa) { 4335a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 4345a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 4355a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 4365a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4375a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 4385a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->enable_transmit_sa) { 4395a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 4405a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy enable_transmit_sa operation not supported"); 4415a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 4425a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 4435a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4445a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt txsa->enable_transmit = TRUE; 4455a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4469839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt return ops->enable_transmit_sa(ops->ctx, txsa); 4475a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 4485a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4495a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4505a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_disable_transmit_sa(struct ieee802_1x_kay *kay, 4515a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct transmit_sa *txsa) 4525a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 4535a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 4545a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4555a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !txsa) { 4565a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 4575a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 4585a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 4595a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4605a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 4615a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->disable_transmit_sa) { 4625a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 4635a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy disable_transmit_sa operation not supported"); 4645a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 4655a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 4665a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4675a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt txsa->enable_transmit = FALSE; 4685a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4699839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt return ops->disable_transmit_sa(ops->ctx, txsa); 4705a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 4715a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4725a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4735a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_init_macsec(struct ieee802_1x_kay *kay) 4745a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 4755a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt int ret; 4765a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 4775a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct macsec_init_params params; 4785a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4795a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay) { 4805a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 4815a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 4825a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 4835a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4845a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 4855a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->macsec_init) { 4865a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 4875a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy macsec_init operation not supported"); 4885a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 4895a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 4905a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4915a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt params.use_es = FALSE; 4925a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt params.use_scb = FALSE; 4935a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt params.always_include_sci = TRUE; 4945a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4955a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ret = ops->macsec_init(ops->ctx, ¶ms); 4965a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4975a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ret; 4985a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 4995a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 5005a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 5015a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_deinit_macsec(struct ieee802_1x_kay *kay) 5025a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 5035a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 5045a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 5055a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay) { 5065a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 5075a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 5085a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 5095a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 5105a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 5115a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->macsec_deinit) { 5125a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 5135a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy macsec_deinit operation not supported"); 5145a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 5155a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 5165a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 5175a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->macsec_deinit(ops->ctx); 5185a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 519