mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-23 06:02:37 +01:00
netdev: Switch to new frame watch API
This commit is contained in:
parent
b234a8e614
commit
baad7e5fd8
54
src/netdev.c
54
src/netdev.c
@ -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,
|
||||||
void *user_data)
|
int rssi, 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,
|
||||||
void *user_data)
|
int rssi, 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)
|
||||||
|
Loading…
Reference in New Issue
Block a user