--- src/netdev.c | 68 +++++++++++++++++++++++++++------------------------- 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/src/netdev.c b/src/netdev.c index 84ba4c7f..ff56b78f 100644 --- a/src/netdev.c +++ b/src/netdev.c @@ -61,6 +61,7 @@ #include "src/fils.h" #include "src/auth-proto.h" #include "src/rtnlutil.h" +#include "src/frame-xchg.h" #ifndef ENOTSUPP #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, - const struct mmpdu_header *hdr, +static void netdev_ft_response_frame_event(const struct mmpdu_header *hdr, const void *body, size_t body_len, - void *user_data) + int rssi, void *user_data) { int ret; uint16_t status_code = MMPDU_STATUS_CODE_UNSPECIFIED; + struct netdev *netdev = user_data; if (!netdev->ap || !netdev->in_ft) return; @@ -2841,11 +2842,12 @@ ft_error: return; } -static void netdev_qos_map_frame_event(struct netdev *netdev, - const struct mmpdu_header *hdr, +static void netdev_qos_map_frame_event(const struct mmpdu_header *hdr, 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 */ if (!netdev->connected) return; @@ -3090,11 +3092,12 @@ int netdev_neighbor_report_req(struct netdev *netdev, return 0; } -static void netdev_neighbor_report_frame_event(struct netdev *netdev, - const struct mmpdu_header *hdr, +static void netdev_neighbor_report_frame_event(const struct mmpdu_header *hdr, const void *body, size_t body_len, - void *user_data) + int rssi, void *user_data) { + struct netdev *netdev = user_data; + if (body_len < 3) { l_debug("Neighbor Report frame too short"); return; @@ -3125,13 +3128,13 @@ static void netdev_sa_query_resp_cb(struct l_genl_msg *msg, l_debug("error sending SA Query request"); } -static void netdev_sa_query_req_frame_event(struct netdev *netdev, - const struct mmpdu_header *hdr, - const void *body, size_t body_len, - void *user_data) +static void netdev_sa_query_req_frame_event(const struct mmpdu_header *hdr, + const void *body, size_t body_len, + int rssi, void *user_data) { uint8_t sa_resp[4]; uint16_t transaction; + struct netdev *netdev = user_data; if (body_len < 4) { 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, - const struct mmpdu_header *hdr, - const void *body, size_t body_len, - void *user_data) +static void netdev_sa_query_resp_frame_event(const struct mmpdu_header *hdr, + const void *body, size_t body_len, + int rssi, void *user_data) { + struct netdev *netdev = user_data; + if (body_len < 4) { l_debug("SA Query frame too short"); return; @@ -4524,26 +4528,26 @@ struct netdev *netdev_create_from_genl(struct l_genl_msg *msg, l_free(rtmmsg); /* Subscribe to Management -> Action -> RM -> Neighbor Report frames */ - netdev_frame_watch_add(netdev, 0x00d0, action_neighbor_report_prefix, - sizeof(action_neighbor_report_prefix), - netdev_neighbor_report_frame_event, NULL); + frame_watch_add(wdev, 0, 0x00d0, action_neighbor_report_prefix, + sizeof(action_neighbor_report_prefix), + netdev_neighbor_report_frame_event, netdev, NULL); - netdev_frame_watch_add(netdev, 0x00d0, action_sa_query_resp_prefix, - sizeof(action_sa_query_resp_prefix), - netdev_sa_query_resp_frame_event, NULL); + frame_watch_add(wdev, 0, 0x00d0, action_sa_query_resp_prefix, + sizeof(action_sa_query_resp_prefix), + netdev_sa_query_resp_frame_event, netdev, NULL); - netdev_frame_watch_add(netdev, 0x00d0, action_sa_query_req_prefix, - sizeof(action_sa_query_req_prefix), - netdev_sa_query_req_frame_event, NULL); + frame_watch_add(wdev, 0, 0x00d0, action_sa_query_req_prefix, + sizeof(action_sa_query_req_prefix), + netdev_sa_query_req_frame_event, netdev, NULL); - netdev_frame_watch_add(netdev, 0x00d0, action_ft_response_prefix, - sizeof(action_ft_response_prefix), - netdev_ft_response_frame_event, NULL); + frame_watch_add(wdev, 0, 0x00d0, action_ft_response_prefix, + sizeof(action_ft_response_prefix), + netdev_ft_response_frame_event, netdev, NULL); if (wiphy_supports_qos_set_map(netdev->wiphy)) - netdev_frame_watch_add(netdev, 0x00d0, action_qos_map_prefix, - sizeof(action_qos_map_prefix), - netdev_qos_map_frame_event, NULL); + frame_watch_add(wdev, 0, 0x00d0, action_qos_map_prefix, + sizeof(action_qos_map_prefix), + netdev_qos_map_frame_event, netdev, NULL); /* Set RSSI threshold for CQM notifications */ if (netdev->type == NL80211_IFTYPE_STATION) -- 2.20.1