diff --git a/AUTHORS.src b/AUTHORS.src index b2cb14330e..35e4a4dbc2 100644 --- a/AUTHORS.src +++ b/AUTHORS.src @@ -3571,7 +3571,7 @@ Ishraq Ibne Ashraf { tfp (Tinkerforge) dissector } -RobiOneKenobi { +Robert Grange { IBM WebSphere MQ protocol dissector enhancements } diff --git a/epan/dissectors/packet-mq-base.c b/epan/dissectors/packet-mq-base.c index d381b3bea5..caceb77d62 100644 --- a/epan/dissectors/packet-mq-base.c +++ b/epan/dissectors/packet-mq-base.c @@ -272,6 +272,7 @@ DEF_VALSB(ChannelType) /* 8*/ DEF_VALS1(MQCHT_CLUSRCVR), /* 9*/ DEF_VALS1(MQCHT_CLUSSDR), /* 10*/ DEF_VALS1(MQCHT_MQTT), +/* 11*/ DEF_VALS1(MQCHT_AMQP), DEF_VALSE; DEF_VALSB(ServiceIntervalEvent) @@ -299,7 +300,7 @@ DEF_VALSB(QueueType) /* 1001*/ DEF_VALS1(MQQT_ALL), DEF_VALSE; -DEF_VALSB(EventRule) +DEF_VALSB(MQEVR) /* 0*/ DEF_VALS1(MQEVR_DISABLED), /* 1*/ DEF_VALS1(MQEVR_ENABLED), /* 2*/ DEF_VALS1(MQEVR_EXCEPTION), @@ -458,6 +459,11 @@ DEF_VALSB(Persistence) /* 2*/ DEF_VALS1(MQPER_PERSISTENCE_AS_Q_DEF), DEF_VALSE; +DEF_VALSB(MQUCI) +/* 0*/ DEF_VALS1(MQUCI_NO), +/* 1*/ DEF_VALS1(MQUCI_YES), +DEF_VALSE; + #if 0 DEF_VALSB(MQLR) /* -2*/ DEF_VALS1(MQLR_MAX), @@ -559,8 +565,7 @@ DEF_VALSB(AsynchronousStateValues) /* 7*/ DEF_VALS1(MQAS_INACTIVE), DEF_VALSE; -#if 0 -DEF_VALSB(AuthorityValues) +DEF_VALSB(MQAUTH) /* -3*/ DEF_VALS1(MQAUTH_ALL_MQI), /* -2*/ DEF_VALS1(MQAUTH_ALL_ADMIN), /* -1*/ DEF_VALS1(MQAUTH_ALL), @@ -588,7 +593,6 @@ DEF_VALSB(AuthorityValues) /* 21*/ DEF_VALS1(MQAUTH_RESUME), /* 22*/ DEF_VALS1(MQAUTH_SYSTEM), DEF_VALSE; -#endif #if 0 DEF_VALSB(BridgeTypes) @@ -1031,43 +1035,40 @@ DEF_VALSB(MQADPCTX) /* 1*/ DEF_VALS1(MQADPCTX_YES), DEF_VALSE; -#if 0 DEF_VALSB(MQSECCOMM) /* 0*/ DEF_VALS1(MQSECCOMM_NO), /* 1*/ DEF_VALS1(MQSECCOMM_YES), /* 2*/ DEF_VALS1(MQSECCOMM_ANON), DEF_VALSE; -#endif -#if 0 -DEF_VALSB(LDAPAuthorisationMethod) +DEF_VALSB(MQLDAP_AUTHORMD) /* 0*/ DEF_VALS1(MQLDAP_AUTHORMD_OS), /* 1*/ DEF_VALS1(MQLDAP_AUTHORMD_SEARCHGRP), /* 2*/ DEF_VALS1(MQLDAP_AUTHORMD_SEARCHUSR), DEF_VALSE; -#endif -#if 0 -DEF_VALSB(LDAPNestedGroupPolicy) +DEF_VALSB(MQLDAP_NESTGRP) /* 0*/ DEF_VALS1(MQLDAP_NESTGRP_NO), /* 1*/ DEF_VALS1(MQLDAP_NESTGRP_YES), DEF_VALSE; -#endif -#if 0 -DEF_VALSB(AuthenticationMethod) +DEF_VALSB(MQAUTHENTICATE) /* 0*/ DEF_VALS1(MQAUTHENTICATE_OS), /* 1*/ DEF_VALS1(MQAUTHENTICATE_PAM), DEF_VALSE; -#endif -#if 0 -DEF_VALSB(QMgrLDAPConnectionStatus) +DEF_VALSB(MQLDAPC) /* 0*/ DEF_VALS1(MQLDAPC_INACTIVE), /* 1*/ DEF_VALS1(MQLDAPC_CONNECTED), /* 2*/ DEF_VALS1(MQLDAPC_ERROR), DEF_VALSE; -#endif + +DEF_VALSB(MQZAET) +/* 0*/ DEF_VALS1(MQZAET_NONE), +/* 1*/ DEF_VALS1(MQZAET_PRINCIPAL), +/* 2*/ DEF_VALS1(MQZAET_GROUP), +/* 3*/ DEF_VALS1(MQZAET_UNKNOWN), +DEF_VALSE; DEF_VALSB(InhibitPublications) /* 0*/ DEF_VALS1(MQTA_PUB_AS_PARENT), @@ -1154,29 +1155,26 @@ DEF_VALSB(MQSYSP) /* 36*/ DEF_VALS1(MQSYSP_STATUS_COPYING_LOG), DEF_VALSE; -DEF_VALSB(DurableSubscriptions) +DEF_VALSB(MQSUB_DURABLE) +/*-1*/ DEF_VALS1(MQSUB_DURABLE_ALL), /* 0*/ DEF_VALS1(MQSUB_DURABLE_AS_PARENT), -/* 1*/ DEF_VALS1(MQSUB_DURABLE_ALLOWED), -/* 2*/ DEF_VALS1(MQSUB_DURABLE_INHIBITED), +/* 1*/ DEF_VALS2(MQSUB_DURABLE_ALLOWED, "ALLOWED/YES"), +/* 2*/ DEF_VALS2(MQSUB_DURABLE_INHIBITED, "INHIBITED/NO"), DEF_VALSE; -#if 0 -DEF_VALSB(Durable) -/* -1*/ DEF_VALS1(MQSUB_DURABLE_ALL), -/* 1*/ DEF_VALS1(MQSUB_DURABLE_YES), -/* 2*/ DEF_VALS1(MQSUB_DURABLE_NO), +DEF_VALSB(MQQSO) +/* 0*/ DEF_VALS1(MQQSO_NO), +/* 1*/ DEF_VALS2(MQQSO_YES, "SHARED/YES"), +/* 2*/ DEF_VALS1(MQQSO_EXCLUSIVE), DEF_VALSE; -#endif -#if 0 -DEF_VALSB(SubscriptionTypes) +DEF_VALSB(MQSUBTYPE) /* -2*/ DEF_VALS1(MQSUBTYPE_USER), /* -1*/ DEF_VALS1(MQSUBTYPE_ALL), /* 1*/ DEF_VALS1(MQSUBTYPE_API), /* 2*/ DEF_VALS1(MQSUBTYPE_ADMIN), /* 3*/ DEF_VALS1(MQSUBTYPE_PROXY), DEF_VALSE; -#endif #if 0 DEF_VALSB(SubscriptionDestinationClass) @@ -1185,12 +1183,10 @@ DEF_VALSB(SubscriptionDestinationClass) DEF_VALSE; #endif -#if 0 -DEF_VALSB(SubscriptionRequestOnly) +DEF_VALSB(MQRU_PUBLISH) /* 1*/ DEF_VALS1(MQRU_PUBLISH_ON_REQUEST), /* 2*/ DEF_VALS1(MQRU_PUBLISH_ALL), DEF_VALSE; -#endif #if 0 DEF_VALSB(TimeUnits) @@ -1585,6 +1581,27 @@ DEF_VALSB(MQRDNS) /* 1*/ DEF_VALS1(MQRDNS_DISABLED), DEF_VALSE; +DEF_VALSB(MQCIT) +/* 1*/ DEF_VALS1(MQCIT_MULTICAST), +DEF_VALSE; + +DEF_VALSB(MQMCB) +/* 0*/ DEF_VALS1(MQMCB_DISABLED), +/* 1*/ DEF_VALS1(MQMCB_ENABLED), +DEF_VALSE; + +DEF_VALSB(MQNSH) +/*-1*/ DEF_VALS1(MQNSH_ALL), +/* 0*/ DEF_VALS1(MQNSH_NONE), +DEF_VALSE; + +DEF_VALSB(MQPSST) +/* 0*/ DEF_VALS1(MQPSST_ALL), +/* 1*/ DEF_VALS1(MQPSST_LOCAL), +/* 2*/ DEF_VALS1(MQPSST_PARENT), +/* 3*/ DEF_VALS1(MQPSST_CHILD), +DEF_VALSE; + DEF_VALSB(SMDSUsage) /* 0*/ DEF_VALS1(MQUSAGE_SMDS_AVAILABLE), /* 1*/ DEF_VALS1(MQUSAGE_SMDS_NO_DATA), @@ -4465,20 +4482,20 @@ DEF_VALSB(MQCFINT_Parse) /* 30*/ DEF_VALS2(MQIA_SYNCPOINT, GET_VALSP(SyncpointAvailability)), /* 32*/ DEF_VALS2(MQIA_PLATFORM, GET_VALSP(Platform)), /* 34*/ DEF_VALS2(MQIA_DIST_LISTS, GET_VALSP(DistributionLists)), -/* 42*/ DEF_VALS2(MQIA_Q_DEPTH_MAX_EVENT, GET_VALSP(EventRule)), -/* 43*/ DEF_VALS2(MQIA_Q_DEPTH_HIGH_EVENT, GET_VALSP(EventRule)), -/* 44*/ DEF_VALS2(MQIA_Q_DEPTH_LOW_EVENT, GET_VALSP(EventRule)), +/* 42*/ DEF_VALS2(MQIA_Q_DEPTH_MAX_EVENT, GET_VALSP(MQEVR)), +/* 43*/ DEF_VALS2(MQIA_Q_DEPTH_HIGH_EVENT, GET_VALSP(MQEVR)), +/* 44*/ DEF_VALS2(MQIA_Q_DEPTH_LOW_EVENT, GET_VALSP(MQEVR)), /* 45*/ DEF_VALS2(MQIA_SCOPE, GET_VALSP(QueueDefinitionScope)), /* 46*/ DEF_VALS2(MQIA_Q_SERVICE_INTERVAL_EVENT, GET_VALSP(ServiceIntervalEvent)), -/* 47*/ DEF_VALS2(MQIA_AUTHORITY_EVENT, GET_VALSP(EventRule)), -/* 48*/ DEF_VALS2(MQIA_INHIBIT_EVENT, GET_VALSP(EventRule)), -/* 49*/ DEF_VALS2(MQIA_LOCAL_EVENT, GET_VALSP(EventRule)), -/* 50*/ DEF_VALS2(MQIA_REMOTE_EVENT, GET_VALSP(EventRule)), -/* 51*/ DEF_VALS2(MQIA_CONFIGURATION_EVENT, GET_VALSP(EventRule)), -/* 52*/ DEF_VALS2(MQIA_START_STOP_EVENT, GET_VALSP(EventRule)), -/* 53*/ DEF_VALS2(MQIA_PERFORMANCE_EVENT, GET_VALSP(EventRule)), +/* 47*/ DEF_VALS2(MQIA_AUTHORITY_EVENT, GET_VALSP(MQEVR)), +/* 48*/ DEF_VALS2(MQIA_INHIBIT_EVENT, GET_VALSP(MQEVR)), +/* 49*/ DEF_VALS2(MQIA_LOCAL_EVENT, GET_VALSP(MQEVR)), +/* 50*/ DEF_VALS2(MQIA_REMOTE_EVENT, GET_VALSP(MQEVR)), +/* 51*/ DEF_VALS2(MQIA_CONFIGURATION_EVENT, GET_VALSP(MQEVR)), +/* 52*/ DEF_VALS2(MQIA_START_STOP_EVENT, GET_VALSP(MQEVR)), +/* 53*/ DEF_VALS2(MQIA_PERFORMANCE_EVENT, GET_VALSP(MQEVR)), /* 55*/ DEF_VALS2(MQIA_CHANNEL_AUTO_DEF, GET_VALSP(ChanAutoDef)), -/* 56*/ DEF_VALS2(MQIA_CHANNEL_AUTO_DEF_EVENT, GET_VALSP(EventRule)), +/* 56*/ DEF_VALS2(MQIA_CHANNEL_AUTO_DEF_EVENT, GET_VALSP(MQEVR)), /* 57*/ DEF_VALS2(MQIA_INDEX_TYPE, GET_VALSP(IndexTypes)), /* 61*/ DEF_VALS2(MQIA_DEF_BIND, GET_VALSP(Bindings)), /* 63*/ DEF_VALS2(MQIA_QSG_DISP, GET_VALSP(QShrGrpDisp)), @@ -4486,16 +4503,16 @@ DEF_VALSB(MQCFINT_Parse) /* 65*/ DEF_VALS2(MQIA_IGQ_PUT_AUTHORITY, GET_VALSP(IGQPutAuthority)), /* 66*/ DEF_VALS2(MQIA_AUTH_INFO_TYPE, GET_VALSP(AuthInfoType)), /* 71*/ DEF_VALS2(MQIA_CF_RECOVER, GET_VALSP(CFRecoverability)), -/* 73*/ DEF_VALS2(MQIA_CHANNEL_EVENT, GET_VALSP(EventRule)), -/* 74*/ DEF_VALS2(MQIA_BRIDGE_EVENT, GET_VALSP(EventRule)), -/* 75*/ DEF_VALS2(MQIA_SSL_EVENT, GET_VALSP(EventRule)), +/* 73*/ DEF_VALS2(MQIA_CHANNEL_EVENT, GET_VALSP(MQEVR)), +/* 74*/ DEF_VALS2(MQIA_BRIDGE_EVENT, GET_VALSP(MQEVR)), +/* 75*/ DEF_VALS2(MQIA_SSL_EVENT, GET_VALSP(MQEVR)), /* 77*/ DEF_VALS2(MQIA_SHARED_Q_Q_MGR_NAME, GET_VALSP(SharedQueueQueueManagerName)), /* 78*/ DEF_VALS2(MQIA_NPM_CLASS, GET_VALSP(NonpersistentMsgCls)), /* 92*/ DEF_VALS2(MQIA_SSL_FIPS_REQUIRED, GET_VALSP(FipsRequired)), /* 93*/ DEF_VALS2(MQIA_IP_ADDRESS_VERSION, GET_VALSP(IPAddressVersion)), -/* 94*/ DEF_VALS2(MQIA_LOGGER_EVENT, GET_VALSP(EventRule)), +/* 94*/ DEF_VALS2(MQIA_LOGGER_EVENT, GET_VALSP(MQEVR)), /* 98*/ DEF_VALS2(MQIA_CLWL_USEQ, GET_VALSP(CLWLUseQ)), -/* 99*/ DEF_VALS2(MQIA_COMMAND_EVENT, GET_VALSP(EventRule)), +/* 99*/ DEF_VALS2(MQIA_COMMAND_EVENT, GET_VALSP(MQEVR)), /* 102*/ DEF_VALS2(MQIA_ADOPTNEWMCA_CHECK, GET_VALSP(AdoptNewMCACheck)), /* 103*/ DEF_VALS2(MQIA_ADOPTNEWMCA_TYPE, GET_VALSP(AdoptNewMCAType)), /* 106*/ DEF_VALS2(MQIA_DNS_WLM, GET_VALSP(DNSWLM)), @@ -4520,7 +4537,7 @@ DEF_VALSB(MQCFINT_Parse) /* 137*/ DEF_VALS2(MQIA_TRACE_ROUTE_RECORDING, GET_VALSP(TraceRouteRecording)), /* 138*/ DEF_VALS2(MQIA_ACTIVITY_RECORDING, GET_VALSP(ActivityRecording)), /* 141*/ DEF_VALS2(MQIA_SECURITY_CASE, GET_VALSP(SecurityCase)), -/* 175*/ DEF_VALS2(MQIA_DURABLE_SUB, GET_VALSP(DurableSubscriptions)), +/* 175*/ DEF_VALS2(MQIA_DURABLE_SUB, GET_VALSP(MQSUB_DURABLE)), /* 176*/ DEF_VALS2(MQIA_MULTICAST, GET_VALSP(MQMC)), /* 181*/ DEF_VALS2(MQIA_INHIBIT_PUB, GET_VALSP(InhibitPublications)), /* 182*/ DEF_VALS2(MQIA_INHIBIT_SUB, GET_VALSP(InhibitSubscriptions)), @@ -4543,8 +4560,11 @@ DEF_VALSB(MQCFINT_Parse) /* 219*/ DEF_VALS2(MQIA_PUB_SCOPE, GET_VALSP(PubSubScope)), /* 221*/ DEF_VALS2(MQIA_GROUP_UR, GET_VALSP(MQGUR)), /* 222*/ DEF_VALS2(MQIA_UR_DISP, GET_VALSP(QShrGrpDisp)), +/* 223*/ DEF_VALS2(MQIA_COMM_INFO_TYPE, GET_VALSP(MQCIT)), /* 224*/ DEF_VALS2(MQIA_CF_OFFLOAD, GET_VALSP(OffloadUse)), /* 229*/ DEF_VALS2(MQIA_CF_OFFLDUSE, GET_VALSP(OffloadUse)), +/* 232*/ DEF_VALS2(MQIA_COMM_EVENT, GET_VALSP(MQEVR)), +/* 233*/ DEF_VALS2(MQIA_MCAST_BRIDGE, GET_VALSP(MQMCB)), /* 234*/ DEF_VALS2(MQIA_USE_DEAD_LETTER_Q, GET_VALSP(MQUSEDLQ)), /* 240*/ DEF_VALS2(MQIA_ACTIVITY_TRACE, GET_VALSP(Monitoring)), /* 243*/ DEF_VALS2(MQIA_XR_CAPABILITY, GET_VALSP(Capability)), @@ -4563,6 +4583,10 @@ DEF_VALSB(MQCFINT_Parse) /* 257*/ DEF_VALS2(MQIA_CHECK_LOCAL_BINDING, GET_VALSP(MQCHK)), /* 258*/ DEF_VALS2(MQIA_CHECK_CLIENT_BINDING, GET_VALSP(MQCHK)), /* 260*/ DEF_VALS2(MQIA_ADOPT_CONTEXT, GET_VALSP(MQADPCTX)), +/* 261*/ DEF_VALS2(MQIA_LDAP_SECURE_COMM, GET_VALSP(MQSECCOMM)), +/* 263*/ DEF_VALS2(MQIA_LDAP_AUTHORMD, GET_VALSP(MQLDAP_AUTHORMD)), +/* 264*/ DEF_VALS2(MQIA_LDAP_NESTGRP, GET_VALSP(MQLDAP_NESTGRP)), +/* 266*/ DEF_VALS2(MQIA_AUTHENTICATION_METHOD, GET_VALSP(MQAUTHENTICATE)), /* 267*/ DEF_VALS2(MQIA_KEY_REUSE_COUNT, GET_VALSP(Keyreusecount)), /* 1001*/ DEF_VALS2(MQIACF_Q_MGR_ATTRS, GET_VALSP(PrmId)), /* 1002*/ DEF_VALS2(MQIACF_Q_ATTRS, GET_VALSP(PrmId)), @@ -4586,6 +4610,8 @@ DEF_VALSB(MQCFINT_Parse) /* 1106*/ DEF_VALS2(MQIACF_SECURITY_TYPE, GET_VALSP(MQSECTYPE)), /* 1107*/ DEF_VALS2(MQIACF_CONNECTION_ATTRS, GET_VALSP(PrmId)), /* 1110*/ DEF_VALS2(MQIACF_CONN_INFO_TYPE, GET_VALSP(ConnInfoType)), +/* 1115*/ DEF_VALS2(MQIACF_AUTHORIZATION_LIST, GET_VALSP(MQAUTH)), +/* 1118*/ DEF_VALS2(MQIACF_ENTITY_TYPE, GET_VALSP(MQZAET)), /* 1120*/ DEF_VALS2(MQIACF_COMMAND_INFO, GET_VALSP(CommandInformationValues)), /* 1126*/ DEF_VALS2(MQIACF_QSG_DISPS, GET_VALSP(QShrGrpDisp)), /* 1128*/ DEF_VALS2(MQIACF_UOW_STATE, GET_VALSP(UOWStates)), @@ -4600,7 +4626,7 @@ DEF_VALSB(MQCFINT_Parse) /* 1154*/ DEF_VALS2(MQIACF_SECURITY_SWITCH, GET_VALSP(MQSECSW)), /* 1155*/ DEF_VALS2(MQIACF_SECURITY_SETTING, GET_VALSP(MQSECSW)), /* 1157*/ DEF_VALS2(MQIACF_USAGE_TYPE, GET_VALSP(PrmId)), -/* 1165*/ DEF_VALS2(MQIACF_PAGESET_STATUS, GET_VALSP(PrmId)), +/* 1165*/ DEF_VALS2(MQIACF_PAGESET_STATUS, GET_VALSP(MQUSAGE_PS)), /* 1167*/ DEF_VALS2(MQIACF_USAGE_DATA_SET_TYPE, GET_VALSP(MQUSAGE_DS)), /* 1175*/ DEF_VALS2(MQIACF_SYSP_TYPE, GET_VALSP(MQSYSP)), /* 1182*/ DEF_VALS2(MQIACF_SYSP_ARCHIVE, GET_VALSP(MQSYSP)), @@ -4617,12 +4643,17 @@ DEF_VALSB(MQCFINT_Parse) /* 1218*/ DEF_VALS2(MQIACF_SYSP_LOG_SUSPEND, GET_VALSP(MQSYSP)), /* 1219*/ DEF_VALS2(MQIACF_SYSP_OFFLOAD_STATUS, GET_VALSP(MQSYSP)), /* 1232*/ DEF_VALS2(MQIACF_CHINIT_STATUS, GET_VALSP(MQSVC_STATUS)), -/* 1261*/ DEF_VALS2(MQIACF_Q_TYPES, GET_VALSP(MQUSAGE_PS)), +/* 1261*/ DEF_VALS2(MQIACF_Q_TYPES, GET_VALSP(QueueType)), /* 1265*/ DEF_VALS2(MQIACF_USAGE_EXPAND_TYPE, GET_VALSP(MQUSAGE_EXPAND)), /* 1271*/ DEF_VALS2(MQIACF_PUBSUB_PROPERTIES, GET_VALSP(MQPSPROP)), -/* 1283*/ DEF_VALS2(MQIACF_PUB_PRIORITY, GET_VALSP(MQPRI)), +/* 1274*/ DEF_VALS2(MQIACF_DURABLE_SUBSCRIPTION, GET_VALSP(MQSUB_DURABLE)), +/* 1280*/ DEF_VALS2(MQIACF_REQUEST_ONLY, GET_VALSP(MQSUB_DURABLE)), +/* 1283*/ DEF_VALS2(MQIACF_PUB_PRIORITY, GET_VALSP(MQRU_PUBLISH)), +/* 1289*/ DEF_VALS2(MQIACF_SUB_TYPE, GET_VALSP(MQSUBTYPE)), +/* 1300*/ DEF_VALS2(MQIACF_RETAINED_PUBLICATION, GET_VALSP(MQQSO)), /* 1302*/ DEF_VALS2(MQIACF_TOPIC_STATUS_TYPE, GET_VALSP(PrmId)), /* 1308*/ DEF_VALS2(MQIACF_ASYNC_STATE, GET_VALSP(AsynchronousStateValues)), +/* 1308*/ DEF_VALS2(MQIACF_PS_STATUS_TYPE, GET_VALSP(MQPSST)), /* 1322*/ DEF_VALS2(MQIACF_LOG_COMPRESSION, GET_VALSP(MQCOMPRESS)), /* 1324*/ DEF_VALS2(MQIACF_MULC_CAPTURE, GET_VALSP(MQMULC)), /* 1328*/ DEF_VALS2(MQIACF_CF_SMDS_BLOCK_SIZE, GET_VALSP(DSBlock)), @@ -4635,6 +4666,7 @@ DEF_VALSB(MQCFINT_Parse) /* 1350*/ DEF_VALS2(MQIACF_SMDS_AVAIL, GET_VALSP(SMDSAvail)), /* 1352*/ DEF_VALS2(MQIACF_CHLAUTH_TYPE, GET_VALSP(ChlauthType)), /* 1376*/ DEF_VALS2(MQIACF_SMDS_EXPANDST, GET_VALSP(SMDSExpandSt)), +/* 1409*/ DEF_VALS2(MQIACF_LDAP_CONNECTION_STATUS, GET_VALSP(MQLDAPC)), /* 1414*/ DEF_VALS2(MQIACF_SYSP_ZHYPERWRITE, GET_VALSP(MQSYSP)), /* 1501*/ DEF_VALS2(MQIACH_XMIT_PROTOCOL_TYPE, GET_VALSP(TransportType)), /* 1508*/ DEF_VALS2(MQIACH_PUT_AUTHORITY, GET_VALSP(PutAuthority)), @@ -4652,9 +4684,13 @@ DEF_VALSB(MQCFINT_Parse) /* 1576*/ DEF_VALS2(MQIACH_MSG_COMPRESSION, GET_VALSP(MQCOMPRESS)), /* 1580*/ DEF_VALS2(MQIACH_CHANNEL_DISP, GET_VALSP(ChannelDisp)), /* 1581*/ DEF_VALS2(MQIACH_INBOUND_DISP, GET_VALSP(MQINBD)), +/* 1582*/ DEF_VALS2(MQIACH_CHANNEL_TYPES, GET_VALSP(ChannelType)), /* 1599*/ DEF_VALS2(MQIACH_LISTENER_STATUS, GET_VALSP(MQSVC_STATUS)), +/* 1601*/ DEF_VALS2(MQIACH_LISTENER_CONTROL, GET_VALSP(MQSVC_CONTROL)), /* 1609*/ DEF_VALS2(MQIACH_CHANNEL_SUBSTATE, GET_VALSP(ChannelSubStates)), /* 1614*/ DEF_VALS2(MQIACH_DEF_CHANNEL_DISP, GET_VALSP(ChannelDisp)), +/* 1627*/ DEF_VALS2(MQIACH_NEW_SUBSCRIBER_HISTORY, GET_VALSP(MQNSH)), +/* 1629*/ DEF_VALS2(MQIACH_USE_CLIENT_ID, GET_VALSP(MQUCI)), /* 1638*/ DEF_VALS2(MQIACH_USER_SOURCE, GET_VALSP(UserSource)), /* 1639*/ DEF_VALS2(MQIACH_WARNING, GET_VALSP(Warning)), DEF_VALSE; diff --git a/epan/dissectors/packet-mq-pcf.c b/epan/dissectors/packet-mq-pcf.c index e19f2e7143..700260ce13 100644 --- a/epan/dissectors/packet-mq-pcf.c +++ b/epan/dissectors/packet-mq-pcf.c @@ -80,6 +80,7 @@ static int hf_mq_pcf_bytestring = -1; static int hf_mq_pcf_int64 = -1; static int hf_mq_pcf_int64list = -1; +static expert_field ei_mq_pcf_hdrlne = EI_INIT; static expert_field ei_mq_pcf_prmln0 = EI_INIT; static expert_field ei_mq_pcf_MaxInt = EI_INIT; static expert_field ei_mq_pcf_MaxStr = EI_INIT; @@ -164,6 +165,7 @@ void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq_tree, char strPrm[256]; guint32 uTyp; guint32 uLen = 0; + guint32 uMax = 0; guint32 uPrm; guint32 uCnt; guint32 uCCS; @@ -174,6 +176,7 @@ void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq_tree, const char sMaxLst[] = " Max # of List reached. DECODE interrupted (actual %u of %u)"; const char sPrmLn0[] = " MQPrm[%3u] has a zero length. DECODE Failed (MQPrm Count: %u)"; + const char sHdrLne[] = " MQPrm[%3u] PCF Header not enough remaining bytes in pdu. DECODE Failed (MQPrm Count: %u)"; const char sMaxPrm[] = " Max # of Parm reached. DECODE interrupted (actual %u of %u)"; const char sPrmCnt[] = " Cnt=-1 and Length(%u) < 16. DECODE interrupted for elem %u"; @@ -204,6 +207,13 @@ void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq_tree, for (u = 0; u < uCount && u < mq_pcf_maxprm; u++) { tOfs = offset; + uMax = (guint)tvb_reported_length_remaining(tvb, tOfs); + if (uMax < 12) + { + proto_tree_add_expert_format(tree, pinfo, &ei_mq_pcf_hdrlne, tvb, offset, 12, sHdrLne, u + 1, uCount); + u = uCount; + break; + } uTyp = tvb_get_guint32(tvb, offset , bLittleEndian); uLen = tvb_get_guint32(tvb, offset + 4, bLittleEndian); if (uLen == 0) @@ -212,6 +222,9 @@ void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq_tree, u = uCount; break; } + /* Try to decode as much as possible value */ + uLen = MIN(uLen, uMax); + uPrm = tvb_get_guint32(tvb, offset + 8, bLittleEndian); uLenF = 12; @@ -676,6 +689,7 @@ void proto_register_mqpcf(void) static ei_register_info ei[] = { { &ei_mq_pcf_prmln0, { "mqpcf.parm.len0" , PI_MALFORMED, PI_ERROR, "MQPCF Parameter length is 0", EXPFILL }}, + { &ei_mq_pcf_hdrlne, { "mqpcf.parm.hdrlenerr", PI_MALFORMED, PI_ERROR, "MQPCF Header not enough bytes in pdu", EXPFILL}}, { &ei_mq_pcf_MaxInt, { "mqpcf.parm.IntList" , PI_UNDECODED, PI_WARN , "MQPCF Parameter Integer list exhausted", EXPFILL }}, { &ei_mq_pcf_MaxStr, { "mqpcf.parm.StrList" , PI_UNDECODED, PI_WARN , "MQPCF Parameter String list exhausted", EXPFILL }}, { &ei_mq_pcf_MaxI64, { "mqpcf.parm.Int64List", PI_UNDECODED, PI_WARN , "MQPCF Parameter Int64 list exhausted", EXPFILL }}, diff --git a/epan/dissectors/packet-mq.c b/epan/dissectors/packet-mq.c index 0437455268..b9431fecc3 100644 --- a/epan/dissectors/packet-mq.c +++ b/epan/dissectors/packet-mq.c @@ -194,6 +194,8 @@ static int hf_mq_id_ThreadId = -1; static int hf_mq_id_TraceId = -1; static int hf_mq_id_ProdId = -1; static int hf_mq_id_mqmid = -1; +static int hf_mq_id_pal = -1; +static int hf_mq_id_r = -1; /* Initial Data Capability Flag 1 */ static int hf_mq_id_icf1_msgseq = -1; @@ -960,7 +962,7 @@ static gint ett_mq_xa_tmflags = -1; static gint ett_mq_xa_xid = -1; static gint ett_mq_xa_info = -1; static gint ett_mq_charv = -1; -static gint ett_mq_reaasemb = -1; +static gint ett_mq_reassemb = -1; static gint ett_mq_notif = -1; static gint ett_mq_structid = -1; @@ -978,6 +980,8 @@ static gboolean mq_reassembly = TRUE; static gboolean mq_in_reassembly = FALSE; +static guint32 mq_AsyMsgRsn; + static reassembly_table mq_reassembly_table; #define MQ_PORT_TCP 1414 @@ -2311,15 +2315,20 @@ static gint dissect_mq_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mqroot_ { guint8 iFAPLvl; gint iSize; + gint iPktSz; + iPktSz = tvb_reported_length_remaining(tvb, offset); iFAPLvl = tvb_get_guint8(tvb, offset + 4); if (iFAPLvl < 4) iSize = 44; - else if (iFAPLvl < 10) + else if (iFAPLvl < 9) iSize = 102; - else + else if (iFAPLvl < 11) iSize = 208; + else + iSize = 240; + iSize = MIN(iSize, iPktSz); if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize) { @@ -2331,7 +2340,7 @@ static gint dissect_mq_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mqroot_ { col_append_fstr(pinfo->cinfo, COL_INFO, ", CHL=%s", sChannel); } - if (iFAPLvl >= 4) + if (iSize > 48) { guint8 *sQMgr; sQMgr = tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 48, 48, p_mq_parm->mq_str_enc); @@ -2362,7 +2371,7 @@ static gint dissect_mq_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mqroot_ proto_tree_add_item(mq_tree, hf_mq_id_SeqWrapVal , tvb, offset + 20, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_id_channel , tvb, offset + 24, 20, p_mq_parm->mq_str_enc); - if (iFAPLvl >= 4) + if (iSize > 44) { /* ID Capability flags 2 */ proto_tree_add_bitmask(mq_tree, tvb, offset + 44, hf_mq_id_icf2, ett_mq_id_icf2, pf_flds_icf2, ENC_BIG_ENDIAN); @@ -2372,28 +2381,36 @@ static gint dissect_mq_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mqroot_ proto_tree_add_item(mq_tree, hf_mq_id_qmgrname , tvb, offset + 48, 48, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_id_HBInterval, tvb, offset + 96, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_id_EFLLength , tvb, offset + 100, 2, p_mq_parm->mq_int_enc); - if (iFAPLvl >= 10) + if (iSize > 102) { /* Error flags 2*/ proto_tree_add_bitmask(mq_tree, tvb, offset + 102, hf_mq_id_ief2, ett_mq_id_ief2, pf_flds_ief2, ENC_BIG_ENDIAN); - proto_tree_add_item(mq_tree, hf_mq_id_Reserved1 , tvb, offset + 103, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(mq_tree, hf_mq_id_Reserved1, tvb, offset + 103, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(mq_tree, hf_mq_id_HdrCprsLst, tvb, offset + 104, 2, p_mq_parm->mq_int_enc); + proto_tree_add_item(mq_tree, hf_mq_id_HdrCprsLst, tvb, offset + 104, 2, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_id_MsgCprsLst, tvb, offset + 106, 16, p_mq_parm->mq_int_enc); - proto_tree_add_item(mq_tree, hf_mq_id_Reserved2 , tvb, offset + 122, 2, p_mq_parm->mq_int_enc); - proto_tree_add_item(mq_tree, hf_mq_id_SSLKeyRst , tvb, offset + 124, 4, p_mq_parm->mq_int_enc); - proto_tree_add_item(mq_tree, hf_mq_id_ConvBySkt , tvb, offset + 128, 4, p_mq_parm->mq_int_enc); + proto_tree_add_item(mq_tree, hf_mq_id_Reserved2, tvb, offset + 122, 2, p_mq_parm->mq_int_enc); + proto_tree_add_item(mq_tree, hf_mq_id_SSLKeyRst, tvb, offset + 124, 4, p_mq_parm->mq_int_enc); + proto_tree_add_item(mq_tree, hf_mq_id_ConvBySkt, tvb, offset + 128, 4, p_mq_parm->mq_int_enc); /* ID Capability flags 3 */ proto_tree_add_bitmask(mq_tree, tvb, offset + 132, hf_mq_id_icf3, ett_mq_id_icf3, pf_flds_icf3, ENC_BIG_ENDIAN); proto_tree_add_bitmask(mq_tree, tvb, offset + 133, hf_mq_id_Eicf3, ett_mq_id_eicf3, pf_flds_icf3, ENC_BIG_ENDIAN); - proto_tree_add_item(mq_tree, hf_mq_id_Reserved3, tvb, offset + 134, 2, p_mq_parm->mq_int_enc); - proto_tree_add_item(mq_tree, hf_mq_id_ProcessId, tvb, offset + 136, 4, p_mq_parm->mq_int_enc); - proto_tree_add_item(mq_tree, hf_mq_id_ThreadId , tvb, offset + 140, 4, p_mq_parm->mq_int_enc); - proto_tree_add_item(mq_tree, hf_mq_id_TraceId , tvb, offset + 144, 4, p_mq_parm->mq_int_enc); - proto_tree_add_item(mq_tree, hf_mq_id_ProdId , tvb, offset + 148, 12, p_mq_parm->mq_str_enc); - proto_tree_add_item(mq_tree, hf_mq_id_mqmid , tvb, offset + 160, 48, p_mq_parm->mq_str_enc); + proto_tree_add_item(mq_tree, hf_mq_id_Reserved3, tvb, offset + 134, 2, p_mq_parm->mq_int_enc); + proto_tree_add_item(mq_tree, hf_mq_id_ProcessId, tvb, offset + 136, 4, p_mq_parm->mq_int_enc); + proto_tree_add_item(mq_tree, hf_mq_id_ThreadId, tvb, offset + 140, 4, p_mq_parm->mq_int_enc); + proto_tree_add_item(mq_tree, hf_mq_id_TraceId, tvb, offset + 144, 4, p_mq_parm->mq_int_enc); + proto_tree_add_item(mq_tree, hf_mq_id_ProdId, tvb, offset + 148, 12, p_mq_parm->mq_str_enc); + } + if (iSize > 160) + { + proto_tree_add_item(mq_tree, hf_mq_id_mqmid, tvb, offset + 160, 48, p_mq_parm->mq_str_enc); + } + if (iSize > 208) + { + proto_tree_add_item(mq_tree, hf_mq_id_pal, tvb, offset + 208, 20, p_mq_parm->mq_str_enc); + proto_tree_add_item(mq_tree, hf_mq_id_r, tvb, offset + 228, 12, p_mq_parm->mq_str_enc); } } } @@ -2574,8 +2591,9 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if (!mq_in_reassembly) { + col_clear_fence(pinfo->cinfo, COL_INFO); col_clear(pinfo->cinfo, COL_INFO); - col_append_sep_fstr(pinfo->cinfo, COL_INFO, " | ", "%-17s", val_to_str_ext(p_mq_parm->mq_opcode, GET_VALS_EXTP(opcode), "Unknown (0x%02x)")); + col_append_sep_fstr(pinfo->cinfo, COL_INFO, " | ", " %-17s", val_to_str_ext(p_mq_parm->mq_opcode, GET_VALS_EXTP(opcode), "Unknown (0x%02x)")); col_set_fence(pinfo->cinfo, COL_INFO); } @@ -3055,24 +3073,29 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } else if (p_mq_parm->mq_opcode == MQ_TST_ASYNC_MESSAGE) { + gint iReasnCode = 0; gint iSegmIndex; gint iGlbMsgIdx; gint iPadLen; - gint iSegLength; + gint8 iStrLen; gint iHdl; gint iHdrL; iHdl = tvb_get_guint32(tvb, offset + 4, p_mq_parm->mq_int_enc); iGlbMsgIdx = tvb_get_guint32(tvb, offset + 12, p_mq_parm->mq_int_enc); - iSegLength = tvb_get_guint32(tvb, offset + 16, p_mq_parm->mq_int_enc); iSegmIndex = tvb_get_guint16(tvb, offset + 20, p_mq_parm->mq_int_enc); + if (p_mq_parm->mq_ctlf1 & MQ_TCF_FIRST) + { + iReasnCode = tvb_get_guint32(tvb, offset + 24, p_mq_parm->mq_int_enc); + } + if (iSegmIndex == 0) { iStrLen = tvb_get_guint8(tvb, offset + 54); - iPadLen = (2+1+iStrLen) % 4; - iPadLen = (iPadLen) ? 4-iPadLen : 0; + iPadLen = (2 + 1 + iStrLen) % 4; + iPadLen = (iPadLen) ? 4 - iPadLen : 0; } else { @@ -3085,8 +3108,10 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if (!mq_in_reassembly) { dissect_mq_addCR_colinfo(pinfo, p_mq_parm); - col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", - iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); + col_append_fstr(pinfo->cinfo, COL_INFO, + " Hdl=0x%04x GlbMsgIdx=%d, Full Message, RC=%d(0x%x) - %s", + iHdl, iGlbMsgIdx, iReasnCode, iReasnCode, + val_to_str_ext(iReasnCode, GET_VALS_EXTP(mqrc), "Unknown (0x%02x)")); } mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iHdrL, ett_mq_msg, NULL, MQ_TEXT_ASYMSG); @@ -3114,7 +3139,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; iSizePayload = tvb_reported_length_remaining(tvb, offset); - bPayload = (iSizePayload>0); + bPayload = (iSizePayload > 0); } else if ((p_mq_parm->mq_opcode == MQ_TST_SPI || p_mq_parm->mq_opcode == MQ_TST_SPI_REPLY) && capLen >= 12) { @@ -3871,6 +3896,7 @@ static int reassemble_mq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, vo if (iSegmIndex == 0) { + mq_AsyMsgRsn = tvb_get_guint32(tvb, iHdrL + 24, iEnco); uStrL = tvb_get_guint8(tvb, iHdrL + 54); uPadL = ((((2+1+uStrL)/4)+1)*4)-(2+1+uStrL); } @@ -3883,15 +3909,18 @@ static int reassemble_mq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, vo /* if it is the 1st Segment, it means we are - of the beginning of a reassembling. We must take the whole segment (with tSHM, and headers) + of the beginning of a reassembling. We must take the whole segment (with TSHM, and headers) */ iBegL = (bSeg1st) ? 0 : iNxtP; - if (iSegL <= iBegL) { + if (iSegL <= iBegL) + { /* negative or null fragment length - something is wrong; skip reassembly */ fd_head = NULL; reassembly_error = TRUE; - } else { + } + else + { fd_head = fragment_add_seq_next(&mq_reassembly_table, tvb, iBegL, pinfo, iConnectionId, NULL, @@ -3901,44 +3930,59 @@ static int reassemble_mq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, vo if (tree) { proto_item *ti = proto_tree_add_item(tree, proto_mq, tvb, 0, -1, ENC_NA); - if (bMore) - { - proto_item_append_text(ti, " [%s of a Reassembled MQ Segment]", - val_to_str_ext(iOpcd, GET_VALS_EXTP(opcode), "Unknown (0x%02x)")); - dissect_mq_addCR_colinfo(pinfo, &mq_parm); - proto_item_append_text(ti, " Hdl=0x%04x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", - iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); - } - else - { - proto_item_append_text(ti, " %s", - val_to_str_ext(iOpcd, GET_VALS_EXTP(opcode), "Unknown (0x%02x)")); - dissect_mq_addCR_colinfo(pinfo, &mq_parm); - proto_item_append_text(ti, " Hdl=0x%04x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", - iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); - } + + proto_item_append_text(ti, " [%s of a Reassembled MQ Segment]", + val_to_str_ext(iOpcd, GET_VALS_EXTP(opcode), "Unknown (0x%02x)")); + dissect_mq_addCR_colinfo(pinfo, &mq_parm); + proto_item_append_text(ti, " Hdl=0x%04x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", + iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); + if (reassembly_error) { expert_add_info_format(pinfo, ti, &ei_mq_reassembly_error, "Wrong fragment length (%d) - skipping reassembly", iSegL - iBegL); } - mq_tree = proto_item_add_subtree(ti, ett_mq_reaasemb); + mq_tree = proto_item_add_subtree(ti, ett_mq_reassemb); } else { mq_tree = tree; } - if (fd_head != NULL && pinfo->num == fd_head->reassembled_in) + if (fd_head != NULL && pinfo->num == fd_head->reassembled_in && !bMore) { tvbuff_t *next_tvb; /* Reassembly finished */ if (fd_head->next != NULL) { - /* 2 or more fragments */ + proto_item *ti; + + /* dissect the last(s) MQ segment received */ + /* Reassembly in progress, so no decode */ + + mq_in_reassembly = TRUE; + dissect_mq_pdu(tvb, pinfo, mq_tree); + mq_in_reassembly = FALSE; + + /* + 2 or more fragments. + Build Up the full pdu to be dissected correwctly + */ next_tvb = tvb_new_chain(tvb, fd_head->tvb_data); add_new_data_source(pinfo, next_tvb, "Reassembled MQ"); + + /* Create the tree element for the full reassembled MQ Msg */ + ti = proto_tree_add_item(tree, proto_mq, tvb, 0, -1, ENC_NA); + proto_item_append_text(ti, "%s", + val_to_str_ext(iOpcd, GET_VALS_EXTP(opcode), "Unknown (0x%02x)")); + dissect_mq_addCR_colinfo(pinfo, &mq_parm); + proto_item_append_text(ti, " Hdl=0x%04x GlbMsgIdx=%d, Full, Len=%d, RC=%d(0x%x) - %s", + iHdl, iGlbMsgIdx, + tvb_reported_length_remaining(next_tvb, 0), + mq_AsyMsgRsn, mq_AsyMsgRsn, + val_to_str_ext(mq_AsyMsgRsn, GET_VALS_EXTP(mqrc), "Unknown (0x%02x)")); + mq_tree = proto_item_add_subtree(ti, ett_mq_reassemb); } else { @@ -3952,12 +3996,11 @@ static int reassemble_mq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, vo { mq_in_reassembly = TRUE; /* Reassembly in progress */ - col_set_str(pinfo->cinfo, COL_PROTOCOL, "MQ"); col_add_fstr(pinfo->cinfo, COL_INFO, "[%s of a Reassembled MQ Segment]", - val_to_str_ext(iOpcd, GET_VALS_EXTP(opcode), "Unknown (0x%02x)")); + val_to_str_ext(iOpcd, GET_VALS_EXTP(opcode), "Unknown (0x%02x)")); dissect_mq_addCR_colinfo(pinfo, &mq_parm); - col_add_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", - iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); + col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", + iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); dissect_mq_pdu(tvb, pinfo, mq_tree); return tvb_reported_length(tvb); } @@ -4142,6 +4185,8 @@ void proto_register_mq(void) { &hf_mq_id_TraceId , {"TraceId...", "mq.id.traceid", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "ID Trace Identifier", HFILL }}, { &hf_mq_id_ProdId , {"ProdId....", "mq.id.prodid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "ID Product Identifier", HFILL }}, { &hf_mq_id_mqmid , {"MQM ID....", "mq.id.mqmid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "ID MQM ID", HFILL }}, + { &hf_mq_id_pal , {"PAL.......", "mq.id.pal", FT_BYTES, BASE_NONE, NULL, 0x0, "ID PAL", HFILL}}, + { &hf_mq_id_r , {"R.........", "mq.id.r", FT_BYTES, BASE_NONE, NULL, 0x0, "ID R", HFILL}}, { &hf_mq_id_icf1_msgseq , {"Message sequence", "mq.id.icf.msgseq" , FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF1_MSG_SEQ, "ID ICF Message sequence", HFILL }}, { &hf_mq_id_icf1_convcap , {"Conversion capable", "mq.id.icf.convcap" , FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF1_CONVERSION_CAPABLE, "ID ICF Conversion capable", HFILL }}, @@ -4309,7 +4354,7 @@ void proto_register_mq(void) { &hf_mq_msgasy_SegLength, {"SegLength", "mq.msgasy.seglength", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Segment Length", HFILL }}, { &hf_mq_msgasy_SegmIndex, {"SegmIndex", "mq.msgasy.segmindex", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Segment Index", HFILL }}, { &hf_mq_msgasy_SeleIndex, {"SeleIndex", "mq.msgasy.seleindex", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Selection Index", HFILL }}, - { &hf_mq_msgasy_ReasonCod, {"ReasonCod", "mq.msgasy.reasoncod", FT_UINT32, BASE_HEX , NULL, 0x0, "MSGASYNC Reason Code", HFILL }}, + { &hf_mq_msgasy_ReasonCod, {"ReasonCod", "mq.msgasy.reasoncod", FT_UINT32, BASE_DEC | BASE_EXT_STRING, GET_VALS_EXTP(mqrc), 0x0, "MSGASYNC Reason Code", HFILL }}, { &hf_mq_msgasy_ActMsgLen, {"ActMsgLen", "mq.msgasy.actmsglen", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Actual Message Length", HFILL }}, { &hf_mq_msgasy_TotMsgLen, {"TotMsgLen", "mq.msgasy.totmsglen", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Total Message Length", HFILL }}, { &hf_mq_msgasy_MsgToken , {"MsgToken.", "mq.msgasy.msgtoken" , FT_BYTES , BASE_NONE , NULL, 0x0, "MSGASYNC Mesasage Token", HFILL }}, @@ -4708,7 +4753,7 @@ void proto_register_mq(void) &ett_mq_xa_info, &ett_mq_charv, &ett_mq_rfh_ValueName, - &ett_mq_reaasemb, + &ett_mq_reassemb, &ett_mq_structid }; diff --git a/epan/dissectors/packet-mq.h b/epan/dissectors/packet-mq.h index ef86c8587c..e77b036520 100644 --- a/epan/dissectors/packet-mq.h +++ b/epan/dissectors/packet-mq.h @@ -4979,6 +4979,7 @@ typedef struct _mq_parm_t #define MQ_MQCHT_CLUSRCVR 8 #define MQ_MQCHT_CLUSSDR 9 #define MQ_MQCHT_MQTT 10 +#define MQ_MQCHT_AMQP 11 /* Channel Compression */ #define MQ_MQCOMPRESS_NOT_AVAILABLE (-1) @@ -5042,6 +5043,11 @@ typedef struct _mq_parm_t #define MQ_MQCLXQ_SCTQ 0 #define MQ_MQCLXQ_CHANNEL 1 +#define MQ_MQZAET_NONE 0 +#define MQ_MQZAET_PRINCIPAL 1 +#define MQ_MQZAET_GROUP 2 +#define MQ_MQZAET_UNKNOWN 3 + #endif extern gint32 strip_trailing_blanks(guint8 *a_str,