OCE: Add support for STA-CFON

Add support for new dev-role STA-CFON (Soft AP).

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
diff --git a/sta.c b/sta.c
index ff8cca3..6376d58 100644
--- a/sta.c
+++ b/sta.c
@@ -1102,6 +1102,9 @@
 	/* const char *intf = get_param(cmd, "Interface"); */
 	char addr[20], resp[50];
 
+	if (dut->dev_role == DEVROLE_STA_CFON)
+		return sta_cfon_get_mac_address(dut, conn, cmd);
+
 	if (get_wpa_status(get_station_ifname(), "address", addr, sizeof(addr))
 	    < 0)
 		return -2;
@@ -4991,6 +4994,7 @@
 	const char *intf = get_param(cmd, "Interface");
 	const char *type;
 	const char *program = get_param(cmd, "program");
+	const char *dev_role = get_param(cmd, "DevRole");
 
 	if (!program)
 		program = get_param(cmd, "prog");
@@ -5138,6 +5142,11 @@
 	if (dut->program == PROGRAM_OCE)
 		wpa_command(intf, "SET oce 1");
 
+	if (dev_role && strcasecmp(dev_role, "STA-CFON") == 0) {
+		dut->dev_role = DEVROLE_STA_CFON;
+		return sta_cfon_reset_default(dut, conn, cmd);
+	}
+
 	if (dut->program != PROGRAM_VHT)
 		return cmd_sta_p2p_reset(dut, conn, cmd);
 	return 1;
@@ -5576,6 +5585,22 @@
 }
 
 
+static int sta_set_wireless_oce(struct sigma_dut *dut, struct sigma_conn *conn,
+				struct sigma_cmd *cmd)
+{
+	int status;
+	const char *intf = get_param(cmd, "Interface");
+	const char *val = get_param(cmd, "DevRole");
+
+	if (val && strcasecmp(val, "STA-CFON") == 0) {
+		status = sta_cfon_set_wireless(dut, conn, cmd);
+		if (status)
+			return status;
+	}
+	return cmd_sta_set_wireless_common(intf, dut, conn, cmd);
+}
+
+
 static int cmd_sta_set_wireless(struct sigma_dut *dut, struct sigma_conn *conn,
 				struct sigma_cmd *cmd)
 {
@@ -5589,6 +5614,8 @@
 			return cmd_sta_set_wireless_vht(dut, conn, cmd);
 		if (strcasecmp(val, "60ghz") == 0)
 			return sta_set_wireless_60g(dut, conn, cmd);
+		if (strcasecmp(val, "OCE") == 0)
+			return sta_set_wireless_oce(dut, conn, cmd);
 		send_resp(dut, conn, SIGMA_ERROR,
 			  "ErrorCode,Program value not supported");
 	} else {