mac80211解析二_ieee80211_ops-程序员宅基地

技术标签: 无线网络  mac80211  Linux  linux设备驱动  kernel  设备驱动  wirelesss  ieee80211  linux网络  mac80211解析  

在实现无线网络设备分配时,ieee80211_register_hw关联了ieee80211_ops结构体:

ieee80211_ops结构体是mac80211到设备驱动的回调操作函数集合,定义如下:

/**
 * struct ieee80211_ops - callbacks from mac80211 to the driver
 *
 * This structure contains various callbacks that the driver may
 * handle or, in some cases, must handle, for example to configure
 * the hardware to a new channel or to transmit a frame.
 */
struct ieee80211_ops {
    void (*tx)(struct ieee80211_hw *hw,
           struct ieee80211_tx_control *control,
           struct sk_buff *skb);
    int (*start)(struct ieee80211_hw *hw);
    void (*stop)(struct ieee80211_hw *hw);
#ifdef CONFIG_PM
    int (*suspend)(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan);
    int (*resume)(struct ieee80211_hw *hw);
    void (*set_wakeup)(struct ieee80211_hw *hw, bool enabled);
#endif
    int (*add_interface)(struct ieee80211_hw *hw,
                 struct ieee80211_vif *vif);
    int (*change_interface)(struct ieee80211_hw *hw,
                struct ieee80211_vif *vif,
                enum nl80211_iftype new_type, bool p2p);
    void (*remove_interface)(struct ieee80211_hw *hw,
                 struct ieee80211_vif *vif);
    int (*config)(struct ieee80211_hw *hw, u32 changed);
    void (*bss_info_changed)(struct ieee80211_hw *hw,
                 struct ieee80211_vif *vif,
                 struct ieee80211_bss_conf *info,
                 u32 changed);

    int (*start_ap)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
    void (*stop_ap)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);

    u64 (*prepare_multicast)(struct ieee80211_hw *hw,
                 struct netdev_hw_addr_list *mc_list);
    void (*configure_filter)(struct ieee80211_hw *hw,
                 unsigned int changed_flags,
                 unsigned int *total_flags,
                 u64 multicast);
    int (*set_tim)(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
               bool set);
    int (*set_key)(struct ieee80211_hw *hw, enum set_key_cmd cmd,
               struct ieee80211_vif *vif, struct ieee80211_sta *sta,
               struct ieee80211_key_conf *key);
    void (*update_tkip_key)(struct ieee80211_hw *hw,
                struct ieee80211_vif *vif,
                struct ieee80211_key_conf *conf,
                struct ieee80211_sta *sta,
                u32 iv32, u16 *phase1key);
    void (*set_rekey_data)(struct ieee80211_hw *hw,
                   struct ieee80211_vif *vif,
                   struct cfg80211_gtk_rekey_data *data);
    void (*set_default_unicast_key)(struct ieee80211_hw *hw,
                    struct ieee80211_vif *vif, int idx);
    int (*hw_scan)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
               struct cfg80211_scan_request *req);
    void (*cancel_hw_scan)(struct ieee80211_hw *hw,
                   struct ieee80211_vif *vif);
    int (*sched_scan_start)(struct ieee80211_hw *hw,
                struct ieee80211_vif *vif,
                struct cfg80211_sched_scan_request *req,
                struct ieee80211_sched_scan_ies *ies);
    int (*sched_scan_stop)(struct ieee80211_hw *hw,
                   struct ieee80211_vif *vif);
    void (*sw_scan_start)(struct ieee80211_hw *hw);
    void (*sw_scan_complete)(struct ieee80211_hw *hw);
    int (*get_stats)(struct ieee80211_hw *hw,
             struct ieee80211_low_level_stats *stats);
    void (*get_tkip_seq)(struct ieee80211_hw *hw, u8 hw_key_idx,
                 u32 *iv32, u16 *iv16);
    int (*set_frag_threshold)(struct ieee80211_hw *hw, u32 value);
    int (*set_rts_threshold)(struct ieee80211_hw *hw, u32 value);
    int (*sta_add)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
               struct ieee80211_sta *sta);
    int (*sta_remove)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
              struct ieee80211_sta *sta);
#ifdef CPTCFG_MAC80211_DEBUGFS
    void (*sta_add_debugfs)(struct ieee80211_hw *hw,
                struct ieee80211_vif *vif,
                struct ieee80211_sta *sta,
                struct dentry *dir);
    void (*sta_remove_debugfs)(struct ieee80211_hw *hw,
                   struct ieee80211_vif *vif,
                   struct ieee80211_sta *sta,
                   struct dentry *dir);
#endif
    void (*sta_notify)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
            enum sta_notify_cmd, struct ieee80211_sta *sta);
    int (*sta_state)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
             struct ieee80211_sta *sta,
             enum ieee80211_sta_state old_state,
             enum ieee80211_sta_state new_state);
    void (*sta_pre_rcu_remove)(struct ieee80211_hw *hw,
                   struct ieee80211_vif *vif,
                   struct ieee80211_sta *sta);
    void (*sta_rc_update)(struct ieee80211_hw *hw,
                  struct ieee80211_vif *vif,
                  struct ieee80211_sta *sta,
                  u32 changed);
    int (*conf_tx)(struct ieee80211_hw *hw,
               struct ieee80211_vif *vif, u16 ac,
               const struct ieee80211_tx_queue_params *params);
    u64 (*get_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
    void (*set_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
            u64 tsf);
    void (*reset_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
    int (*tx_last_beacon)(struct ieee80211_hw *hw);
    int (*ampdu_action)(struct ieee80211_hw *hw,
                struct ieee80211_vif *vif,
                enum ieee80211_ampdu_mlme_action action,
                struct ieee80211_sta *sta, u16 tid, u16 *ssn,
                u8 buf_size);
    int (*get_survey)(struct ieee80211_hw *hw, int idx,
        struct survey_info *survey);
    void (*rfkill_poll)(struct ieee80211_hw *hw);
    void (*set_coverage_class)(struct ieee80211_hw *hw, u8 coverage_class);
#ifdef CPTCFG_NL80211_TESTMODE
    int (*testmode_cmd)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
                void *data, int len);
    int (*testmode_dump)(struct ieee80211_hw *hw, struct sk_buff *skb,
                 struct netlink_callback *cb,
                 void *data, int len);
#endif
    void (*flush)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
              u32 queues, bool drop);
    void (*channel_switch)(struct ieee80211_hw *hw,
                   struct ieee80211_channel_switch *ch_switch);
    int (*set_antenna)(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant);
    int (*get_antenna)(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant);

    int (*remain_on_channel)(struct ieee80211_hw *hw
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/viewsky11/article/details/55293028

智能推荐

一文彻底搞懂静态库和动态库,显示链接和隐式链接-程序员宅基地

文章浏览阅读2.1k次,点赞6次,收藏29次。定义:运行时库 静态库 动态库运行时库:Unix中一个典型的运行时库例子就是libc,它包含标准的C函数,如,print(),exit()等等,用户能创建他们自己的运行库(在Windows..._隐式链接和显示链接区别

DL之NN/Average_Darkness/SVM:手写数字图片识别(本地数据集50000训练集+数据集加4倍)比较3种算法Average_Darkness、SVM、NN各自的准确率_average数据集-程序员宅基地

文章浏览阅读1.5w次,点赞16次,收藏33次。DL之NN/Average_Darkness/SVM:手写数字图片识别(本地数据集50000训练集+数据集加4倍)比较3种算法Average_Darkness、SVM、NN各自的准确率目录数据集下载以及展示代码实现设计思路及代码1、图片灰度平均值识别分类2、SVM算法3、神经网络4、总结数据集下载以及展示 在上图中右侧显..._average数据集

【资料】数据仓库工具箱:维度建模的完全指南(第二版)._数据仓库生命周期工具箱 百度网盘-程序员宅基地

文章浏览阅读1.3k次。链接:https://pan.baidu.com/s/1e2jwWKerCsnFyLmegaqOcg提取码:hc28_数据仓库生命周期工具箱 百度网盘

SENT协议(SAE-J2716)_sae j2716-程序员宅基地

文章浏览阅读5.3k次。注:本文内容出处SENT(Single Edge Nibble Transmission)是由SAE推出的一种汽车传感器与ECU通信的新标准((SAE J2716)),协议简单,与其它传统通信协议相比具有优势,是发展的趋势。基本特点如下:是一种数字信号传输协议,具有更高的传输精度和速度;单线传输数据能力,减少信号线,降低成本具有更强大的诊断功能;5V 逻辑电平;单向传输协议,数据只能从传感器到ECU,传输是连续的,不需要请求命令;由帧来传输数据,或者数据包的形式,每一帧由不同宽度的脉冲即半字_sae j2716

达梦DM8搭建DSC集群(详细版)_达梦 dsc-程序员宅基地

文章浏览阅读3.4k次。DM8搭建DSC集群DM共享存储数据库集群,允许多个数据库实例同时访问、操作同一数据库,具有高可用、高性能、负载均衡等特性。DMDSC支持故障自动切换和故障自动重加入,某一个数据库实例故障后,不会导致数据库服务无法提供。DMDSC的主要特点包括: 高可用性只要集群中有一个活动节点,就能正常提供数据库服务。 高吞吐量多个节点同时提供数据库服务,有效提升集群的整体事务处理能力。 负载均衡用户的连接请求被平均分配到集群中的各个节点,确保各个节点的负载大致平衡。DM8中,新增加了监视器的功能_达梦 dsc

为什么90%的“码农”做不了软件“架构师”?_java框架源码90%的人用不上-程序员宅基地

文章浏览阅读2.9k次,点赞29次,收藏28次。写代码和做架构是两个不同的事情。什么是架构师,架构师要做什么事情,为什么Java的领域里,会更注重架构师?很早很早之前,我对于架构的概念一点都不理解,依稀记得,架构( architecture)这个词,来自于建筑领域。这对于我这个没写过几行代码的人来说,瞬间就有了一种“不明觉厉”的崇拜感。架构,感觉好厉害的样子,从名称上来说,好像是设计根骨,设计底层,设计最核心的东西的人。架构师,一定很NB,我什么时候能成为架构师呢?后来懂了一点点代码,去写增删改查,更是体会不出来架构的概念,不就是_java框架源码90%的人用不上

随便推点

caffe训练的时候减去pixel-mean和image-mean的区别_pixel_mean-程序员宅基地

文章浏览阅读5.6k次,点赞2次,收藏9次。在用DIGITS的时候,遇到了减去均值是用image mean还是pixel mean,并且这个区别会导致最后用训练好的网络模型来测试之前训练的时候用到的验证集却达不到训练时候测试的准确率,(用pixel mean就能获得和训练时候的一样的准确率),一直很疑惑两者的区别,好好研究了一下发现是这样的。具体区别可以见这个链接https://groups.google.com/forum/#!top_pixel_mean

SpingBoot项目报错HTTP Status 500 – Internal Server Error解决方法_springboot internal server error-程序员宅基地

文章浏览阅读3.5k次。同时控制台报错When allowCredentials is true, allowedOrigins cannot contain the special错误截图:错误原因:SpringBoot升级2.4.0导致的跨域配置报错解决方案:将.allowedOrigins替换成.allowedOriginPatterns即可@Configurationpublic class CrosConfig implements WebMvcConfigurer { @Override _springboot internal server error

10个ai算法常用库java版_java ai-程序员宅基地

文章浏览阅读1.3k次。今年ChatGPT 火了半年多,热度丝毫没有降下来。深度学习和 NLP 也重新回到了大家的视线中。有一些小伙伴问我,作为一名 Java 开发人员,如何入门人工智能,是时候拿出压箱底的私藏的学习AI的 Java 库来介绍给大家。这些库和框架为机器学习、深度学习、自然语言处理等提供了广泛的工具和算法。根据 AI 项目的具体需求,可以选择最合适的库或框架,并开始尝试使用不同的算法来构建AI解决方案。_java ai

160个练手CrackMe-039_asp壳-程序员宅基地

文章浏览阅读483次。1、ASP壳,Delphi①单步法: ②ESP定律:OD载入后F8一步,发现只有ESP有变化,可以用ESP定律法,输入命令:dd esp。断点->硬件访问->DWord。F9。(win10上脱出来无法运行,xp上成功,但是查壳还显示ASP)2、DeDark无效OD载入,定位到消息处理函数。004010DE |. /0F84 C5010000 je damn_unp.004012A9_asp壳

微信小程序上下左右滑动动画_小程序 实现上划动画-程序员宅基地

文章浏览阅读1.7k次。1.HTML<view class='main' bindtap="show">{{text}}</view><view class="top {{showFlag?'showTop':''}}">我是顶部</view><view class="bottom {{showFlag?'showBottom':''}}">我是底部<..._小程序 实现上划动画

阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义-程序员宅基地

文章浏览阅读5.3k次。分层领域模型规约:DO( Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。DTO( Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。BO( Business Object):业务对象。 由Service层输出的封装业务逻辑的对象。AO( Application Object):应用对象。 在Web层与..._阿里巴巴java开发手册中的do、dto、bo、ao、vo、pojo定义

推荐文章

热门文章

相关标签