From 93ec018c098ad126e98db564ff6a34e898eadde4 Mon Sep 17 00:00:00 2001 From: Martin Mathieson Date: Sat, 25 Feb 2023 14:46:01 +0000 Subject: [PATCH] ORAN FH CUS: add section extensions 16, 17, 18, 21 --- epan/dissectors/packet-oran.c | 122 ++++++++++++++++++++++++++++++++-- 1 file changed, 117 insertions(+), 5 deletions(-) diff --git a/epan/dissectors/packet-oran.c b/epan/dissectors/packet-oran.c index efbc0a9957..01378dc895 100644 --- a/epan/dissectors/packet-oran.c +++ b/epan/dissectors/packet-oran.c @@ -107,6 +107,7 @@ static int hf_oran_reserved = -1; static int hf_oran_reserved_1bit = -1; static int hf_oran_reserved_2bits = -1; static int hf_oran_reserved_4bits = -1; +static int hf_oran_reserved_6bits = -1; static int hf_oran_ext11_reserved = -1; @@ -186,6 +187,16 @@ static int hf_oran_numPuncPrb = -1; static int hf_oran_puncReMask = -1; static int hf_oran_RbgIncl = -1; +static int hf_oran_ci_prb_group_size = -1; + +static int hf_oran_num_ueid = -1; + +static int hf_oran_antMask = -1; + +static int hf_oran_transmissionWindowOffset = -1; +static int hf_oran_transmissionWindowSize = -1; +static int hf_oran_toT = -1; + /* Computed fields */ static int hf_oran_c_eAxC_ID = -1; @@ -504,6 +515,13 @@ static const value_string interface_name_vals[] = { {0, NULL} }; +/* 7.7.18.4 toT (type of transmission) */ +static const value_string type_of_transmission_vals[] = { + {0x0, "normal transmission mode, data can be distributed in any way the O-RU is implemented to transmit data"}, + {0x1, "uniformly distributed over the transmission window"}, + {0, NULL} +}; + /*******************************************************/ /* Overall state of a flow (eAxC) */ @@ -1594,15 +1612,45 @@ static int dissect_oran_c_section(tvbuff_t *tvb, proto_tree *tree, packet_info * break; case 16: /* Section description for antenna mapping in UE channel information based UL beamforming */ - /* TODO */ + { + guint32 extlen_remaining_bytes = (extlen*4) - 2; + guint num_ant_masks = extlen_remaining_bytes / 8; + for (guint n=0; n < num_ant_masks; n++) { + proto_item *ti = proto_tree_add_item(extension_tree, hf_oran_antMask, tvb, offset, 8, ENC_BIG_ENDIAN); + proto_item_append_text(ti, " (RX eAxC #%u)", n+1); + offset += 8; + } break; + } case 17: /* Section description for indication of user port group */ - /* TODO */ + { + guint32 extlen_remaining_bytes = (extlen*4) - 2; + guint32 end_bit = (offset+extlen_remaining_bytes) * 8; + guint32 ueid_index = 1; + /* TODO: just filling up all available bytes - some may actually be padding.. */ + for (guint32 bit_offset=offset*8; bit_offset < end_bit; bit_offset+=4, ueid_index++) { + proto_item *ti = proto_tree_add_bits_item(extension_tree, hf_oran_num_ueid, tvb, bit_offset, 4, ENC_BIG_ENDIAN); + proto_item_append_text(ti, " (user #%u)", ueid_index); + } break; + } case 18: /* Section description for Uplink Transmission Management */ - /* TODO */ + /* transmissionWindowOffset */ + proto_tree_add_item(extension_tree, hf_oran_transmissionWindowOffset, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + /* reserved (2 bits) */ + proto_tree_add_item(extension_tree, hf_oran_reserved_2bits, tvb, offset, 1, ENC_BIG_ENDIAN); + /* transmissionWindowSize (14 bits) */ + proto_tree_add_item(extension_tree, hf_oran_transmissionWindowSize, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + /* reserved (6 bits) */ + proto_tree_add_item(extension_tree, hf_oran_reserved_6bits, tvb, offset, 1, ENC_BIG_ENDIAN); + /* toT (2 bits) */ + proto_tree_add_item(extension_tree, hf_oran_toT, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; break; case 19: /* Compact beamforming information for multiple port */ @@ -1746,7 +1794,7 @@ static int dissect_oran_c_section(tvbuff_t *tvb, proto_tree *tree, packet_info * /* Subtree for this puncturing pattern */ proto_item *pattern_ti = proto_tree_add_string_format(extension_tree, hf_oran_puncPattern, tvb, offset, 0, - "", "Puncturing Pattern %u: (", n); + "", "Puncturing Pattern: %u/%u", n+1, hf_oran_numPuncPatterns); proto_tree *pattern_tree = proto_item_add_subtree(pattern_ti, ett_oran_punc_pattern); /* SymbolMask (14 bits) */ @@ -1786,7 +1834,12 @@ static int dissect_oran_c_section(tvbuff_t *tvb, proto_tree *tree, packet_info * break; } case 21: /* Variable PRB group size for channel information */ - /* TODO */ + /* ciPrbGroupSize */ + proto_tree_add_item(extension_tree, hf_oran_ci_prb_group_size, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + /* reserved (8 bits) */ + proto_tree_add_bits_item(extension_tree, hf_oran_reserved, tvb, offset*8, 8, ENC_BIG_ENDIAN); + offset += 1; break; case 22: /* ACK/NACK request */ @@ -2880,6 +2933,13 @@ proto_register_oran(void) NULL, HFILL} }, + {&hf_oran_reserved_6bits, + {"reserved", "oran_fh_cus.reserved", + FT_UINT8, BASE_HEX, + NULL, 0xfc, + NULL, + HFILL} + }, {&hf_oran_ext11_reserved, {"Reserved", "oran_fh_cus.reserved", @@ -3412,6 +3472,58 @@ proto_register_oran(void) "rbg included flag", HFILL} }, + + /* 7.7.21.2 ciPrbGroupSize */ + {&hf_oran_ci_prb_group_size, + {"ciPrbGroupSize", "oran_fh_cus.ciPrbGroupSize", + FT_UINT8, BASE_DEC, + NULL, 0x0, + "channel information PRB group size", + HFILL} + }, + + /* 7.7.17.2 numUeID */ + {&hf_oran_num_ueid, + {"numUeID", "oran_fh_cus.numUeID", + FT_UINT8, BASE_DEC, + NULL, 0x0, + "number of ueIDs per user", + HFILL} + }, + + /* 7.7.16.2 antMask */ + {&hf_oran_antMask, + {"antMask", "oran_fh_cus.antMask", + FT_UINT64, BASE_HEX, + NULL, 0xffffffffffffffff, + "indices of antennas to be pre-combined per RX endpoint", + HFILL} + }, + + /* 7.7.18.2 transmissionWindowOffset */ + {&hf_oran_transmissionWindowOffset, + {"transmissionWindowOffset", "oran_fh_cus.transmissionWindowOffset", + FT_UINT16, BASE_DEC, + NULL, 0x0, + "start of the transmission window as an offset to when the transmission window would have been without this parameter, i.e. (Ta3_max - Ta3_min)", + HFILL} + }, + /* 7.7.18.3 transmissionWindowSize */ + {&hf_oran_transmissionWindowSize, + {"transmissionWindowSize", "oran_fh_cus.transmissionWindowSize", + FT_UINT16, BASE_DEC, + NULL, 0x3fff, + "size of the transmission window in resolution µs", + HFILL} + }, + /* 7.7.18.4 toT */ + {&hf_oran_toT, + {"toT", "oran_fh_cus.toT", + FT_UINT8, BASE_DEC, + VALS(type_of_transmission_vals), 0x03, + "type of transmission", + HFILL} + } }; /* Setup protocol subtree array */