aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AUTHORS.src2
-rw-r--r--epan/dissectors/packet-mq-base.c142
-rw-r--r--epan/dissectors/packet-mq-pcf.c14
-rw-r--r--epan/dissectors/packet-mq.c151
-rw-r--r--epan/dissectors/packet-mq.h6
5 files changed, 208 insertions, 107 deletions
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 <ishraq[AT]tinkerforge.com> {
tfp (Tinkerforge) dissector
}
-RobiOneKenobi <robionekenobi[AT]bluewin.ch> {
+Robert Grange <robionekenobi[AT]bluewin.ch> {
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,