Blame SOURCES/macsec-0008-mka-Remove-channel-hacks-from-the-stack-and-the-macs.patch

9c84ec
From 6f551abdfca16021e7cd9d4ac891e3eb27010a90 Mon Sep 17 00:00:00 2001
9c84ec
Message-Id: <6f551abdfca16021e7cd9d4ac891e3eb27010a90.1488376601.git.dcaratti@redhat.com>
9c84ec
From: Sabrina Dubroca <sd@queasysnail.net>
9c84ec
Date: Fri, 21 Oct 2016 14:45:26 +0200
9c84ec
Subject: [PATCH] mka: Remove "channel" hacks from the stack and the macsec_qca
9c84ec
 driver
9c84ec
9c84ec
This is specific to the macsec_qca driver. The core implementation
9c84ec
shouldn't care about this, and only deal with the complete secure
9c84ec
channel, and pass this down to the driver.
9c84ec
9c84ec
Drivers that have such limitations should take care of these in their
9c84ec
->create functions and throw an error.
9c84ec
9c84ec
Since the core MKA no longer saves the channel number, the macsec_qca
9c84ec
driver must be able to recover it. Add a map (which is just an array
9c84ec
since it's quite short) to match SCIs to channel numbers, and lookup
9c84ec
functions that will be called in every place where functions would get
9c84ec
the channel from the core code. Getting an available channel should be
9c84ec
part of channel creation, instead of being a preparation step.
9c84ec
9c84ec
Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
9c84ec
---
9c84ec
 src/drivers/driver.h            |  16 ----
9c84ec
 src/drivers/driver_macsec_qca.c | 174 +++++++++++++++++++++++++++++++++-------
9c84ec
 src/pae/ieee802_1x_kay.c        |  41 +++-------
9c84ec
 src/pae/ieee802_1x_kay.h        |   7 --
9c84ec
 src/pae/ieee802_1x_secy_ops.c   |  40 ---------
9c84ec
 src/pae/ieee802_1x_secy_ops.h   |   2 -
9c84ec
 wpa_supplicant/driver_i.h       |  18 -----
9c84ec
 wpa_supplicant/wpas_kay.c       |  14 ----
9c84ec
 8 files changed, 159 insertions(+), 153 deletions(-)
9c84ec
9c84ec
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
9c84ec
index aeb9694..54ae6b7 100644
9c84ec
--- a/src/drivers/driver.h
9c84ec
+++ b/src/drivers/driver.h
9c84ec
@@ -3390,14 +3390,6 @@ struct wpa_driver_ops {
9c84ec
 	int (*set_transmit_next_pn)(void *priv, struct transmit_sa *sa);
9c84ec
 
9c84ec
 	/**
9c84ec
-	 * get_available_receive_sc - get available receive channel
9c84ec
-	 * @priv: Private driver interface data
9c84ec
-	 * @channel: secure channel
9c84ec
-	 * Returns: 0 on success, -1 on failure (or if not supported)
9c84ec
-	 */
9c84ec
-	int (*get_available_receive_sc)(void *priv, u32 *channel);
9c84ec
-
9c84ec
-	/**
9c84ec
 	 * create_receive_sc - create secure channel for receiving
9c84ec
 	 * @priv: Private driver interface data
9c84ec
 	 * @sc: secure channel
9c84ec
@@ -3443,14 +3435,6 @@ struct wpa_driver_ops {
9c84ec
 	int (*disable_receive_sa)(void *priv, struct receive_sa *sa);
9c84ec
 
9c84ec
 	/**
9c84ec
-	 * get_available_transmit_sc - get available transmit channel
9c84ec
-	 * @priv: Private driver interface data
9c84ec
-	 * @channel: secure channel
9c84ec
-	 * Returns: 0 on success, -1 on failure (or if not supported)
9c84ec
-	 */
9c84ec
-	int (*get_available_transmit_sc)(void *priv, u32 *channel);
9c84ec
-
9c84ec
-	/**
9c84ec
 	 * create_transmit_sc - create secure connection for transmit
9c84ec
 	 * @priv: private driver interface data from init()
9c84ec
 	 * @sc: secure channel
9c84ec
diff --git a/src/drivers/driver_macsec_qca.c b/src/drivers/driver_macsec_qca.c
9c84ec
index 041bcf5..22d414c 100644
9c84ec
--- a/src/drivers/driver_macsec_qca.c
9c84ec
+++ b/src/drivers/driver_macsec_qca.c
9c84ec
@@ -56,6 +56,10 @@
9c84ec
 static const u8 pae_group_addr[ETH_ALEN] =
9c84ec
 { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x03 };
9c84ec
 
9c84ec
+struct channel_map {
9c84ec
+	struct ieee802_1x_mka_sci sci;
9c84ec
+};
9c84ec
+
9c84ec
 struct macsec_qca_data {
9c84ec
 	char ifname[IFNAMSIZ + 1];
9c84ec
 	u32 secy_id;
9c84ec
@@ -72,6 +76,9 @@ struct macsec_qca_data {
9c84ec
 	Boolean protect_frames;
9c84ec
 	Boolean replay_protect;
9c84ec
 	u32 replay_window;
9c84ec
+
9c84ec
+	struct channel_map receive_channel_map[MAXSC];
9c84ec
+	struct channel_map transmit_channel_map[MAXSC];
9c84ec
 };
9c84ec
 
9c84ec
 
9c84ec
@@ -526,6 +533,68 @@ static int macsec_qca_enable_controlled_port(void *priv, Boolean enabled)
9c84ec
 }
9c84ec
 
9c84ec
 
9c84ec
+static int macsec_qca_lookup_channel(struct channel_map *map,
9c84ec
+				     struct ieee802_1x_mka_sci *sci,
9c84ec
+				     u32 *channel)
9c84ec
+{
9c84ec
+	u32 i;
9c84ec
+
9c84ec
+	for (i = 0; i < MAXSC; i++) {
9c84ec
+		if (os_memcmp(&map[i].sci, sci,
9c84ec
+			      sizeof(struct ieee802_1x_mka_sci)) == 0) {
9c84ec
+			*channel = i;
9c84ec
+			return 0;
9c84ec
+		}
9c84ec
+	}
9c84ec
+
9c84ec
+	return -1;
9c84ec
+}
9c84ec
+
9c84ec
+
9c84ec
+static void macsec_qca_register_channel(struct channel_map *map,
9c84ec
+					struct ieee802_1x_mka_sci *sci,
9c84ec
+					u32 channel)
9c84ec
+{
9c84ec
+	os_memcpy(&map[channel].sci, sci, sizeof(struct ieee802_1x_mka_sci));
9c84ec
+}
9c84ec
+
9c84ec
+
9c84ec
+static int macsec_qca_lookup_receive_channel(struct macsec_qca_data *drv,
9c84ec
+					     struct receive_sc *sc,
9c84ec
+					     u32 *channel)
9c84ec
+{
9c84ec
+	return macsec_qca_lookup_channel(drv->receive_channel_map, &sc->sci,
9c84ec
+					 channel);
9c84ec
+}
9c84ec
+
9c84ec
+
9c84ec
+static void macsec_qca_register_receive_channel(struct macsec_qca_data *drv,
9c84ec
+						struct receive_sc *sc,
9c84ec
+						u32 channel)
9c84ec
+{
9c84ec
+	macsec_qca_register_channel(drv->receive_channel_map, &sc->sci,
9c84ec
+				    channel);
9c84ec
+}
9c84ec
+
9c84ec
+
9c84ec
+static int macsec_qca_lookup_transmit_channel(struct macsec_qca_data *drv,
9c84ec
+					      struct transmit_sc *sc,
9c84ec
+					      u32 *channel)
9c84ec
+{
9c84ec
+	return macsec_qca_lookup_channel(drv->transmit_channel_map, &sc->sci,
9c84ec
+					 channel);
9c84ec
+}
9c84ec
+
9c84ec
+
9c84ec
+static void macsec_qca_register_transmit_channel(struct macsec_qca_data *drv,
9c84ec
+						 struct transmit_sc *sc,
9c84ec
+						 u32 channel)
9c84ec
+{
9c84ec
+	macsec_qca_register_channel(drv->transmit_channel_map, &sc->sci,
9c84ec
+				    channel);
9c84ec
+}
9c84ec
+
9c84ec
+
9c84ec
 static int macsec_qca_get_receive_lowest_pn(void *priv, struct receive_sa *sa)
9c84ec
 {
9c84ec
 	struct macsec_qca_data *drv = priv;
9c84ec
@@ -533,7 +602,11 @@ static int macsec_qca_get_receive_lowest_pn(void *priv, struct receive_sa *sa)
9c84ec
 	u32 next_pn = 0;
9c84ec
 	bool enabled = FALSE;
9c84ec
 	u32 win;
9c84ec
-	u32 channel = sa->sc->channel;
9c84ec
+	u32 channel;
9c84ec
+
9c84ec
+	ret = macsec_qca_lookup_receive_channel(priv, sa->sc, &channel);
9c84ec
+	if (ret != 0)
9c84ec
+		return ret;
9c84ec
 
9c84ec
 	ret += nss_macsec_secy_rx_sa_next_pn_get(drv->secy_id, channel, sa->an,
9c84ec
 						 &next_pn);
9c84ec
@@ -557,7 +630,11 @@ static int macsec_qca_get_transmit_next_pn(void *priv, struct transmit_sa *sa)
9c84ec
 {
9c84ec
 	struct macsec_qca_data *drv = priv;
9c84ec
 	int ret = 0;
9c84ec
-	u32 channel = sa->sc->channel;
9c84ec
+	u32 channel;
9c84ec
+
9c84ec
+	ret = macsec_qca_lookup_transmit_channel(priv, sa->sc, &channel);
9c84ec
+	if (ret != 0)
9c84ec
+		return ret;
9c84ec
 
9c84ec
 	ret += nss_macsec_secy_tx_sa_next_pn_get(drv->secy_id, channel, sa->an,
9c84ec
 						 &sa->next_pn);
9c84ec
@@ -572,8 +649,11 @@ int macsec_qca_set_transmit_next_pn(void *priv, struct transmit_sa *sa)
9c84ec
 {
9c84ec
 	struct macsec_qca_data *drv = priv;
9c84ec
 	int ret = 0;
9c84ec
-	u32 channel = sa->sc->channel;
9c84ec
+	u32 channel;
9c84ec
 
9c84ec
+	ret = macsec_qca_lookup_transmit_channel(priv, sa->sc, &channel);
9c84ec
+	if (ret != 0)
9c84ec
+		return ret;
9c84ec
 
9c84ec
 	ret += nss_macsec_secy_tx_sa_next_pn_set(drv->secy_id, channel, sa->an,
9c84ec
 						 sa->next_pn);
9c84ec
@@ -620,10 +700,14 @@ static int macsec_qca_create_receive_sc(void *priv, struct receive_sc *sc,
9c84ec
 	fal_rx_prc_lut_t entry;
9c84ec
 	fal_rx_sc_validate_frame_e vf;
9c84ec
 	enum validate_frames validate_frames = validation;
9c84ec
-	u32 channel = sc->channel;
9c84ec
+	u32 channel;
9c84ec
 	const u8 *sci_addr = sc->sci.addr;
9c84ec
 	u16 sci_port = be_to_host16(sc->sci.port);
9c84ec
 
9c84ec
+	ret = macsec_qca_get_available_receive_sc(priv, &channel);
9c84ec
+	if (ret != 0)
9c84ec
+		return ret;
9c84ec
+
9c84ec
 	wpa_printf(MSG_DEBUG, "%s: channel=%d", __func__, channel);
9c84ec
 
9c84ec
 	/* rx prc lut */
9c84ec
@@ -657,6 +741,8 @@ static int macsec_qca_create_receive_sc(void *priv, struct receive_sc *sc,
9c84ec
 							    channel,
9c84ec
 							    drv->replay_window);
9c84ec
 
9c84ec
+	macsec_qca_register_receive_channel(drv, sc, channel);
9c84ec
+
9c84ec
 	return ret;
9c84ec
 }
9c84ec
 
9c84ec
@@ -664,9 +750,13 @@ static int macsec_qca_create_receive_sc(void *priv, struct receive_sc *sc,
9c84ec
 static int macsec_qca_delete_receive_sc(void *priv, struct receive_sc *sc)
9c84ec
 {
9c84ec
 	struct macsec_qca_data *drv = priv;
9c84ec
-	int ret = 0;
9c84ec
+	int ret;
9c84ec
 	fal_rx_prc_lut_t entry;
9c84ec
-	u32 channel = sc->channel;
9c84ec
+	u32 channel;
9c84ec
+
9c84ec
+	ret = macsec_qca_lookup_receive_channel(priv, sc, &channel);
9c84ec
+	if (ret != 0)
9c84ec
+		return ret;
9c84ec
 
9c84ec
 	wpa_printf(MSG_DEBUG, "%s: channel=%d", __func__, channel);
9c84ec
 
9c84ec
@@ -683,10 +773,14 @@ static int macsec_qca_delete_receive_sc(void *priv, struct receive_sc *sc)
9c84ec
 static int macsec_qca_create_receive_sa(void *priv, struct receive_sa *sa)
9c84ec
 {
9c84ec
 	struct macsec_qca_data *drv = priv;
9c84ec
-	int ret = 0;
9c84ec
+	int ret;
9c84ec
 	fal_rx_sak_t rx_sak;
9c84ec
 	int i = 0;
9c84ec
-	u32 channel = sa->sc->channel;
9c84ec
+	u32 channel;
9c84ec
+
9c84ec
+	ret = macsec_qca_lookup_receive_channel(priv, sa->sc, &channel);
9c84ec
+	if (ret != 0)
9c84ec
+		return ret;
9c84ec
 
9c84ec
 	wpa_printf(MSG_DEBUG, "%s, channel=%d, an=%d, lpn=0x%x",
9c84ec
 		   __func__, channel, sa->an, sa->lowest_pn);
9c84ec
@@ -706,9 +800,12 @@ static int macsec_qca_create_receive_sa(void *priv, struct receive_sa *sa)
9c84ec
 static int macsec_qca_enable_receive_sa(void *priv, struct receive_sa *sa)
9c84ec
 {
9c84ec
 	struct macsec_qca_data *drv = priv;
9c84ec
-	int ret = 0;
9c84ec
-	u32 channel = sa->sc->channel;
9c84ec
+	int ret;
9c84ec
+	u32 channel;
9c84ec
 
9c84ec
+	ret = macsec_qca_lookup_receive_channel(priv, sa->sc, &channel);
9c84ec
+	if (ret != 0)
9c84ec
+		return ret;
9c84ec
 
9c84ec
 	wpa_printf(MSG_DEBUG, "%s: channel=%d, an=%d", __func__, channel,
9c84ec
 		   sa->an);
9c84ec
@@ -723,8 +820,12 @@ static int macsec_qca_enable_receive_sa(void *priv, struct receive_sa *sa)
9c84ec
 static int macsec_qca_disable_receive_sa(void *priv, struct receive_sa *sa)
9c84ec
 {
9c84ec
 	struct macsec_qca_data *drv = priv;
9c84ec
-	int ret = 0;
9c84ec
-	u32 channel = sa->sc->channel;
9c84ec
+	int ret;
9c84ec
+	u32 channel;
9c84ec
+
9c84ec
+	ret = macsec_qca_lookup_receive_channel(priv, sa->sc, &channel);
9c84ec
+	if (ret != 0)
9c84ec
+		return ret;
9c84ec
 
9c84ec
 	wpa_printf(MSG_DEBUG, "%s: channel=%d, an=%d", __func__, channel,
9c84ec
 		   sa->an);
9c84ec
@@ -739,14 +840,12 @@ static int macsec_qca_disable_receive_sa(void *priv, struct receive_sa *sa)
9c84ec
 static int macsec_qca_get_available_transmit_sc(void *priv, u32 *channel)
9c84ec
 {
9c84ec
 	struct macsec_qca_data *drv = priv;
9c84ec
-	int ret = 0;
9c84ec
 	u32 sc_ch = 0;
9c84ec
 	bool in_use = FALSE;
9c84ec
 
9c84ec
 	for (sc_ch = 0; sc_ch < MAXSC; sc_ch++) {
9c84ec
-		ret = nss_macsec_secy_tx_sc_in_used_get(drv->secy_id, sc_ch,
9c84ec
-							&in_use);
9c84ec
-		if (ret)
9c84ec
+		if (nss_macsec_secy_tx_sc_in_used_get(drv->secy_id, sc_ch,
9c84ec
+						      &in_use))
9c84ec
 			continue;
9c84ec
 
9c84ec
 		if (!in_use) {
9c84ec
@@ -767,10 +866,14 @@ static int macsec_qca_create_transmit_sc(void *priv, struct transmit_sc *sc,
9c84ec
 					 unsigned int conf_offset)
9c84ec
 {
9c84ec
 	struct macsec_qca_data *drv = priv;
9c84ec
-	int ret = 0;
9c84ec
+	int ret;
9c84ec
 	fal_tx_class_lut_t entry;
9c84ec
 	u8 psci[ETH_ALEN + 2];
9c84ec
-	u32 channel = sc->channel;
9c84ec
+	u32 channel;
9c84ec
+
9c84ec
+	ret = macsec_qca_get_available_transmit_sc(priv, &channel);
9c84ec
+	if (ret != 0)
9c84ec
+		return ret;
9c84ec
 
9c84ec
 	wpa_printf(MSG_DEBUG, "%s: channel=%d", __func__, channel);
9c84ec
 
9c84ec
@@ -793,6 +896,8 @@ static int macsec_qca_create_transmit_sc(void *priv, struct transmit_sc *sc,
9c84ec
 								channel,
9c84ec
 								conf_offset);
9c84ec
 
9c84ec
+	macsec_qca_register_transmit_channel(drv, sc, channel);
9c84ec
+
9c84ec
 	return ret;
9c84ec
 }
9c84ec
 
9c84ec
@@ -800,9 +905,13 @@ static int macsec_qca_create_transmit_sc(void *priv, struct transmit_sc *sc,
9c84ec
 static int macsec_qca_delete_transmit_sc(void *priv, struct transmit_sc *sc)
9c84ec
 {
9c84ec
 	struct macsec_qca_data *drv = priv;
9c84ec
-	int ret = 0;
9c84ec
+	int ret;
9c84ec
 	fal_tx_class_lut_t entry;
9c84ec
-	u32 channel = sc->channel;
9c84ec
+	u32 channel;
9c84ec
+
9c84ec
+	ret = macsec_qca_lookup_transmit_channel(priv, sc, &channel);
9c84ec
+	if (ret != 0)
9c84ec
+		return ret;
9c84ec
 
9c84ec
 	wpa_printf(MSG_DEBUG, "%s: channel=%d", __func__, channel);
9c84ec
 
9c84ec
@@ -819,11 +928,15 @@ static int macsec_qca_delete_transmit_sc(void *priv, struct transmit_sc *sc)
9c84ec
 static int macsec_qca_create_transmit_sa(void *priv, struct transmit_sa *sa)
9c84ec
 {
9c84ec
 	struct macsec_qca_data *drv = priv;
9c84ec
-	int ret = 0;
9c84ec
+	int ret;
9c84ec
 	u8 tci = 0;
9c84ec
 	fal_tx_sak_t tx_sak;
9c84ec
 	int i;
9c84ec
-	u32 channel = sa->sc->channel;
9c84ec
+	u32 channel;
9c84ec
+
9c84ec
+	ret = macsec_qca_lookup_transmit_channel(priv, sa->sc, &channel);
9c84ec
+	if (ret != 0)
9c84ec
+		return ret;
9c84ec
 
9c84ec
 	wpa_printf(MSG_DEBUG,
9c84ec
 		   "%s: channel=%d, an=%d, next_pn=0x%x, confidentiality=%d",
9c84ec
@@ -858,9 +971,12 @@ static int macsec_qca_create_transmit_sa(void *priv, struct transmit_sa *sa)
9c84ec
 static int macsec_qca_enable_transmit_sa(void *priv, struct transmit_sa *sa)
9c84ec
 {
9c84ec
 	struct macsec_qca_data *drv = priv;
9c84ec
-	int ret = 0;
9c84ec
-	u32 channel = sa->sc->channel;
9c84ec
+	int ret;
9c84ec
+	u32 channel;
9c84ec
 
9c84ec
+	ret = macsec_qca_lookup_transmit_channel(priv, sa->sc, &channel);
9c84ec
+	if (ret != 0)
9c84ec
+		return ret;
9c84ec
 
9c84ec
 	wpa_printf(MSG_DEBUG, "%s: channel=%d, an=%d", __func__, channel,
9c84ec
 		   sa->an);
9c84ec
@@ -875,8 +991,12 @@ static int macsec_qca_enable_transmit_sa(void *priv, struct transmit_sa *sa)
9c84ec
 static int macsec_qca_disable_transmit_sa(void *priv, struct transmit_sa *sa)
9c84ec
 {
9c84ec
 	struct macsec_qca_data *drv = priv;
9c84ec
-	int ret = 0;
9c84ec
-	u32 channel = sa->sc->channel;
9c84ec
+	int ret;
9c84ec
+	u32 channel;
9c84ec
+
9c84ec
+	ret = macsec_qca_lookup_transmit_channel(priv, sa->sc, &channel);
9c84ec
+	if (ret != 0)
9c84ec
+		return ret;
9c84ec
 
9c84ec
 	wpa_printf(MSG_DEBUG, "%s: channel=%d, an=%d", __func__, channel,
9c84ec
 		   sa->an);
9c84ec
@@ -907,13 +1027,11 @@ const struct wpa_driver_ops wpa_driver_macsec_qca_ops = {
9c84ec
 	.get_receive_lowest_pn = macsec_qca_get_receive_lowest_pn,
9c84ec
 	.get_transmit_next_pn = macsec_qca_get_transmit_next_pn,
9c84ec
 	.set_transmit_next_pn = macsec_qca_set_transmit_next_pn,
9c84ec
-	.get_available_receive_sc = macsec_qca_get_available_receive_sc,
9c84ec
 	.create_receive_sc = macsec_qca_create_receive_sc,
9c84ec
 	.delete_receive_sc = macsec_qca_delete_receive_sc,
9c84ec
 	.create_receive_sa = macsec_qca_create_receive_sa,
9c84ec
 	.enable_receive_sa = macsec_qca_enable_receive_sa,
9c84ec
 	.disable_receive_sa = macsec_qca_disable_receive_sa,
9c84ec
-	.get_available_transmit_sc = macsec_qca_get_available_transmit_sc,
9c84ec
 	.create_transmit_sc = macsec_qca_create_transmit_sc,
9c84ec
 	.delete_transmit_sc = macsec_qca_delete_transmit_sc,
9c84ec
 	.create_transmit_sa = macsec_qca_create_transmit_sa,
9c84ec
diff --git a/src/pae/ieee802_1x_kay.c b/src/pae/ieee802_1x_kay.c
9c84ec
index 52eeeff..38a8293 100644
9c84ec
--- a/src/pae/ieee802_1x_kay.c
9c84ec
+++ b/src/pae/ieee802_1x_kay.c
9c84ec
@@ -440,8 +440,8 @@ ieee802_1x_kay_init_receive_sa(struct receive_sc *psc, u8 an, u32 lowest_pn,
9c84ec
 
9c84ec
 	dl_list_add(&psc->sa_list, &psa->list);
9c84ec
 	wpa_printf(MSG_DEBUG,
9c84ec
-		   "KaY: Create receive SA(AN: %hhu lowest_pn: %u of SC(channel: %d)",
9c84ec
-		   an, lowest_pn, psc->channel);
9c84ec
+		   "KaY: Create receive SA(AN: %hhu lowest_pn: %u of SC",
9c84ec
+		   an, lowest_pn);
9c84ec
 
9c84ec
 	return psa;
9c84ec
 }
9c84ec
@@ -465,8 +465,7 @@ static void ieee802_1x_kay_deinit_receive_sa(struct receive_sa *psa)
9c84ec
  * ieee802_1x_kay_init_receive_sc -
9c84ec
  */
9c84ec
 static struct receive_sc *
9c84ec
-ieee802_1x_kay_init_receive_sc(const struct ieee802_1x_mka_sci *psci,
9c84ec
-			       int channel)
9c84ec
+ieee802_1x_kay_init_receive_sc(const struct ieee802_1x_mka_sci *psci)
9c84ec
 {
9c84ec
 	struct receive_sc *psc;
9c84ec
 
9c84ec
@@ -480,13 +479,12 @@ ieee802_1x_kay_init_receive_sc(const struct ieee802_1x_mka_sci *psci,
9c84ec
 	}
9c84ec
 
9c84ec
 	os_memcpy(&psc->sci, psci, sizeof(psc->sci));
9c84ec
-	psc->channel = channel;
9c84ec
 
9c84ec
 	os_get_time(&psc->created_time);
9c84ec
 	psc->receiving = FALSE;
9c84ec
 
9c84ec
 	dl_list_init(&psc->sa_list);
9c84ec
-	wpa_printf(MSG_DEBUG, "KaY: Create receive SC(channel: %d)", channel);
9c84ec
+	wpa_printf(MSG_DEBUG, "KaY: Create receive SC");
9c84ec
 	wpa_hexdump(MSG_DEBUG, "SCI: ", (u8 *)psci, sizeof(*psci));
9c84ec
 
9c84ec
 	return psc;
9c84ec
@@ -502,8 +500,7 @@ ieee802_1x_kay_deinit_receive_sc(
9c84ec
 {
9c84ec
 	struct receive_sa *psa, *pre_sa;
9c84ec
 
9c84ec
-	wpa_printf(MSG_DEBUG, "KaY: Delete receive SC(channel: %d)",
9c84ec
-		   psc->channel);
9c84ec
+	wpa_printf(MSG_DEBUG, "KaY: Delete receive SC");
9c84ec
 	dl_list_for_each_safe(psa, pre_sa, &psc->sa_list, struct receive_sa,
9c84ec
 			      list)  {
9c84ec
 		secy_disable_receive_sa(participant->kay, psa);
9c84ec
@@ -552,7 +549,6 @@ ieee802_1x_kay_create_live_peer(struct ieee802_1x_mka_participant *participant,
9c84ec
 {
9c84ec
 	struct ieee802_1x_kay_peer *peer;
9c84ec
 	struct receive_sc *rxsc;
9c84ec
-	u32 sc_ch = 0;
9c84ec
 
9c84ec
 	peer = ieee802_1x_kay_create_peer(mi, mn);
9c84ec
 	if (!peer)
9c84ec
@@ -561,9 +557,7 @@ ieee802_1x_kay_create_live_peer(struct ieee802_1x_mka_participant *participant,
9c84ec
 	os_memcpy(&peer->sci, &participant->current_peer_sci,
9c84ec
 		  sizeof(peer->sci));
9c84ec
 
9c84ec
-	secy_get_available_receive_sc(participant->kay, &sc_ch);
9c84ec
-
9c84ec
-	rxsc = ieee802_1x_kay_init_receive_sc(&peer->sci, sc_ch);
9c84ec
+	rxsc = ieee802_1x_kay_init_receive_sc(&peer->sci);
9c84ec
 	if (!rxsc) {
9c84ec
 		os_free(peer);
9c84ec
 		return NULL;
9c84ec
@@ -611,12 +605,10 @@ ieee802_1x_kay_move_live_peer(struct ieee802_1x_mka_participant *participant,
9c84ec
 {
9c84ec
 	struct ieee802_1x_kay_peer *peer;
9c84ec
 	struct receive_sc *rxsc;
9c84ec
-	u32 sc_ch = 0;
9c84ec
 
9c84ec
 	peer = ieee802_1x_kay_get_potential_peer(participant, mi);
9c84ec
 
9c84ec
-	rxsc = ieee802_1x_kay_init_receive_sc(&participant->current_peer_sci,
9c84ec
-					      sc_ch);
9c84ec
+	rxsc = ieee802_1x_kay_init_receive_sc(&participant->current_peer_sci);
9c84ec
 	if (!rxsc)
9c84ec
 		return NULL;
9c84ec
 
9c84ec
@@ -631,8 +623,6 @@ ieee802_1x_kay_move_live_peer(struct ieee802_1x_mka_participant *participant,
9c84ec
 	dl_list_del(&peer->list);
9c84ec
 	dl_list_add_tail(&participant->live_peers, &peer->list);
9c84ec
 
9c84ec
-	secy_get_available_receive_sc(participant->kay, &sc_ch);
9c84ec
-
9c84ec
 	dl_list_add(&participant->rxsc_list, &rxsc->list);
9c84ec
 	secy_create_receive_sc(participant->kay, rxsc);
9c84ec
 
9c84ec
@@ -2438,8 +2428,8 @@ ieee802_1x_kay_init_transmit_sa(struct transmit_sc *psc, u8 an, u32 next_PN,
9c84ec
 
9c84ec
 	dl_list_add(&psc->sa_list, &psa->list);
9c84ec
 	wpa_printf(MSG_DEBUG,
9c84ec
-		   "KaY: Create transmit SA(an: %hhu, next_PN: %u) of SC(channel: %d)",
9c84ec
-		   an, next_PN, psc->channel);
9c84ec
+		   "KaY: Create transmit SA(an: %hhu, next_PN: %u) of SC",
9c84ec
+		   an, next_PN);
9c84ec
 
9c84ec
 	return psa;
9c84ec
 }
9c84ec
@@ -2463,8 +2453,7 @@ static void ieee802_1x_kay_deinit_transmit_sa(struct transmit_sa *psa)
9c84ec
  * init_transmit_sc -
9c84ec
  */
9c84ec
 static struct transmit_sc *
9c84ec
-ieee802_1x_kay_init_transmit_sc(const struct ieee802_1x_mka_sci *sci,
9c84ec
-				int channel)
9c84ec
+ieee802_1x_kay_init_transmit_sc(const struct ieee802_1x_mka_sci *sci)
9c84ec
 {
9c84ec
 	struct transmit_sc *psc;
9c84ec
 
9c84ec
@@ -2474,7 +2463,6 @@ ieee802_1x_kay_init_transmit_sc(const struct ieee802_1x_mka_sci *sci,
9c84ec
 		return NULL;
9c84ec
 	}
9c84ec
 	os_memcpy(&psc->sci, sci, sizeof(psc->sci));
9c84ec
-	psc->channel = channel;
9c84ec
 
9c84ec
 	os_get_time(&psc->created_time);
9c84ec
 	psc->transmitting = FALSE;
9c84ec
@@ -2482,7 +2470,7 @@ ieee802_1x_kay_init_transmit_sc(const struct ieee802_1x_mka_sci *sci,
9c84ec
 	psc->enciphering_sa = FALSE;
9c84ec
 
9c84ec
 	dl_list_init(&psc->sa_list);
9c84ec
-	wpa_printf(MSG_DEBUG, "KaY: Create transmit SC(channel: %d)", channel);
9c84ec
+	wpa_printf(MSG_DEBUG, "KaY: Create transmit SC");
9c84ec
 	wpa_hexdump(MSG_DEBUG, "SCI: ", (u8 *)sci , sizeof(*sci));
9c84ec
 
9c84ec
 	return psc;
9c84ec
@@ -2498,8 +2486,7 @@ ieee802_1x_kay_deinit_transmit_sc(
9c84ec
 {
9c84ec
 	struct transmit_sa *psa, *tmp;
9c84ec
 
9c84ec
-	wpa_printf(MSG_DEBUG, "KaY: Delete transmit SC(channel: %d)",
9c84ec
-		   psc->channel);
9c84ec
+	wpa_printf(MSG_DEBUG, "KaY: Delete transmit SC");
9c84ec
 	dl_list_for_each_safe(psa, tmp, &psc->sa_list, struct transmit_sa,
9c84ec
 			      list) {
9c84ec
 		secy_disable_transmit_sa(participant->kay, psa);
9c84ec
@@ -3089,7 +3076,6 @@ ieee802_1x_kay_init(struct ieee802_1x_kay_ctx *ctx, enum macsec_policy policy,
9c84ec
 
9c84ec
 	/* Initialize the SecY must be prio to CP, as CP will control SecY */
9c84ec
 	secy_init_macsec(kay);
9c84ec
-	secy_get_available_transmit_sc(kay, &kay->sc_ch);
9c84ec
 
9c84ec
 	wpa_printf(MSG_DEBUG, "KaY: secy init macsec done");
9c84ec
 
9c84ec
@@ -3250,8 +3236,7 @@ ieee802_1x_kay_create_mka(struct ieee802_1x_kay *kay, struct mka_key_name *ckn,
9c84ec
 	dl_list_init(&participant->sak_list);
9c84ec
 	participant->new_key = NULL;
9c84ec
 	dl_list_init(&participant->rxsc_list);
9c84ec
-	participant->txsc = ieee802_1x_kay_init_transmit_sc(&kay->actor_sci,
9c84ec
-							    kay->sc_ch);
9c84ec
+	participant->txsc = ieee802_1x_kay_init_transmit_sc(&kay->actor_sci);
9c84ec
 	secy_cp_control_protect_frames(kay, kay->macsec_protect);
9c84ec
 	secy_cp_control_replay(kay, kay->macsec_replay_protect,
9c84ec
 			       kay->macsec_replay_window);
9c84ec
diff --git a/src/pae/ieee802_1x_kay.h b/src/pae/ieee802_1x_kay.h
9c84ec
index bf6fbe5..c6fa387 100644
9c84ec
--- a/src/pae/ieee802_1x_kay.h
9c84ec
+++ b/src/pae/ieee802_1x_kay.h
9c84ec
@@ -80,8 +80,6 @@ struct transmit_sc {
9c84ec
 	u8 enciphering_sa; /* AN encipheringSA (read only) */
9c84ec
 
9c84ec
 	/* not defined data */
9c84ec
-	unsigned int channel;
9c84ec
-
9c84ec
 	struct dl_list list;
9c84ec
 	struct dl_list sa_list;
9c84ec
 };
9c84ec
@@ -109,8 +107,6 @@ struct receive_sc {
9c84ec
 
9c84ec
 	struct os_time created_time; /* Time createdTime */
9c84ec
 
9c84ec
-	unsigned int channel;
9c84ec
-
9c84ec
 	struct dl_list list;
9c84ec
 	struct dl_list sa_list;
9c84ec
 };
9c84ec
@@ -146,7 +142,6 @@ struct ieee802_1x_kay_ctx {
9c84ec
 	int (*get_receive_lowest_pn)(void *ctx, struct receive_sa *sa);
9c84ec
 	int (*get_transmit_next_pn)(void *ctx, struct transmit_sa *sa);
9c84ec
 	int (*set_transmit_next_pn)(void *ctx, struct transmit_sa *sa);
9c84ec
-	int (*get_available_receive_sc)(void *ctx, u32 *channel);
9c84ec
 	int (*create_receive_sc)(void *ctx, struct receive_sc *sc,
9c84ec
 				 enum validate_frames vf,
9c84ec
 				 enum confidentiality_offset co);
9c84ec
@@ -154,7 +149,6 @@ struct ieee802_1x_kay_ctx {
9c84ec
 	int (*create_receive_sa)(void *ctx, struct receive_sa *sa);
9c84ec
 	int (*enable_receive_sa)(void *ctx, struct receive_sa *sa);
9c84ec
 	int (*disable_receive_sa)(void *ctx, struct receive_sa *sa);
9c84ec
-	int (*get_available_transmit_sc)(void *ctx, u32 *channel);
9c84ec
 	int (*create_transmit_sc)(void *ctx, struct transmit_sc *sc,
9c84ec
 				  enum confidentiality_offset co);
9c84ec
 	int (*delete_transmit_sc)(void *ctx, struct transmit_sc *sc);
9c84ec
@@ -209,7 +203,6 @@ struct ieee802_1x_kay {
9c84ec
 
9c84ec
 	u8 mka_version;
9c84ec
 	u8 algo_agility[4];
9c84ec
-	u32 sc_ch;
9c84ec
 
9c84ec
 	u32 pn_exhaustion;
9c84ec
 	Boolean port_enable;
9c84ec
diff --git a/src/pae/ieee802_1x_secy_ops.c b/src/pae/ieee802_1x_secy_ops.c
9c84ec
index 32ee816..b57c670 100644
9c84ec
--- a/src/pae/ieee802_1x_secy_ops.c
9c84ec
+++ b/src/pae/ieee802_1x_secy_ops.c
9c84ec
@@ -196,26 +196,6 @@ int secy_set_transmit_next_pn(struct ieee802_1x_kay *kay,
9c84ec
 }
9c84ec
 
9c84ec
 
9c84ec
-int secy_get_available_receive_sc(struct ieee802_1x_kay *kay, u32 *channel)
9c84ec
-{
9c84ec
-	struct ieee802_1x_kay_ctx *ops;
9c84ec
-
9c84ec
-	if (!kay) {
9c84ec
-		wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__);
9c84ec
-		return -1;
9c84ec
-	}
9c84ec
-
9c84ec
-	ops = kay->ctx;
9c84ec
-	if (!ops || !ops->get_available_receive_sc) {
9c84ec
-		wpa_printf(MSG_ERROR,
9c84ec
-			   "KaY: secy get_available_receive_sc operation not supported");
9c84ec
-		return -1;
9c84ec
-	}
9c84ec
-
9c84ec
-	return ops->get_available_receive_sc(ops->ctx, channel);
9c84ec
-}
9c84ec
-
9c84ec
-
9c84ec
 int secy_create_receive_sc(struct ieee802_1x_kay *kay, struct receive_sc *rxsc)
9c84ec
 {
9c84ec
 	struct ieee802_1x_kay_ctx *ops;
9c84ec
@@ -320,26 +300,6 @@ int secy_disable_receive_sa(struct ieee802_1x_kay *kay, struct receive_sa *rxsa)
9c84ec
 }
9c84ec
 
9c84ec
 
9c84ec
-int secy_get_available_transmit_sc(struct ieee802_1x_kay *kay, u32 *channel)
9c84ec
-{
9c84ec
-	struct ieee802_1x_kay_ctx *ops;
9c84ec
-
9c84ec
-	if (!kay) {
9c84ec
-		wpa_printf(MSG_ERROR, "KaY: %s params invalid", __func__);
9c84ec
-		return -1;
9c84ec
-	}
9c84ec
-
9c84ec
-	ops = kay->ctx;
9c84ec
-	if (!ops || !ops->get_available_transmit_sc) {
9c84ec
-		wpa_printf(MSG_ERROR,
9c84ec
-			   "KaY: secy get_available_transmit_sc operation not supported");
9c84ec
-		return -1;
9c84ec
-	}
9c84ec
-
9c84ec
-	return ops->get_available_transmit_sc(ops->ctx, channel);
9c84ec
-}
9c84ec
-
9c84ec
-
9c84ec
 int secy_create_transmit_sc(struct ieee802_1x_kay *kay,
9c84ec
 			    struct transmit_sc *txsc)
9c84ec
 {
9c84ec
diff --git a/src/pae/ieee802_1x_secy_ops.h b/src/pae/ieee802_1x_secy_ops.h
9c84ec
index bfd5737..59f0baa 100644
9c84ec
--- a/src/pae/ieee802_1x_secy_ops.h
9c84ec
+++ b/src/pae/ieee802_1x_secy_ops.h
9c84ec
@@ -35,7 +35,6 @@ int secy_get_transmit_next_pn(struct ieee802_1x_kay *kay,
9c84ec
 			      struct transmit_sa *txsa);
9c84ec
 int secy_set_transmit_next_pn(struct ieee802_1x_kay *kay,
9c84ec
 			      struct transmit_sa *txsa);
9c84ec
-int secy_get_available_receive_sc(struct ieee802_1x_kay *kay, u32 *channel);
9c84ec
 int secy_create_receive_sc(struct ieee802_1x_kay *kay, struct receive_sc *rxsc);
9c84ec
 int secy_delete_receive_sc(struct ieee802_1x_kay *kay, struct receive_sc *rxsc);
9c84ec
 int secy_create_receive_sa(struct ieee802_1x_kay *kay, struct receive_sa *rxsa);
9c84ec
@@ -43,7 +42,6 @@ int secy_enable_receive_sa(struct ieee802_1x_kay *kay, struct receive_sa *rxsa);
9c84ec
 int secy_disable_receive_sa(struct ieee802_1x_kay *kay,
9c84ec
 			    struct receive_sa *rxsa);
9c84ec
 
9c84ec
-int secy_get_available_transmit_sc(struct ieee802_1x_kay *kay, u32 *channel);
9c84ec
 int secy_create_transmit_sc(struct ieee802_1x_kay *kay,
9c84ec
 			    struct transmit_sc *txsc);
9c84ec
 int secy_delete_transmit_sc(struct ieee802_1x_kay *kay,
9c84ec
diff --git a/wpa_supplicant/driver_i.h b/wpa_supplicant/driver_i.h
9c84ec
index f8efddc..244e386 100644
9c84ec
--- a/wpa_supplicant/driver_i.h
9c84ec
+++ b/wpa_supplicant/driver_i.h
9c84ec
@@ -780,15 +780,6 @@ static inline int wpa_drv_set_transmit_next_pn(struct wpa_supplicant *wpa_s,
9c84ec
 	return wpa_s->driver->set_transmit_next_pn(wpa_s->drv_priv, sa);
9c84ec
 }
9c84ec
 
9c84ec
-static inline int wpa_drv_get_available_receive_sc(struct wpa_supplicant *wpa_s,
9c84ec
-						   u32 *channel)
9c84ec
-{
9c84ec
-	if (!wpa_s->driver->get_available_receive_sc)
9c84ec
-		return -1;
9c84ec
-	return wpa_s->driver->get_available_receive_sc(wpa_s->drv_priv,
9c84ec
-						       channel);
9c84ec
-}
9c84ec
-
9c84ec
 static inline int
9c84ec
 wpa_drv_create_receive_sc(struct wpa_supplicant *wpa_s, struct receive_sc *sc,
9c84ec
 			  unsigned int conf_offset, int validation)
9c84ec
@@ -832,15 +823,6 @@ static inline int wpa_drv_disable_receive_sa(struct wpa_supplicant *wpa_s,
9c84ec
 }
9c84ec
 
9c84ec
 static inline int
9c84ec
-wpa_drv_get_available_transmit_sc(struct wpa_supplicant *wpa_s, u32 *channel)
9c84ec
-{
9c84ec
-	if (!wpa_s->driver->get_available_transmit_sc)
9c84ec
-		return -1;
9c84ec
-	return wpa_s->driver->get_available_transmit_sc(wpa_s->drv_priv,
9c84ec
-							channel);
9c84ec
-}
9c84ec
-
9c84ec
-static inline int
9c84ec
 wpa_drv_create_transmit_sc(struct wpa_supplicant *wpa_s, struct transmit_sc *sc,
9c84ec
 			   unsigned int conf_offset)
9c84ec
 {
9c84ec
diff --git a/wpa_supplicant/wpas_kay.c b/wpa_supplicant/wpas_kay.c
9c84ec
index 29b7b56..64364f7 100644
9c84ec
--- a/wpa_supplicant/wpas_kay.c
9c84ec
+++ b/wpa_supplicant/wpas_kay.c
9c84ec
@@ -86,12 +86,6 @@ static int wpas_set_transmit_next_pn(void *wpa_s, struct transmit_sa *sa)
9c84ec
 }
9c84ec
 
9c84ec
 
9c84ec
-static int wpas_get_available_receive_sc(void *wpa_s, u32 *channel)
9c84ec
-{
9c84ec
-	return wpa_drv_get_available_receive_sc(wpa_s, channel);
9c84ec
-}
9c84ec
-
9c84ec
-
9c84ec
 static unsigned int conf_offset_val(enum confidentiality_offset co)
9c84ec
 {
9c84ec
 	switch (co) {
9c84ec
@@ -138,12 +132,6 @@ static int wpas_disable_receive_sa(void *wpa_s, struct receive_sa *sa)
9c84ec
 }
9c84ec
 
9c84ec
 
9c84ec
-static int wpas_get_available_transmit_sc(void *wpa_s, u32 *channel)
9c84ec
-{
9c84ec
-	return wpa_drv_get_available_transmit_sc(wpa_s, channel);
9c84ec
-}
9c84ec
-
9c84ec
-
9c84ec
 static int
9c84ec
 wpas_create_transmit_sc(void *wpa_s, struct transmit_sc *sc,
9c84ec
 			enum confidentiality_offset co)
9c84ec
@@ -205,13 +193,11 @@ int ieee802_1x_alloc_kay_sm(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid)
9c84ec
 	kay_ctx->get_receive_lowest_pn = wpas_get_receive_lowest_pn;
9c84ec
 	kay_ctx->get_transmit_next_pn = wpas_get_transmit_next_pn;
9c84ec
 	kay_ctx->set_transmit_next_pn = wpas_set_transmit_next_pn;
9c84ec
-	kay_ctx->get_available_receive_sc = wpas_get_available_receive_sc;
9c84ec
 	kay_ctx->create_receive_sc = wpas_create_receive_sc;
9c84ec
 	kay_ctx->delete_receive_sc = wpas_delete_receive_sc;
9c84ec
 	kay_ctx->create_receive_sa = wpas_create_receive_sa;
9c84ec
 	kay_ctx->enable_receive_sa = wpas_enable_receive_sa;
9c84ec
 	kay_ctx->disable_receive_sa = wpas_disable_receive_sa;
9c84ec
-	kay_ctx->get_available_transmit_sc = wpas_get_available_transmit_sc;
9c84ec
 	kay_ctx->create_transmit_sc = wpas_create_transmit_sc;
9c84ec
 	kay_ctx->delete_transmit_sc = wpas_delete_transmit_sc;
9c84ec
 	kay_ctx->create_transmit_sa = wpas_create_transmit_sa;
9c84ec
-- 
9c84ec
2.7.4
9c84ec