summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsyeh <syeh@qca.qualcomm.com>2014-10-02 02:32:39 +0800
committerAnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com>2014-10-06 20:39:51 +0530
commit48ea9feb5442d5239f4e6224ba04e4f6998b5308 (patch)
tree3d84156e24adc83c23b102d13205e7731afa2269
parenta256a80d56fe76345958d917f1ef5c892d408e3b (diff)
qcacld: Support DHCP Server Offload
Support DHCP Server Offload for SAP mode. Change-Id: I94c35236e0c0092c733528504154c92b059ecdd6 CRs-Fixed: 733164
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h33
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c32
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c76
-rw-r--r--CORE/MAC/inc/sirApi.h10
-rw-r--r--CORE/MAC/src/include/sirParams.h3
-rw-r--r--CORE/SERVICES/WMA/wma.c47
-rw-r--r--CORE/SME/inc/sme_Api.h12
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c54
-rw-r--r--CORE/SYS/legacy/src/utils/src/macTrace.c3
-rw-r--r--CORE/WDA/inc/wlan_qct_wda.h4
-rw-r--r--Kbuild1
-rw-r--r--firmware_bin/WCNSS_qcom_cfg.usb.ini11
12 files changed, 285 insertions, 1 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 7e0d02706f81..bc2ff029f4e2 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -49,6 +49,11 @@
#define FW_MODULE_LOG_LEVEL_STRING_LENGTH (255)
+#ifdef DHCP_SERVER_OFFLOAD
+#define IPADDR_NUM_ENTRIES (4)
+#define IPADDR_STRING_LENGTH (16)
+#endif
+
//Number of items that can be configured
#define MAX_CFG_INI_ITEMS 512
@@ -2814,6 +2819,28 @@ This feature requires the dependent cfg.ini "gRoamPrefer5GHz" set to 1 */
#define CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP_MIN ( 0 )
#define CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP_MAX ( 1 )
#define CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP_DEFAULT ( 0 )
+
+#ifdef DHCP_SERVER_OFFLOAD
+/*
+ * Enable/Disable DHCP Server Offload
+ * Default: Disable
+ */
+#define CFG_DHCP_SERVER_OFFLOAD_SUPPORT_NAME "gDHCPServerOffloadEnable"
+#define CFG_DHCP_SERVER_OFFLOAD_SUPPORT_MIN ( 0 )
+#define CFG_DHCP_SERVER_OFFLOAD_SUPPORT_MAX ( 1 )
+#define CFG_DHCP_SERVER_OFFLOAD_SUPPORT_DEFAULT ( CFG_DHCP_SERVER_OFFLOAD_SUPPORT_MIN )
+
+/* Max number of DHCP clients to be supported */
+#define CFG_DHCP_SERVER_OFFLOAD_NUM_CLIENT_NAME "gDHCPMaxNumClients"
+#define CFG_DHCP_SERVER_OFFLOAD_NUM_CLIENT_MIN ( 1 )
+#define CFG_DHCP_SERVER_OFFLOAD_NUM_CLIENT_MAX ( 8 )
+#define CFG_DHCP_SERVER_OFFLOAD_NUM_CLIENT_DEFAULT ( CFG_DHCP_SERVER_OFFLOAD_NUM_CLIENT_MAX )
+
+/* DHCP Server IP*/
+#define CFG_DHCP_SERVER_IP_NAME "gDHCPServerIP"
+#define CFG_DHCP_SERVER_IP_DEFAULT ""
+#endif /* DHCP_SERVER_OFFLOAD */
+
/*---------------------------------------------------------------------------
Type declarations
-------------------------------------------------------------------------*/
@@ -3417,6 +3444,12 @@ typedef struct
v_U32_t extWowApp2TcpRxTimeout;
#endif
v_BOOL_t gEnableDeauthToDisassocMap;
+
+#ifdef DHCP_SERVER_OFFLOAD
+ v_BOOL_t enableDHCPServerOffload;
+ v_U32_t dhcpMaxNumClients;
+ v_U8_t dhcpServerIP[IPADDR_STRING_LENGTH];
+#endif /* DHCP_SERVER_OFFLOAD */
} hdd_config_t;
#ifdef WLAN_FEATURE_MBSSID
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 28a407912b6d..c4d7ec634cec 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -3911,6 +3911,27 @@ REG_TABLE_ENTRY g_registry_table[] =
CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP_DEFAULT,
CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP_MIN,
CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP_MAX ),
+
+#ifdef DHCP_SERVER_OFFLOAD
+ REG_VARIABLE( CFG_DHCP_SERVER_OFFLOAD_SUPPORT_NAME, WLAN_PARAM_Integer,
+ hdd_config_t, enableDHCPServerOffload,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_DHCP_SERVER_OFFLOAD_SUPPORT_DEFAULT,
+ CFG_DHCP_SERVER_OFFLOAD_SUPPORT_MIN,
+ CFG_DHCP_SERVER_OFFLOAD_SUPPORT_MAX ),
+
+ REG_VARIABLE( CFG_DHCP_SERVER_OFFLOAD_NUM_CLIENT_NAME, WLAN_PARAM_Integer,
+ hdd_config_t, dhcpMaxNumClients,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_DHCP_SERVER_OFFLOAD_NUM_CLIENT_DEFAULT,
+ CFG_DHCP_SERVER_OFFLOAD_NUM_CLIENT_MIN,
+ CFG_DHCP_SERVER_OFFLOAD_NUM_CLIENT_MAX ),
+
+ REG_VARIABLE_STRING( CFG_DHCP_SERVER_IP_NAME, WLAN_PARAM_String,
+ hdd_config_t, dhcpServerIP,
+ VAR_FLAGS_OPTIONAL,
+ (void *) CFG_DHCP_SERVER_IP_DEFAULT ),
+#endif /* DHCP_SERVER_OFFLOAD */
};
#ifdef WLAN_FEATURE_MBSSID
@@ -4517,6 +4538,17 @@ void print_hdd_cfg(hdd_context_t *pHddCtx)
pHddCtx->cfg_ini->extWowApp2TcpRxTimeout);
#endif
+#ifdef DHCP_SERVER_OFFLOAD
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH,
+ "Name = [gDHCPServerOffloadEnable] Value = [%u]",
+ pHddCtx->cfg_ini->enableDHCPServerOffload);
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH,
+ "Name = [gDHCPMaxNumClients] Value = [%u]",
+ pHddCtx->cfg_ini->dhcpMaxNumClients);
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH,
+ "Name = [gDHCPServerIP] Value = [%s]",
+ pHddCtx->cfg_ini->dhcpServerIP);
+#endif
}
#define CFG_VALUE_MAX_LEN 256
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index da46c2f8dd5a..01065dbbd495 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -5330,6 +5330,76 @@ static void wlan_hdd_set_acs_allowed_channels(
return;
}
+#ifdef DHCP_SERVER_OFFLOAD
+static void wlan_hdd_set_dhcp_server_offload(hdd_adapter_t *pHostapdAdapter)
+{
+ hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pHostapdAdapter);
+ tpSirDhcpSrvOffloadInfo pDhcpSrvInfo;
+ tANI_U8 numEntries = 0;
+ tANI_U8 srv_ip[IPADDR_NUM_ENTRIES];
+ tANI_U8 num;
+ tANI_U32 temp;
+
+ /* Prepare the request to send to SME */
+ pDhcpSrvInfo = vos_mem_malloc(sizeof(*pDhcpSrvInfo));
+ if (NULL == pDhcpSrvInfo) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s: could not allocate tDhcpSrvOffloadInfo!", __func__);
+ return;
+ }
+
+ vos_mem_zero(pDhcpSrvInfo, sizeof(*pDhcpSrvInfo));
+
+ pDhcpSrvInfo->vdev_id = pHostapdAdapter->sessionId;
+ pDhcpSrvInfo->dhcpSrvOffloadEnabled = TRUE;
+ pDhcpSrvInfo->dhcpClientNum = pHddCtx->cfg_ini->dhcpMaxNumClients;
+
+ hdd_string_to_u8_array(pHddCtx->cfg_ini->dhcpServerIP,
+ srv_ip,
+ &numEntries,
+ IPADDR_NUM_ENTRIES);
+ if (numEntries != IPADDR_NUM_ENTRIES) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s: incorrect IP address (%s) assigned for DHCP server!",
+ __func__, pHddCtx->cfg_ini->dhcpServerIP);
+ goto end;
+ }
+
+ if ((srv_ip[0] >= 224) && (srv_ip[0] <= 239)) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s: invalid IP address (%s)! It could NOT be multicast IP address!",
+ __func__, pHddCtx->cfg_ini->dhcpServerIP);
+ goto end;
+ }
+
+ if (srv_ip[IPADDR_NUM_ENTRIES-1] >= 100) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s: invalid IP address (%s)! The last field must be less than 100!",
+ __func__, pHddCtx->cfg_ini->dhcpServerIP);
+ goto end;
+ }
+
+ for (num = 0; num < numEntries; num++) {
+ temp = srv_ip[num];
+ pDhcpSrvInfo->dhcpSrvIP |= (temp << (8 * num));
+ }
+
+ if (eHAL_STATUS_SUCCESS !=
+ sme_setDhcpSrvOffload(pHddCtx->hHal, pDhcpSrvInfo)) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s: sme_setDHCPSrvOffload fail!", __func__);
+ goto end;
+ }
+
+ hddLog(VOS_TRACE_LEVEL_INFO_HIGH,
+ "%s: enable DHCP Server offload successfully!", __func__);
+
+end:
+ vos_mem_free(pDhcpSrvInfo);
+ return;
+}
+#endif /* DHCP_SERVER_OFFLOAD */
+
#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0))
static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter,
struct beacon_parameters *params)
@@ -6099,6 +6169,12 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter,
set_bit(SOFTAP_BSS_STARTED, &pHostapdAdapter->event_flags);
wlan_hdd_incr_active_session(pHddCtx, pHostapdAdapter->device_mode);
+#ifdef DHCP_SERVER_OFFLOAD
+ /* set dhcp server offload */
+ if (iniConfig->enableDHCPServerOffload)
+ wlan_hdd_set_dhcp_server_offload(pHostapdAdapter);
+#endif /* DHCP_SERVER_OFFLOAD */
+
#ifdef WLAN_FEATURE_P2P_DEBUG
if (pHostapdAdapter->device_mode == WLAN_HDD_P2P_GO)
{
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 66d9ee949764..c7f351d8b0fa 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -5511,6 +5511,16 @@ typedef struct sAniGetLinkStatus
tANI_U8 sessionId;
} tAniGetLinkStatus, *tpAniGetLinkStatus;
+#ifdef DHCP_SERVER_OFFLOAD
+typedef struct
+{
+ tANI_U32 vdev_id;
+ tANI_U32 dhcpSrvOffloadEnabled;
+ tANI_U32 dhcpClientNum;
+ tANI_U32 dhcpSrvIP;
+} tSirDhcpSrvOffloadInfo, *tpSirDhcpSrvOffloadInfo;
+#endif /* DHCP_SERVER_OFFLOAD */
+
/* find the size of given member within a structure */
#ifndef member_size
#define member_size(type, member) (sizeof(((type *)0)->member))
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h
index 4594e3844de9..9c5c6db54d77 100644
--- a/CORE/MAC/src/include/sirParams.h
+++ b/CORE/MAC/src/include/sirParams.h
@@ -656,6 +656,9 @@ typedef struct sSirMbMsgP2p
#define SIR_HAL_GET_TEMPERATURE_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 290)
#define SIR_HAL_SET_SCAN_MAC_OUI_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 291)
+#ifdef DHCP_SERVER_OFFLOAD
+#define SIR_HAL_SET_DHCP_SERVER_OFFLOAD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 292)
+#endif /* DHCP_SERVER_OFFLOAD */
#define SIR_HAL_MSG_TYPES_END (SIR_HAL_MSG_TYPES_BEGIN + 0x1FF)
// CFG message types
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index f208256e0bb5..e116cd04ee49 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -21938,6 +21938,46 @@ VOS_STATUS wma_scan_probe_setoui(tp_wma_handle wma,
return VOS_STATUS_SUCCESS;
}
+#ifdef DHCP_SERVER_OFFLOAD
+static int wma_process_dhcpserver_offload(tp_wma_handle wma_handle,
+ tSirDhcpSrvOffloadInfo *pDhcpSrvOffloadInfo)
+{
+ wmi_set_dhcp_server_offload_cmd_fixed_param *cmd;
+ wmi_buf_t buf;
+ int err;
+
+ buf = wmi_buf_alloc(wma_handle->wmi_handle, sizeof(*cmd));
+ if (!buf) {
+ WMA_LOGE("Failed to allocate buffer to send "
+ "set_dhcp_server_offload cmd");
+ return -ENOMEM;
+ }
+
+ cmd = (wmi_set_dhcp_server_offload_cmd_fixed_param *)wmi_buf_data(buf);
+ vos_mem_zero(cmd, sizeof(*cmd));
+
+ WMITLV_SET_HDR(&cmd->tlv_header,
+ WMITLV_TAG_STRUC_wmi_set_dhcp_server_offload_cmd_fixed_param,
+ WMITLV_GET_STRUCT_TLVLEN(
+ wmi_set_dhcp_server_offload_cmd_fixed_param));
+ cmd->vdev_id = pDhcpSrvOffloadInfo->vdev_id;
+ cmd->enable = pDhcpSrvOffloadInfo->dhcpSrvOffloadEnabled;
+ cmd->num_client = pDhcpSrvOffloadInfo->dhcpClientNum;
+ cmd->srv_ipv4 = pDhcpSrvOffloadInfo->dhcpSrvIP;
+ cmd->start_lsb = 0;
+ err = wmi_unified_cmd_send(wma_handle->wmi_handle, buf,
+ sizeof(*cmd), WMI_SET_DHCP_SERVER_OFFLOAD_CMDID);
+ if (err) {
+ WMA_LOGE("Failed to send set_dhcp_server_offload cmd");
+ wmi_buf_free(buf);
+ return -EIO;
+ }
+ WMA_LOGD("Set dhcp server offload to vdevId %d",
+ pDhcpSrvOffloadInfo->vdev_id);
+ return 0;
+}
+#endif /* DHCP_SERVER_OFFLOAD */
+
/*
* function : wma_mc_process_msg
* Description :
@@ -22512,6 +22552,13 @@ VOS_STATUS wma_mc_process_msg(v_VOID_t *vos_context, vos_msg_t *msg)
wma_get_temperature(wma_handle);
vos_mem_free(msg->bodyptr);
break;
+#ifdef DHCP_SERVER_OFFLOAD
+ case WDA_SET_DHCP_SERVER_OFFLOAD_CMD:
+ wma_process_dhcpserver_offload(wma_handle,
+ (tSirDhcpSrvOffloadInfo *)msg->bodyptr);
+ vos_mem_free(msg->bodyptr);
+ break;
+#endif /* DHCP_SERVER_OFFLOAD */
default:
WMA_LOGD("unknow msg type %x", msg->type);
/* Do Nothing? MSG Body should be freed at here */
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index aa3c494e540c..b3f319412799 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -4069,4 +4069,16 @@ eHalStatus sme_GetTemperature(tHalHandle hHal,
-------------------------------------------------------------------------*/
eHalStatus sme_SetScanningMacOui(tHalHandle hHal, tSirScanMacOui *pScanMacOui);
+#ifdef DHCP_SERVER_OFFLOAD
+/* ---------------------------------------------------------------------------
+ \fn sme_setDhcpSrvOffload
+ \brief SME API to set DHCP server offload info
+ \param hHal
+ \param pDhcpSrvInfo : DHCP server offload info struct
+ \- return eHalStatus
+ -------------------------------------------------------------------------*/
+eHalStatus sme_setDhcpSrvOffload(tHalHandle hHal,
+ tSirDhcpSrvOffloadInfo *pDhcpSrvInfo);
+#endif /* DHCP_SERVER_OFFLOAD */
+
#endif //#if !defined( __SME_API_H )
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index dd8729a01ba1..200637bdab10 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -14085,5 +14085,57 @@ eHalStatus sme_SetScanningMacOui(tHalHandle hHal, tSirScanMacOui *pScanMacOui)
}
return status;
}
-
#endif
+
+#ifdef DHCP_SERVER_OFFLOAD
+/* ---------------------------------------------------------------------------
+ \fn sme_setDhcpSrvOffload
+ \brief SME API to set DHCP server offload info
+ \param hHal
+ \param pDhcpSrvInfo : DHCP server offload info struct
+ \- return eHalStatus
+ -------------------------------------------------------------------------*/
+eHalStatus sme_setDhcpSrvOffload(tHalHandle hHal,
+ tSirDhcpSrvOffloadInfo *pDhcpSrvInfo)
+{
+ vos_msg_t vosMessage;
+ tSirDhcpSrvOffloadInfo *pSmeDhcpSrvInfo;
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+
+ pSmeDhcpSrvInfo = vos_mem_malloc(sizeof(*pSmeDhcpSrvInfo));
+
+ if (!pSmeDhcpSrvInfo) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: Not able to allocate memory for WDA_SET_DHCP_SERVER_OFFLOAD_CMD",
+ __func__);
+ return eHAL_STATUS_E_MALLOC_FAILED;
+ }
+
+ *pSmeDhcpSrvInfo = *pDhcpSrvInfo;
+
+ status = sme_AcquireGlobalLock(&pMac->sme);
+ if (eHAL_STATUS_SUCCESS == status) {
+ /* serialize the req through MC thread */
+ vosMessage.type = WDA_SET_DHCP_SERVER_OFFLOAD_CMD;
+ vosMessage.bodyptr = pSmeDhcpSrvInfo;
+
+ if (!VOS_IS_STATUS_SUCCESS(
+ vos_mq_post_message(VOS_MODULE_ID_WDA, &vosMessage))) {
+ VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: Not able to post WDA_SET_DHCP_SERVER_OFFLOAD_CMD to WDA!",
+ __func__);
+ vos_mem_free(pSmeDhcpSrvInfo);
+ status = eHAL_STATUS_FAILURE;
+ }
+ sme_ReleaseGlobalLock(&pMac->sme);
+ } else {
+ VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: sme_AcquireGlobalLock error!",
+ __func__);
+ vos_mem_free(pSmeDhcpSrvInfo);
+ }
+
+ return (status);
+}
+#endif /* DHCP_SERVER_OFFLOAD */
diff --git a/CORE/SYS/legacy/src/utils/src/macTrace.c b/CORE/SYS/legacy/src/utils/src/macTrace.c
index 53a942e7b6cd..1351f0fcd94c 100644
--- a/CORE/SYS/legacy/src/utils/src/macTrace.c
+++ b/CORE/SYS/legacy/src/utils/src/macTrace.c
@@ -822,6 +822,9 @@ tANI_U8* macTraceGetWdaMsgString( tANI_U16 wdaMsg )
#endif
CASE_RETURN_STRING(SIR_HAL_SET_BASE_MACADDR_IND);
CASE_RETURN_STRING(WDA_LINK_STATUS_GET_REQ);
+#ifdef DHCP_SERVER_OFFLOAD
+ CASE_RETURN_STRING(WDA_SET_DHCP_SERVER_OFFLOAD_CMD);
+#endif
default:
return((tANI_U8*) "UNKNOWN" );
break;
diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index e91a39acc4de..0181e7c3dc77 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -985,6 +985,10 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb);
#define WDA_SET_SCAN_MAC_OUI_REQ SIR_HAL_SET_SCAN_MAC_OUI_REQ
+#ifdef DHCP_SERVER_OFFLOAD
+#define WDA_SET_DHCP_SERVER_OFFLOAD_CMD SIR_HAL_SET_DHCP_SERVER_OFFLOAD
+#endif /* DHCP_SERVER_OFFLOAD */
+
tSirRetStatus wdaPostCtrlMsg(tpAniSirGlobal pMac, tSirMsgQ *pMsg);
#define HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME 0x40 // Bit 6 will be used to control BD rate for Management frames
diff --git a/Kbuild b/Kbuild
index 14a0a9690691..10bee2f20f54 100644
--- a/Kbuild
+++ b/Kbuild
@@ -918,6 +918,7 @@ endif
ifeq ($(CONFIG_QCA_WIFI_SDIO), 1)
CDEFINES += -DFEATURE_WLAN_FORCE_SAP_SCC
+CDEFINES += -DDHCP_SERVER_OFFLOAD
endif
ifeq ($(CONFIG_ARCH_MSM), y)
diff --git a/firmware_bin/WCNSS_qcom_cfg.usb.ini b/firmware_bin/WCNSS_qcom_cfg.usb.ini
index 33eb4c3b2fce..58225c200c9b 100644
--- a/firmware_bin/WCNSS_qcom_cfg.usb.ini
+++ b/firmware_bin/WCNSS_qcom_cfg.usb.ini
@@ -516,6 +516,17 @@ gEnableSapSuspend=0
# Enable TxBF
gTxBFEnable=1
+
+# Enable or Disable DHCP Server offload
+# 1=Enable, 0=Disable (default)
+gDHCPServerOffloadEnable=0
+# Set max number of DHCP Clients
+# Its value could not be greater than 8
+#gDHCPMaxNumClients=8
+# Set DHCP server IP
+# 4th field could not be greater than 99, that is xxx,xxx,xxx,0 ~ xxx,xxx,xxx,99
+# 1st field could not be within the range of 224 ~ 239 (multicast IP address)
+#gDHCPServerIP=192,168,1,2
END
# Note: Configuration parser would not read anything past the END marker