首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用无线分机配置网络设备

使用无线分机配置网络设备
EN

Stack Overflow用户
提问于 2018-07-01 11:37:27
回答 1查看 590关注 0票数 0

我需要在linux主机上使用C语言为应用程序配置一个网络设备。我在netlink,libnl和通过cfg80211和mac80211的nl80211上读到了。后来我发现我正在使用的设备的驱动程序不支持mac80211接口,所以我无法使用netlink库来配置设备。我剩下的唯一选择就是使用ioctl进行无线扩展。所以我一直在阅读iwconfig的源代码(iw使用netlink,而iwconfig使用wext)。

例如,假设我正在尝试在80211适配器上设置通道。无线扩展ioctl命令是SIOCSIWFREQ (根据iwconfig和我的设备的驱动程序)。根据我所读到的,您打开了一个套接字,并使用具有'ifreq‘结构的ioctl来配置网络适配器(参见'man netdevice')。

问题是,iwconfigure定义了自己的名为' iwreq‘的' ifreq’结构,它看起来完全不同(参见iwconfig源代码,有一条评论说这个iwreq结构与ifreq结构相同)。

ifreq结构看起来甚至没有用于设置通道的字段。

所以我的问题是,这个'ifreq‘结构在内核的什么地方被接收和处理。在哪里可以找到关于接口(结构中的字段)的文档。

所有IOCTLS命令都在/usr/inlcude/linux/wireless.h中定义

谢谢!

下面是ifreq:

代码语言:javascript
复制
struct ifreq {
    char ifr_name[IFNAMSIZ]; /* Interface name */
    union {
        struct sockaddr ifr_addr;
        struct sockaddr ifr_dstaddr;
        struct sockaddr ifr_broadaddr;
        struct sockaddr ifr_netmask;
        struct sockaddr ifr_hwaddr;
        short           ifr_flags;
        int             ifr_ifindex;
        int             ifr_metric;
        int             ifr_mtu;
        struct ifmap    ifr_map;
        char            ifr_slave[IFNAMSIZ];
        char            ifr_newname[IFNAMSIZ];
        char           *ifr_data;
    };
};

这里是iwreq (来自wireless.h,来自HP的wireless-tools )

代码语言:javascript
复制
union   iwreq_data
{   
    /* Config - generic */
    char        name[IFNAMSIZ];
    /* Name : used to verify the presence of  wireless extensions.
    * Name of the protocol/provider... */

    struct iw_point essid;      /* Extended network name */
    struct iw_param nwid;       /* network id (or domain - the cell) */
    struct iw_freq  freq;       /* frequency or channel :
                                 * 0-1000 = channel
                                 * > 1000 = frequency in Hz */

    struct iw_param sens;       /* signal level threshold */
    struct iw_param bitrate;    /* default bit rate */
    struct iw_param txpower;    /* default transmit power */
    struct iw_param rts;        /* RTS threshold threshold */
    struct iw_param frag;       /* Fragmentation threshold */
    __u32       mode;       /* Operation mode */
    struct iw_param retry;      /* Retry limits & lifetime */

    struct iw_point encoding;   /* Encoding stuff : tokens */
    struct iw_param power;      /* PM duration/timeout */
    struct iw_quality qual;     /* Quality part of statistics */

    struct sockaddr ap_addr;    /* Access point address */
    struct sockaddr addr;       /* Destination address (hw/mac) */

    struct iw_param param;      /* Other small parameters */
    struct iw_point data;       /* Other large parameters */
};

struct  iwreq
{
    union
    {
      char    ifrn_name[IFNAMSIZ];    /* if name, e.g. "eth0" */
    } ifr_ifrn;

    /* Data part (defined just above) */
    union   iwreq_data  u;
};

很容易知道如何使用iwreq来配置通道,即freq字段,但是ifreq结构中的标准在哪里呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-02 02:03:31

struct iwreq可以在linux/wireless.h中找到,您可以简单地包含它并使用'iwreq‘结构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51120218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档