diff options
author | Mathis Marion <mathis.marion@silabs.com> | 2023-03-08 17:35:02 +0100 |
---|---|---|
committer | Alexis La Goutte <alexis.lagoutte@gmail.com> | 2023-03-10 17:26:22 +0000 |
commit | ab06f6de7a8bfbc08ccec1937e99b4ae2795ff78 (patch) | |
tree | c096f891ce06a8c09df3fc3185bb1f7e4bbebcea /epan | |
parent | 9f4947609e50ad15e97f876ded3fba3f27e3d256 (diff) |
Add Wi-SUN MDR command dissector
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-wisun.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/epan/dissectors/packet-wisun.c b/epan/dissectors/packet-wisun.c index b73429242b..332cb6c988 100644 --- a/epan/dissectors/packet-wisun.c +++ b/epan/dissectors/packet-wisun.c @@ -14,6 +14,7 @@ #include <wsutil/pint.h> #include <epan/reassemble.h> #include <epan/oids.h> +#include <epan/oui.h> #include "packet-ieee802154.h" @@ -116,6 +117,8 @@ static reassembly_table netricity_reassembly_table; #define WISUN_PIE_JM_ID_MASK 0xfc #define WISUN_PIE_JM_LEN_MASK 0x03 +#define WISUN_CMD_MDR 0x03 + static int proto_wisun = -1; static int hf_wisun_subid = -1; static int hf_wisun_unknown_ie = -1; @@ -274,6 +277,9 @@ static int hf_wisun_eapol_relay_sup = -1; static int hf_wisun_eapol_relay_kmp_id = -1; static int hf_wisun_eapol_relay_direction = -1; +static int hf_wisun_cmd_subid = -1; +static int hf_wisun_cmd_mdr_phy_mode_id = -1; + // Netricity static int proto_wisun_netricity_sc; static int hf_wisun_netricity_nftie = -1; @@ -619,6 +625,11 @@ static const range_string wisun_phy_mode_ofdm_vals[] = { { 0, 0, NULL } }; +static const value_string wisun_cmd_vals[] = { + { 3, "MDR Command" }, + { 0, NULL } +}; + static const true_false_string wisun_netricity_sc_contention_control_tfs = { "Contention-free access", "Contention allowed in next contention state" @@ -1600,6 +1611,29 @@ dissect_wisun_pie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ies_tree, void return offset; } + +static int +dissect_wisun_cmd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) +{ + guint8 offset = 0; + guint8 cmd_subid; + + cmd_subid = tvb_get_guint8(tvb, offset); + col_set_str(pinfo->cinfo, COL_PROTOCOL, "Wi-SUN"); + col_set_str(pinfo->cinfo, COL_INFO, val_to_str_const(cmd_subid, wisun_cmd_vals, "Unknown Wi-SUN MAC Command")); + proto_tree_add_item(tree, hf_wisun_cmd_subid, tvb, offset, 1, ENC_LITTLE_ENDIAN); + offset += 1; + switch (cmd_subid) { + case WISUN_CMD_MDR: + proto_tree_add_item(tree, hf_wisun_cmd_mdr_phy_mode_id, tvb, offset, 1, ENC_LITTLE_ENDIAN); + break; + default: + call_data_dissector(tvb_new_subset_remaining(tvb, offset), pinfo, tree); + break; + } + return offset; +} + /*----------------------------------------------- * Wi-SUN FAN Security Extensions Dissection *---------------------------------------------*/ @@ -2493,6 +2527,14 @@ void proto_register_wisun(void) { "Direction", "wisun.eapol_relay.direction", FT_BOOLEAN, BASE_NONE, TFS(&tfs_up_down), 0x0, NULL, HFILL }}, + { &hf_wisun_cmd_subid, + { "Command Sub-ID", "wisun.cmd", FT_UINT8, BASE_DEC, VALS(wisun_cmd_vals), 0x0, + "Wi-SUN MAC Command Sub-ID", HFILL }}, + + { &hf_wisun_cmd_mdr_phy_mode_id, + { "PHY Mode ID", "wisun.cmd.mdr.phy_mode_id", FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL }}, + /* Wi-SUN Netricity */ { &hf_wisun_netricity_nftie, { "Netricity Frame Type IE", "wisun.netricity.nftie", FT_NONE, BASE_NONE, NULL, 0x0, @@ -2685,6 +2727,7 @@ void proto_reg_handoff_wisun(void) { dissector_add_uint(IEEE802154_HEADER_IE_DTABLE, IEEE802154_HEADER_IE_WISUN, create_dissector_handle(dissect_wisun_hie, proto_wisun)); dissector_add_uint(IEEE802154_PAYLOAD_IE_DTABLE, IEEE802154_PAYLOAD_IE_WISUN, create_dissector_handle(dissect_wisun_pie, proto_wisun)); + dissector_add_uint(IEEE802154_CMD_VENDOR_DTABLE, OUI_WISUN, create_dissector_handle(dissect_wisun_cmd, proto_wisun)); oid_add_from_string("id-kp-wisun-fan-device", "1.3.6.1.4.1.45605.1"); |