netdev: Switch to new frame watch API

This commit is contained in:
Andrew Zaborowski 2020-01-16 03:40:59 +01:00 committed by Denis Kenzior
parent b234a8e614
commit baad7e5fd8
1 changed files with 36 additions and 32 deletions

View File

@ -61,6 +61,7 @@
#include "src/fils.h" #include "src/fils.h"
#include "src/auth-proto.h" #include "src/auth-proto.h"
#include "src/rtnlutil.h" #include "src/rtnlutil.h"
#include "src/frame-xchg.h"
#ifndef ENOTSUPP #ifndef ENOTSUPP
#define ENOTSUPP 524 #define ENOTSUPP 524
@ -2814,13 +2815,13 @@ static void netdev_ft_request_cb(struct l_genl_msg *msg, void *user_data)
} }
} }
static void netdev_ft_response_frame_event(struct netdev *netdev, static void netdev_ft_response_frame_event(const struct mmpdu_header *hdr,
const struct mmpdu_header *hdr,
const void *body, size_t body_len, const void *body, size_t body_len,
void *user_data) int rssi, void *user_data)
{ {
int ret; int ret;
uint16_t status_code = MMPDU_STATUS_CODE_UNSPECIFIED; uint16_t status_code = MMPDU_STATUS_CODE_UNSPECIFIED;
struct netdev *netdev = user_data;
if (!netdev->ap || !netdev->in_ft) if (!netdev->ap || !netdev->in_ft)
return; return;
@ -2841,11 +2842,12 @@ ft_error:
return; return;
} }
static void netdev_qos_map_frame_event(struct netdev *netdev, static void netdev_qos_map_frame_event(const struct mmpdu_header *hdr,
const struct mmpdu_header *hdr,
const void *body, size_t body_len, const void *body, size_t body_len,
void *user_data) int rssi, void *user_data)
{ {
struct netdev *netdev = user_data;
/* No point telling the kernel */ /* No point telling the kernel */
if (!netdev->connected) if (!netdev->connected)
return; return;
@ -3090,11 +3092,12 @@ int netdev_neighbor_report_req(struct netdev *netdev,
return 0; return 0;
} }
static void netdev_neighbor_report_frame_event(struct netdev *netdev, static void netdev_neighbor_report_frame_event(const struct mmpdu_header *hdr,
const struct mmpdu_header *hdr,
const void *body, size_t body_len, const void *body, size_t body_len,
void *user_data) int rssi, void *user_data)
{ {
struct netdev *netdev = user_data;
if (body_len < 3) { if (body_len < 3) {
l_debug("Neighbor Report frame too short"); l_debug("Neighbor Report frame too short");
return; return;
@ -3125,13 +3128,13 @@ static void netdev_sa_query_resp_cb(struct l_genl_msg *msg,
l_debug("error sending SA Query request"); l_debug("error sending SA Query request");
} }
static void netdev_sa_query_req_frame_event(struct netdev *netdev, static void netdev_sa_query_req_frame_event(const struct mmpdu_header *hdr,
const struct mmpdu_header *hdr, const void *body, size_t body_len,
const void *body, size_t body_len, int rssi, void *user_data)
void *user_data)
{ {
uint8_t sa_resp[4]; uint8_t sa_resp[4];
uint16_t transaction; uint16_t transaction;
struct netdev *netdev = user_data;
if (body_len < 4) { if (body_len < 4) {
l_debug("SA Query request too short"); l_debug("SA Query request too short");
@ -3163,11 +3166,12 @@ static void netdev_sa_query_req_frame_event(struct netdev *netdev,
} }
} }
static void netdev_sa_query_resp_frame_event(struct netdev *netdev, static void netdev_sa_query_resp_frame_event(const struct mmpdu_header *hdr,
const struct mmpdu_header *hdr, const void *body, size_t body_len,
const void *body, size_t body_len, int rssi, void *user_data)
void *user_data)
{ {
struct netdev *netdev = user_data;
if (body_len < 4) { if (body_len < 4) {
l_debug("SA Query frame too short"); l_debug("SA Query frame too short");
return; return;
@ -4524,26 +4528,26 @@ struct netdev *netdev_create_from_genl(struct l_genl_msg *msg,
l_free(rtmmsg); l_free(rtmmsg);
/* Subscribe to Management -> Action -> RM -> Neighbor Report frames */ /* Subscribe to Management -> Action -> RM -> Neighbor Report frames */
netdev_frame_watch_add(netdev, 0x00d0, action_neighbor_report_prefix, frame_watch_add(wdev, 0, 0x00d0, action_neighbor_report_prefix,
sizeof(action_neighbor_report_prefix), sizeof(action_neighbor_report_prefix),
netdev_neighbor_report_frame_event, NULL); netdev_neighbor_report_frame_event, netdev, NULL);
netdev_frame_watch_add(netdev, 0x00d0, action_sa_query_resp_prefix, frame_watch_add(wdev, 0, 0x00d0, action_sa_query_resp_prefix,
sizeof(action_sa_query_resp_prefix), sizeof(action_sa_query_resp_prefix),
netdev_sa_query_resp_frame_event, NULL); netdev_sa_query_resp_frame_event, netdev, NULL);
netdev_frame_watch_add(netdev, 0x00d0, action_sa_query_req_prefix, frame_watch_add(wdev, 0, 0x00d0, action_sa_query_req_prefix,
sizeof(action_sa_query_req_prefix), sizeof(action_sa_query_req_prefix),
netdev_sa_query_req_frame_event, NULL); netdev_sa_query_req_frame_event, netdev, NULL);
netdev_frame_watch_add(netdev, 0x00d0, action_ft_response_prefix, frame_watch_add(wdev, 0, 0x00d0, action_ft_response_prefix,
sizeof(action_ft_response_prefix), sizeof(action_ft_response_prefix),
netdev_ft_response_frame_event, NULL); netdev_ft_response_frame_event, netdev, NULL);
if (wiphy_supports_qos_set_map(netdev->wiphy)) if (wiphy_supports_qos_set_map(netdev->wiphy))
netdev_frame_watch_add(netdev, 0x00d0, action_qos_map_prefix, frame_watch_add(wdev, 0, 0x00d0, action_qos_map_prefix,
sizeof(action_qos_map_prefix), sizeof(action_qos_map_prefix),
netdev_qos_map_frame_event, NULL); netdev_qos_map_frame_event, netdev, NULL);
/* Set RSSI threshold for CQM notifications */ /* Set RSSI threshold for CQM notifications */
if (netdev->type == NL80211_IFTYPE_STATION) if (netdev->type == NL80211_IFTYPE_STATION)