Explorar el Código

qcacld-3.0: Add support for specifying ethernet protocol type

Add support for vendor attribute which givies provision to
specify the ethernet protocol id from userspace to the packets
which are offloaded to the driver/firmware (e.g., IPv4, IPv6).

Change-Id: I543cbe63c6daa43427c7f207c42c667525dc6dcd
CRs-Fixed: 2398207
Arun Kumar Khandavalli hace 6 años
padre
commit
f1f6592094
Se han modificado 1 ficheros con 12 adiciones y 0 borrados
  1. 12 0
      core/hdd/src/wlan_hdd_cfg80211.c

+ 12 - 0
core/hdd/src/wlan_hdd_cfg80211.c

@@ -7458,6 +7458,8 @@ static int hdd_unmap_req_id_to_pattern_id(struct hdd_context *hdd_ctx,
 #define PARAM_DST_MAC_ADDR \
 #define PARAM_DST_MAC_ADDR \
 		QCA_WLAN_VENDOR_ATTR_OFFLOADED_PACKETS_DST_MAC_ADDR
 		QCA_WLAN_VENDOR_ATTR_OFFLOADED_PACKETS_DST_MAC_ADDR
 #define PARAM_PERIOD QCA_WLAN_VENDOR_ATTR_OFFLOADED_PACKETS_PERIOD
 #define PARAM_PERIOD QCA_WLAN_VENDOR_ATTR_OFFLOADED_PACKETS_PERIOD
+#define PARAM_PROTO_TYPE \
+		QCA_WLAN_VENDOR_ATTR_OFFLOADED_PACKETS_ETHER_PROTO_TYPE
 
 
 /**
 /**
  * wlan_hdd_add_tx_ptrn() - add tx pattern
  * wlan_hdd_add_tx_ptrn() - add tx pattern
@@ -7507,6 +7509,7 @@ wlan_hdd_add_tx_ptrn(struct hdd_adapter *adapter, struct hdd_context *hdd_ctx,
 		hdd_err("attr period failed");
 		hdd_err("attr period failed");
 		goto fail;
 		goto fail;
 	}
 	}
+
 	add_req->usPtrnIntervalMs = nla_get_u32(tb[PARAM_PERIOD]);
 	add_req->usPtrnIntervalMs = nla_get_u32(tb[PARAM_PERIOD]);
 	hdd_debug("Period: %u ms", add_req->usPtrnIntervalMs);
 	hdd_debug("Period: %u ms", add_req->usPtrnIntervalMs);
 	if (add_req->usPtrnIntervalMs == 0) {
 	if (add_req->usPtrnIntervalMs == 0) {
@@ -7552,6 +7555,13 @@ wlan_hdd_add_tx_ptrn(struct hdd_adapter *adapter, struct hdd_context *hdd_ctx,
 		goto fail;
 		goto fail;
 	}
 	}
 
 
+	if (!tb[PARAM_PROTO_TYPE])
+		eth_type = htons(ETH_P_IP);
+	else
+		eth_type = htons(nla_get_u16(tb[PARAM_PROTO_TYPE]));
+
+	hdd_debug("packet proto type: %u", eth_type);
+
 	len = 0;
 	len = 0;
 	qdf_mem_copy(&add_req->ucPattern[0], dst_addr.bytes, QDF_MAC_ADDR_SIZE);
 	qdf_mem_copy(&add_req->ucPattern[0], dst_addr.bytes, QDF_MAC_ADDR_SIZE);
 	len += QDF_MAC_ADDR_SIZE;
 	len += QDF_MAC_ADDR_SIZE;
@@ -7689,6 +7699,7 @@ __wlan_hdd_cfg80211_offloaded_packets(struct wiphy *wiphy,
 			[PARAM_DST_MAC_ADDR] = { .type = NLA_BINARY,
 			[PARAM_DST_MAC_ADDR] = { .type = NLA_BINARY,
 						.len = QDF_MAC_ADDR_SIZE },
 						.len = QDF_MAC_ADDR_SIZE },
 			[PARAM_PERIOD] = { .type = NLA_U32 },
 			[PARAM_PERIOD] = { .type = NLA_U32 },
+			[PARAM_PROTO_TYPE] = {.type = NLA_U16},
 	};
 	};
 
 
 	hdd_enter_dev(dev);
 	hdd_enter_dev(dev);
@@ -7739,6 +7750,7 @@ __wlan_hdd_cfg80211_offloaded_packets(struct wiphy *wiphy,
 #undef PARAM_SRC_MAC_ADDR
 #undef PARAM_SRC_MAC_ADDR
 #undef PARAM_DST_MAC_ADDR
 #undef PARAM_DST_MAC_ADDR
 #undef PARAM_PERIOD
 #undef PARAM_PERIOD
+#undef PARAM_PROTO_TYPE
 
 
 /**
 /**
  * wlan_hdd_cfg80211_offloaded_packets() - Wrapper to offload packets
  * wlan_hdd_cfg80211_offloaded_packets() - Wrapper to offload packets