diff --git a/src/ie.h b/src/ie.h index b43cc647..d4ca16bd 100644 --- a/src/ie.h +++ b/src/ie.h @@ -244,6 +244,11 @@ struct ie_ft_info { uint8_t igtk_len; }; +/* See chapter 8.4.2.47 for radio measurement capability details */ +enum ie_rm_capability { + IE_RM_CAP_NEIGHBOR_REPORT = 0x0002, +}; + void ie_tlv_iter_init(struct ie_tlv_iter *iter, const unsigned char *tlv, unsigned int len); void ie_tlv_iter_recurse(struct ie_tlv_iter *iter, diff --git a/src/scan.c b/src/scan.c index 598171b1..35a5efb5 100644 --- a/src/scan.c +++ b/src/scan.c @@ -591,6 +591,15 @@ static bool scan_parse_bss_information_elements(struct scan_bss *bss, } break; + case IE_TYPE_RM_ENABLED_CAPABILITIES: + if (iter.len != 5) + break; + + /* Only interested in Neighbor Reports */ + + bss->cap_rm_neighbor_report = + (iter.data[0] & IE_RM_CAP_NEIGHBOR_REPORT) > 0; + break; } } diff --git a/src/scan.h b/src/scan.h index 00438d4e..690409da 100644 --- a/src/scan.h +++ b/src/scan.h @@ -60,6 +60,7 @@ struct scan_bss { uint16_t rank; bool sha256:1; bool mde_present : 1; + bool cap_rm_neighbor_report : 1; }; uint32_t scan_passive(uint32_t ifindex, scan_trigger_func_t trigger,