diff options
author | Guy Harris <guy@alum.mit.edu> | 2019-01-04 23:39:38 -0800 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2019-01-05 08:19:03 +0000 |
commit | 814c57a8b53a0841f513fd83f367844243a6833e (patch) | |
tree | e4a9d9fadab3ede851b7273095c24729de835143 | |
parent | 40b2ba8e7b6c1b03ca2a85e4f7c5e31e36140b5d (diff) |
Pass a structure including an atm_phdr to dissect_atm_pw_oam_cell().
This will allow the VPI and VCI to be handed to
dissect_atm_cell_payload() in
https://code.wireshark.org/review/c/31381/.
That structure also needs to include the enable_fill_columns_by_atm_dissector
flag; we remove that from the pwatm_private_data_t, which is now private
to the ATM pseudo-wire dissector, and put it in the new structure.
Change-Id: I88f4a9f4b3c4c1c94914311bb883ea38e10ca4b4
Reviewed-on: https://code.wireshark.org/review/31384
Petri-Dish: Guy Harris <guy@alum.mit.edu>
Tested-by: Petri Dish Buildbot
Reviewed-by: Guy Harris <guy@alum.mit.edu>
-rw-r--r-- | epan/dissectors/packet-atm.c | 4 | ||||
-rw-r--r-- | epan/dissectors/packet-pw-atm.c | 80 | ||||
-rw-r--r-- | epan/dissectors/packet-pw-atm.h | 71 |
3 files changed, 79 insertions, 76 deletions
diff --git a/epan/dissectors/packet-atm.c b/epan/dissectors/packet-atm.c index d48e603f58..7b5a2ef6b4 100644 --- a/epan/dissectors/packet-atm.c +++ b/epan/dissectors/packet-atm.c @@ -1684,12 +1684,12 @@ dissect_atm_oam_cell(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* static int dissect_atm_pw_oam_cell(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data) { - const pwatm_private_data_t *pwpd = (const pwatm_private_data_t *)data; + const struct pw_atm_phdr *pw_atm_info = (const struct pw_atm_phdr *)data; col_set_str(pinfo->cinfo, COL_PROTOCOL, "ATM"); dissect_atm_cell_payload(tvb, 0, pinfo, tree, AAL_OAMCELL, - pwpd->enable_fill_columns_by_atm_dissector); + pw_atm_info->enable_fill_columns_by_atm_dissector); return tvb_reported_length(tvb); } diff --git a/epan/dissectors/packet-pw-atm.c b/epan/dissectors/packet-pw-atm.c index 1daf133ca7..eb6af4d1a4 100644 --- a/epan/dissectors/packet-pw-atm.c +++ b/epan/dissectors/packet-pw-atm.c @@ -114,6 +114,74 @@ static dissector_handle_t dh_atm_untruncated; static dissector_handle_t dh_atm_oam_cell; static dissector_handle_t dh_padding; +typedef enum { + PWATM_MODE_UNKNOWN = 0 + ,PWATM_MODE_N1_NOCW + ,PWATM_MODE_N1_CW + ,PWATM_MODE_11_VCC + ,PWATM_MODE_11_VPC + ,PWATM_MODE_AAL5_SDU + ,PWATM_MODE_AAL5_PDU +} pwatm_mode_t; + +typedef enum { + PWATM_SUBMODE_DEFAULT = 0 + ,PWATM_SUBMODE_ADMIN_CELL /*used in aal5_sdu dissector only*/ +} pwatm_submode_t; + +typedef struct { + int pw_cell_number; + int props; + gint packet_size; + pwatm_mode_t mode; + pwatm_submode_t submode; + struct { + /* + * ATM-specific attributes which remain the same + * across all the cells in the pw packet. Values are filled + * by sub-dissectors and read by upper-level dissector. + * Meanings of values: + * (-1) - value is unknown + * (-2) - value is different among cells + * positive - value is the same in all cells + * Machinery is implemented in the UPDATE_CUMULATIVE_VALUE macro. + */ + gint32 vpi; + gint32 vci; + gint32 clp; + gint32 pti; + } cumulative; + gint32 vpi; /*-1 if unknown*/ + gint32 vci; /*-1 if unknown*/ + gint32 pti; /*-1 if unknown*/ + struct { + /* + * Some fields from 3rd byte of CW. Filled by cell_header dissector. + * In in AAL5 PDU mode, this allows control_word dissector to print + * these values in the CW heading line in the tree. + * Meanings of values: + * (-1) - value is unknown + */ + gint32 m; + gint32 v; + gint32 rsv; + gint32 u; + gint32 e; + gint32 clp; + } cwb3; + gboolean aal5_sdu_frame_relay_cr_bit; /*see rfc4717 10.1*/ + gboolean cell_mode_oam; /*atm admin cell*/ +} pwatm_private_data_t; + +#define PWATM_PRIVATE_DATA_T_INITIALIZER { \ + 0, PWC_PACKET_PROPERTIES_T_INITIALIZER, 0 \ + ,PWATM_MODE_UNKNOWN, PWATM_SUBMODE_DEFAULT \ + ,{-1, -1, -1, -1 } \ + ,-1, -1, -1 \ + ,{-1, -1, -1, -1, -1, -1 } \ + ,FALSE, FALSE, \ + } + #define PTI_IS_ADMIN(pti) ((pti) == 4 || (pti) == 5 || (pti) == 6) /*see atm_pt_vals[]*/ #define MODE_11(mode) (PWATM_MODE_11_VCC == (mode) || PWATM_MODE_11_VPC == (mode)) @@ -407,7 +475,7 @@ dissect_payload_and_padding( if (pd->cell_mode_oam) { - struct atm_phdr ph; + struct pw_atm_phdr ph; tvbuff_t* tvb_3; int bytes_to_dissect; /* prepare buffer for old-style dissector */ @@ -419,13 +487,13 @@ dissect_payload_and_padding( tvb_3 = tvb_new_subset_length_caplen(tvb_2, 0, bytes_to_dissect, -1); /*aal5_sdu: disable filling columns after 1st (valid) oam cell*/ if (pd->mode == PWATM_MODE_AAL5_SDU && (pd->pw_cell_number > 0)) - { - pd->enable_fill_columns_by_atm_dissector = FALSE; - } + ph.enable_fill_columns_by_atm_dissector = FALSE; + else + ph.enable_fill_columns_by_atm_dissector = TRUE; /* prepare atm pseudo header for atm OAM cell decoding */ - prepare_pseudo_header_atm(&ph, pd, AAL_OAMCELL); + prepare_pseudo_header_atm(&ph.info, pd, AAL_OAMCELL); - call_dissector_with_data(dh_atm_oam_cell, tvb_3, pinfo, tree, &pd); + call_dissector_with_data(dh_atm_oam_cell, tvb_3, pinfo, tree, &ph); dissected += bytes_to_dissect; } else diff --git a/epan/dissectors/packet-pw-atm.h b/epan/dissectors/packet-pw-atm.h index 6006c9e29e..d10cb05f14 100644 --- a/epan/dissectors/packet-pw-atm.h +++ b/epan/dissectors/packet-pw-atm.h @@ -14,74 +14,9 @@ #include "packet-pw-common.h" -typedef enum { - PWATM_MODE_UNKNOWN = 0 - ,PWATM_MODE_N1_NOCW - ,PWATM_MODE_N1_CW - ,PWATM_MODE_11_VCC - ,PWATM_MODE_11_VPC - ,PWATM_MODE_AAL5_SDU - ,PWATM_MODE_AAL5_PDU -} pwatm_mode_t; - -typedef enum { - PWATM_SUBMODE_DEFAULT = 0 - ,PWATM_SUBMODE_ADMIN_CELL /*used in aal5_sdu dissector only*/ -} pwatm_submode_t; - -typedef struct { - int pw_cell_number; - int props; - gint packet_size; - pwatm_mode_t mode; - pwatm_submode_t submode; - struct { - /* - * ATM-specific attributes which remain the same - * across all the cells in the pw packet. Values are filled - * by sub-dissectors and read by upper-level dissector. - * Meanings of values: - * (-1) - value is unknown - * (-2) - value is different among cells - * positive - value is the same in all cells - * Machinery is implemented in the UPDATE_CUMULATIVE_VALUE macro. - */ - gint32 vpi; - gint32 vci; - gint32 clp; - gint32 pti; - } cumulative; - gint32 vpi; /*-1 if unknown*/ - gint32 vci; /*-1 if unknown*/ - gint32 pti; /*-1 if unknown*/ - struct { - /* - * Some fields from 3rd byte of CW. Filled by cell_header dissector. - * In in AAL5 PDU mode, this allows control_word dissector to print - * these values in the CW heading line in the tree. - * Meanings of values: - * (-1) - value is unknown - */ - gint32 m; - gint32 v; - gint32 rsv; - gint32 u; - gint32 e; - gint32 clp; - } cwb3; - gboolean aal5_sdu_frame_relay_cr_bit; /*see rfc4717 10.1*/ - gboolean cell_mode_oam; /*atm admin cell*/ +struct pw_atm_phdr { + struct atm_phdr info; gboolean enable_fill_columns_by_atm_dissector; -} pwatm_private_data_t; - - -#define PWATM_PRIVATE_DATA_T_INITIALIZER { \ - 0, PWC_PACKET_PROPERTIES_T_INITIALIZER, 0 \ - ,PWATM_MODE_UNKNOWN, PWATM_SUBMODE_DEFAULT \ - ,{-1, -1, -1, -1 } \ - ,-1, -1, -1 \ - ,{-1, -1, -1, -1, -1, -1 } \ - ,FALSE, FALSE, TRUE \ - } +}; #endif /*PACKET_PW_ATM_H*/ |