Before I can get to work a feed repository that work i have included qca-nss source needed on this commit Source author: SqTER-PL <r.napierala@asta-net.pl>
179 lines
7.3 KiB
Diff
179 lines
7.3 KiB
Diff
From 85d8656de0a22dc5b45a5f8810e5863726bd5a9b Mon Sep 17 00:00:00 2001
|
|
From: Swati Singh <quic_swasing@quicinc.com>
|
|
Date: Mon, 26 Jun 2023 16:33:51 +0530
|
|
Subject: [PATCH] [qca-nss-ecm]: Passing structure as params for sawf_hdl
|
|
query.
|
|
|
|
The wifi driver call to get sawf hdl info will have
|
|
struct ecm_classifier_sawf_flow_info as params.
|
|
|
|
Also, the wifi driver signature will be 32 bits to
|
|
return sawf_mark.
|
|
|
|
Change-Id: I5f49be2938887a8c0669e9b760e5fee24b8bd290
|
|
Signed-off-by: Swati Singh <quic_swasing@quicinc.com>
|
|
---
|
|
ecm_classifier_emesh.c | 41 +++++++++++++++++++++---
|
|
ecm_wifi_plugins/ecm_wifi_plugin_emesh.c | 19 ++++++++++-
|
|
exports/ecm_classifier_emesh_public.h | 22 +++++++++++--
|
|
3 files changed, 74 insertions(+), 8 deletions(-)
|
|
|
|
--- a/ecm_classifier_emesh.c
|
|
+++ b/ecm_classifier_emesh.c
|
|
@@ -91,6 +91,7 @@
|
|
#define ECM_CLASSIFIER_EMESH_SAWF_TAG_GET(sawf_meta) ((sawf_meta >> 24) & 0xFF)
|
|
#define ECM_CLASSIFIER_EMESH_SAWF_TAG_IS_VALID(sawf_meta) \
|
|
((ECM_CLASSIFIER_EMESH_SAWF_TAG_GET(sawf_meta) == ECM_CLASSIFIER_EMESH_SAWF_VALID_TAG) ? true : false)
|
|
+#define ECM_CLASSIFIER_EMESH_SAWF_VALID_MSDUQ_MASK 0xffff
|
|
|
|
/*
|
|
* EMESH classifier type.
|
|
@@ -244,6 +245,7 @@ static void ecm_classifier_emesh_sawf_fl
|
|
uint16_t msduq_reverse = ECM_CLASSIFIER_EMESH_SAWF_INVALID_MSDUQ;
|
|
uint8_t dmac[ETH_ALEN];
|
|
uint8_t smac[ETH_ALEN];
|
|
+ struct ecm_classifier_emesh_sawf_flow_info sawf_flow_info = {0};
|
|
|
|
if (msg->ip_version == 4) {
|
|
DEBUG_TRACE("%px: flow/return service_class_id=%u/%u %pI4n:%u -> %pI4n:%u protocol=%d\n", msg,
|
|
@@ -298,10 +300,25 @@ static void ecm_classifier_emesh_sawf_fl
|
|
*/
|
|
if (ecm_emesh.update_service_id_get_msduq) {
|
|
if (dest_dev) {
|
|
- msduq_forward = ecm_emesh.update_service_id_get_msduq(dest_dev, dmac, msg->flow_service_class_id, 0, 0, SP_SAWF_RULE_TYPE_DEFAULT);
|
|
+ sawf_flow_info.netdev = dest_dev;
|
|
+ sawf_flow_info.peer_mac = dmac;
|
|
+ sawf_flow_info.service_id = msg->flow_service_class_id;
|
|
+ sawf_flow_info.dscp = 0;
|
|
+ sawf_flow_info.rule_id = 0;
|
|
+ sawf_flow_info.sawf_rule_type = SP_SAWF_RULE_TYPE_DEFAULT;
|
|
+
|
|
+ msduq_forward = ecm_emesh.update_service_id_get_msduq(&sawf_flow_info) & ECM_CLASSIFIER_EMESH_SAWF_VALID_MSDUQ_MASK;
|
|
}
|
|
+
|
|
if (src_dev) {
|
|
- msduq_reverse = ecm_emesh.update_service_id_get_msduq(src_dev, smac, msg->return_service_class_id, 0, 0, SP_SAWF_RULE_TYPE_DEFAULT);
|
|
+ sawf_flow_info.netdev = src_dev;
|
|
+ sawf_flow_info.peer_mac = smac;
|
|
+ sawf_flow_info.service_id = msg->return_service_class_id;
|
|
+ sawf_flow_info.dscp = 0;
|
|
+ sawf_flow_info.rule_id = 0;
|
|
+ sawf_flow_info.sawf_rule_type = SP_SAWF_RULE_TYPE_DEFAULT;
|
|
+
|
|
+ msduq_reverse = ecm_emesh.update_service_id_get_msduq(&sawf_flow_info) & ECM_CLASSIFIER_EMESH_SAWF_VALID_MSDUQ_MASK;
|
|
}
|
|
}
|
|
|
|
@@ -1136,7 +1153,7 @@ static void ecm_classifier_emesh_sawf_pr
|
|
struct sp_rule_output_params flow_output_params;
|
|
struct sp_rule_output_params return_output_params;
|
|
bool is_sawf_relevant = false;
|
|
-
|
|
+ struct ecm_classifier_emesh_sawf_flow_info sawf_flow_info = {0};
|
|
cemi = (struct ecm_classifier_emesh_sawf_instance *)aci;
|
|
DEBUG_CHECK_MAGIC(cemi, ECM_CLASSIFIER_EMESH_INSTANCE_MAGIC, "%px: magic failed\n", cemi);
|
|
|
|
@@ -1290,7 +1307,14 @@ static void ecm_classifier_emesh_sawf_pr
|
|
*/
|
|
if (ecm_emesh.update_service_id_get_msduq) {
|
|
if (dest_dev) {
|
|
- msduq_forward = ecm_emesh.update_service_id_get_msduq(dest_dev, dmac, flow_output_params.service_class_id, cemi->dscp[ECM_CONN_DIR_FLOW], flow_output_params.rule_id, flow_output_params.sawf_rule_type);
|
|
+ sawf_flow_info.netdev = dest_dev;
|
|
+ sawf_flow_info.peer_mac = dmac;
|
|
+ sawf_flow_info.service_id = flow_output_params.service_class_id;
|
|
+ sawf_flow_info.dscp = cemi->dscp[ECM_CONN_DIR_FLOW];
|
|
+ sawf_flow_info.rule_id = flow_output_params.rule_id;
|
|
+ sawf_flow_info.sawf_rule_type = flow_output_params.sawf_rule_type;
|
|
+
|
|
+ msduq_forward = ecm_emesh.update_service_id_get_msduq(&sawf_flow_info) & ECM_CLASSIFIER_EMESH_SAWF_VALID_MSDUQ_MASK;
|
|
|
|
/*
|
|
* Mark the skb with SAWF meta data for flow creation packet.
|
|
@@ -1300,7 +1324,14 @@ static void ecm_classifier_emesh_sawf_pr
|
|
msduq_forward);
|
|
}
|
|
if (src_dev) {
|
|
- msduq_reverse = ecm_emesh.update_service_id_get_msduq(src_dev, smac, return_output_params.service_class_id, cemi->dscp[ECM_CONN_DIR_RETURN], return_output_params.rule_id, return_output_params.sawf_rule_type);
|
|
+ sawf_flow_info.netdev = src_dev;
|
|
+ sawf_flow_info.peer_mac = smac;
|
|
+ sawf_flow_info.service_id = return_output_params.service_class_id;
|
|
+ sawf_flow_info.dscp = cemi->dscp[ECM_CONN_DIR_RETURN];
|
|
+ sawf_flow_info.rule_id = return_output_params.rule_id;
|
|
+ sawf_flow_info.sawf_rule_type = return_output_params.sawf_rule_type;
|
|
+
|
|
+ msduq_reverse = ecm_emesh.update_service_id_get_msduq(&sawf_flow_info) & ECM_CLASSIFIER_EMESH_SAWF_VALID_MSDUQ_MASK;
|
|
}
|
|
}
|
|
|
|
--- a/ecm_wifi_plugins/ecm_wifi_plugin_emesh.c
|
|
+++ b/ecm_wifi_plugins/ecm_wifi_plugin_emesh.c
|
|
@@ -48,12 +48,29 @@ static inline void ecm_wifi_plugin_emesh
|
|
}
|
|
|
|
/*
|
|
+ * ecm_wifi_plugin_emesh_sawf_get_mark_data()
|
|
+ * get skb mark callback for EMESH-SAWF classifier.
|
|
+ */
|
|
+static inline uint32_t ecm_wifi_plugin_emesh_sawf_get_mark_data(struct ecm_classifier_emesh_sawf_flow_info *sawf_flow_info)
|
|
+{
|
|
+ struct qca_sawf_metadata_param sawf_params = {0};
|
|
+
|
|
+ sawf_params.netdev = sawf_flow_info->netdev;
|
|
+ sawf_params.peer_mac = sawf_flow_info->peer_mac;
|
|
+ sawf_params.service_id = sawf_flow_info->service_id;
|
|
+ sawf_params.dscp = sawf_flow_info->dscp;
|
|
+ sawf_params.rule_id = sawf_flow_info->rule_id;
|
|
+ sawf_params.sawf_rule_type = sawf_flow_info->sawf_rule_type;
|
|
+
|
|
+ return qca_sawf_get_mark_metadata(&sawf_params);
|
|
+}
|
|
+/*
|
|
* ecm_wifi_plugin_emesh
|
|
* Register EMESH client callback with ECM EMSH classifier to update peer mesh latency parameters.
|
|
*/
|
|
static struct ecm_classifier_emesh_sawf_callbacks ecm_wifi_plugin_emesh = {
|
|
.update_peer_mesh_latency_params = qca_mesh_latency_update_peer_parameter,
|
|
- .update_service_id_get_msduq = qca_sawf_get_msduq_v2,
|
|
+ .update_service_id_get_msduq = ecm_wifi_plugin_emesh_sawf_get_mark_data,
|
|
.sawf_conn_sync = ecm_wifi_plugin_emesh_sawf_conn_sync,
|
|
};
|
|
|
|
--- a/exports/ecm_classifier_emesh_public.h
|
|
+++ b/exports/ecm_classifier_emesh_public.h
|
|
@@ -61,6 +61,25 @@ struct ecm_classifier_fse_info {
|
|
};
|
|
|
|
/**
|
|
+ * ecm_classifier_emesh_sawf_flow_info
|
|
+ *
|
|
+ * @netdev : Netdevice
|
|
+ * @peer_mac : Destination peer mac address
|
|
+ * @service_id : Service class id
|
|
+ * @dscp : Differentiated Services Code Point
|
|
+ * @rule_id : Rule id
|
|
+ * @sawf_rule_type: Rule type
|
|
+ */
|
|
+struct ecm_classifier_emesh_sawf_flow_info {
|
|
+ struct net_device *netdev;
|
|
+ uint8_t *peer_mac;
|
|
+ uint32_t service_id;
|
|
+ uint32_t dscp;
|
|
+ uint32_t rule_id;
|
|
+ uint8_t sawf_rule_type;
|
|
+};
|
|
+
|
|
+/**
|
|
* Mesh latency configuration update callback function to which MSCS client will register.
|
|
*/
|
|
typedef int (*ecm_classifier_emesh_callback_t)(uint8_t dest_mac[],
|
|
@@ -71,8 +90,7 @@ typedef int (*ecm_classifier_emesh_callb
|
|
/**
|
|
* MSDUQ callback to which emesh-sawf will register.
|
|
*/
|
|
-typedef uint16_t (*ecm_classifier_emesh_msduq_callback_t)(struct net_device *out_dev,
|
|
- uint8_t dest_mac[], uint32_t service_class_id, uint32_t dscp, uint32_t rule_id, uint8_t sawf_rule_type);
|
|
+typedef uint32_t (*ecm_classifier_emesh_msduq_callback_t)(struct ecm_classifier_emesh_sawf_flow_info *sawf_flow_info);
|
|
|
|
/**
|
|
* SAWF params sync callback function pointer.
|