Пример #1
0
static void
dissect_sdh(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
  col_set_str(pinfo->cinfo, COL_PROTOCOL, "SDH");
  col_clear(pinfo->cinfo,COL_INFO);

  if (tree) {
    proto_tree *sdh_tree;
    proto_item *sdh_item;

    int     level = get_sdh_level(tvb, pinfo);

    guint8  h1;
    guint8  h2;
    guint16 au;
    int auoffset;

    sdh_item = proto_tree_add_protocol_format(tree, proto_sdh, tvb, 0, -1, "SDH");
    sdh_tree = proto_item_add_subtree(sdh_item, ett_sdh);

    h1  = tvb_get_guint8(tvb, 0*level+(3*level*COLUMNS));
    h2  = tvb_get_guint8(tvb, 3*level+(3*level*COLUMNS));
    au  = (h2 | ((0x03 & h1) << 8));

    proto_tree_add_item(sdh_tree, hf_sdh_a1, tvb, 0*level, 3*level, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_a2, tvb, 3*level, 3*level, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_j0, tvb, 6*level, 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_b1, tvb, 0*level+(1*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_e1, tvb, 3*level+(1*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_f1, tvb, 6*level+(1*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_d1, tvb, 0*level+(2*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_d2, tvb, 3*level+(2*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_d3, tvb, 6*level+(2*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_h1, tvb, 0*level+(3*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_h2, tvb, 3*level+(3*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_uint(sdh_tree, hf_sdh_au, tvb, 0*level+(3*level*COLUMNS), 3*level+1, au);
    proto_tree_add_item(sdh_tree, hf_sdh_b2, tvb, 0*level+(4*level*COLUMNS), 3*level, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_k1, tvb, 3*level+(4*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_k2, tvb, 6*level+(4*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_d4, tvb, 0*level+(5*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_d5, tvb, 3*level+(5*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_d6, tvb, 6*level+(5*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_d7, tvb, 0*level+(6*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_d8, tvb, 3*level+(6*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_d9, tvb, 6*level+(6*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_d10, tvb, 0*level+(7*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_d11, tvb, 3*level+(7*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_d12, tvb, 6*level+(7*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_s1, tvb, 0*level+(8*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_m1, tvb, 3*level+2+(8*level*COLUMNS), 1, ENC_BIG_ENDIAN);
    proto_tree_add_item(sdh_tree, hf_sdh_e2, tvb, 6*level+(8*level*COLUMNS), 1, ENC_BIG_ENDIAN);

    /*XXX: POH that au points to may not be in the same frame. Also wrong on pointer justification*/
    /*calculate start of SPE by wrapping AU pointer*/
    auoffset = (((9 + 3*COLUMNS) /*start after H3*/ + au*3 + 9*(au/87) /*add extra SOH rows to offset*/) * level) % (COLUMNS*9*level);
    proto_tree_add_item(sdh_tree, hf_sdh_j1, tvb, auoffset, 1, ENC_BIG_ENDIAN);
  }
}
Пример #2
0
static void
dissect_sdh(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
  col_set_str(pinfo->cinfo, COL_PROTOCOL, "SDH");
  col_clear(pinfo->cinfo,COL_INFO);

  if (tree) {
    proto_tree *sdh_tree;
    proto_item *sdh_item;

    int     level = get_sdh_level(tvb);

    guint32 a1;
    guint32 a2;
    guint8  j0;
    guint8  b1;
    guint8  e1;
    guint8  f1;
    guint8  d1;
    guint8  d2;
    guint8  d3;
    guint8  h1;
    guint8  h2;
    guint16 au;
    guint32 b2;
    guint8  k1;
    guint8  k2;
    guint8  d4;
    guint8  d5;
    guint8  d6;
    guint8  d7;
    guint8  d8;
    guint8  d9;
    guint8  d10;
    guint8  d11;
    guint8  d12;
    guint8  s1;
    guint8  m1;
    guint8  e2;
    guint8  j1;

    sdh_item = proto_tree_add_protocol_format(tree, proto_sdh, tvb, 0, -1, "SDH");
    sdh_tree = proto_item_add_subtree(sdh_item, ett_sdh);

    a1  = tvb_get_ntoh24(tvb, 0+(0*level*COLUMNS));
    a2  = tvb_get_ntoh24(tvb, 3+(0*level*COLUMNS));
    j0  = tvb_get_guint8(tvb, 6+(0*level*COLUMNS));
    b1  = tvb_get_guint8(tvb, 0+(1*level*COLUMNS));
    e1  = tvb_get_guint8(tvb, 3+(1*level*COLUMNS));
    f1  = tvb_get_guint8(tvb, 6+(1*level*COLUMNS));
    d1  = tvb_get_guint8(tvb, 0+(2*level*COLUMNS));
    d2  = tvb_get_guint8(tvb, 3+(2*level*COLUMNS));
    d3  = tvb_get_guint8(tvb, 6+(2*level*COLUMNS));
    h1  = tvb_get_guint8(tvb, 0+(3*level*COLUMNS));
    h2  = tvb_get_guint8(tvb, 3+(3*level*COLUMNS));
    au  = (h2 | ((0x03 & h1) << 8));
    b2  = 0;
    b2  = tvb_get_guint8(tvb, 0+(4*level*COLUMNS)) << 16;
    b2  = tvb_get_guint8(tvb, (1*level)+(4*level*COLUMNS)) << 8;
    b2  = tvb_get_guint8(tvb, (2*level)+(4*level*COLUMNS));
    k1  = tvb_get_guint8(tvb, 3+(4*level*COLUMNS));
    k2  = tvb_get_guint8(tvb, 6+(4*level*COLUMNS));
    d4  = tvb_get_guint8(tvb, 0+(5*level*COLUMNS));
    d5  = tvb_get_guint8(tvb, 3+(5*level*COLUMNS));
    d6  = tvb_get_guint8(tvb, 6+(5*level*COLUMNS));
    d7  = tvb_get_guint8(tvb, 0+(6*level*COLUMNS));
    d8  = tvb_get_guint8(tvb, 3+(6*level*COLUMNS));
    d9  = tvb_get_guint8(tvb, 6+(6*level*COLUMNS));
    d10 = tvb_get_guint8(tvb, 0+(7*level*COLUMNS));
    d11 = tvb_get_guint8(tvb, 3+(7*level*COLUMNS));
    d12 = tvb_get_guint8(tvb, 6+(7*level*COLUMNS));
    s1  = tvb_get_guint8(tvb, 0+(8*level*COLUMNS));
    m1  = tvb_get_guint8(tvb, 5+(8*level*COLUMNS));
    e2  = tvb_get_guint8(tvb, 6+(8*level*COLUMNS));

    j1 = tvb_get_guint8(tvb, au);

    proto_tree_add_uint_format(sdh_tree, hf_sdh_a1,  tvb, 0, 3, a1, "A1 %x", a1);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_a2,  tvb, 3, 3, a2, "A2 %x", a2);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_j0,  tvb, 6, 1, j0, "J0 %d", j0);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_b1,  tvb, 0+(1*level*COLUMNS), 1,  b1, "B1 %d",  b1);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_e1,  tvb, 3+(1*level*COLUMNS), 1,  e1, "E1 %d",  e1);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_f1,  tvb, 6+(1*level*COLUMNS), 1,  f1, "F1 %d",  f1);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_d1,  tvb, 0+(2*level*COLUMNS), 1,  d1, "D1 %d",  d1);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_d2,  tvb, 3+(2*level*COLUMNS), 1,  d2, "D2 %d",  d2);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_d3,  tvb, 6+(2*level*COLUMNS), 1,  d3, "D3 %d",  d3);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_au,  tvb, 0+(3*level*COLUMNS), 9,  au, "AU pointer %d h1 %d, h2 %d", au, h1, h2);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_b2,  tvb, 0+(4*level*COLUMNS), 1,  b2, "B2 %d",  b2);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_k1,  tvb, 3+(4*level*COLUMNS), 1,  k1, "K1 %d",  k1);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_k2,  tvb, 6+(4*level*COLUMNS), 1,  k2, "K2 %d",  k2);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_d4,  tvb, 0+(5*level*COLUMNS), 1,  d4, "D4 %d",  d4);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_d5,  tvb, 3+(5*level*COLUMNS), 1,  d5, "D5 %d",  d5);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_d6,  tvb, 6+(5*level*COLUMNS), 1,  d6, "D6 %d",  d6);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_d7,  tvb, 0+(6*level*COLUMNS), 1,  d7, "D7 %d",  d7);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_d8,  tvb, 3+(6*level*COLUMNS), 1,  d8, "D8 %d",  d8);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_d9,  tvb, 6+(6*level*COLUMNS), 1,  d9, "D9 %d",  d9);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_d10, tvb, 0+(7*level*COLUMNS), 1, d10, "D10 %d", d10);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_d11, tvb, 3+(7*level*COLUMNS), 1, d11, "D11 %d", d11);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_d12, tvb, 6+(7*level*COLUMNS), 1, d12, "D12 %d", d12);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_s1,  tvb, 0+(8*level*COLUMNS), 1,  s1, "S1 %d",  s1);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_m1,  tvb, 5+(8*level*COLUMNS), 1,  m1, "M1 %d",  m1);
    proto_tree_add_uint_format(sdh_tree, hf_sdh_e2,  tvb, 6+(7*level*COLUMNS), 1,  e2, "E2 %d",  e2);

    proto_tree_add_uint_format(sdh_tree, hf_sdh_j1,  tvb, au, 1, j1, "J1 %d", j1);
  }

}