From 8b2d1c7c05f780d04142537d00e8ad630482f890 Mon Sep 17 00:00:00 2001 From: Sathish Kumar Date: Mon, 16 Jul 2018 14:40:46 +0530 Subject: [PATCH] qcacmn: Add CB ftype for DMS packets Directed Multicast Service (DMS) allows a client to request the AP to convert multicast frames that match a certain traffic classifier into unicast frames for the client. This request can be sent either as a DMS Request Information Element in the Association/Reassociation Request frame or explicitly via a DMS Request Action Frame after the client has completed association. If the AP accepts the DMS Request, all multicast frames matching the traffic classifier specified in the DMS Request will be unicasted directly to the client as an AMSDU. The original multicast frame will still be transmitted for the benefit of those clients that do not support or request for DMS. Add new CB ftype to differentiate data packets intended for DMS subscribed clients CRs-Fixed: 2056341 Change-Id: I687e4f4d182869753e2c3670ec07aa64f95fda1b --- qdf/inc/qdf_nbuf.h | 34 ++++++++++++++++++++++++++++++---- qdf/linux/src/i_qdf_nbuf.h | 12 ------------ 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/qdf/inc/qdf_nbuf.h b/qdf/inc/qdf_nbuf.h index a399b7841d..ad18a0f865 100644 --- a/qdf/inc/qdf_nbuf.h +++ b/qdf/inc/qdf_nbuf.h @@ -457,6 +457,32 @@ enum qdf_proto_type { QDF_PROTO_TYPE_MAX }; +/** + * cb_ftype - Frame type information in skb cb + * @CB_FTYPE_INVALID - Invalid + * @CB_FTYPE_MCAST2UCAST - Multicast to Unicast converted packet + * @CB_FTYPE_TSO - TCP Segmentation Offload + * @CB_FTYPE_TSO_SG - TSO Scatter Gather + * @CB_FTYPE_SG - Scatter Gather + * @CB_FTYPE_INTRABSS_FWD - Intra BSS forwarding + * @CB_FTYPE_RX_INFO - Rx information + * @CB_FTYPE_MESH_RX_INFO - Mesh Rx information + * @CB_FTYPE_MESH_TX_INFO - Mesh Tx information + * @CB_FTYPE_DMS - Directed Multicast Service + */ +enum cb_ftype { + CB_FTYPE_INVALID = 0, + CB_FTYPE_MCAST2UCAST = 1, + CB_FTYPE_TSO = 2, + CB_FTYPE_TSO_SG = 3, + CB_FTYPE_SG = 4, + CB_FTYPE_INTRABSS_FWD = 5, + CB_FTYPE_RX_INFO = 6, + CB_FTYPE_MESH_RX_INFO = 7, + CB_FTYPE_MESH_TX_INFO = 8, + CB_FTYPE_DMS = 9, +}; + /** * qdf_proto_subtype - subtype of packet * @QDF_PROTO_EAPOL_M1 - EAPOL 1/4 @@ -830,13 +856,13 @@ qdf_nbuf_set_vdev_ctx(qdf_nbuf_t buf, uint8_t vdev_id) } static inline void -qdf_nbuf_set_tx_ftype(qdf_nbuf_t buf, uint8_t type) +qdf_nbuf_set_tx_ftype(qdf_nbuf_t buf, enum cb_ftype type) { __qdf_nbuf_set_tx_ftype(buf, type); } static inline void -qdf_nbuf_set_rx_ftype(qdf_nbuf_t buf, uint8_t type) +qdf_nbuf_set_rx_ftype(qdf_nbuf_t buf, enum cb_ftype type) { __qdf_nbuf_set_rx_ftype(buf, type); } @@ -849,12 +875,12 @@ qdf_nbuf_get_vdev_ctx(qdf_nbuf_t buf) return __qdf_nbuf_get_vdev_ctx(buf); } -static inline uint8_t qdf_nbuf_get_tx_ftype(qdf_nbuf_t buf) +static inline enum cb_ftype qdf_nbuf_get_tx_ftype(qdf_nbuf_t buf) { return __qdf_nbuf_get_tx_ftype(buf); } -static inline uint8_t qdf_nbuf_get_rx_ftype(qdf_nbuf_t buf) +static inline enum cb_ftype qdf_nbuf_get_rx_ftype(qdf_nbuf_t buf) { return __qdf_nbuf_get_rx_ftype(buf); } diff --git a/qdf/linux/src/i_qdf_nbuf.h b/qdf/linux/src/i_qdf_nbuf.h index 22ece804bd..15fa410ab3 100644 --- a/qdf/linux/src/i_qdf_nbuf.h +++ b/qdf/linux/src/i_qdf_nbuf.h @@ -573,18 +573,6 @@ void __qdf_nbuf_num_frags_init(struct sk_buff *skb) QDF_NBUF_CB_TX_NUM_EXTRA_FRAGS(skb) = 0; } -typedef enum { - CB_FTYPE_INVALID = 0, - CB_FTYPE_MCAST2UCAST = 1, - CB_FTYPE_TSO = 2, - CB_FTYPE_TSO_SG = 3, - CB_FTYPE_SG = 4, - CB_FTYPE_INTRABSS_FWD = 5, - CB_FTYPE_RX_INFO = 6, - CB_FTYPE_MESH_RX_INFO = 7, - CB_FTYPE_MESH_TX_INFO = 8, -} CB_FTYPE; - /* * prototypes. Implemented in qdf_nbuf.c */