From 20a39405900424e6ca1d8fbd9fc3d6c1ece04213 Mon Sep 17 00:00:00 2001 From: nobelj Date: Wed, 31 Mar 2021 00:30:04 -0700 Subject: [PATCH] qcacmn: Add fix to support proxy arp function call a call to osif_proxy_arp need to be invoked inside UMAC_SUPPORT_PROXY_ARP as it was protected under build macro UMAC_SUPPORT_PROXY_ARP. Change-Id: I6e165a328ac65fb659cb9fbc3a0ce39fcbb6744b --- dp/wifi3.0/dp_tx.c | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 50f7362bb5..19cd33647b 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -3268,6 +3268,47 @@ qdf_nbuf_t dp_tx_send_vdev_id_check(struct cdp_soc_t *soc_hdl, return dp_tx_send(soc_hdl, vdev_id, nbuf); } +#ifdef UMAC_SUPPORT_PROXY_ARP +/** + * dp_tx_proxy_arp() - Tx proxy arp handler + * @vdev: datapath vdev handle + * @buf: sk buffer + * + * Return: status + */ +static inline +int dp_tx_proxy_arp(struct dp_vdev *vdev, qdf_nbuf_t nbuf) +{ + if (vdev->osif_proxy_arp) + return vdev->osif_proxy_arp(vdev->osif_vdev, nbuf); + + /* + * when UMAC_SUPPORT_PROXY_ARP is defined, we expect + * osif_proxy_arp has a valid function pointer assigned + * to it + */ + dp_tx_err("valid function pointer for osif_proxy_arp is expected!!\n"); + + return QDF_STATUS_NOT_INITIALIZED; +} +#else +/** + * dp_tx_proxy_arp() - Tx proxy arp handler + * @vdev: datapath vdev handle + * @buf: sk buffer + * + * This function always return 0 when UMAC_SUPPORT_PROXY_ARP + * is not defined. + * + * Return: status + */ +static inline +int dp_tx_proxy_arp(struct dp_vdev *vdev, qdf_nbuf_t nbuf) +{ + return QDF_STATUS_SUCCESS; +} +#endif + /** * dp_tx_reinject_handler() - Tx Reinject Handler * @soc: datapath soc handle @@ -3355,8 +3396,8 @@ void dp_tx_reinject_handler(struct dp_soc *soc, ((is_mcast && peer->wds_ecm.wds_tx_mcast_4addr) || (is_ucast && peer->wds_ecm.wds_tx_ucast_4addr))))) { #else - ((peer->bss_peer && vdev->osif_proxy_arp && - !(vdev->osif_proxy_arp(vdev->osif_vdev, nbuf))))) { + (peer->bss_peer && + (dp_tx_proxy_arp(vdev, nbuf) == QDF_STATUS_SUCCESS))) { #endif peer_id = DP_INVALID_PEER;