Я пытаюсь реализовать функцию get_key_seq для нового драйвера, однако я не понимаю, что он должен возвращать и как он используется.
объявление функции:
void (*get_key_seq)(struct ieee80211_hw *hw,
struct ieee80211_key_conf *key,
struct ieee80211_key_seq *seq);
Функция получает только hw, а не net_device или что-то в этом роде, так что, похоже, это для радио, а не для ap.
Однако, если он используется для аутентификации wpa, как я думаю, это должно быть в соответствии с ap, поскольку на одном радио может быть несколько wpa ap.
из mac80211.h:
* @get_key_seq: если ваше устройство использует аппаратное шифрование и выполняет
* IV / PN назначение, тогда этот обратный вызов должен быть предоставлен для
* IV / PN для данного ключа от оборудования.
* Обратный вызов должен быть атомарным.
Бесполезно получать IV / PN от hw, он все время меняется, я считаю, что он должен возвращать счетчик к числу использованных IV / PN, однако я не понимаю, зачем он нужен.
Я отследил его до hostapd, он идет по следующему пути:
wpa_auth_get_seqnum -> (struct wpa_auth_callbacks cb) cb.get_seqnum -> hostapd_wpa_auth_get_seqnum -> hostapd_get_seqnum -> (nl)
или:
"mesh_rsn" -> wpa_drv_get_seqnum -> (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.
Кто-нибудь может помочь мне разобраться в этом?