diff --git a/src/cmdu.h b/src/cmdu.h index 9c970586122b098c069356fc1a9355a76ee799d4..6c34fa3aeade7f6cea928a3e741b4ed394ea3ce6 100644 --- a/src/cmdu.h +++ b/src/cmdu.h @@ -97,9 +97,16 @@ struct cmdu_buff { enum tlv_presence { TLV_PRESENT_UNDEFINED, TLV_PRESENT_ONE, /**< only one tlv of this type present */ + TLV_PRESENT_MORE, /**< one or more tlvs of this tlv present */ + TLV_PRESENT_ONE_OR_MORE = TLV_PRESENT_MORE, + TLV_PRESENT_OPTIONAL_ONE, /**< zero or one of this tlv present */ + TLV_PRESENT_ZERO_OR_ONE = TLV_PRESENT_OPTIONAL_ONE, + TLV_PRESENT_OPTIONAL_MORE, /**< zero or more of this tlv present */ + TLV_PRESENT_ZERO_OR_MORE = TLV_PRESENT_OPTIONAL_MORE, + TLV_PRESENT_NUM, }; diff --git a/src/extensions/map/easymesh.h b/src/extensions/map/easymesh.h index da128c3b144e25016d8ac842f7aa14a7ad29daa5..7ab3717903e9df7a23da44481a1bf3147e819140 100644 --- a/src/extensions/map/easymesh.h +++ b/src/extensions/map/easymesh.h @@ -80,7 +80,12 @@ #define CMDU_QOS_MANAGEMENT_NOTIFICATION 0x8037 #endif /* EASYMESH_VERSION */ + +#if (EASYMESH_VERSION > 2) +#define LAST_MAP_CMDU CMDU_QOS_MANAGEMENT_NOTIFICATION +#else #define LAST_MAP_CMDU CMDU_FAILED_CONNECTION +#endif #define MAP_CMDU_TYPE_MAX LAST_MAP_CMDU diff --git a/src/extensions/map/policy.c b/src/extensions/map/policy.c index fbbd6871a32885df8204a1d912b74707c019fb40..2eb8a8ecc916f8abd356eb968b81879fe0ca5aef 100644 --- a/src/extensions/map/policy.c +++ b/src/extensions/map/policy.c @@ -22,7 +22,7 @@ #define CMDU_TYPE_MAP_START CMDU_1905_ACK -#define CMDU_TYPE_MAP_END CMDU_FAILED_CONNECTION +#define CMDU_TYPE_MAP_END MAP_CMDU_TYPE_MAX struct tlv_policy_map { size_t num; @@ -54,7 +54,7 @@ DEFINE_POLICY(CMDU_TYPE_TOPOLOGY_NOTIFICATION) = { .len = 6 }, { - .type = TLV_TYPE_MAC_ADDRESS_TYPE, + .type = MAP_TLV_CLIENT_ASSOCIATION_EVENT, .present = TLV_PRESENT_OPTIONAL_ONE, .len = sizeof(struct tlv_client_assoc_event) }, @@ -100,6 +100,11 @@ DEFINE_POLICY(CMDU_TYPE_TOPOLOGY_RESPONSE) = { .present = TLV_PRESENT_ONE, .len = sizeof(struct tlv_map_profile) }, +#if (EASYMESH_VERSION > 2) + { .type = MAP_TLV_BSS_CONFIGURATION_REPORT, + .present = TLV_PRESENT_ONE, + }, +#endif }; DEFINE_POLICY(CMDU_TYPE_AP_AUTOCONFIGURATION_SEARCH) = { @@ -116,17 +121,22 @@ DEFINE_POLICY(CMDU_TYPE_AP_AUTOCONFIGURATION_SEARCH) = { .len = 1, /* tlv_autoconfig_band */ }, [3] = { .type = MAP_TLV_SUPPORTED_SERVICE, - .present = TLV_PRESENT_ONE, + .present = TLV_PRESENT_OPTIONAL_ONE, .minlen = 1, /* num of services */ }, [4] = { .type = MAP_TLV_SEARCHED_SERVICE, - .present = TLV_PRESENT_ONE, + .present = TLV_PRESENT_OPTIONAL_ONE, .minlen = 1, /* num of services */ }, [5] = { .type = MAP_TLV_MULTIAP_PROFILE, .present = TLV_PRESENT_ONE, .len = 1, /* tlv_map_profile */ - } + }, +#if (EASYMESH_VERSION > 2) + [6] = { .type = MAP_TLV_DPP_CHIRP_VALUE, + .present = TLV_PRESENT_OPTIONAL_ONE, + }, +#endif }; @@ -147,6 +157,17 @@ DEFINE_POLICY(CMDU_TYPE_AP_AUTOCONFIGURATION_RESPONSE) = { .present = TLV_PRESENT_ONE, .len = 1, /* tlv_map_profile */ }, +#if (EASYMESH_VERSION > 2) + [4] = { .type = MAP_TLV_1905_SECURITY_CAPS, + .present = TLV_PRESENT_ONE, + }, + [5] = { .type = MAP_TLV_DPP_CHIRP_VALUE, + .present = TLV_PRESENT_OPTIONAL_ONE, + }, + [6] = { .type = MAP_TLV_CONTROLLER_CAPS, + .present = TLV_PRESENT_OPTIONAL_ONE, + }, +#endif }; DEFINE_POLICY(CMDU_TYPE_AP_AUTOCONFIGURATION_WSC_M1) = { @@ -233,7 +254,21 @@ DEFINE_POLICY(CMDU_AP_CAPABILITY_REPORT) = { [8] = { .type = MAP_TLV_METRIC_COLLECTION_INTERVAL, .present = TLV_PRESENT_ONE - } + }, +#if (EASYMESH_VERSION > 2) + [9] = { .type = MAP_TLV_AP_WIFI6_CAPS, + .present = TLV_PRESENT_OPTIONAL_MORE, + }, + [10] = { .type = MAP_TLV_1905_SECURITY_CAPS, + .present = TLV_PRESENT_ONE, + }, + [11] = { .type = MAP_TLV_DEVICE_INVENTORY, + .present = TLV_PRESENT_ONE, + }, + [12] = { .type = MAP_TLV_AP_RADIO_ADV_CAPABILITY, + .present = TLV_PRESENT_OPTIONAL_MORE, + }, +#endif }; DEFINE_POLICY(CMDU_POLICY_CONFIG_REQ) = { @@ -265,6 +300,11 @@ DEFINE_POLICY(CMDU_POLICY_CONFIG_REQ) = { .type = MAP_TLV_BACKHAUL_BSS_CONFIG, .present = TLV_PRESENT_OPTIONAL_MORE }, +#if (EASYMESH_VERSION > 2) + [7] = { .type = MAP_TLV_QOS_MANAGEMENT_POLICY, + .present = TLV_PRESENT_OPTIONAL_MORE, + }, +#endif }; DEFINE_POLICY(CMDU_CHANNEL_PREFERENCE_QUERY) = { @@ -298,21 +338,36 @@ DEFINE_POLICY(CMDU_CHANNEL_SELECTION_REQ) = { [1] = { .type = MAP_TLV_TRANSMIT_POWER_LIMIT, .present = TLV_PRESENT_OPTIONAL_MORE - } + }, +#if (EASYMESH_VERSION > 2) + [2] = { .type = MAP_TLV_SPATIAL_REUSE_REQUEST, + .present = TLV_PRESENT_OPTIONAL_MORE, + }, +#endif }; DEFINE_POLICY(CMDU_CHANNEL_SELECTION_RESPONSE) = { [0] = { .type = MAP_TLV_CHANNEL_SELECTION_RESPONSE, - .present = TLV_PRESENT_MORE + .present = TLV_PRESENT_MORE, + }, +#if (EASYMESH_VERSION > 2) + [1] = { .type = MAP_TLV_SPATIAL_REUSE_CONFIG_RESPONSE, + .present = TLV_PRESENT_OPTIONAL_MORE, }, +#endif }; DEFINE_POLICY(CMDU_OPERATING_CHANNEL_REPORT) = { [0] = { .type = MAP_TLV_OPERATING_CHANNEL_REPORT, .present = TLV_PRESENT_MORE - } + }, +#if (EASYMESH_VERSION > 2) + [1] = { .type = MAP_TLV_SPATIAL_REUSE_REPORT, + .present = TLV_PRESENT_OPTIONAL_MORE, + }, +#endif }; DEFINE_POLICY(CMDU_CLIENT_CAPABILITY_QUERY) = { @@ -351,28 +406,34 @@ DEFINE_POLICY(CMDU_AP_METRICS_QUERY) = { DEFINE_POLICY(CMDU_AP_METRICS_RESPONSE) = { [0] = { .type = MAP_TLV_AP_METRICS, - .present = TLV_PRESENT_MORE + .present = TLV_PRESENT_MORE, }, [1] = { .type = MAP_TLV_ASSOCIATED_STA_TRAFFIC_STATS, - .present = TLV_PRESENT_OPTIONAL_MORE + .present = TLV_PRESENT_OPTIONAL_MORE, }, [2] = { .type = MAP_TLV_ASSOCIATED_STA_LINK_METRICS, - .present = TLV_PRESENT_OPTIONAL_MORE + .present = TLV_PRESENT_OPTIONAL_MORE, }, [3] = { .type = MAP_TLV_AP_EXTENDED_METRICS, - .present = TLV_PRESENT_MORE + .present = TLV_PRESENT_MORE, }, [4] = { .type = MAP_TLV_RADIO_METRICS, - .present = TLV_PRESENT_OPTIONAL_MORE + .present = TLV_PRESENT_OPTIONAL_MORE, }, [5] = { .type = MAP_TLV_ASSOCIATED_STA_EXT_LINK_METRICS, - .present = TLV_PRESENT_OPTIONAL_MORE - } + .present = TLV_PRESENT_OPTIONAL_MORE, + }, +#if (EASYMESH_VERSION > 2) + [6] = { + .type = MAP_TLV_ASSOCIATED_WIFI6_STA_STATUS, + .present = TLV_PRESENT_OPTIONAL_MORE, + }, +#endif }; DEFINE_POLICY(CMDU_ASSOC_STA_LINK_METRICS_QUERY) = { @@ -595,8 +656,177 @@ DEFINE_POLICY(CMDU_FAILED_CONNECTION) = { .type = MAP_TLV_REASON_CODE, .present = TLV_PRESENT_OPTIONAL_ONE }, +#if (EASYMESH_VERSION > 2) + [3] = { + .type = MAP_TLV_BSSID, + .present = TLV_PRESENT_ONE + }, +#endif +}; + +#if (EASYMESH_VERSION > 2) +DEFINE_POLICY(CMDU_1905_REKEY_REQUEST) = { + /* empty */ +}; + +DEFINE_POLICY(CMDU_1905_DECRYPT_FAIL) = { + [0] = { + .type = TLV_TYPE_AL_MAC_ADDRESS_TYPE, + .present = TLV_PRESENT_ONE + }, +}; + +DEFINE_POLICY(CMDU_SERVICE_PRIORITIZATION_REQUEST) = { + [0] = { + .type = MAP_TLV_SERVICE_PRIORITIZATION_RULE, + .present = TLV_PRESENT_OPTIONAL_MORE, + }, + [1] = { + .type = MAP_TLV_DSCP_MAPPING_TABLE, + .present = TLV_PRESENT_OPTIONAL_ONE, + }, + [2] = { + .type = MAP_TLV_QOS_MANAGEMENT_DESCRIPTOR, + .present = TLV_PRESENT_OPTIONAL_MORE, + }, +}; + +DEFINE_POLICY(CMDU_PROXIED_ENCAP_DPP) = { + [0] = { + .type = MAP_TLV_1905_ENCAP_DPP, + .present = TLV_PRESENT_ONE, + }, + [1] = { + .type = MAP_TLV_DPP_CHIRP_VALUE, + .present = TLV_PRESENT_OPTIONAL_ONE, + }, +}; + +DEFINE_POLICY(CMDU_1905_ENCAP_EAPOL) = { + [0] = { + .type = MAP_TLV_1905_ENCAP_EAPOL, + .present = TLV_PRESENT_ONE + }, +}; + +DEFINE_POLICY(CMDU_DPP_BOOTSTRAPING_URI) = { + [0] = { + .type = MAP_TLV_DPP_BOOTSTRAP_URI_NOTIFICATION, + .present = TLV_PRESENT_ONE + }, +}; + +DEFINE_POLICY(CMDU_DPP_CCE_INDICATION) = { + [0] = { + .type = MAP_TLV_DPP_CCE_INDICATION, + .present = TLV_PRESENT_ONE + }, }; +DEFINE_POLICY(CMDU_CHIRP_NOTIFICATION) = { + [0] = { + .type = MAP_TLV_DPP_CHIRP_VALUE, + .present = TLV_PRESENT_OPTIONAL_MORE, + }, +}; + +DEFINE_POLICY(CMDU_BSS_CONFIG_REQUEST) = { + [0] = { + .type = MAP_TLV_MULTIAP_PROFILE, + .present = TLV_PRESENT_ONE, + }, + [1] = { + .type = MAP_TLV_SUPPORTED_SERVICE, + .present = TLV_PRESENT_ONE, + }, + [2] = { + .type = MAP_TLV_AKM_SUITE_CAPS, + .present = TLV_PRESENT_ONE, + }, + [3] = { + .type = MAP_TLV_AP_RADIO_BASIC_CAPABILITIES, + .present = TLV_PRESENT_MORE, + }, + [4] = { + .type = MAP_TLV_BACKHAUL_STA_RADIO_CAPABILITY, + .present = TLV_PRESENT_OPTIONAL_MORE, + }, + [5] = { + .type = MAP_TLV_PROFILE2_AP_CAPABILITY, + .present = TLV_PRESENT_ONE, + }, + [6] = { + .type = MAP_TLV_AP_RADIO_ADV_CAPABILITY, + .present = TLV_PRESENT_MORE, + }, + [7] = { + .type = MAP_TLV_BSS_CONFIGURATION_REQUEST, + .present = TLV_PRESENT_ONE, + }, +}; + +DEFINE_POLICY(CMDU_BSS_CONFIG_RESPONSE) = { + [0] = { + .type = MAP_TLV_BSS_CONFIGURATION_RESPONSE, + .present = TLV_PRESENT_MORE, + }, + [1] = { + .type = MAP_TLV_DEFAULT_8021Q_SETTINGS, + .present = TLV_PRESENT_OPTIONAL_MORE, + }, + [2] = { + .type = MAP_TLV_TRAFFIC_SEPARATION_POLICY, + .present = TLV_PRESENT_OPTIONAL_MORE, + }, +}; + +DEFINE_POLICY(CMDU_BSS_CONFIG_RESULT) = { + [0] = { + .type = MAP_TLV_BSS_CONFIGURATION_REPORT, + .present = TLV_PRESENT_ONE, + }, +}; + +DEFINE_POLICY(CMDU_DIRECT_ENCAP_DPP) = { + [0] = { + .type = MAP_TLV_DPP_MESSAGE, + .present = TLV_PRESENT_ONE, + }, +}; + +DEFINE_POLICY(CMDU_RECONFIG_TRIGGER) = { + /* no tlvs */ +}; + +DEFINE_POLICY(CMDU_AGENT_LIST) = { + [0] = { + .type = MAP_TLV_AGENT_LIST, + .present = TLV_PRESENT_ONE, + }, +}; + +DEFINE_POLICY(CMDU_ANTICIPATED_CHANNEL_PREFERENCE) = { + [0] = { + .type = MAP_TLV_ANTICIPATED_CHANNEL_PREF, + .present = TLV_PRESENT_ONE, + }, +}; + +DEFINE_POLICY(CMDU_ANTICIPATED_CHANNEL_USAGE) = { + [0] = { + .type = MAP_TLV_ANTICIPATED_CHANNEL_USAGE, + .present = TLV_PRESENT_MORE, + }, +}; + +DEFINE_POLICY(CMDU_QOS_MANAGEMENT_NOTIFICATION) = { + [0] = { + .type = MAP_TLV_QOS_MANAGEMENT_DESCRIPTOR, + .present = TLV_PRESENT_MORE, + }, +}; +#endif /* EASYMESH_VERSION > 2 */ + static struct tlv_policy_map map_policy[] = { P(CMDU_TYPE_TOPOLOGY_DISCOVERY), P(CMDU_TYPE_TOPOLOGY_NOTIFICATION), @@ -626,7 +856,7 @@ static struct tlv_policy_map map_policy[] = { P(CMDU_ASSOC_STA_LINK_METRICS_QUERY), P(CMDU_ASSOC_STA_LINK_METRICS_RESPONSE), P(CMDU_UNASSOC_STA_LINK_METRIC_QUERY), - P(CMDU_UNASSOC_STA_LINK_METRIC_RESPONSE), + P(CMDU_UNASSOC_STA_LINK_METRIC_RESPONSE), /* 0x8010 */ P(CMDU_BEACON_METRICS_QUERY), P(CMDU_BEACON_METRICS_RESPONSE), P(CMDU_COMBINED_INFRA_METRICS), @@ -639,28 +869,41 @@ static struct tlv_policy_map map_policy[] = { P(CMDU_BACKHAUL_STEER_RESPONSE), P(CMDU_CHANNEL_SCAN_REQUEST), P(CMDU_CHANNEL_SCAN_REPORT), /* 0x801C */ - { 0, NULL }, - { 0, NULL }, - { 0, NULL }, +#if (EASYMESH_VERSION > 2) + P(CMDU_DPP_CCE_INDICATION), /* 0x801d */ + P(CMDU_1905_REKEY_REQUEST), + P(CMDU_1905_DECRYPT_FAIL), +#endif P(CMDU_CAC_REQUEST), /* 0x8020 */ P(CMDU_CAC_TERMINATION), P(CMDU_CLIENT_DISASSOCIATION_STATS), +#if (EASYMESH_VERSION > 2) + P(CMDU_SERVICE_PRIORITIZATION_REQUEST), /* 0x8023 */ +#endif P(CMDU_ERROR_RESPONSE), P(CMDU_ASSOCIATION_STATUS_NOTIFICATION), P(CMDU_TUNNELED), P(CMDU_BACKHAUL_STA_CAPABILITY_QUERY), P(CMDU_BACKHAUL_STA_CAPABILITY_REPORT), /* 0x8028 */ - { 0, NULL }, - { 0, NULL }, - { 0, NULL }, - { 0, NULL }, - { 0, NULL }, - { 0, NULL }, - { 0, NULL }, - { 0, NULL }, - { 0, NULL }, - { 0, NULL }, +#if (EASYMESH_VERSION > 2) + P(CMDU_PROXIED_ENCAP_DPP), + P(CMDU_DIRECT_ENCAP_DPP), /* 0x802a */ + P(CMDU_RECONFIG_TRIGGER), + P(CMDU_BSS_CONFIG_REQUEST), + P(CMDU_BSS_CONFIG_RESPONSE), + P(CMDU_BSS_CONFIG_RESULT), + P(CMDU_CHIRP_NOTIFICATION), + P(CMDU_1905_ENCAP_EAPOL), /* 0x8030 */ + P(CMDU_DPP_BOOTSTRAPING_URI), + P(CMDU_ANTICIPATED_CHANNEL_PREFERENCE), +#endif P(CMDU_FAILED_CONNECTION), /* 0x8033 */ + { 0, NULL }, +#if (EASYMESH_VERSION > 2) + P(CMDU_AGENT_LIST), /* 0x8035 */ + P(CMDU_ANTICIPATED_CHANNEL_USAGE), + P(CMDU_QOS_MANAGEMENT_NOTIFICATION), /* 0x8037 */ +#endif };