ieee80211_ioctl_getparam(struct net_device *dev, struct iw_request_info *info, void *w, char *extra) 中dev参数是从如何传递过来的
时间: 2023-12-21 09:03:11 浏览: 29
dev参数是通过函数的参数传递进来的。在调用ieee80211_ioctl_getparam函数时,需要传递一个指向net_device结构体的指针作为第一个参数dev,这个指针指向的net_device结构体包含了网络设备的相关信息,比如MAC地址、设备名称等。因此,dev参数就是通过这种方式传递进来的。
相关问题
ieee80211_ioctl_siwfreq 源码解析
ieee80211_ioctl_siwfreq 是一个用于设置 802.11 网络中无线频率的 ioctl 函数。以下是该函数的代码解析:
```c
static int ieee80211_ioctl_siwfreq(struct net_device *dev,
struct iw_request_info *info,
struct iw_freq *fwrq, char *extra)
{
struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
struct cfg80211_chan_def chandef;
int rc;
if (fwrq->e == 1) {
if (fwrq->m == 0 && fwrq->i == 0)
chandef.width = NL80211_CHAN_WIDTH_20_NOHT;
else if (fwrq->m == 0 && fwrq->i == 1)
chandef.width = NL80211_CHAN_WIDTH_20;
else if (fwrq->m == 1 && fwrq->i == 0)
chandef.width = NL80211_CHAN_WIDTH_40;
else if (fwrq->m == 1 && fwrq->i == 1)
chandef.width = NL80211_CHAN_WIDTH_80;
else
return -EINVAL;
chandef.center_freq1 = fwrq->m * 5 + 2407;
chandef.center_freq1 *= 1000;
if (chandef.width != NL80211_CHAN_WIDTH_20_NOHT)
chandef.center_freq1 += 10 * fwrq->i;
/* Set the channel */
rc = ieee80211_set_channel(local, &chandef);
if (rc) {
if (rc == -ENOENT)
return -EAGAIN;
else
return -EINVAL;
}
} else {
rc = ieee80211_get_channel(local);
if (rc < 0)
return rc;
fwrq->e = 1;
fwrq->m = (rc->center_freq - 2407) / 5;
fwrq->i = ((rc->center_freq - 2407) % 5) / 2;
switch (rc->width) {
case NL80211_CHAN_WIDTH_20_NOHT:
fwrq->m = 0;
fwrq->i = 0;
break;
case NL80211_CHAN_WIDTH_20:
fwrq->i = 1;
break;
case NL80211_CHAN_WIDTH_40:
fwrq->m = 1;
fwrq->i = 0;
break;
case NL80211_CHAN_WIDTH_80:
fwrq->m = 1;
fwrq->i = 1;
break;
default:
return -EINVAL;
}
}
return 0;
}
```
首先获取了指向设备结构体的指针,并将其转换为 IEEE 802.11 本地数据结构体的指针。然后,它从参数 fwrq 中获取无线频率信息,并将其存储到一个 cfg80211_chan_def 结构体中。
如果设置了频率,则使用 chandef 结构体中的信息设置 IEEE 802.11 网络的无线频率。如果获取频率,则使用当前频率信息填充 fwrq 结构体。
最后,函数返回值为 0 表示成功,否则表示失败并返回错误代码。
IEEE80211_IOCTL_BROADCAST_ENABLE
IEEE80211_IOCTL_BROADCAST_ENABLE是一个用于启用广播的ioctl命令。在引用\[1\]中的代码中,可以看到WIFI_DRIVER_MODULE_ARG参数中包含了"ifname=wlan0 if2name=p2p0",这表明该驱动支持p2p功能。而在引用\[2\]中的代码中,可以看到pid和vid数组中包含了RTL8723BU的相关信息,这表明该驱动支持RTL8723BU芯片。因此,可以推断该驱动支持IEEE80211_IOCTL_BROADCAST_ENABLE命令。
#### 引用[.reference_title]
- *1* *2* *3* [rtl8723bu rtl8723du在mstar平台上移植](https://blog.csdn.net/xiangzi10/article/details/83145296)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]