LoginSignup
1
1

More than 5 years have passed since last update.

Linux ieee80211_opsを読む

Posted at

Linuxのieee80211_opsを読んでみました。

ieee80211_ops は Linux Kernelのmac80211とSoftMAC driver間のインターフェイスです。

Untitled.png

ieee80211_opsにもたくさんのメソッドがありますが、最低限必ず必要そうな関数を調べてみました。

ソースコード

ieee80211_ops

tx

  • skbで指定したframeをcontrolの送信設定を使ってhwで送信する。
 * @tx: Handler that 802.11 module calls for each transmitted frame.
 *  skb contains the buffer starting from the IEEE 802.11 header.
 *  The low-level driver should send the frame out based on
 *  configuration in the TX control data. This handler should,
 *  preferably, never fail and stop queues appropriately.
 *  Must be atomic.
    void (*tx)(struct ieee80211_hw *hw,
           struct ieee80211_tx_control *control,
           struct sk_buff *skb);

start

  • hwの動作を開始する。
 * @start: Called before the first netdevice attached to the hardware
 *  is enabled. This should turn on the hardware and must turn on
 *  frame reception (for possibly enabled monitor interfaces.)
 *  Returns negative error codes, these may be seen in userspace,
 *  or zero.
 *  When the device is started it should not have a MAC address
 *  to avoid acknowledging frames before a non-monitor device
 *  is added.
 *  Must be implemented and can sleep.
    int (*start)(struct ieee80211_hw *hw);

stop

  • hwの動作を停止する。
 * @stop: Called after last netdevice attached to the hardware
 *  is disabled. This should turn off the hardware (at least
 *  it must turn off frame reception.)
 *  May be called right after add_interface if that rejects
 *  an interface. If you added any work onto the mac80211 workqueue
 *  you should ensure to cancel it on this callback.
 *  Must be implemented and can sleep.
    void (*stop)(struct ieee80211_hw *hw);

add_interface

  • hwにインターフェイスvifを追加する。
 * @add_interface: Called when a netdevice attached to the hardware is
 *  enabled. Because it is not called for monitor mode devices, @start
 *  and @stop must be implemented.
 *  The driver should perform any initialization it needs before
 *  the device can be enabled. The initial configuration for the
 *  interface is given in the conf parameter.
 *  The callback may refuse to add an interface by returning a
 *  negative error code (which will be seen in userspace.)
 *  Must be implemented and can sleep.
    int (*add_interface)(struct ieee80211_hw *hw,
                 struct ieee80211_vif *vif);

remove_interface

  • hwのインターフェイスvifを削除する。
 * @remove_interface: Notifies a driver that an interface is going down.
 *  The @stop callback is called after this if it is the last interface
 *  and no monitor interfaces are present.
 *  When all interfaces are removed, the MAC address in the hardware
 *  must be cleared so the device no longer acknowledges packets,
 *  the mac_addr member of the conf structure is, however, set to the
 *  MAC address of the device going away.
 *  Hence, this callback must be implemented. It can sleep.
    void (*remove_interface)(struct ieee80211_hw *hw,
                 struct ieee80211_vif *vif);

config

  • hwの設定を変更する。 changedのフラグの情報のみ変更する。 変更の情報はhw内にある。
  • channelを変更する場合などに使う。
 * @config: Handler for configuration requests. IEEE 802.11 code calls this
 *  function to change hardware configuration, e.g., channel.
 *  This function should never fail but returns a negative error code
 *  if it does. The callback can sleep.
    int (*config)(struct ieee80211_hw *hw, u32 changed);

bss_info_changed

  • hwのインターフェイスvifにBSS設定infoの設定変更をする。
 * @bss_info_changed: Handler for configuration requests related to BSS
 *  parameters that may vary during BSS's lifespan, and may affect low
 *  level driver (e.g. assoc/disassoc status, erp parameters).
 *  This function should not be used if no BSS has been set, unless
 *  for association indication. The @changed parameter indicates which
 *  of the bss parameters has changed when a call is made. The callback
 *  can sleep.
    void (*bss_info_changed)(struct ieee80211_hw *hw,
                 struct ieee80211_vif *vif,
                 struct ieee80211_bss_conf *info,
                 u32 changed);

conf_tx

  • hw vifの送信キューの設定をする
 * @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max),
 *  bursting) for a hardware TX queue.
 *  Returns a negative error code on failure.
 *  The callback can sleep.
    int (*conf_tx)(struct ieee80211_hw *hw,
               struct ieee80211_vif *vif, u16 ac,
               const struct ieee80211_tx_queue_params *params);

configure_filter

  • 受信filterの設定をする。
 * @configure_filter: Configure the device's RX filter.
 *  See the section "Frame filtering" for more information.
 *  This callback must be implemented and can sleep.
    void (*configure_filter)(struct ieee80211_hw *hw,
                 unsigned int changed_flags,
                 unsigned int *total_flags,
                 u64 multicast);
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1