第一步:
在Truck/drivers/wlan/lmac/ath_dev/if_athioctl.h文件中添加以下代码:
#define ATH_IOCTL_GET_AP_TIMEFAIR (SIOCIWFIRSTPRIV+19)
#define ATH_IOCTL_SET_AP_TIMEFAIR (SIOCIWFIRSTPRIV+20)
第二步:
在Truck/drivers/wlan/os/linux/src/ath_iw_handler.c文件中添加以下代码:
1. 在static const iw_handler ath_iw_priv_handlers[]数组中添加函数指针,保证在调用的时候能够准确的调用到该函数。
(iw_handler) ath_iw_get_timefair, /* SIOCWFIRSTPRIV+16 */
(iw_handler) ath_iw_set_timefair, /* SIOCWFIRSTPRIV+17 */
2. 在文件中添加对ath_iw_get_timefair函数和ath_iw_set_timefair函数的实现。
static int ath_iw_set_timefair(struct net_device *dev, struct iw_request_info *info, void *w, char *extra)
{
u_int32_t *ic_set_num = (u_int32_t *) extra;
struct ath_softc_net80211 *scn = ath_netdev_priv(dev);
struct ieee80211com *ic = &scn->sc_ic;
/* if ic_set_num != 0/1,there is no use for settimefair command */
if( *ic_set_num == 0 || *ic_set_num == 1)
{
ic->timefair = *ic_set_num;
}
return 0;
}
static int ath_iw_get_timefair(struct net_device *dev, struct iw_request_info *info, void *w, char *extra)
{
char *buf = (char *)extra;
struct iw_point *wri = (struct iw_point *)w;
struct ath_softc_net80211 *scn = ath_netdev_priv(dev);
struct ieee80211com *ic = &scn->sc_ic;
char temp[2] = {0}; //防止显示错误,保证只能显示一个字符,解决'/0'问题。
sprintf(temp,"%d",ic->timefair);
memcpy(buf,temp,strlen(temp)+1);
wri->length = strlen(buf);
return 0;
}
第三步:
在Truck/drivers/wlan/umac/include/ieee80211_var.h文件中ieee80211com结构体中添加对应的成员timefair。
第四步:
Truck/drivers/wlan/os/linux/src/ieee80211_aponly.c文件中调用该参数:
/* add by wudi start, 2015/11/20 */
/* time fair priority */
if ( 1 == ni->ni_ic->timefair )
{
rate = ni->ni_ic->ic_node_getrate(ni, IEEE80211_RATE_TX);
time_fair_set_priority(skb, rate);
}
/* add by wudi end, 2015/11/20 */
操作命令:iwconfig wifi0/wifi1 settimefair 0/1 //设置进入时间公平的开关
iwconfig wifi0/wifi1 gettimefair //获取进入时间公平的参数
我们不仅可以在串口下设定参数,同时也可通过页面进行设置参数:
http://192.168.1.1/x_myset2.cgi?type=objOperate&action=edit&id=OID_LoadBalance&value=<OID_LoadBalance>Enable=1</OID_LoadBalance>
其中红色的字体标记的需要你自己设置的参数,OID_LoadBalance参数需要在Truck/platform/userspace/privute/libs/cms_core/mdm_objectidnametable.c文件中查找对应的参数。其余单数根据自己的命令进行给定。