aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorMichael Bouchaud (yoz) <michael.bouchaud@toulouse.viveris.com>2015-08-24 18:04:41 +0200
committerAnders Broman <a.broman58@gmail.com>2020-07-01 10:44:40 +0000
commit50a71ea0a7c4df7574355007894681a09f5eab6f (patch)
treecd2da018a987639e45af0fb498c066050f264ed7 /epan
parentb8aec0a9f2e4387a0b3f9782eb5bed40105eef34 (diff)
DVB-S2: Add DVB-S2x support
- New modcods - Extended rolloff factor encoding Change-Id: I4b5667ef286b04e95dd343c5ec7793376f4e09ad Reviewed-on: https://code.wireshark.org/review/37586 Petri-Dish: Anders Broman <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-dvb-s2-bb.c305
1 files changed, 295 insertions, 10 deletions
diff --git a/epan/dissectors/packet-dvb-s2-bb.c b/epan/dissectors/packet-dvb-s2-bb.c
index 362b740069..11395359a5 100644
--- a/epan/dissectors/packet-dvb-s2-bb.c
+++ b/epan/dissectors/packet-dvb-s2-bb.c
@@ -81,6 +81,7 @@ static int hf_dvb_s2_modeadapt_acm = -1;
static int hf_dvb_s2_modeadapt_acm_fecframe = -1;
static int hf_dvb_s2_modeadapt_acm_pilot = -1;
static int hf_dvb_s2_modeadapt_acm_modcod = -1;
+static int hf_dvb_s2_modeadapt_acm_modcod_s2x = -1;
static int hf_dvb_s2_modeadapt_cni = -1;
static int hf_dvb_s2_modeadapt_frameno = -1;
@@ -91,7 +92,8 @@ static int hf_dvb_s2_bb_matype1_mis = -1;
static int hf_dvb_s2_bb_matype1_acm = -1;
static int hf_dvb_s2_bb_matype1_issyi = -1;
static int hf_dvb_s2_bb_matype1_npd = -1;
-static int hf_dvb_s2_bb_matype1_ro = -1;
+static int hf_dvb_s2_bb_matype1_high_ro = -1;
+static int hf_dvb_s2_bb_matype1_low_ro = -1;
static int hf_dvb_s2_bb_matype2 = -1;
static int hf_dvb_s2_bb_upl = -1;
static int hf_dvb_s2_bb_dfl = -1;
@@ -140,8 +142,12 @@ static expert_field ei_dvb_s2_bb_npd_invalid = EI_INIT;
static expert_field ei_dvb_s2_bb_upl_invalid = EI_INIT;
static expert_field ei_dvb_s2_bb_reserved = EI_INIT;
+static unsigned char _use_low_rolloff_value = 0;
-/* *** DVB-S2 Mode Adaptation Header *** */
+/* Offset in SYNC MARKER */
+#define DVB_S2_OFFS_SYNCBYTE 0
+
+/* *** DVB-S2 Modeadaption Header *** */
/* first byte */
#define DVB_S2_MODEADAPT_OFFS_SYNCBYTE 0
@@ -150,6 +156,7 @@ static expert_field ei_dvb_s2_bb_reserved = EI_INIT;
/* second byte */
#define DVB_S2_MODEADAPT_OFFS_ACMBYTE 1
#define DVB_S2_MODEADAPT_MODCODS_MASK 0x1F
+#define DVB_S2_MODEADAPT_MODCODS_S2X_MASK 0xDF
static const value_string modeadapt_modcods[] = {
{ 0, "DUMMY PLFRAME"},
{ 1, "QPSK 1/4"},
@@ -183,6 +190,230 @@ static const value_string modeadapt_modcods[] = {
{29, "reserved"},
{30, "reserved"},
{31, "reserved"},
+ {32, "QPSK 1/3 SF48"},
+ {33, "QPSK 1/2 SF48"},
+ {34, "QPSK 1/4 SF12"},
+ {35, "QPSK 1/3 SF12"},
+ {36, "QPSK 1/2 SF12"},
+ {37, "QPSK 1/3 SF6"},
+ {38, "QPSK 1/2 SF6"},
+ {39, "QPSK 1/3 SF3"},
+ {40, "QPSK 2/5 SF3"},
+ {41, "QPSK 1/3 SF2"},
+ {42, "QPSK 2/5 SF2"},
+ {43, "QPSK 1/2 SF2"},
+ {44, "QPSK 1/3 SF1"},
+ {45, "QPSK 2/5 SF1"},
+ {46, "QPSK 1/2 SF1"},
+ {47, "reserved"},
+ {48, "reserved"},
+ {49, "reserved"},
+ {50, "reserved"},
+ {51, "reserved"},
+ {52, "reserved"},
+ {53, "reserved"},
+ {54, "reserved"},
+ {55, "reserved"},
+ {56, "reserved"},
+ {57, "reserved"},
+ {58, "reserved"},
+ {59, "reserved"},
+ {60, "reserved"},
+ {61, "reserved"},
+ {62, "reserved"},
+ {63, "reserved"},
+ {64, "reserved"},
+ {65, "reserved"},
+ {66, "reserved"},
+ {67, "reserved"},
+ {68, "reserved"},
+ {69, "reserved"},
+ {70, "reserved"},
+ {71, "reserved"},
+ {72, "reserved"},
+ {73, "reserved"},
+ {74, "reserved"},
+ {75, "reserved"},
+ {76, "reserved"},
+ {77, "reserved"},
+ {78, "reserved"},
+ {79, "reserved"},
+ {80, "reserved"},
+ {81, "reserved"},
+ {82, "reserved"},
+ {83, "reserved"},
+ {84, "reserved"},
+ {85, "reserved"},
+ {86, "reserved"},
+ {87, "reserved"},
+ {88, "reserved"},
+ {89, "reserved"},
+ {90, "reserved"},
+ {91, "reserved"},
+ {92, "reserved"},
+ {93, "reserved"},
+ {94, "reserved"},
+ {95, "reserved"},
+ {96, "reserved"},
+ {97, "reserved"},
+ {98, "reserved"},
+ {99, "reserved"},
+ {100, "reserved"},
+ {101, "reserved"},
+ {102, "reserved"},
+ {103, "reserved"},
+ {104, "reserved"},
+ {105, "reserved"},
+ {106, "reserved"},
+ {107, "reserved"},
+ {108, "reserved"},
+ {109, "reserved"},
+ {110, "reserved"},
+ {111, "reserved"},
+ {112, "reserved"},
+ {113, "reserved"},
+ {114, "reserved"},
+ {115, "reserved"},
+ {116, "reserved"},
+ {117, "reserved"},
+ {118, "reserved"},
+ {119, "reserved"},
+ {120, "reserved"},
+ {121, "reserved"},
+ {122, "reserved"},
+ {123, "reserved"},
+ {124, "reserved"},
+ {125, "reserved"},
+ {126, "reserved"},
+ {127, "reserved"},
+ {128, "reserved"},
+ {129, "reserved"},
+ {130, "reserved"},
+ {131, "reserved"},
+ {132, "QPSK 13/45"},
+ {133, "reserved"},
+ {134, "QPSK 9/20"},
+ {135, "reserved"},
+ {136, "QPSK 11/20"},
+ {137, "reserved"},
+ {138, "8PSK 5/9-L"},
+ {139, "reserved"},
+ {140, "8PSK 26/45-L"},
+ {141, "reserved"},
+ {142, "8PSK 23/36"},
+ {143, "reserved"},
+ {144, "8PSK 25/36"},
+ {145, "reserved"},
+ {146, "8PSK 13/18"},
+ {147, "reserved"},
+ {148, "16APSK 1/2-L"},
+ {149, "reserved"},
+ {150, "16APSK 8/15-L"},
+ {151, "reserved"},
+ {152, "16APSK 5/9-L"},
+ {153, "reserved"},
+ {154, "16APSK 26/45"},
+ {155, "reserved"},
+ {156, "16APSK 3/5"},
+ {157, "reserved"},
+ {158, "16APSK 3/5-L"},
+ {159, "reserved"},
+ {160, "16APSK 28/45"},
+ {161, "reserved"},
+ {162, "16APSK 23/36"},
+ {163, "reserved"},
+ {164, "16APSK 2/3-L"},
+ {165, "reserved"},
+ {166, "16APSK 25/36"},
+ {167, "reserved"},
+ {168, "16APSK 13/18"},
+ {169, "reserved"},
+ {170, "16APSK 7/9"},
+ {171, "reserved"},
+ {172, "16APSK 77/90"},
+ {173, "reserved"},
+ {174, "32APSK 2/3-L"},
+ {175, "reserved"},
+ {176, "reserved"},
+ {177, "reserved"},
+ {178, "32APSK 32/45"},
+ {179, "reserved"},
+ {180, "32APSK 11/15"},
+ {181, "reserved"},
+ {182, "32APSK 7/9"},
+ {183, "reserved"},
+ {184, "64APSK 32/45-L"},
+ {185, "reserved"},
+ {186, "64APSK 11/15"},
+ {187, "reserved"},
+ {188, "reserved"},
+ {189, "reserved"},
+ {190, "64APSK 7/9"},
+ {191, "reserved"},
+ {192, "reserved"},
+ {193, "reserved"},
+ {194, "64APSK 4/5"},
+ {195, "reserved"},
+ {196, "reserved"},
+ {197, "reserved"},
+ {198, "64APSK 5/6"},
+ {199, "reserved"},
+ {200, "128APSK 3/4"},
+ {201, "reserved"},
+ {202, "128APSK 7/9"},
+ {203, "reserved"},
+ {204, "256APSK 29/45-L"},
+ {205, "reserved"},
+ {206, "256APSK 2/3-L"},
+ {207, "reserved"},
+ {208, "256APSK 31/45-L"},
+ {209, "reserved"},
+ {210, "256APSK 32/45"},
+ {211, "reserved"},
+ {212, "256APSK 11/15-L"},
+ {213, "reserved"},
+ {214, "256APSK 3/4"},
+ {215, "reserved"},
+ {216, "QPSK 11/45"},
+ {217, "reserved"},
+ {218, "QPSK 4/15"},
+ {219, "reserved"},
+ {220, "QPSK 14/45"},
+ {221, "reserved"},
+ {222, "QPSK 7/15"},
+ {223, "reserved"},
+ {224, "QPSK 8/15"},
+ {225, "reserved"},
+ {226, "QPSK 32/45"},
+ {227, "reserved"},
+ {228, "8PSK 7/15"},
+ {229, "reserved"},
+ {230, "8PSK 8/15"},
+ {231, "reserved"},
+ {232, "8PSK 26/45"},
+ {233, "reserved"},
+ {234, "8PSK 32/45"},
+ {235, "reserved"},
+ {236, "16APSK 7/15"},
+ {237, "reserved"},
+ {238, "16APSK 8/15"},
+ {239, "reserved"},
+ {240, "16APSK 26/45"},
+ {241, "reserved"},
+ {242, "16APSK 3/5"},
+ {243, "reserved"},
+ {244, "16APSK 32/45"},
+ {245, "reserved"},
+ {246, "32APSK 2/3"},
+ {247, "reserved"},
+ {248, "32APSK 32/45"},
+ {249, "reserved"},
+ {250, "reserved"},
+ {251, "reserved"},
+ {252, "reserved"},
+ {253, "reserved"},
+ {254, "reserved"},
+ {255, "reserved"},
{ 0, NULL}
};
static value_string_ext modeadapt_modcods_ext = VALUE_STRING_EXT_INIT(modeadapt_modcods);
@@ -511,14 +742,23 @@ static const true_false_string tfs_bb_npd = {
};
#define DVB_S2_BB_RO_MASK 0x03
-static const value_string bb_ro[] = {
+static const value_string bb_high_ro[] = {
{0, "0,35"},
{1, "0,25"},
{2, "0,20"},
- {3, "<0,20 / reserved"},
+ {3, "Low rolloff flag"},
{0, NULL}
};
+static const value_string bb_low_ro[] = {
+ {0, "0,15"},
+ {1, "0,10"},
+ {2, "0,05"},
+ {3, "Low rolloff flag"},
+ {0, NULL}
+};
+
+
#define DVB_S2_BB_OFFS_MATYPE2 1
#define DVB_S2_BB_OFFS_UPL 2
#define DVB_S2_BB_OFFS_DFL 4
@@ -771,7 +1011,7 @@ static int dissect_dvb_s2_bb(tvbuff_t *tvb, int cur_off, proto_tree *tree, packe
&hf_dvb_s2_bb_matype1_acm,
&hf_dvb_s2_bb_matype1_issyi,
&hf_dvb_s2_bb_matype1_npd,
- &hf_dvb_s2_bb_matype1_ro,
+ &hf_dvb_s2_bb_matype1_low_ro,
NULL
};
@@ -791,6 +1031,22 @@ static int dissect_dvb_s2_bb(tvbuff_t *tvb, int cur_off, proto_tree *tree, packe
proto_tree_add_bitmask_with_flags(dvb_s2_bb_tree, tvb, cur_off + DVB_S2_BB_OFFS_MATYPE1, hf_dvb_s2_bb_matype1,
ett_dvb_s2_bb_matype1, bb_header_bitfields, ENC_BIG_ENDIAN, BMT_NO_FLAGS);
+ input8 = tvb_get_guint8(tvb, cur_off + DVB_S2_BB_OFFS_MATYPE1);
+
+ if ((pinfo->fd->num == 1) && (_use_low_rolloff_value != 0)) {
+ _use_low_rolloff_value = 0;
+ }
+ if (((input8 & 0x03) == 3) && !_use_low_rolloff_value) {
+ _use_low_rolloff_value = 1;
+ }
+ if (_use_low_rolloff_value) {
+ proto_tree_add_item(dvb_s2_bb_tree, hf_dvb_s2_bb_matype1_low_ro, tvb,
+ cur_off + DVB_S2_BB_OFFS_MATYPE1, 1, ENC_BIG_ENDIAN);
+ } else {
+ proto_tree_add_item(dvb_s2_bb_tree, hf_dvb_s2_bb_matype1_high_ro, tvb,
+ cur_off + DVB_S2_BB_OFFS_MATYPE1, 1, ENC_BIG_ENDIAN);
+ }
+
input8 = tvb_get_guint8(tvb, cur_off + DVB_S2_BB_OFFS_MATYPE2);
new_off += 1;
if (flag_is_ms) {
@@ -885,9 +1141,11 @@ static int dissect_dvb_s2_modeadapt(tvbuff_t *tvb, packet_info *pinfo, proto_tre
{
int cur_off = 0, modeadapt_len, modeadapt_type, matched_headers = 0;
- proto_item *ti;
+ proto_item *ti, *tf;
proto_tree *dvb_s2_modeadapt_tree;
+ proto_tree *dvb_s2_modeadapt_acm_tree;
+ unsigned int modcod, mc;
static int * const modeadapt_acm_bitfields[] = {
&hf_dvb_s2_modeadapt_acm_fecframe,
&hf_dvb_s2_modeadapt_acm_pilot,
@@ -969,8 +1227,25 @@ static int dissect_dvb_s2_modeadapt(tvbuff_t *tvb, packet_info *pinfo, proto_tre
if (modeadapt_type == DVB_S2_MODEADAPT_TYPE_L2 ||
modeadapt_type == DVB_S2_MODEADAPT_TYPE_L3 ||
modeadapt_type == DVB_S2_MODEADAPT_TYPE_L4) {
- proto_tree_add_bitmask_with_flags(dvb_s2_modeadapt_tree, tvb, DVB_S2_MODEADAPT_OFFS_ACMBYTE, hf_dvb_s2_modeadapt_acm,
- ett_dvb_s2_modeadapt_acm, modeadapt_acm_bitfields, ENC_BIG_ENDIAN, BMT_NO_FLAGS);
+ mc = tvb_get_guint8(tvb, 1);
+ //mc = tvb_get_letohs(tvb, 0);
+ if (mc & 0x80) {
+ modcod = 0x80;
+ modcod |= ((mc & 0x1F) << 2);
+ modcod |= ((mc & 0x40) >> 5);
+ tf = proto_tree_add_item(dvb_s2_modeadapt_tree, hf_dvb_s2_modeadapt_acm, tvb,
+ DVB_S2_MODEADAPT_OFFS_ACMBYTE, 1, ENC_BIG_ENDIAN);
+
+ dvb_s2_modeadapt_acm_tree = proto_item_add_subtree(tf, ett_dvb_s2_modeadapt_acm);
+
+ proto_tree_add_item(dvb_s2_modeadapt_acm_tree, hf_dvb_s2_modeadapt_acm_pilot, tvb,
+ DVB_S2_MODEADAPT_OFFS_ACMBYTE, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_uint_format_value(dvb_s2_modeadapt_acm_tree, hf_dvb_s2_modeadapt_acm_modcod_s2x, tvb,
+ DVB_S2_MODEADAPT_OFFS_ACMBYTE, 1, mc, "DVBS2X %s(%d)", modeadapt_modcods[modcod].strptr, modcod);
+ } else {
+ proto_tree_add_bitmask_with_flags(dvb_s2_modeadapt_tree, tvb, DVB_S2_MODEADAPT_OFFS_ACMBYTE, hf_dvb_s2_modeadapt_acm,
+ ett_dvb_s2_modeadapt_acm, modeadapt_acm_bitfields, ENC_BIG_ENDIAN, BMT_NO_FLAGS);
+ }
cur_off++;
}
@@ -1023,6 +1298,11 @@ void proto_register_dvb_s2_modeadapt(void)
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &modeadapt_modcods_ext, DVB_S2_MODEADAPT_MODCODS_MASK,
"Modcod", HFILL}
},
+ {&hf_dvb_s2_modeadapt_acm_modcod_s2x, {
+ "Modcod indicator", "dvb-s2_modeadapt.acmcmd.modcod",
+ FT_UINT8, BASE_DEC|BASE_EXT_STRING, &modeadapt_modcods_ext, DVB_S2_MODEADAPT_MODCODS_S2X_MASK,
+ "Modcod S2X", HFILL}
+ },
{&hf_dvb_s2_modeadapt_cni, {
"Carrier to Noise [dB]", "dvb-s2_modeadapt.cni",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &modeadapt_esno_ext, 0x0,
@@ -1072,9 +1352,14 @@ void proto_register_dvb_s2_modeadapt(void)
FT_BOOLEAN, 8, TFS(&tfs_bb_npd), DVB_S2_BB_NPD_MASK,
"Null-packet deletion enabled", HFILL}
},
- {&hf_dvb_s2_bb_matype1_ro, {
+ {&hf_dvb_s2_bb_matype1_high_ro, {
+ "RO", "dvb-s2_bb.matype1.ro",
+ FT_UINT8, BASE_DEC, VALS(bb_high_ro), DVB_S2_BB_RO_MASK,
+ "Transmission Roll-off factor", HFILL}
+ },
+ {&hf_dvb_s2_bb_matype1_low_ro, {
"RO", "dvb-s2_bb.matype1.ro",
- FT_UINT8, BASE_DEC, VALS(bb_ro), DVB_S2_BB_RO_MASK,
+ FT_UINT8, BASE_DEC, VALS(bb_low_ro), DVB_S2_BB_RO_MASK,
"Transmission Roll-off factor", HFILL}
},
{&hf_dvb_s2_bb_matype2, {