aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorMarko Hrastovec <marko.hrastovec@gmail.com>2014-04-07 19:59:29 +0200
committerMichael Mann <mmann78@netscape.net>2014-04-08 00:38:50 +0000
commite1ce405449f0f068824456ab25b97d3328c36488 (patch)
tree0a8c4cae3e36ce382202aab94e0abed8a14fd412 /epan
parent2f4ca9c8d979029e7893f2843045f516e3d0b844 (diff)
ASTERIX - added dissector for category 023.
Sample file with traffic is the same as for CAT021 (https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9953). Apply filter "asterix.category == 23" to see only CAT023 packets. A small change in actual dissecting code was also needed because of strange item I023/101. The first FX bit is in the second byte and then grows only for a byte. Change-Id: I3f80e6e46b642efc6f2e19e6f931cdef1c39495a Reviewed-on: https://code.wireshark.org/review/993 Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-asterix.c301
1 files changed, 297 insertions, 4 deletions
diff --git a/epan/dissectors/packet-asterix.c b/epan/dissectors/packet-asterix.c
index 9eda7ff3bc..ca6722c9ce 100644
--- a/epan/dissectors/packet-asterix.c
+++ b/epan/dissectors/packet-asterix.c
@@ -424,6 +424,37 @@ static gint hf_021_400 = -1;
static gint hf_021_400_RID = -1;
static gint hf_021_RE = -1;
static gint hf_021_SP = -1;
+/* Category 023 */
+static gint hf_023_000 = -1;
+static gint hf_023_000_RT = -1;
+static gint hf_023_010 = -1;
+static gint hf_023_015 = -1;
+static gint hf_023_015_SID = -1;
+static gint hf_023_015_STYPE = -1;
+static gint hf_023_070 = -1;
+static gint hf_023_100 = -1;
+static gint hf_023_100_NOGO = -1;
+static gint hf_023_100_ODP = -1;
+static gint hf_023_100_OXT = -1;
+static gint hf_023_100_MSC = -1;
+static gint hf_023_100_TSV = -1;
+static gint hf_023_100_SPO = -1;
+static gint hf_023_100_RN = -1;
+static gint hf_023_100_GSSP = -1;
+static gint hf_023_101 = -1;
+static gint hf_023_101_RP = -1;
+static gint hf_023_101_SC = -1;
+static gint hf_023_101_SSRP = -1;
+static gint hf_023_110 = -1;
+static gint hf_023_110_STAT = -1;
+static gint hf_023_120 = -1;
+static gint hf_023_120_TYPE = -1;
+static gint hf_023_120_REF = -1;
+static gint hf_023_120_COUNTER = -1;
+static gint hf_023_200 = -1;
+static gint hf_023_200_RANGE = -1;
+static gint hf_023_RE = -1;
+static gint hf_023_SP = -1;
/* Category 034 */
static gint hf_034_000 = -1;
static gint hf_034_000_MT = -1;
@@ -1524,6 +1555,37 @@ static gint ett_021_400 = -1;
static gint ett_021_400_RID = -1;
static gint ett_021_RE = -1;
static gint ett_021_SP = -1;
+/* Category 023 */
+static gint ett_023_000 = -1;
+static gint ett_023_000_RT = -1;
+static gint ett_023_010 = -1;
+static gint ett_023_015 = -1;
+static gint ett_023_015_SID = -1;
+static gint ett_023_015_STYPE = -1;
+static gint ett_023_070 = -1;
+static gint ett_023_100 = -1;
+static gint ett_023_100_NOGO = -1;
+static gint ett_023_100_ODP = -1;
+static gint ett_023_100_OXT = -1;
+static gint ett_023_100_MSC = -1;
+static gint ett_023_100_TSV = -1;
+static gint ett_023_100_SPO = -1;
+static gint ett_023_100_RN = -1;
+static gint ett_023_100_GSSP = -1;
+static gint ett_023_101 = -1;
+static gint ett_023_101_RP = -1;
+static gint ett_023_101_SC = -1;
+static gint ett_023_101_SSRP = -1;
+static gint ett_023_110 = -1;
+static gint ett_023_110_STAT = -1;
+static gint ett_023_120 = -1;
+static gint ett_023_120_TYPE = -1;
+static gint ett_023_120_REF = -1;
+static gint ett_023_120_COUNTER = -1;
+static gint ett_023_200 = -1;
+static gint ett_023_200_RANGE = -1;
+static gint ett_023_RE = -1;
+static gint ett_023_SP = -1;
/* Category 034 */
static gint ett_034_000 = -1;
static gint ett_034_000_MT = -1;
@@ -2314,7 +2376,7 @@ static const FieldPart IXXX_3bit_spare = { 3, 1.0, FIELD_PART_UINT, NULL, NULL }
static const FieldPart IXXX_4bit_spare = { 4, 1.0, FIELD_PART_UINT, NULL, NULL };
static const FieldPart IXXX_5bit_spare = { 5, 1.0, FIELD_PART_UINT, NULL, NULL };
static const FieldPart IXXX_6bit_spare = { 6, 1.0, FIELD_PART_UINT, NULL, NULL };
-/*static const FieldPart IXXX_7bit_spare = { 7, 1.0, FIELD_PART_UINT, NULL, NULL };*/
+static const FieldPart IXXX_7bit_spare = { 7, 1.0, FIELD_PART_UINT, NULL, NULL };
/* SAC SIC */
static const FieldPart IXXX_SAC = { 8, 1.0, FIELD_PART_UINT, &hf_XXX_SAC, NULL };
@@ -3150,7 +3212,6 @@ static const value_string valstr_021_090_SIL_SUP[] = {
{ 1, "measured per sample" },
{ 0, NULL }
};
-
static const FieldPart I021_090_NUCR_NACV = { 3, 1.0, FIELD_PART_UINT, &hf_021_090_NUCR_NACV, NULL };
static const FieldPart I021_090_NUCP_NIC = { 4, 1.0, FIELD_PART_UINT, &hf_021_090_NUCP_NIC, NULL };
static const FieldPart I021_090_NIC_BARO = { 1, 1.0, FIELD_PART_UINT, &hf_021_090_NIC_BARO, NULL };
@@ -3659,6 +3720,175 @@ static const enum_val_t I021_versions[] = {
};
/* *********************** */
+/* Category 023 */
+/* *********************** */
+/* Fields */
+
+/* Report Type */
+static const value_string valstr_023_000_RT[] = {
+ { 1, "Ground Station Status report" },
+ { 2, "Service Status report" },
+ { 3, "Service Statistics report" },
+ { 0, NULL }
+};
+static const FieldPart I023_000_RT = { 8, 1.0, FIELD_PART_UINT, &hf_023_000_RT, NULL };
+static const FieldPart *I023_000_PARTS[] = { &I023_000_RT, NULL };
+
+/* Tpe of Service */
+static const value_string valstr_023_015_STYP[] = {
+ { 1, "ADS-B VDL4" },
+ { 2, "ADS-B Ext Squitter" },
+ { 3, "ADS-B UAT" },
+ { 4, "TIS-B VDL4" },
+ { 5, "TIS-B Ext Squitter" },
+ { 6, "TIS-B UAT" },
+ { 7, "FIS-B VDL4" },
+ { 8, "GRAS VDL4" },
+ { 9, "MLT" },
+ { 0, NULL }
+};
+static const FieldPart I023_015_SID = { 4, 1.0, FIELD_PART_UINT, &hf_023_015_SID, NULL };
+static const FieldPart I023_015_STYPE = { 4, 1.0, FIELD_PART_UINT, &hf_023_015_STYPE, NULL };
+static const FieldPart *I023_015_PARTS[] = { &I023_015_SID, &I023_015_STYPE, NULL };
+
+/* Ground Station Status */
+static const value_string valstr_023_100_NOGO[] = {
+ { 0, "Data is released for operational use" },
+ { 1, "Data must not be used operationally" },
+ { 0, NULL }
+};
+static const value_string valstr_023_100_ODP[] = {
+ { 0, "Default, no overload" },
+ { 1, "Overload in DP" },
+ { 0, NULL }
+};
+static const value_string valstr_023_100_OXT[] = {
+ { 0, "Default, no overload" },
+ { 1, "Overload in transmission subsystem" },
+ { 0, NULL }
+};
+static const value_string valstr_023_100_MSC[] = {
+ { 0, "Monitoring system not connected or unknown" },
+ { 1, "Monitoring system connected" },
+ { 0, NULL }
+};
+static const value_string valstr_023_100_TSV[] = {
+ { 0, "valid" },
+ { 1, "invalid" },
+ { 0, NULL }
+};
+static const value_string valstr_023_100_SPO[] = {
+ { 0, "no spoofing detected" },
+ { 1, "potential spoofing attack" },
+ { 0, NULL }
+};
+static const value_string valstr_023_100_RN[] = {
+ { 0, "default" },
+ { 1, "track numbering has restarted" },
+ { 0, NULL }
+};
+static const FieldPart I023_100_NOGO = { 1, 1.0, FIELD_PART_UINT, &hf_023_100_NOGO, NULL };
+static const FieldPart I023_100_ODP = { 1, 1.0, FIELD_PART_UINT, &hf_023_100_ODP, NULL };
+static const FieldPart I023_100_OXT = { 1, 1.0, FIELD_PART_UINT, &hf_023_100_OXT, NULL };
+static const FieldPart I023_100_MSC = { 1, 1.0, FIELD_PART_UINT, &hf_023_100_MSC, NULL };
+static const FieldPart I023_100_TSV = { 1, 1.0, FIELD_PART_UINT, &hf_023_100_TSV, NULL };
+static const FieldPart I023_100_SPO = { 1, 1.0, FIELD_PART_UINT, &hf_023_100_SPO, NULL };
+static const FieldPart I023_100_RN = { 1, 1.0, FIELD_PART_UINT, &hf_023_100_RN, NULL };
+static const FieldPart I023_100_GSSP = { 7, 1.0, FIELD_PART_UFLOAT, &hf_023_100_GSSP, NULL };
+static const FieldPart *I023_100_PARTS[] = { &I023_100_NOGO, &I023_100_ODP, &I023_100_OXT, &I023_100_MSC, &I023_100_TSV, &I023_100_SPO, &I023_100_RN, &IXXX_FX,
+ &I023_100_GSSP, &IXXX_FX, NULL };
+
+/* Service Configuration */
+static const value_string valstr_023_101_SC[] = {
+ { 0, "No information" },
+ { 1, "NRA class" },
+ { 2, "reserved for future use" },
+ { 3, "reserved for future use" },
+ { 4, "reserved for future use" },
+ { 5, "reserved for future use" },
+ { 6, "reserved for future use" },
+ { 7, "reserved for future use" },
+ { 0, NULL }
+};
+static const FieldPart I023_101_RP = { 8, 0.5, FIELD_PART_UFLOAT, &hf_023_101_RP, NULL };
+static const FieldPart I023_101_SC = { 3, 1, FIELD_PART_UINT, &hf_023_101_SC, NULL };
+static const FieldPart I023_101_SSRP = { 7, 1.0, FIELD_PART_UFLOAT, &hf_023_101_SSRP, NULL };
+static const FieldPart *I023_101_PARTS[] = { &I023_101_RP, &I023_101_SC, &IXXX_4bit_spare, &IXXX_FX,
+ &I023_101_SSRP, &IXXX_FX, NULL };
+
+/* Service Status */
+static const value_string valstr_023_110_STAT[] = {
+ { 0, "Unknown" },
+ { 1, "Failed" },
+ { 2, "Disabled" },
+ { 3, "Degraded" },
+ { 4, "Normal" },
+ { 5, "Initialisation" },
+ { 0, NULL }
+};
+static const FieldPart I023_110_STAT = { 3, 1.0, FIELD_PART_UINT, &hf_023_110_STAT, NULL };
+static const FieldPart *I023_110_PARTS[] = { &IXXX_4bit_spare, &I023_110_STAT, &IXXX_FX, NULL };
+
+/* Service Statistics */
+static const value_string valstr_023_120_TYPE[] = {
+ { 0, "Number of unknown messages received" },
+ { 1, "Number of \'too old\' messages received" },
+ { 2, "Number of failed message conversions" },
+ { 3, "Total Number of messages received" },
+ { 4, "Total number of messages transmitted" },
+ { 20, "Number of TIS-B management messages received" },
+ { 21, "Number of \'Basic\' messages received" },
+ { 22, "Number of \'High Dynamic\' messages received" },
+ { 23, "Number of \'Full Position\' messages received" },
+ { 24, "Number of \'Basic Ground\' messages received" },
+ { 25, "Number of \'TCP\' messages received" },
+ { 26, "Number of \'UTC time\' messages received" },
+ { 27, "Number of \'Data\' messages received" },
+ { 28, "Number of \'High Resolution\' messages received" },
+ { 29, "Number of \'Aircraft Target Airborne\' messages received" },
+ { 30, "Number of \'Aircraft Target Ground\' messages received" },
+ { 31, "Number of \'Ground Vehicle Target\' messages received" },
+ { 32, "Number of \'2 slots TCP messages received" },
+ { 0, NULL }
+};
+static const value_string valstr_023_120_REF[] = {
+ { 0, "From midnight" },
+ { 1, "From the last report" },
+ { 0, NULL }
+};
+static const FieldPart I023_120_TYPE = { 8, 1.0, FIELD_PART_UINT, &hf_023_120_TYPE, NULL };
+static const FieldPart I023_120_REF = { 1, 1.0, FIELD_PART_UINT, &hf_023_120_REF, NULL };
+static const FieldPart I023_120_COUNTER = { 32, 1.0, FIELD_PART_UINT, &hf_023_120_COUNTER, NULL };
+static const FieldPart *I023_120_PARTS[] = { &I023_120_TYPE, &I023_120_REF, &IXXX_7bit_spare, &I023_120_COUNTER, NULL };
+
+/* Operational Range */
+static const FieldPart I023_200_RANGE = { 8, 1.0, FIELD_PART_UFLOAT, &hf_023_200_RANGE, NULL };
+static const FieldPart *I023_200_PARTS[] = { &I023_200_RANGE, NULL };
+
+/* Items */
+static const AsterixField I023_000 = { FIXED, 1, 0, 0, &hf_023_000, I023_000_PARTS, { NULL } };
+static const AsterixField I023_010 = { FIXED, 2, 0, 0, &hf_023_010, IXXX_SAC_SIC, { NULL } };
+static const AsterixField I023_015 = { FIXED, 1, 0, 0, &hf_023_015, I023_015_PARTS, { NULL } };
+static const AsterixField I023_070 = { FIXED, 3, 0, 0, &hf_023_070, IXXX_TOD, { NULL } };
+static const AsterixField I023_100 = { FX, 1, 0, 0, &hf_023_100, I023_100_PARTS, { NULL } };
+static const AsterixField I023_101 = { FX, 1, 0, 1, &hf_023_101, I023_101_PARTS, { NULL } };
+static const AsterixField I023_110 = { FX, 1, 0, 0, &hf_023_110, I023_110_PARTS, { NULL } };
+static const AsterixField I023_120 = { REPETITIVE, 6, 1, 0, &hf_023_120, I023_120_PARTS, { NULL } };
+static const AsterixField I023_200 = { FIXED, 1, 0, 0, &hf_023_200, I023_200_PARTS, { NULL } };
+static const AsterixField I023_RE = { RE, 0, 0, 1, &hf_023_RE, NULL, { NULL } };
+static const AsterixField I023_SP = { SP, 0, 0, 1, &hf_023_SP, NULL, { NULL } };
+
+static const AsterixField *I023_v1_2_uap[] = { &I023_010, &I023_000, &I023_015, &I023_070, &I023_100, &I023_101, &I023_200,
+ &I023_110, &I023_120, &IX_SPARE, &IX_SPARE, &IX_SPARE, &I023_RE, &I023_SP, NULL };
+static const AsterixField **I023_v1_2[] = { I023_v1_2_uap, NULL };
+static const AsterixField ***I023[] = { I023_v1_2 };
+
+static const enum_val_t I023_versions[] = {
+ { "I023_v1_2", "Version 1.2", 0 },
+ { NULL, NULL, 0 }
+};
+
+/* *********************** */
/* Category 034 */
/* *********************** */
/* Fields */
@@ -6524,7 +6754,7 @@ static const AsterixField ****categories[] = {
NULL, /* 020 */
I021, /* 021 */
NULL, /* 022 */
- NULL, /* 023 */
+ I023, /* 023 */
NULL, /* 024 */
NULL, /* 025 */
NULL, /* 026 */
@@ -6986,7 +7216,7 @@ static int asterix_field_length (tvbuff_t *tvb, guint offset, const AsterixField
size = (guint)(field->repetition_counter_size + count * field->length);
}
else if (field->type & FX) {
- for (size = field->length; tvb_get_guint8 (tvb, offset + size - 1) & 1; size += field->length);
+ for (size = field->length + field->header_length; tvb_get_guint8 (tvb, offset + size - 1) & 1; size += field->length);
}
else if (field->type & RE) {
for (i = 0, size = 0; i < field->header_length; i++) {
@@ -7457,6 +7687,37 @@ void proto_register_asterix (void)
{ &hf_021_400_RID, { "RID", "asterix.021_400_RID", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_021_RE, { "Reserved Field", "asterix.021_RE", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_021_SP, { "Special Field", "asterix.021_SP", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ /* Category 023 */
+ { &hf_023_000, { "000, Report Type", "asterix.023_000", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_023_000_RT, { "RT", "asterix.023_000_RT", FT_UINT8, BASE_DEC, VALS (valstr_023_000_RT), 0x0, NULL, HFILL } },
+ { &hf_023_010, { "010, Data Source Identifier", "asterix.023_010", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_023_015, { "015, Service Type and Identification", "asterix.023_015", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_023_015_SID, { "SID", "asterix.023_015_SID", FT_UINT8, BASE_DEC, NULL, 0xf0, NULL, HFILL } },
+ { &hf_023_015_STYPE, { "STYPE", "asterix.023_015_STYPE", FT_UINT8, BASE_DEC, VALS (valstr_023_015_STYP), 0x0f, NULL, HFILL } },
+ { &hf_023_070, { "070, Time of Day", "asterix.023_070", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_023_100, { "100, Ground Station Status", "asterix.023_100", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_023_100_NOGO, { "NOGO", "asterix.023_100_NOGO", FT_UINT8, BASE_DEC, VALS (valstr_023_100_NOGO), 0x80, NULL, HFILL } },
+ { &hf_023_100_ODP, { "ODP", "asterix.023_100_ODP", FT_UINT8, BASE_DEC, VALS (valstr_023_100_ODP), 0x40, NULL, HFILL } },
+ { &hf_023_100_OXT, { "OXT", "asterix.023_100_OXT", FT_UINT8, BASE_DEC, VALS (valstr_023_100_OXT), 0x20, NULL, HFILL } },
+ { &hf_023_100_MSC, { "MSC", "asterix.023_100_MSC", FT_UINT8, BASE_DEC, VALS (valstr_023_100_MSC), 0x10, NULL, HFILL } },
+ { &hf_023_100_TSV, { "TSV", "asterix.023_100_TSV", FT_UINT8, BASE_DEC, VALS (valstr_023_100_TSV), 0x08, NULL, HFILL } },
+ { &hf_023_100_SPO, { "SPO", "asterix.023_100_SPO", FT_UINT8, BASE_DEC, VALS (valstr_023_100_SPO), 0x04, NULL, HFILL } },
+ { &hf_023_100_RN, { "RN", "asterix.023_100_RN", FT_UINT8, BASE_DEC, VALS (valstr_023_100_RN), 0x02, NULL, HFILL } },
+ { &hf_023_100_GSSP, { "GSSP [s]", "asterix.023_100_GSSP", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_023_101, { "101, Service Configuration", "asterix.023_101", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_023_101_RP, { "RP [s]", "asterix.023_101_RP", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_023_101_SC, { "SC", "asterix.023_101_SC", FT_UINT8, BASE_DEC, VALS (valstr_023_101_SC), 0xe0, NULL, HFILL } },
+ { &hf_023_101_SSRP, { "SSRP [s]", "asterix.023_101_SSRP", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_023_110, { "110, Service Status", "asterix.023_110", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_023_110_STAT, { "STAT", "asterix.023_110_STAT", FT_UINT8, BASE_DEC, VALS (valstr_023_110_STAT), 0x0e, NULL, HFILL } },
+ { &hf_023_120, { "120, Service Statistics", "asterix.023_120", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_023_120_TYPE, { "TYPE", "asterix.023_120_TYPE", FT_UINT8, BASE_DEC, VALS (valstr_023_120_TYPE), 0x0, NULL, HFILL } },
+ { &hf_023_120_REF, { "REF", "asterix.023_120_REF", FT_UINT8, BASE_DEC, VALS (valstr_023_120_REF), 0x80, NULL, HFILL } },
+ { &hf_023_120_COUNTER, { "COUNTER", "asterix.023_120_COUNTER", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+ { &hf_023_200, { "200, Operational Range", "asterix.023_200", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_023_200_RANGE, { "RANGE [NM]", "asterix.023_200_RANGE", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_023_RE, { "Reserved Field", "asterix.023_RE", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_023_SP, { "Special Field", "asterix.023_SP", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/* Category 034 */
{ &hf_034_000, { "000, Message Type", "asterix.034_000", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_034_000_MT, { "MT", "asterix.034_000_MT", FT_UINT8, BASE_DEC, VALS (valstr_034_000_MT), 0x0, NULL, HFILL } },
@@ -8560,6 +8821,37 @@ void proto_register_asterix (void)
&ett_021_400_RID,
&ett_021_RE,
&ett_021_SP,
+ /* Category 023 */
+ &ett_023_000,
+ &ett_023_000_RT,
+ &ett_023_010,
+ &ett_023_015,
+ &ett_023_015_SID,
+ &ett_023_015_STYPE,
+ &ett_023_070,
+ &ett_023_100,
+ &ett_023_100_NOGO,
+ &ett_023_100_ODP,
+ &ett_023_100_OXT,
+ &ett_023_100_MSC,
+ &ett_023_100_TSV,
+ &ett_023_100_SPO,
+ &ett_023_100_RN,
+ &ett_023_100_GSSP,
+ &ett_023_101,
+ &ett_023_101_RP,
+ &ett_023_101_SC,
+ &ett_023_101_SSRP,
+ &ett_023_110,
+ &ett_023_110_STAT,
+ &ett_023_120,
+ &ett_023_120_TYPE,
+ &ett_023_120_REF,
+ &ett_023_120_COUNTER,
+ &ett_023_200,
+ &ett_023_200_RANGE,
+ &ett_023_RE,
+ &ett_023_SP,
/* Category 034 */
&ett_034_000,
&ett_034_000_MT,
@@ -9296,6 +9588,7 @@ void proto_register_asterix (void)
prefs_register_enum_preference (asterix_prefs_module, "i008_version", "I008 version", "Select the CAT008 version", &global_categories_version[8], I008_versions, FALSE);
prefs_register_enum_preference (asterix_prefs_module, "i009_version", "I009 version", "Select the CAT009 version", &global_categories_version[9], I009_versions, FALSE);
prefs_register_enum_preference (asterix_prefs_module, "i021_version", "I021 version", "Select the CAT021 version", &global_categories_version[21], I021_versions, FALSE);
+ prefs_register_enum_preference (asterix_prefs_module, "i023_version", "I023 version", "Select the CAT023 version", &global_categories_version[23], I023_versions, FALSE);
prefs_register_enum_preference (asterix_prefs_module, "i034_version", "I034 version", "Select the CAT034 version", &global_categories_version[34], I034_versions, FALSE);
prefs_register_enum_preference (asterix_prefs_module, "i048_version", "I048 version", "Select the CAT048 version", &global_categories_version[48], I048_versions, FALSE);
prefs_register_enum_preference (asterix_prefs_module, "i062_version", "I062 version", "Select the CAT062 version", &global_categories_version[62], I062_versions, FALSE);