diff --git a/src/1905_tlvs.h b/src/1905_tlvs.h index 70266183201e65d9cc6dfcf82eb27cffc45e14f6..f979264be8220dff73a6c0cc8248d04ee6779389 100644 --- a/src/1905_tlvs.h +++ b/src/1905_tlvs.h @@ -560,12 +560,14 @@ struct tlv_ttl { #define IEEE1905_TCLAS_ELEM_ID (14) #define IEEE1905_TCLAS_PROCESSING_ELEM_ID (44) +/* Normal IEEE1905 element structure */ struct ieee1905_element { uint8_t element_id; uint8_t length; uint8_t data[]; } __attribute__((packed));; +/* Extended IEEE1905 element structure */ struct ieee1905_ext_element { uint8_t element_id; uint8_t element_id_ext; @@ -573,6 +575,7 @@ struct ieee1905_ext_element { uint8_t data[]; } __attribute__((packed));; +/* Vendor-specific IEEE1905 element */ struct ieee1905_vendor_element { uint8_t element_id; uint8_t length; @@ -581,6 +584,7 @@ struct ieee1905_vendor_element { uint8_t data[]; } __attribute__((packed)); +/* TCLAS element - Type 4 (IPv4) */ struct ieee1905_tclas_elem_cls_type4_ipv4 { uint32_t src_ip; uint32_t dst_ip; @@ -591,6 +595,7 @@ struct ieee1905_tclas_elem_cls_type4_ipv4 { uint8_t param_mask; }; +/* TCLAS element - Type 4 (IPv6) */ struct ieee1905_tclas_elem_cls_type4_ipv6 { uint8_t src_ip[16]; uint8_t dst_ip[16]; @@ -602,6 +607,7 @@ struct ieee1905_tclas_elem_cls_type4_ipv6 { uint8_t param_mask; }; +/* TCLAS element - generalized Type 4 */ struct ieee1905_tclas_elem_cls_type4 { uint8_t classifier_mask; uint8_t ip_version; @@ -611,6 +617,7 @@ struct ieee1905_tclas_elem_cls_type4 { }; }; +/* TCLAS element - frame classifier types */ enum ieee1905_tclas_elem_frame_classifier_type { IEEE1905_TCLAS_ELEM_FRAME_CLASSIFIER_TYPE_ETH = 0, IEEE1905_TCLAS_ELEM_FRAME_CLASSIFIER_TYPE_TCP_UDP_IP = 1, @@ -622,13 +629,17 @@ enum ieee1905_tclas_elem_frame_classifier_type { IEEE1905_TCLAS_ELEM_FRAME_CLASSIFIER_TYPE_DL_PV1 = 7, IEEE1905_TCLAS_ELEM_FRAME_CLASSIFIER_TYPE_UL_PV1 = 8, IEEE1905_TCLAS_ELEM_FRAME_CLASSIFIER_TYPE_PV1_FULL = 9, - IEEE1905_TCLAS_ELEM_FRAME_CLASSIFIER_TYPE_IP_EXT= 10, + IEEE1905_TCLAS_ELEM_FRAME_CLASSIFIER_TYPE_IP_EXT = 10, }; +/* TCLAS element - generalized frame classifier */ struct ieee1905_tclas_elem_frame_classifier { uint8_t type; /**< Belongs to ieee1905_tclas_elem_frame_classifier_type enumeration */ - /* classifier mask is put into specific classifier type for ease */ + /* + * classifier mask is put into specific classifier type for proper structure + * packing + */ union { struct ieee1905_tclas_elem_cls_type4 params4; }; @@ -640,12 +651,14 @@ struct ieee1905_tclas_elem { struct ieee1905_tclas_elem_frame_classifier classifier; }; +/* SCS descriptor - request types */ enum ieee1905_scs_desc_request_type { IEEE1905_SCS_DESC_REQUEST_TYPE_ADD = 0, IEEE1905_SCS_DESC_REQUEST_TYPE_REMOVE = 1, IEEE1905_SCS_DESC_REQUEST_TYPE_CHANGE = 2, }; +/* Separate TCLAS processing field */ struct ieee1905_tclas_processing { uint8_t processing; }; @@ -703,7 +716,7 @@ struct ieee1905_mscs_desc { /* User-friendly structures that might be used in configuration parsing */ struct ieee1905_scs_desc_usr { - uint8_t scsid; + uint8_t scsid; uint32_t intra_access_category_priority; /* TCLAS elements */ @@ -748,24 +761,24 @@ struct ieee1905_qos_mgmt_attr_usr { uint8_t attribute_id; /* belongs to ieee1905_qos_mgmt_attr_id enumeration */ union { struct { - uint16_t start_port; /**< Start port in port range */ - uint16_t end_port; /**< End port in port range */ + uint16_t start_port; /**< Start port in port range */ + uint16_t end_port; /**< End port in port range */ } port_range; struct { - uint8_t dscp_policy_id; /**< DSCP policy ID */ - uint8_t request_type; /* practically, this field is not needed - here, but we keep it here in order to - have just one structure for write/recv - functions */ - uint8_t dscp; /**< Target DSCP value */ + uint8_t dscp_policy_id; /**< DSCP policy ID */ + uint8_t request_type; /* practically, this field is not needed + here, but we keep it here in order to + have just one structure for write/recv + functions */ + uint8_t dscp; /**< Target DSCP value */ } dscp_policy; struct { struct ieee1905_tclas_elem_frame_classifier classifier; /**< - Complete TCLAS classifier */ + Complete TCLAS classifier */ } tclas; struct { - uint32_t domain_name_len; /**< Target domain name length */ - uint8_t *domain_name; /**< Target domain name */ + uint32_t domain_name_len; /**< Target domain name length */ + uint8_t *domain_name; /**< Target domain name */ } domain_name; }; }; @@ -774,11 +787,9 @@ struct ieee1905_qos_mgmt_attr_usr { * QoS management attribute container */ struct ieee1905_qos_mgmt_usr { - uint32_t attributes_count; /**< Number of - attributes - in attributes - field */ - struct ieee1905_qos_mgmt_attr_usr *attributes; /**< Array of attributes */ + uint32_t attributes_count; /**< Number of attributes in attributes + field */ + struct ieee1905_qos_mgmt_attr_usr *attributes; /**< Array of attributes */ }; #endif /* _1905_TLVS_H_ */ diff --git a/src/extensions/map/easymesh.h b/src/extensions/map/easymesh.h index 0a60bb03e9f1ccc8d8977430f48ee69cc7da73b1..13667d8baec85db1749a769a8291670a1616197e 100644 --- a/src/extensions/map/easymesh.h +++ b/src/extensions/map/easymesh.h @@ -994,11 +994,28 @@ struct tlv_traffic_sep_policy { } __attribute__((packed)) ssid[]; } __attribute__((packed)); +/** TLV: Error Response Reason codes */ +enum tlv_profile2_reason_code { + TLV_PROFILE2_ERR_CODE_REASON_SPR_NOT_FOUND = 0x01, + TLV_PROFILE2_ERR_CODE_REASON_TOO_MANY_SPR = 0x02, + TLV_PROFILE2_ERR_CODE_REASON_DEF_PCP_NOT_PROVIDED = 0x03, + TLV_PROFILE2_ERR_CODE_REASON_TOO_MANY_VLAN_ID = 0x05, + TLV_PROFILE2_ERR_CODE_REASON_TS_COMBINED_BSS_UNSUPPORTED = 0x07, + TLV_PROFILE2_ERR_CODE_REASON_TS_UNSUPPORTED = 0x0A, + TLV_PROFILE2_ERR_CODE_REASON_QM_CONFIGURE_FAIL = 0x0B, + TLV_PROFILE2_ERR_CODE_REASON_QM_DSCP_POLICY_REJECTED = 0x0C, + TLV_PROFILE2_ERR_CODE_REASON_ONBOARD_AGENT_DPP_FAIL = 0x0D, +}; /** TLV: Profile-2 error code */ struct tlv_profile2_error_code { uint8_t reason; - macaddr_t bssid[]; + union { + macaddr_t bssid; + uint32_t spr_id; + uint16_t qmid; + uint8_t __dummy[0]; + } __attribute__((packed)); } __attribute__((packed));