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 485a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_cp_control_replay(struct ieee802_1x_kay *kay, Boolean enabled, u32 win) 495a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 505a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 515a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 525a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay) { 535a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 545a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 555a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 565a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 575a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 585a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->set_replay_protect) { 595a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 605a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy set_replay_protect operation not supported"); 615a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 625a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 635a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 645a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->set_replay_protect(ops->ctx, enabled, win); 655a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 665a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 675a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 685a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_cp_control_current_cipher_suite(struct ieee802_1x_kay *kay, 695a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt const u8 *cs, size_t cs_len) 705a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 715a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 725a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 735a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay) { 745a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 755a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 765a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 775a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 785a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 795a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->set_current_cipher_suite) { 805a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 815a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy set_current_cipher_suite operation not supported"); 825a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 835a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 845a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 855a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->set_current_cipher_suite(ops->ctx, cs, cs_len); 865a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 875a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 885a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 895a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_cp_control_confidentiality_offset(struct ieee802_1x_kay *kay, 905a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt enum confidentiality_offset co) 915a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 925a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt kay->co = co; 935a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return 0; 945a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 955a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 965a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 975a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_cp_control_enable_port(struct ieee802_1x_kay *kay, Boolean enabled) 985a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 995a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 1005a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1015a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay) { 1025a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 1035a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 1045a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 1055a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1065a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 1075a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->enable_controlled_port) { 1085a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 1095a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy enable_controlled_port operation not supported"); 1105a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 1115a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 1125a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1135a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->enable_controlled_port(ops->ctx, enabled); 1145a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 1155a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1165a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1175a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_get_receive_lowest_pn(struct ieee802_1x_kay *kay, 1185a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct receive_sa *rxsa) 1195a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 1205a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 1215a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1225a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !rxsa) { 1235a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 1245a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 1255a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 1265a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1275a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 1285a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->get_receive_lowest_pn) { 1295a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 1305a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy get_receive_lowest_pn operation not supported"); 1315a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 1325a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 1335a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1345a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->get_receive_lowest_pn(ops->ctx, 1355a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt rxsa->sc->channel, 1365a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt rxsa->an, 1375a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt &rxsa->lowest_pn); 1385a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 1395a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1405a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1415a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_get_transmit_next_pn(struct ieee802_1x_kay *kay, 1425a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct transmit_sa *txsa) 1435a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 1445a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 1455a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1465a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !txsa) { 1475a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 1485a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 1495a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 1505a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1515a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 1525a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->get_transmit_next_pn) { 1535a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 1545a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy get_receive_lowest_pn operation not supported"); 1555a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 1565a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 1575a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1585a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->get_transmit_next_pn(ops->ctx, 1595a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt txsa->sc->channel, 1605a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt txsa->an, 1615a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt &txsa->next_pn); 1625a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 1635a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1645a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1655a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_set_transmit_next_pn(struct ieee802_1x_kay *kay, 1665a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct transmit_sa *txsa) 1675a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 1685a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 1695a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1705a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !txsa) { 1715a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 1725a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 1735a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 1745a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1755a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 1765a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->set_transmit_next_pn) { 1775a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 1785a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy get_receive_lowest_pn operation not supported"); 1795a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 1805a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 1815a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1825a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->set_transmit_next_pn(ops->ctx, 1835a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt txsa->sc->channel, 1845a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt txsa->an, 1855a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt txsa->next_pn); 1865a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 1875a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1885a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1895a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_get_available_receive_sc(struct ieee802_1x_kay *kay, u32 *channel) 1905a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 1915a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 1925a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1935a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay) { 1945a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 1955a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 1965a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 1975a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 1985a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 1995a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->get_available_receive_sc) { 2005a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 2015a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy get_available_receive_sc operation not supported"); 2025a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 2035a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 2045a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2055a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->get_available_receive_sc(ops->ctx, channel); 2065a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 2075a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2085a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2095a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_create_receive_sc(struct ieee802_1x_kay *kay, struct receive_sc *rxsc) 2105a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 2115a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 2125a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2135a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !rxsc) { 2145a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 2155a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 2165a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 2175a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2185a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 2195a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->create_receive_sc) { 2205a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 2215a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy create_receive_sc operation not supported"); 2225a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 2235a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 2245a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2255a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->create_receive_sc(ops->ctx, rxsc->channel, &rxsc->sci, 2265a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt kay->vf, kay->co); 2275a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 2285a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2295a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2305a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_delete_receive_sc(struct ieee802_1x_kay *kay, struct receive_sc *rxsc) 2315a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 2325a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 2335a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2345a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !rxsc) { 2355a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 2365a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 2375a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 2385a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2395a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 2405a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->delete_receive_sc) { 2415a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 2425a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy delete_receive_sc operation not supported"); 2435a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 2445a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 2455a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2465a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->delete_receive_sc(ops->ctx, rxsc->channel); 2475a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 2485a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2495a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2505a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_create_receive_sa(struct ieee802_1x_kay *kay, struct receive_sa *rxsa) 2515a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 2525a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 2535a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2545a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !rxsa) { 2555a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 2565a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 2575a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 2585a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2595a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 2605a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->create_receive_sa) { 2615a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 2625a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy create_receive_sa operation not supported"); 2635a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 2645a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 2655a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2665a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->create_receive_sa(ops->ctx, rxsa->sc->channel, rxsa->an, 2675a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt rxsa->lowest_pn, rxsa->pkey->key); 2685a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 2695a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2705a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2715a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_enable_receive_sa(struct ieee802_1x_kay *kay, struct receive_sa *rxsa) 2725a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 2735a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 2745a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2755a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !rxsa) { 2765a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 2775a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 2785a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 2795a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2805a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 2815a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->enable_receive_sa) { 2825a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 2835a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy enable_receive_sa operation not supported"); 2845a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 2855a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 2865a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2875a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt rxsa->enable_receive = TRUE; 2885a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2895a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->enable_receive_sa(ops->ctx, rxsa->sc->channel, rxsa->an); 2905a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 2915a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2925a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2935a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_disable_receive_sa(struct ieee802_1x_kay *kay, struct receive_sa *rxsa) 2945a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 2955a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 2965a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 2975a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !rxsa) { 2985a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 2995a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 3005a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 3015a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3025a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 3035a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->disable_receive_sa) { 3045a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 3055a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy disable_receive_sa operation not supported"); 3065a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 3075a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 3085a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3095a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt rxsa->enable_receive = FALSE; 3105a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3115a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->disable_receive_sa(ops->ctx, rxsa->sc->channel, rxsa->an); 3125a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 3135a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3145a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3155a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_get_available_transmit_sc(struct ieee802_1x_kay *kay, u32 *channel) 3165a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 3175a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 3185a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3195a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay) { 3205a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 3215a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 3225a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 3235a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3245a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 3255a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->get_available_transmit_sc) { 3265a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 3275a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy get_available_transmit_sc operation not supported"); 3285a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 3295a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 3305a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3315a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->get_available_transmit_sc(ops->ctx, channel); 3325a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 3335a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3345a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3355a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_create_transmit_sc(struct ieee802_1x_kay *kay, 3365a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct transmit_sc *txsc) 3375a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 3385a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 3395a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3405a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !txsc) { 3415a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 3425a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 3435a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 3445a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3455a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 3465a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->create_transmit_sc) { 3475a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 3485a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy create_transmit_sc operation not supported"); 3495a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 3505a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 3515a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3525a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->create_transmit_sc(ops->ctx, txsc->channel, &txsc->sci, 3535a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt kay->co); 3545a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 3555a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3565a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3575a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_delete_transmit_sc(struct ieee802_1x_kay *kay, 3585a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct transmit_sc *txsc) 3595a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 3605a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 3615a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3625a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !txsc) { 3635a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 3645a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 3655a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 3665a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3675a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 3685a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->delete_transmit_sc) { 3695a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 3705a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy delete_transmit_sc operation not supported"); 3715a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 3725a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 3735a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3745a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->delete_transmit_sc(ops->ctx, txsc->channel); 3755a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 3765a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3775a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3785a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_create_transmit_sa(struct ieee802_1x_kay *kay, 3795a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct transmit_sa *txsa) 3805a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 3815a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 3825a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3835a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !txsa) { 3845a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 3855a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 3865a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 3875a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3885a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 3895a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->create_transmit_sa) { 3905a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 3915a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy create_transmit_sa operation not supported"); 3925a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 3935a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 3945a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 3955a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->create_transmit_sa(ops->ctx, txsa->sc->channel, txsa->an, 3965a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt txsa->next_pn, txsa->confidentiality, 3975a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt txsa->pkey->key); 3985a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 3995a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4005a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4015a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_enable_transmit_sa(struct ieee802_1x_kay *kay, 4025a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct transmit_sa *txsa) 4035a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 4045a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 4055a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4065a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !txsa) { 4075a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 4085a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 4095a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 4105a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4115a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 4125a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->enable_transmit_sa) { 4135a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 4145a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy enable_transmit_sa operation not supported"); 4155a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 4165a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 4175a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4185a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt txsa->enable_transmit = TRUE; 4195a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4205a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->enable_transmit_sa(ops->ctx, txsa->sc->channel, txsa->an); 4215a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 4225a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4235a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4245a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_disable_transmit_sa(struct ieee802_1x_kay *kay, 4255a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct transmit_sa *txsa) 4265a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 4275a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 4285a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4295a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay || !txsa) { 4305a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 4315a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 4325a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 4335a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4345a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 4355a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->disable_transmit_sa) { 4365a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 4375a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy disable_transmit_sa operation not supported"); 4385a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 4395a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 4405a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4415a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt txsa->enable_transmit = FALSE; 4425a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4435a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->disable_transmit_sa(ops->ctx, txsa->sc->channel, txsa->an); 4445a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 4455a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4465a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4475a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_init_macsec(struct ieee802_1x_kay *kay) 4485a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 4495a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt int ret; 4505a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 4515a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct macsec_init_params params; 4525a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4535a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!kay) { 4545a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__); 4555a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 4565a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 4575a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4585a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ops = kay->ctx; 4595a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt if (!ops || !ops->macsec_init) { 4605a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 4615a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy macsec_init operation not supported"); 4625a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 4635a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 4645a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4655a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt params.use_es = FALSE; 4665a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt params.use_scb = FALSE; 4675a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt params.always_include_sci = TRUE; 4685a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4695a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt ret = ops->macsec_init(ops->ctx, ¶ms); 4705a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4715a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ret; 4725a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 4735a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4745a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4755a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtint secy_deinit_macsec(struct ieee802_1x_kay *kay) 4765a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt{ 4775a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt struct ieee802_1x_kay_ctx *ops; 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_deinit) { 4865a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt wpa_printf(MSG_ERROR, 4875a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt "KaY: secy macsec_deinit operation not supported"); 4885a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return -1; 4895a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt } 4905a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 4915a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt return ops->macsec_deinit(ops->ctx); 4925a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} 493