diff mbox series

[v3,17/25] p2p: Add support for p2p2 set apis

Message ID 1722850403-8852-18-git-send-email-quic_shivbara@quicinc.com
State Deferred
Headers show
Series Add support for P2P2 | expand

Commit Message

Shivani Baranwal Aug. 5, 2024, 9:33 a.m. UTC
Signed-off-by: Shivani Baranwal <quic_shivbara@quicinc.com>
---
 src/p2p/p2p.c               | 76 +++++++++++++++++++++++++++++++++++++++++++++
 src/p2p/p2p.h               |  9 ++++++
 wpa_supplicant/ctrl_iface.c | 40 ++++++++++++++++++++++++
 3 files changed, 125 insertions(+)
diff mbox series

Patch

diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c
index 6e2a97c..ab3ccc1 100644
--- a/src/p2p/p2p.c
+++ b/src/p2p/p2p.c
@@ -4887,6 +4887,82 @@  void p2p_set_managed_oper(struct p2p_data *p2p, int enabled)
 }
 
 
+void p2p_set_pairing_setup(struct p2p_data *p2p, int pairing_setup)
+{
+	p2p_dbg(p2p, "Pairing Setup: %d", pairing_setup);
+	p2p->cfg->pairing_config.pairing_capable = pairing_setup;
+	p2p->cfg->pairing_config.enable_pairing_setup = pairing_setup;
+	if (p2p->pairing_info)
+		p2p->pairing_info->enable_pairing_setup = pairing_setup;
+}
+
+
+void p2p_set_pairing_cache(struct p2p_data *p2p, int pairing_cache)
+{
+	p2p_dbg(p2p, "Pairing Cache: %d", pairing_cache);
+	p2p->cfg->pairing_config.enable_pairing_cache = pairing_cache;
+	if (p2p->pairing_info)
+		p2p->pairing_info->enable_pairing_cache = pairing_cache;
+}
+
+
+void p2p_set_pairing_verification(struct p2p_data *p2p, int pairing_verification)
+{
+	p2p_dbg(p2p, "Pairing Verification: %d", pairing_verification);
+	p2p->cfg->pairing_config.enable_pairing_verification =
+							pairing_verification;
+}
+
+
+void p2p_set_bootstrapmethods(struct p2p_data *p2p, int bootstrap_methods)
+{
+	p2p_dbg(p2p, "Bootstraping methods: 0x%x", bootstrap_methods);
+	p2p->cfg->pairing_config.bootstrap_methods = bootstrap_methods;
+	if (p2p->pairing_info)
+		p2p->pairing_info->supported_bootstrap = bootstrap_methods;
+}
+
+
+void p2p_set_pasn_type(struct p2p_data *p2p, u8 pasn_type)
+{
+	p2p_dbg(p2p, "PASN type: 0x%x", pasn_type);
+	p2p->cfg->pairing_config.pasn_type = pasn_type;
+
+	memset(p2p->cfg->pairing_config.pasn_groups, 0,
+	       sizeof(p2p->cfg->pairing_config.pasn_groups));
+
+	if (pasn_type & 0xc && pasn_type & 0x3) {
+		p2p->cfg->pairing_config.pasn_groups[0] = 20;
+		p2p->cfg->pairing_config.pasn_groups[1] = 19;
+	} else if (pasn_type & 0xc) {
+		p2p->cfg->pairing_config.pasn_groups[0] = 20;
+	} else if (pasn_type & 0x3) {
+		p2p->cfg->pairing_config.pasn_groups[0] = 19;
+	}
+}
+
+
+void p2p_set_comeback_after(struct p2p_data *p2p, int comeback_after)
+{
+	p2p_dbg(p2p, "Comeback after: %d", comeback_after);
+	p2p->cfg->comeback_after = comeback_after;
+}
+
+
+void p2p_set_reg_info(struct p2p_data *p2p, u8 val)
+{
+	p2p->cfg->reg_info = val;
+}
+
+
+void p2p_set_twt_power_mgmt(struct p2p_data *p2p, int val)
+{
+	p2p_dbg(p2p, "TWT-based P2P Power Mgmt: %s",
+		     val ? "Enabled" : "Disabled");
+	p2p->cfg->twt_power_mgmt = val;
+}
+
+
 int p2p_config_get_random_social(struct p2p_config *p2p, u8 *op_class,
 				 u8 *op_channel,
 				 struct wpa_freq_range_list *avoid_list,
diff --git a/src/p2p/p2p.h b/src/p2p/p2p.h
index 1b1c19f..db2052f 100644
--- a/src/p2p/p2p.h
+++ b/src/p2p/p2p.h
@@ -2648,6 +2648,15 @@  int p2p_channel_to_freq(int op_class, int channel);
 struct wpabuf * p2p_usd_elems(struct p2p_data *p2p);
 void p2p_process_usd_elems(struct p2p_data *p2p, const u8 *ies, u16 ies_len,
 			   const u8 *peer_addr, unsigned int freq);
+void p2p_set_pairing_setup(struct p2p_data *p2p, int pairing_setup);
+void p2p_set_pairing_cache(struct p2p_data *p2p, int pairing_cache);
+void p2p_set_pairing_verification(struct p2p_data *p2p, int pairing_verification);
+void p2p_set_bootstrapmethods(struct p2p_data *p2p, int bootstrap_methods);
+void p2p_set_pasn_type(struct p2p_data *p2p, u8 pasn_type);
+void p2p_set_comeback_after(struct p2p_data *p2p, int comeback_after);
+void p2p_set_reg_info(struct p2p_data *p2p, u8 val);
+void p2p_set_twt_power_mgmt(struct p2p_data *p2p, int val);
+
 int p2p_initiate_pasn_auth(struct p2p_data *p2p, const u8 *addr, int freq);
 int p2p_pasn_auth_rx(struct p2p_data *p2p, const struct ieee80211_mgmt *mgmt,
 		     size_t len, int freq);
diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c
index b223b7c..d976914 100644
--- a/wpa_supplicant/ctrl_iface.c
+++ b/wpa_supplicant/ctrl_iface.c
@@ -7697,6 +7697,46 @@  static int p2p_ctrl_set(struct wpa_supplicant *wpa_s, char *cmd)
 		return 0;
 	}
 
+	if (os_strcmp(cmd, "pairing_setup") == 0) {
+		p2p_set_pairing_setup(wpa_s->global->p2p, atoi(param));
+		return 0;
+	}
+
+	if (os_strcmp(cmd, "pairing_cache") == 0) {
+		p2p_set_pairing_cache(wpa_s->global->p2p, atoi(param));
+		return 0;
+	}
+
+	if (os_strcmp(cmd, "pairing_verification") == 0) {
+		p2p_set_pairing_verification(wpa_s->global->p2p, atoi(param));
+		return 0;
+	}
+
+	if (os_strcmp(cmd, "supported_bootstrapmethods") == 0) {
+		p2p_set_bootstrapmethods(wpa_s->global->p2p, atoi(param));
+		return 0;
+	}
+
+	if (os_strcmp(cmd, "pasn_type") == 0) {
+		p2p_set_pasn_type(wpa_s->global->p2p, atoi(param));
+		return 0;
+	}
+
+	if (os_strcmp(cmd, "comeback_after") == 0) {
+		p2p_set_comeback_after(wpa_s->global->p2p, atoi(param));
+		return 0;
+	}
+
+	if (os_strcmp(cmd, "reginfo") == 0) {
+		p2p_set_reg_info(wpa_s->global->p2p, atoi(param));
+		return 0;
+	}
+
+	if (os_strcmp(cmd, "twt_power_mgmt") == 0) {
+		p2p_set_twt_power_mgmt(wpa_s->global->p2p, atoi(param));
+		return 0;
+	}
+
 	wpa_printf(MSG_DEBUG, "CTRL_IFACE: Unknown P2P_SET field value '%s'",
 		   cmd);