我正在尝试为新驱动程序实现get_key_seq函数,但是我不知道该返回什么以及如何使用它。
函数声明:
void (*get_key_seq)(struct ieee80211_hw *hw,
struct ieee80211_key_conf *key,
struct ieee80211_key_seq *seq);
该函数仅获取硬件,而不获取net_device或类似的内容,因此它似乎是每个无线电而不是每个ap。 但是,如果我认为它用于wpa身份验证,则应该按ap进行,因为同一无线电中可能有多个wpa ap。
来自mac80211.h: * @get_key_seq:如果您的设备在硬件中实现了加密并且确实 * IV / PN分配,则应提供此回调以读取 * IV / PN用于硬件给定的密钥。 *回调必须是原子的。
从硬件中获取IV / PN是没有用的,它一直在变化,我相信它应该返回一个所使用的IV / PN数量的计数器,但是我不明白为什么需要它。
我已将其跟踪到hostapd,它遵循以下路径:
wpa_auth_get_seqnum->(结构wpa_auth_callbacks cb)cb.get_seqnum-> hostapd_wpa_auth_get_seqnum-> hostapd_get_seqnum->(nl)
或: “ mesh_rsn”-> wpa_drv_get_seqnum->(nl)
nl:
.get_seqnum(nl)= i802_get_seqnum-> NL80211_CMD_GET_KEY-> nl80211_get_key-> .get_key(cfg)= ieee80211_get_key-> .get_key_seq(mac)
我已经在内核中的rt2800lib.c中找到了该函数的实现,但是它似乎只是返回插入到set_key中的怪异值。
任何人都可以帮助我进一步了解这件事吗?