Какова цель функции get_key_seq и как она может быть реализована? - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь реализовать функцию 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.

Кто-нибудь может помочь мне разобраться в этом?

...