add dissector for gpds resource

Signed-off-by: Klaus Kurzmann <mok@fluxnetz.de>
master
Klaus Kurzmann 2011-04-28 16:45:12 +02:00
parent 8dc5548416
commit 77c01f388e
4 changed files with 979 additions and 0 deletions

View File

@ -17,6 +17,7 @@ OBJECTS:=src/packet-isi.o \
src/isi-call.o \
src/isi-light.o \
src/isi-commgr.o \
src/isi-gpds.o \
src/isi-selftest.o
all: isi.so

967
src/isi-gpds.c Normal file
View File

@ -0,0 +1,967 @@
/* isi-gpds.c
* Dissector for ISI's gpds resource
* Copyright 2011, Klaus Kurzmann <mok@fluxnetz.de>
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <glib.h>
#include <epan/prefs.h>
#include <epan/packet.h>
#include "packet-isi.h"
#include "isi-gpds.h"
static const value_string isi_gpds_id[] = {
{0x00, "GPDS_LL_CONFIGURE_REQ"},
{0x01, "GPDS_LL_CONFIGURE_RESP"},
{0x02, "GPDS_CONTEXT_ID_CREATE_REQ"},
{0x03, "GPDS_CONTEXT_ID_CREATE_RESP"},
{0x04, "GPDS_CONTEXT_ID_CREATE_IND"},
{0x05, "GPDS_CONTEXT_ID_DELETE_IND"},
{0x20, "GPDS_LL_BIND_REQ"},
{0x21, "GPDS_LL_BIND_RESP"},
{0x06, "GPDS_CONTEXT_CONFIGURE_REQ"},
{0x07, "GPDS_CONTEXT_CONFIGURE_RESP"},
{0x2A, "GPDS_CONTEXT_MODIFY_REQ"},
{0x2B, "GPDS_CONTEXT_MODIFY_RESP"},
{0x2C, "GPDS_CONTEXT_MODIFY_IND"},
{0x08, "GPDS_CONTEXT_ACTIVATE_REQ"},
{0x09, "GPDS_CONTEXT_ACTIVATE_RESP"},
{0x0A, "GPDS_CONTEXT_ACTIVATE_IND"},
{0x25, "GPDS_CONTEXT_ACTIVATING_IND"},
{0x1F, "GPDS_CONTEXT_ACTIVATE_FAIL_IND"},
{0x0B, "GPDS_CONTEXT_DEACTIVATE_REQ"},
{0x0C, "GPDS_CONTEXT_DEACTIVATE_RESP"},
{0x0D, "GPDS_CONTEXT_DEACTIVATE_IND"},
{0x2F, "GPDS_CONTEXT_DEACTIVATING_IND"},
{0x0E, "GPDS_CONTEXT_NWI_ACT_REQUEST_IND"},
{0x0F, "GPDS_CONTEXT_NWI_ACT_REJECT_REQ"},
{0x10, "GPDS_CONTEXT_NWI_ACT_REJECT_RESP"},
{0x11, "GPDS_CONFIGURE_REQ"},
{0x12, "GPDS_CONFIGURE_RESP"},
{0x13, "GPDS_ATTACH_REQ"},
{0x14, "GPDS_ATTACH_RESP"},
{0x15, "GPDS_ATTACH_IND"},
{0x2D, "GPDS_ATTACH_FAIL_IND"},
{0x16, "GPDS_DETACH_REQ"},
{0x17, "GPDS_DETACH_RESP"},
{0x18, "GPDS_DETACH_IND"},
{0x19, "GPDS_STATUS_REQ"},
{0x1A, "GPDS_STATUS_RESP"},
{0x22, "GPDS_CONTEXT_STATUS_REQ"},
{0x23, "GPDS_CONTEXT_STATUS_RESP"},
{0x24, "GPDS_CONTEXT_STATUS_IND"},
{0x1B, "GPDS_SMS_PDU_SEND_REQ"},
{0x1C, "GPDS_SMS_PDU_SEND_RESP"},
{0x1D, "GPDS_SMS_PDU_RECEIVE_IND"},
{0x1E, "GPDS_TRANSFER_STATUS_IND"},
{0x30, "GPDS_CONFIGURATION_INFO_REQ"},
{0x31, "GPDS_CONFIGURATION_INFO_RESP"},
{0x32, "GPDS_CONFIGURATION_INFO_IND"},
{0x33, "GPDS_CONTEXT_AUTH_REQ"},
{0x34, "GPDS_CONTEXT_AUTH_RESP"},
{0x35, "GPDS_TEST_MODE_REQ"},
{0x36, "GPDS_TEST_MODE_RESP"},
{0x37, "GPDS_RADIO_ACTIVITY_IND"},
{0x38, "GPDS_FORCED_READY_STATE_REQ"},
{0x39, "GPDS_FORCED_READY_STATE_RESP"},
{0x3A, "GPDS_CONTEXTS_CLEAR_REQ"},
{0x3B, "GPDS_CONTEXTS_CLEAR_RESP"},
{0x3C, "GPDS_MBMS_SERVICE_SELECTION_REQ"},
{0x3D, "GPDS_MBMS_SERVICE_SELECTION_RESP"},
{0x3E, "GPDS_MBMS_STATUS_IND"},
{0x3F, "GPDS_MBMS_CONTEXT_CREATE_REQ"},
{0x40, "GPDS_MBMS_CONTEXT_CREATE_RESP"},
{0x41, "GPDS_MBMS_CONTEXT_ACTIVATE_REQ"},
{0x42, "GPDS_MBMS_CONTEXT_ACTIVATE_RESP"},
{0x43, "GPDS_MBMS_CONTEXT_DELETE_REQ"},
{0x44, "GPDS_MBMS_CONTEXT_DELETE_RESP"},
{0x45, "GPDS_MBMS_CONTEXT_DELETE_IND"},
{0x46, "GPDS_MBMS_SERVICE_SELECTION_IND"},
{0x47, "GPDS_MBMS_SERVICE_AVAILABLE_IND"},
{0x48, "GPDS_TEST_REQ"},
{0x49, "GPDS_TEST_RESP"},
{0x50, "GPDS_RESOURCE_CONTROL_IND"},
{0x51, "GPDS_RESOURCE_CONTROL_REQ"},
{0x52, "GPDS_RESOURCE_CONTROL_RESP"},
{0x54, "GPDS_RESOURCE_CONF_REQ"},
{0x55, "GPDS_RESOURCE_CONF_RESP"},
{0x53, "GPDS_RESOURCE_CONF_IND"},
{0x56, "GPDS_PROPERTY_SET_REQ"},
{0x57, "GPDS_PROPERTY_SET_RESP"},
{0xEE, "GPDS_RESP"},
{0x00, NULL}
};
static const value_string isi_gpds_subblock_id[] = {
{0x00, "GPDS_COMP_INFO"},
{0x01, "GPDS_QOS_REQ_INFO"},
{0x02, "GPDS_QOS_MIN_INFO"},
{0x03, "GPDS_QOS_NEG_INFO"},
{0x04, "GPDS_PDP_ADDRESS_INFO"},
{0x05, "GPDS_APN_INFO"},
{0x10, "GPDS_FILT_SRC_IPV4_ADDR_INFO"},
{0x20, "GPDS_FILT_SRC_IPV6_ADDR_INFO"},
{0x30, "GPDS_FILT_PROTOCOL_INFO"},
{0x40, "GPDS_FILT_DST_PORT_INFO"},
{0x41, "GPDS_FILT_DST_PORT_RANGE_INFO"},
{0x50, "GPDS_FILT_SRC_PORT_INFO"},
{0x51, "GPDS_FILT_SRC_PORT_RANGE_INFO"},
{0x60, "GPDS_FILT_SPI_INFO"},
{0x70, "GPDS_FILT_TOS_INFO"},
{0x80, "GPDS_FILT_FLOW_LABEL_INFO"},
{0x0A, "GPDS_TFT_FILTER_INFO"},
{0x09, "GPDS_TFT_INFO"},
{0x06, "GPDS_QOS99_REQ_INFO"},
{0x07, "GPDS_QOS99_MIN_INFO"},
{0x08, "GPDS_QOS99_NEG_INFO"},
{0x0D, "GPDS_PDNS_ADDRESS_INFO"},
{0x0E, "GPDS_SDNS_ADDRESS_INFO"},
{0x0B, "GPDS_USERNAME_INFO"},
{0x0C, "GPDS_PASSWORD_INFO"},
{0x90, "GPDS_DNS_ADDRESS_REQ_INFO"},
{0x0F, "GPDS_CHALLENGE_INFO"},
{0xA0, "GPDS_CONDITIONAL_DETACH_INFO"},
{0x11, "GPDS_RESPONSE_INFO"},
{0xA1, "GPDS_MBMS_SERVICE_BEARER_STATE"},
{0xA2, "GPDS_MBMS_MULTICAST_PARAMS"},
{0xA4, "GPDS_ACTIVATE_PDP_CONTEXT_REQUEST"},
{0xA5, "GPDS_RESOURCE_CONF"},
{0xA3, "GPDS_RESOURCE"},
{0xA6, "GPDS_RESOURCE_CONF_REQUIRED"},
{0xA7, "GPDS_PIPE_REDIRECTION_INFO"},
{0xE1, "GPDS_SHARED_APN_INFO"},
{0xE0, "GPDS_SHARED_COMP_INFO"},
{0xE2, "GPDS_SHARED_QOS99_REQ_INFO"},
{0xE3, "GPDS_SHARED_QOS99_MIN_INFO"},
{0xE4, "GPDS_SHARED_QOS99_NEG_INFO"},
{0xE6, "GPDS_SHARED_FILT_SRC_IPV4_ADDR_INFO"},
{0xE8, "GPDS_SHARED_FILT_PROTOCOL_INFO"},
{0xE9, "GPDS_SHARED_FILT_DST_PORT_INFO"},
{0xEA, "GPDS_SHARED_FILT_DST_PORT_RANGE_INFO"},
{0xEB, "GPDS_SHARED_FILT_SRC_PORT_INFO"},
{0xEC, "GPDS_SHARED_FILT_SRC_PORT_RANGE_INFO"},
{0xED, "GPDS_SHARED_FILT_SPI_INFO"},
{0xEE, "GPDS_SHARED_FILT_TOS_INFO"},
{0xEF, "GPDS_SHARED_FILT_FLOW_LABEL_INFO"},
{0xF6, "GPDS_SHARED_TFT_PACKET_FILTER_INFO"},
{0xF2, "GPDS_SHARED_TFT_PARAMETER_IP_FLOW_INFO"},
{0xF1, "GPDS_SHARED_TFT_PARAMETER_AUTH_TOKEN_INFO"},
{0xE5, "GPDS_SHARED_TFT_INFO"},
{0xF3, "GPDS_SHARED_PCSCF_ADDRESS_REQ_INFO"},
{0xF4, "GPDS_SHARED_PCSCF_ADDRESS_INFO"},
{0xF5, "GPDS_SHARED_POLICY_CONTROL_REJ_CODE_INFO"},
{0xF7, "GPDS_SHARED_IM_CN_SIGNALING_FLAG_INFO"},
{0xF8, "GPDS_SHARED_REL5_QOS_INFO"},
{0xF9, "GPDS_SHARED_RADIO_ACTIVITY_REQ_INFO"},
{0xFB, "GPDS_SHARED_MBMS_SERVICE_LIST_INFO"},
{0xFC, "GPDS_SHARED_INITIAL_DL_DCH_RATE"},
{0x00, NULL}
};
static const value_string isi_gpds_cid[] = {
{0xFE, "GPDS_CID_ALL"},
{0xFF, "GPDS_CID_VOID"},
{0x00, NULL}
};
static const value_string isi_gpds_ppp_mode[] = {
{0x00, "GPDS_LL_FRAMED_PPP"},
{0x01, "GPDS_LL_NONFRAMED_PPP"},
{0x02, "GPDS_LL_PLAIN"},
{0x00, NULL}
};
static const value_string isi_gpds_status[] = {
{0x00, "GPDS_ERROR"},
{0x01, "GPDS_OK"},
{0x02, "GPDS_FAIL"},
{0x00, NULL}
};
static const value_string isi_gpds_pdp_type[] = {
{0x01, "GPDS_PDP_TYPE_PPP"},
{0x21, "GPDS_PDP_TYPE_IPV4"},
{0x57, "GPDS_PDP_TYPE_IPV6"},
{0xFF, "GPDS_PDP_TYPE_DEFAULT"},
{0x00, NULL}
};
static const value_string isi_gpds_context_type[] = {
{0x00, "GPDS_CONT_TYPE_NORMAL"},
{0x01, "GPDS_CONT_TYPE_NWI"},
{0x02, "GPDS_CONT_TYPE_SEC"},
{0x00, NULL}
};
static const value_string isi_gpds_cause[] = {
{0x00, "GPDS_CAUSE_UNKNOWN"},
{0x02, "GPDS_CAUSE_IMSI"},
{0x03, "GPDS_CAUSE_MS_ILLEGAL"},
{0x06, "GPDS_CAUSE_ME_ILLEGAL"},
{0x07, "GPDS_CAUSE_GPRS_NOT_ALLOWED"},
{0x08, "GPDS_NOT_ALLOWED"},
{0x09, "GPDS_CAUSE_MS_IDENTITY"},
{0x0A, "GPDS_CAUSE_DETACH"},
{0x0B, "GPDS_PLMN_NOT_ALLOWED"},
{0x0C, "GPDS_LA_NOT_ALLOWED"},
{0x0D, "GPDS_ROAMING_NOT_ALLOWED"},
{0x0E, "GPDS_CAUSE_GPRS_NOT_ALLOWED_IN_PLMN"},
{0x10, "GPDS_CAUSE_MSC_NOT_REACH"},
{0x11, "GPDS_CAUSE_PLMN_FAIL"},
{0x16, "GPDS_CAUSE_NETWORK_CONGESTION"},
{0x18, "GPDS_CAUSE_MBMS_BEARER_CAPABILITY_INSUFFICIENT"},
{0x19, "GPDS_CAUSE_LLC_SNDCP_FAILURE"},
{0x1A, "GPDS_CAUSE_RESOURCE_INSUFF"},
{0x1B, "GPDS_CAUSE_APN"},
{0x1C, "GPDS_CAUSE_PDP_UNKNOWN"},
{0x1D, "GPDS_CAUSE_AUTHENTICATION"},
{0x1E, "GPDS_CAUSE_ACT_REJECT_GGSN"},
{0x1F, "GPDS_CAUSE_ACT_REJECT"},
{0x20, "GPDS_CAUSE_SERV_OPT_NOT_SUPPORTED"},
{0x21, "GPDS_CAUSE_SERV_OPT_NOT_SUBSCRIBED"},
{0x22, "GPDS_CAUSE_SERV_OPT_OUT_OF_ORDER"},
{0x23, "GPDS_CAUSE_NSAPI_ALREADY_USED"},
{0x24, "GPDS_CAUSE_DEACT_REGULAR"},
{0x25, "GPDS_CAUSE_QOS"},
{0x26, "GPDS_CAUSE_NETWORK_FAIL"},
{0x27, "GPDS_CAUSE_REACTIVATION_REQ"},
{0x28, "GPDS_CAUSE_FEAT_NOT_SUPPORTED"},
{0x29, "GPDS_CAUSE_TFT_SEMANTIC_ERROR"},
{0x2A, "GPDS_CAUSE_TFT_SYNTAX_ERROR"},
{0x2B, "GPDS_CAUSE_CONTEXT_UNKNOWN"},
{0x2C, "GPDS_CAUSE_FILTER_SEMANTIC_ERROR"},
{0x2D, "GPDS_CAUSE_FILTER_SYNTAX_ERROR"},
{0x2E, "GPDS_CAUSE_CONT_WITHOUT_TFT"},
{0x2F, "GPDS_CAUSE_MULTICAST_MEMBERSHIP_TIMEOUT"},
{0x60, "GPDS_CAUSE_INVALID_MANDATORY_INFO"},
{0x61, "GPDS_CAUSE_MSG_TYPE_NON_EXISTENTOR_NOT_IMPLTD"},
{0x62, "GPDS_CAUSE_MSG_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE"},
{0x63, "GPDS_CAUSE_IE_NON_EXISTENT_OR_NOT_IMPLEMENTED"},
{0x64, "GPDS_CAUSE_CONDITIONAL_IE_ERROR"},
{0x65, "GPDS_CUASEMSG_NOT_COMPATIBLE_WITH_PROTOCOL_STATE"},
{0x6F, "GPDS_CAUSE_UNSPECIFIED"},
{0x70, "GPDS_CAUSE_APN_INCOMPATIBLE_WITH_CURR_CTXT"},
{0xA0, "GPDS_CAUSE_FDN"},
{0xA1, "GPDS_CAUSE_USER_ABORT"},
{0xA2, "GPDS_CAUSE_CS_INACTIVE"},
{0xA3, "GPDS_CAUSE_CSD_OVERRIDE"},
{0xA4, "GPDS_CAUSE_APN_CONTROL"},
{0xA5, "GPDS_CAUSE_CALL_CONTROL"},
{0xA6, "GPDS_CAUSE_TEMPERATURE_LIMIT"},
{0xC8, "GPDS_CAUSE_RETRY_COUNTER_EXPIRED"},
{0xC9, "GPDS_CAUSE_NO_CONNECTION"},
{0xF5, "GPDS_CAUSE_DETACHED"},
{0xF7, "GPDS_CAUSE_NO_SERVICE_POWER_SAVE"},
{0xF9, "GPDS_CAUSE_SIM_REMOVED"},
{0xFA, "GPDS_CAUSE_POWER_OFF"},
{0xFB, "GPDS_CAUSE_LAI_FORBIDDEN_NATIONAL_ROAM_LIST"},
{0xFC, "GPDS_CAUSE_LAI_FORBIDDEN_REG_PROVISION_LIST"},
{0xFD, "GPDS_CAUSE_ACCESS_BARRED"},
{0xFE, "GPDS_CAUSE_FATAL_FAILURE"},
{0xFF, "GPDS_CAUSE_AUT_FAILURE"},
{0x00, NULL}
};
static const value_string isi_gpds_attach_type[] = {
{0x01, "GPDS_ATTACH_TYPE_GPRS"},
{0x03, "GPDS_ATTACH_TYPE_COMBINED"},
{0x00, NULL}
};
static const value_string isi_gpds_attach_status[] = {
{0x00, "GPDS_DETACHED"},
{0x01, "GPDS_ATTACHED"},
{0x00, NULL}
};
static const value_string isi_gpds_transfer_status[] = {
{0x00, "GPDS_TRANSFER_NOT_AVAIL"},
{0x01, "GPDS_TRANSFER_AVAIL"},
{0x00, NULL}
};
static const value_string isi_gpds_transfer_cause[] = {
{0x02, "GPDS_TRANSFER_CAUSE_ATTACHED"},
{0x03, "GPDS_TRANSFER_CAUSE_DETACHED"},
{0x04, "GPDS_TRANSFER_CAUSE_RESUMED"},
{0x05, "GPDS_TRANSFER_CAUSE_SUSPENDED_NO_COVERAGE"},
{0x07, "GPDS_TRANSFER_CAUSE_SUSPENDED_CALL_SMS"},
{0x08, "GPDS_TRANSFER_CAUSE_SUSPENDED_CALL"},
{0x09, "GPDS_TRANSFER_CAUSE_SUSPENDED_RAU"},
{0x0A, "GPDS_TRANSFER_CAUSE_SUSPENDED_LU"},
{0x0B, "GPDS_TRANSFER_CAUSE_DSAC_RESTRICTION"},
{0x00, NULL}
};
static const value_string isi_gpds_client_type[] = {
{0x01, "GPDS_CONTEXT_CLIENT_SOCKET"},
{0x02, "GPDS_CONTEXT_CLIENT_DIAL_UP"},
{0x00, "GPDS_CONTEXT_CLIENT_UNKNOWN"},
{0x00, NULL}
};
static const value_string isi_gpds_attach_mode[] = {
{0x00, "GPDS_ATTACH_MODE_MANUAL"},
{0x01, "GPDS_ATTACH_MODE_AUTOMATIC"},
{0xFF, "GPDS_ATTACH_MODE_DEFAULT"},
{0x00, NULL}
};
static const value_string isi_gpds_mt_act_mode[] = {
{0x00, "GPDS_MT_ACT_MODE_REJECT"},
{0x01, "GPDS_MT_ACT_MODE_ACCEPT"},
{0xFF, "GPDS_MT_ACT_MODE_DEFAULT"},
{0x00, NULL}
};
static const value_string isi_gpds_aol_context[] = {
{0x00, "GPDS_AOL_CTX_NOT_ACTIVE"},
{0x01, "GPDS_AOL_CTX_HPLMN_ACTIVE"},
{0x02, "GPDS_AOL_CTX_VPLMN_ACTIVE"},
{0x03, "GPDS_AOL_CTX_ACTIVE"},
{0x00, NULL}
};
static const value_string isi_gpds_classc_mode[] = {
{0x00, "GPDS_CLASSC_MODE_GPRS"},
{0x01, "GPDS_CLASSC_MODE_GSM"},
{0xFF, "GPDS_CLASSC_MODE_DEFAULT"},
{0x00, NULL}
};
static const value_string isi_gpds_precedence[] = {
{0x00, "GPDS_QOS_PREC_0"},
{0x01, "GPDS_QOS_PREC_1"},
{0x02, "GPDS_QOS_PREC_2"},
{0x03, "GPDS_QOS_PREC_3"},
{0xFF, "GPDS_QOS_PREC_DEFAULT"},
{0x00, NULL}
};
static const value_string isi_gpds_delay[] = {
{0x00, "GPDS_QOS_DELC_0"},
{0x01, "GPDS_QOS_DELC_1"},
{0x02, "GPDS_QOS_DELC_2"},
{0x03, "GPDS_QOS_DELC_3"},
{0x04, "GPDS_QOS_DELC_4"},
{0xFF, "GPDS_QOS_DELC_DEFAULT"},
{0x00, NULL}
};
static const value_string isi_gpds_reliability[] = {
{0x00, "GPDS_QOS_RELC_0"},
{0x01, "GPDS_QOS_RELC_1"},
{0x02, "GPDS_QOS_RELC_2"},
{0x03, "GPDS_QOS_RELC_3"},
{0x04, "GPDS_QOS_RELC_4"},
{0x05, "GPDS_QOS_RELC_5"},
{0xFF, "GPDS_QOS_RELC_DEFAULT"},
{0x00, NULL}
};
static const value_string isi_gpds_peak_throughput[] = {
{0x00, "GPDS_QOS_PETC_0"},
{0x01, "GPDS_QOS_PETC_1"},
{0x02, "GPDS_QOS_PETC_2"},
{0x03, "GPDS_QOS_PETC_3"},
{0x04, "GPDS_QOS_PETC_4"},
{0x05, "GPDS_QOS_PETC_5"},
{0x06, "GPDS_QOS_PETC_6"},
{0x07, "GPDS_QOS_PETC_7"},
{0x08, "GPDS_QOS_PETC_8"},
{0x09, "GPDS_QOS_PETC_9"},
{0xFF, "GPDS_QOS_PETC_DEFAULT"},
{0x00, NULL}
};
static const value_string isi_gpds_mean_throughput[] = {
{0x00, "GPDS_QOS_METC_0"},
{0x01, "GPDS_QOS_METC_1"},
{0x02, "GPDS_QOS_METC_2"},
{0x03, "GPDS_QOS_METC_3"},
{0x04, "GPDS_QOS_METC_4"},
{0x05, "GPDS_QOS_METC_5"},
{0x06, "GPDS_QOS_METC_6"},
{0x07, "GPDS_QOS_METC_7"},
{0x08, "GPDS_QOS_METC_8"},
{0x09, "GPDS_QOS_METC_9"},
{0x0A, "GPDS_QOS_METC_10"},
{0x0B, "GPDS_QOS_METC_11"},
{0x0C, "GPDS_QOS_METC_12"},
{0x0D, "GPDS_QOS_METC_13"},
{0x0E, "GPDS_QOS_METC_14"},
{0x0F, "GPDS_QOS_METC_15"},
{0x10, "GPDS_QOS_METC_16"},
{0x11, "GPDS_QOS_METC_17"},
{0x12, "GPDS_QOS_METC_18"},
{0x1F, "GPDS_QOS_METC_31"},
{0xFF, "GPDS_QOS_METC_DEFAULT"},
{0x00, NULL}
};
static const value_string isi_gpds_traffic_class[] = {
{0x00, "GPDS_QOS99_TRAC_SUBSCRIBED"},
{0x01, "GPDS_QOS99_TRAC_CONVERSATIONAL"},
{0x02, "GPDS_QOS99_TRAC_STREAMING"},
{0x03, "GPDS_QOS99_TRAC_INTERACTIVE"},
{0x04, "GPDS_QOS99_TRAC_BACKGROUND"},
{0xFF, "GPDS_QOS99_TRAC_DEFAULT"},
{0x00, NULL}
};
static const value_string isi_gpds_delivery_order[] = {
{0x00, "GPDS_QOS99_DELO_SUBSCRIBED"},
{0x01, "GPDS_QOS99_DELO_YES"},
{0x02, "GPDS_QOS99_DELO_NO"},
{0xFF, "GPDS_QOS99_DELO_DEFAULT"},
{0x00, NULL}
};
static const value_string isi_gpds_delivery_of_erroneous_sdus[] = {
{0x00, "GPDS_QOS99_DOES_SUBSCRIBED"},
{0x01, "GPDS_QOS99_DOES_NO_DETECT"},
{0x02, "GPDS_QOS99_DOES_YES"},
{0x03, "GPDS_QOS99_DOES_NO"},
{0xFF, "GPDS_QOS99_DOES_DEFAULT"},
{0x00, NULL}
};
static const value_string isi_gpds_residual_bers[] = {
{0x00, "GPDS_QOS99_RBER_SUBSCRIBED"},
{0x52, "GPDS_QOS99_RBER_1"},
{0x12, "GPDS_QOS99_RBER_2"},
{0x53, "GPDS_QOS99_RBER_3"},
{0x43, "GPDS_QOS99_RBER_4"},
{0x13, "GPDS_QOS99_RBER_5"},
{0x14, "GPDS_QOS99_RBER_6"},
{0x15, "GPDS_QOS99_RBER_7"},
{0x16, "GPDS_QOS99_RBER_8"},
{0x68, "GPDS_QOS99_RBER_9"},
{0xFF, "GPDS_QOS99_RBER_DEFAULT"},
{0x00, NULL}
};
static const value_string isi_gpds_error_ratio[] = {
{0x00, "GPDS_QOS99_SDER_SUBSCRIBED"},
{0x12, "GPDS_QOS99_SDER_1"},
{0x73, "GPDS_QOS99_SDER_2"},
{0x13, "GPDS_QOS99_SDER_3"},
{0x14, "GPDS_QOS99_SDER_4"},
{0x15, "GPDS_QOS99_SDER_5"},
{0x16, "GPDS_QOS99_SDER_6"},
{0x11, "GPDS_QOS99_SDER_7"},
{0xFF, "GPDS_QOS99_SDER_DEFAULT"},
{0x00, NULL}
};
static const value_string isi_gpds_priority[] = {
{0x00, "GPDS_QOS99_TRHP_SUBSCRIBED"},
{0x01, "GPDS_QOS99_TRHP_1"},
{0x02, "GPDS_QOS99_TRHP_2"},
{0x03, "GPDS_QOS99_TRHP_3"},
{0xFF, "GPDS_QOS99_TRHP_DEFAULT"},
{0x00, NULL}
};
static const value_string isi_gpds_rel5_source_desc[] = {
{0x00, "GPDS_SOURCE_UNKNOWN"},
{0x01, "GPDS_SOURCE_SPEECH"},
{0xFF, "GPDS_SOURCE_DEFAULT"},
{0x00, NULL}
};
static const value_string isi_gpds_rel5_sgn_ind_flag[] = {
{0x00, "GPDS_QOS_NOT_OPT_SGN"},
{0x01, "GPDS_QOS_OPT_SGN"},
{0xFF, "GPDS_QOS_OPT_DEFAULT"},
{0x00, NULL}
};
static dissector_handle_t isi_gpds_handle;
static void dissect_isi_gpds(tvbuff_t *tvb, packet_info *pinfo, proto_item *tree);
static guint32 hf_isi_gpds_cmd = -1;
static guint32 hf_isi_gpds_subblock_type = -1;
static guint32 hf_isi_gpds_cid = -1;
static guint32 hf_isi_gpds_primary_cid = -1;
static guint32 hf_isi_gpds_pipe_handle = -1;
static guint32 hf_isi_gpds_ppp_mode = -1;
static guint32 hf_isi_gpds_status = -1;
static guint32 hf_isi_gpds_pdp_type = -1;
static guint32 hf_isi_gpds_context_type = -1;
static guint32 hf_isi_gpds_cause = -1;
static guint32 hf_isi_gpds_attach_type = -1;
static guint32 hf_isi_gpds_context_count = -1;
static guint32 hf_isi_gpds_tx_byte_count = -1;
static guint32 hf_isi_gpds_rx_byte_count = -1;
static guint32 hf_isi_gpds_transfer_status = -1;
static guint32 hf_isi_gpds_transfer_cause = -1;
static guint32 hf_isi_gpds_attach_status = -1;
static guint32 hf_isi_gpds_client_type = -1;
static guint32 hf_isi_gpds_mt_act_mode = -1;
static guint32 hf_isi_gpds_aol_context = -1;
static guint32 hf_isi_gpds_classc_mode = -1;
static guint32 hf_isi_gpds_attach_mode = -1;
static guint32 hf_isi_gpds_apn = -1;
static guint32 hf_isi_gpds_pdp_address = -1;
static guint32 hf_isi_gpds_reliability = -1;
static guint32 hf_isi_gpds_delay = -1;
static guint32 hf_isi_gpds_precedence = -1;
static guint32 hf_isi_gpds_peak_throughput = -1;
static guint32 hf_isi_gpds_mean_throughput = -1;
static guint32 hf_isi_gpds_traffic_class = -1;
static guint32 hf_isi_gpds_delivery_order = -1;
static guint32 hf_isi_gpds_delivery_of_erroneous_sdus = -1;
static guint32 hf_isi_gpds_residual_ber = -1;
static guint32 hf_isi_gpds_error_ratio = -1;
static guint32 hf_isi_gpds_transfer_delay = -1;
static guint32 hf_isi_gpds_max_sdu_size = -1;
static guint32 hf_isi_gpds_max_bitrate_uplink = -1;
static guint32 hf_isi_gpds_max_bitrate_downlink = -1;
static guint32 hf_isi_gpds_gua_bitrate_uplink = -1;
static guint32 hf_isi_gpds_gua_bitrate_downlink = -1;
static guint32 hf_isi_gpds_priority = -1;
static guint32 hf_isi_gpds_rel5_source_desc = -1;
static guint32 hf_isi_gpds_rel5_sgn_ind_flag = -1;
static guint32 hf_isi_gpds_pdns_address = -1;
static guint32 hf_isi_gpds_sdns_address = -1;
void proto_reg_handoff_isi_gpds(void) {
static gboolean initialized=FALSE;
if (!initialized) {
isi_gpds_handle = create_dissector_handle(dissect_isi_gpds, proto_isi);
dissector_add("isi.resource", 0x31, isi_gpds_handle);
}
}
void proto_register_isi_gpds(void) {
static hf_register_info hf[] = {
{ &hf_isi_gpds_cmd,
{ "Command", "isi.gpds.cmd", FT_UINT8, BASE_HEX, isi_gpds_id, 0x0, "Command", HFILL }},
{ &hf_isi_gpds_subblock_type,
{ "Subblock-Id", "isi.gpds.subblock_id", FT_UINT8, BASE_HEX, isi_gpds_subblock_id, 0x0, "Subblock-Id", HFILL }},
{ &hf_isi_gpds_cid,
{ "CID", "isi.gpds.cid", FT_UINT8, BASE_HEX, isi_gpds_cid, 0x0, "CID", HFILL }},
{ &hf_isi_gpds_primary_cid,
{ "Primary CID", "isi.gpds.primary_cid", FT_UINT8, BASE_HEX, isi_gpds_cid, 0x0, "Primary CID", HFILL }},
{ &hf_isi_gpds_pipe_handle,
{ "Pipe-Handle", "isi.gpds.pipe_handle", FT_UINT8, BASE_HEX, NULL, 0x0, "Pipe-Handle", HFILL }},
{ &hf_isi_gpds_ppp_mode,
{ "PPP Mode", "isi.gpds.ppp_mode", FT_UINT8, BASE_HEX, isi_gpds_ppp_mode, 0x0, "PPP Mode", HFILL }},
{ &hf_isi_gpds_status,
{ "Status", "isi.gpds.status", FT_UINT8, BASE_HEX, isi_gpds_status, 0x0, "Status", HFILL }},
{ &hf_isi_gpds_pdp_type,
{ "PDP Type", "isi.gpds.pdp_type", FT_UINT8, BASE_HEX, isi_gpds_pdp_type, 0x0, "PDP Type", HFILL }},
{ &hf_isi_gpds_context_type,
{ "Context Type", "isi.gpds.context_type", FT_UINT8, BASE_HEX, isi_gpds_context_type, 0x0, "Context Type", HFILL }},
{ &hf_isi_gpds_cause,
{ "Cause", "isi.gpds.cause", FT_UINT8, BASE_HEX, isi_gpds_cause, 0x0, "Cause", HFILL }},
{ &hf_isi_gpds_attach_type,
{ "Attach Type", "isi.gpds.attach_type", FT_UINT8, BASE_HEX, isi_gpds_attach_type, 0x0, "Attach Type", HFILL }},
{ &hf_isi_gpds_attach_status,
{ "Attach Status", "isi.gpds.attach_status", FT_UINT8, BASE_HEX, isi_gpds_attach_status, 0x0, "Attach Status", HFILL }},
{ &hf_isi_gpds_context_count,
{ "Context Count", "isi.gpds.context_count", FT_UINT8, BASE_DEC, NULL, 0x0, "Context Count", HFILL }},
{ &hf_isi_gpds_tx_byte_count,
{ "TX Bytes", "isi.gpds.tx_bytes", FT_UINT32, BASE_DEC, NULL, 0x0, "TX Bytes", HFILL }},
{ &hf_isi_gpds_rx_byte_count,
{ "RX Bytes", "isi.gpds.rx_bytes", FT_UINT32, BASE_DEC, NULL, 0x0, "RX Bytes", HFILL }},
{ &hf_isi_gpds_transfer_status,
{ "Transfer Status", "isi.gpds.transfer_status", FT_UINT8, BASE_HEX, isi_gpds_transfer_status, 0x0, "Transfer Status", HFILL }},
{ &hf_isi_gpds_transfer_cause,
{ "Transfer Cause", "isi.gpds.transfer_cause", FT_UINT8, BASE_HEX, isi_gpds_transfer_cause, 0x0, "Transfer Cause", HFILL }},
{ &hf_isi_gpds_client_type,
{ "Client Type", "isi.gpds.client_type", FT_UINT8, BASE_HEX, isi_gpds_client_type, 0x0, "Client Type", HFILL }},
{ &hf_isi_gpds_mt_act_mode,
{ "MT Act Mode", "isi.gpds.mt_act_mode", FT_UINT8, BASE_HEX, isi_gpds_mt_act_mode, 0x0, "MT Act Mode", HFILL }},
{ &hf_isi_gpds_aol_context,
{ "AOL Context", "isi.gpds.aol_context", FT_UINT8, BASE_HEX, isi_gpds_aol_context, 0x0, "AOL Context", HFILL }},
{ &hf_isi_gpds_classc_mode,
{ "ClassC Mode", "isi.gpds.classc_mode", FT_UINT8, BASE_HEX, isi_gpds_classc_mode, 0x0, "ClassC Mode", HFILL }},
{ &hf_isi_gpds_attach_mode,
{ "Attach Mode", "isi.gpds.attach_mode", FT_UINT8, BASE_HEX, isi_gpds_attach_mode, 0x0, "Attach Mode", HFILL }},
{ &hf_isi_gpds_apn,
{ "APN", "isi.gpds.apn", FT_STRING, BASE_NONE, NULL, 0x0, "APN", HFILL }},
{ &hf_isi_gpds_pdp_address,
{ "PDP Address", "isi.gpds.pdp_address", FT_STRING, BASE_NONE, NULL, 0x0, "PDP Address", HFILL }},
{ &hf_isi_gpds_precedence,
{ "Precedence", "isi.gpds.precedence", FT_UINT8, BASE_HEX, isi_gpds_precedence, 0x0, "Precedence", HFILL }},
{ &hf_isi_gpds_delay,
{ "Delay", "isi.gpds.delay", FT_UINT8, BASE_HEX, isi_gpds_delay, 0x0, "Delay", HFILL }},
{ &hf_isi_gpds_reliability,
{ "Relilability", "isi.gpds.reliability", FT_UINT8, BASE_HEX, isi_gpds_reliability, 0x0, "Reliability", HFILL }},
{ &hf_isi_gpds_peak_throughput,
{ "Peak Throughput", "isi.gpds.peak_througput", FT_UINT8, BASE_HEX, isi_gpds_peak_throughput, 0x0, "Peak Throughput", HFILL }},
{ &hf_isi_gpds_mean_throughput,
{ "Mean Throughput", "isi.gpds.mean_througput", FT_UINT8, BASE_HEX, isi_gpds_mean_throughput, 0x0, "Mean Througput", HFILL }},
{ &hf_isi_gpds_traffic_class,
{ "Traffic Class", "isi.gpds.traffic_class", FT_UINT8, BASE_HEX, isi_gpds_traffic_class, 0x0, "Traffic Class", HFILL }},
{ &hf_isi_gpds_delivery_order,
{ "Delivery Order", "isi.gpds.delivery_order", FT_UINT8, BASE_HEX, isi_gpds_delivery_order, 0x0, "Delivery Order", HFILL }},
{ &hf_isi_gpds_delivery_of_erroneous_sdus,
{ "Delivery of erroneous SDUs", "isi.gpds.deliver_of_erroneous_sdus", FT_UINT8, BASE_HEX, isi_gpds_delivery_of_erroneous_sdus, 0x0, "Delivery of erroneous SDUs", HFILL }},
{ &hf_isi_gpds_residual_ber,
{ "Residual BER", "isi.gpds.residual_ber", FT_UINT8, BASE_HEX, isi_gpds_residual_bers, 0x0, "Residual BER", HFILL }},
{ &hf_isi_gpds_error_ratio,
{ "Error Ratio", "isi.gpds.error_ratio", FT_UINT8, BASE_HEX, isi_gpds_error_ratio, 0x0, "Error Ratio", HFILL }},
{ &hf_isi_gpds_transfer_delay,
{ "Transfer Delay", "isi.gpds.transfer_delay", FT_UINT16, BASE_DEC, NULL, 0x0, "Transfer Delay", HFILL }},
{ &hf_isi_gpds_max_sdu_size,
{ "Max SDU size", "isi.gpds.max_sdu", FT_UINT16, BASE_DEC, NULL, 0x0, "Max SDU size", HFILL }},
{ &hf_isi_gpds_max_bitrate_uplink,
{ "Max Bitrate Uplink", "isi.gpds.max_bitrate_uplink", FT_UINT16, BASE_DEC, NULL, 0x0, "Max Bitrate Uplink", HFILL }},
{ &hf_isi_gpds_max_bitrate_downlink,
{ "Max Bitrate Downlink", "isi.gpds.max_bitrate_downlink", FT_UINT16, BASE_DEC, NULL, 0x0, "Max Bitrate Downlink", HFILL }},
{ &hf_isi_gpds_gua_bitrate_uplink,
{ "GUA Bitrate Uplink", "isi.gpds.gua_bitrate_uplink", FT_UINT16, BASE_DEC, NULL, 0x0, "GUA Bitrate Uplink", HFILL }},
{ &hf_isi_gpds_gua_bitrate_downlink,
{ "GUA Bitrate Downlink", "isi.gpds.gua_bitrate_downlink", FT_UINT16, BASE_DEC, NULL, 0x0, "GUA Bitrate Downlink", HFILL }},
{ &hf_isi_gpds_priority,
{ "Priority", "isi.gpds.priority", FT_UINT8, BASE_HEX, isi_gpds_priority, 0x0, "Priority", HFILL }},
{ &hf_isi_gpds_rel5_source_desc,
{ "Source Desc", "isi.gpds.rel5_source_desc", FT_UINT8, BASE_HEX, isi_gpds_rel5_source_desc, 0x0, "Source Desc", HFILL }},
{ &hf_isi_gpds_rel5_sgn_ind_flag,
{ "Sgn Ind Flag", "isi.gpds.rel5_sgn_ind_flag", FT_UINT8, BASE_HEX, isi_gpds_rel5_sgn_ind_flag, 0x0, "Sgn Ind Flag", HFILL }},
{ &hf_isi_gpds_pdns_address,
{ "PDNS Address", "isi.gpds.pdns_address", FT_STRING, BASE_NONE, NULL, 0x0, "PDNS Adress", HFILL }},
{ &hf_isi_gpds_sdns_address,
{ "SDNS Address", "isi.gpds.sdns_address", FT_STRING, BASE_NONE, NULL, 0x0, "SDNS Adress", HFILL }},
};
proto_register_field_array(proto_isi, hf, array_length(hf));
register_dissector("isi.gpds", dissect_isi_gpds, proto_isi);
}
static void _sub_gpds_qos99_neg_info(tvbuff_t *tvb, proto_tree *tree) {
proto_tree_add_item(tree, hf_isi_gpds_traffic_class, tvb, 2, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_delivery_order, tvb, 3, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_delivery_of_erroneous_sdus, tvb, 4, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_residual_ber, tvb, 5, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_error_ratio, tvb, 6, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_priority, tvb, 7, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_transfer_delay, tvb, 8, 2, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_max_sdu_size, tvb, 10, 2, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_max_bitrate_uplink, tvb, 12, 2, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_max_bitrate_downlink, tvb, 14, 2, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_gua_bitrate_uplink, tvb, 16, 2, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_gua_bitrate_downlink, tvb, 18, 2, FALSE);
}
static void _sub_gpds_qos_neg_info(tvbuff_t *tvb, proto_tree *tree) {
proto_tree_add_item(tree, hf_isi_gpds_precedence, tvb, 2, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_delay, tvb, 3, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_reliability, tvb, 4, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_peak_throughput, tvb, 5, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_mean_throughput, tvb, 6, 1, FALSE);
}
static void _sub_gpds_string(guint32 hf, guint8 offset, tvbuff_t *tvb, proto_tree *tree) {
guint8 l = tvb_get_guint8(tvb, offset);
proto_tree_add_string(tree, hf, tvb, offset+1, l, tvb_memdup(tvb, offset+1, l));
}
static void _sub_gpds_dns_address_req_info(tvbuff_t *tvb, proto_tree *tree) {
/* seems to be empty */
}
static void _sub_gpds_shared_rel5_qos_info(tvbuff_t *tvb, proto_tree *tree) {
proto_tree_add_item(tree, hf_isi_gpds_rel5_source_desc, tvb, 2, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_rel5_sgn_ind_flag, tvb, 3, 1, FALSE);
}
static void dissect_isi_gpds_subblock(guint8 sptype, tvbuff_t *tvb, packet_info *pinfo, proto_item *item, proto_tree *tree) {
switch(sptype) {
case 0x03: _sub_gpds_qos_neg_info(tvb, tree); break; /* GPDS_QOS_NEG_INFO */
case 0x04: _sub_gpds_string(hf_isi_gpds_pdp_address, 3, tvb, tree); break; /* GPDS_PDP_ADDRESS_INFO */
case 0x05: _sub_gpds_string(hf_isi_gpds_apn, 2, tvb, tree); break; /* GPDS_APN_INFO */
case 0x08: _sub_gpds_qos99_neg_info(tvb, tree); break; /* GPDS_QOS99_NEG_INFO */
case 0x0D: _sub_gpds_string(hf_isi_gpds_pdns_address, 3, tvb, tree); break; /* GPDS_PDNS_ADDRESS_INFO */
case 0x0E: _sub_gpds_string(hf_isi_gpds_sdns_address, 3, tvb, tree); break; /* GPDS_SDNS_ADDRESS_INFO */
case 0x90: _sub_gpds_dns_address_req_info(tvb, tree); break; /* GPDS_DNS_ADDRESS_REQ_INFO */
case 0xE4: _sub_gpds_qos99_neg_info(tvb, tree); break; /* GPDS_SHARED_QOS99_NEG_INFO */
case 0xF8: _sub_gpds_shared_rel5_qos_info(tvb, tree); break; /* GPDS_SHARED_REL5_QOS_INFO */
case 0x00: /* GPDS_COMP_INFO */
case 0x01: /* GPDS_QOS_REQ_INFO */
case 0x02: /* GPDS_QOS_MIN_INFO */
case 0x10: /* GPDS_FILT_SRC_IPV4_ADDR_INFO */
case 0x20: /* GPDS_FILT_SRC_IPV6_ADDR_INFO */
case 0x30: /* GPDS_FILT_PROTOCOL_INFO */
case 0x40: /* GPDS_FILT_DST_PORT_INFO */
case 0x41: /* GPDS_FILT_DST_PORT_RANGE_INFO */
case 0x50: /* GPDS_FILT_SRC_PORT_INFO */
case 0x51: /* GPDS_FILT_SRC_PORT_RANGE_INFO */
case 0x60: /* GPDS_FILT_SPI_INFO */
case 0x70: /* GPDS_FILT_TOS_INFO */
case 0x80: /* GPDS_FILT_FLOW_LABEL_INFO */
case 0x0A: /* GPDS_TFT_FILTER_INFO */
case 0x09: /* GPDS_TFT_INFO */
case 0x06: /* GPDS_QOS99_REQ_INFO */
case 0x07: /* GPDS_QOS99_MIN_INFO */
case 0x0B: /* GPDS_USERNAME_INFO */
case 0x0C: /* GPDS_PASSWORD_INFO */
case 0x0F: /* GPDS_CHALLENGE_INFO */
case 0xA0: /* GPDS_CONDITIONAL_DETACH_INFO */
case 0x11: /* GPDS_RESPONSE_INFO */
case 0xA1: /* GPDS_MBMS_SERVICE_BEARER_STATE */
case 0xA2: /* GPDS_MBMS_MULTICAST_PARAMS */
case 0xA4: /* GPDS_ACTIVATE_PDP_CONTEXT_REQUEST */
case 0xA5: /* GPDS_RESOURCE_CONF */
case 0xA3: /* GPDS_RESOURCE */
case 0xA6: /* GPDS_RESOURCE_CONF_REQUIRED */
case 0xA7: /* GPDS_PIPE_REDIRECTION_INFO */
case 0xE1: /* GPDS_SHARED_APN_INFO */
case 0xE0: /* GPDS_SHARED_COMP_INFO */
case 0xE2: /* GPDS_SHARED_QOS99_REQ_INFO */
case 0xE3: /* GPDS_SHARED_QOS99_MIN_INFO */
case 0xE6: /* GPDS_SHARED_FILT_SRC_IPV4_ADDR_INFO */
case 0xE8: /* GPDS_SHARED_FILT_PROTOCOL_INFO */
case 0xE9: /* GPDS_SHARED_FILT_DST_PORT_INFO */
case 0xEA: /* GPDS_SHARED_FILT_DST_PORT_RANGE_INFO */
case 0xEB: /* GPDS_SHARED_FILT_SRC_PORT_INFO */
case 0xEC: /* GPDS_SHARED_FILT_SRC_PORT_RANGE_INFO */
case 0xED: /* GPDS_SHARED_FILT_SPI_INFO */
case 0xEE: /* GPDS_SHARED_FILT_TOS_INFO */
case 0xEF: /* GPDS_SHARED_FILT_FLOW_LABEL_INFO */
case 0xF6: /* GPDS_SHARED_TFT_PACKET_FILTER_INFO */
case 0xF2: /* GPDS_SHARED_TFT_PARAMETER_IP_FLOW_INFO */
case 0xF1: /* GPDS_SHARED_TFT_PARAMETER_AUTH_TOKEN_INFO */
case 0xE5: /* GPDS_SHARED_TFT_INFO */
case 0xF3: /* GPDS_SHARED_PCSCF_ADDRESS_REQ_INFO */
case 0xF4: /* GPDS_SHARED_PCSCF_ADDRESS_INFO */
case 0xF5: /* GPDS_SHARED_POLICY_CONTROL_REJ_CODE_INFO */
case 0xF7: /* GPDS_SHARED_IM_CN_SIGNALING_FLAG_INFO */
case 0xF9: /* GPDS_SHARED_RADIO_ACTIVITY_REQ_INFO */
case 0xFB: /* GPDS_SHARED_MBMS_SERVICE_LIST_INFO */
case 0xFC: /* GPDS_SHARED_INITIAL_DL_DCH_RATE */
default:
expert_add_info_format(pinfo, item, PI_PROTOCOL, PI_WARN, "unsupported subblock");
break;
}
}
static void dissect_isi_gpds(tvbuff_t *tvb, packet_info *pinfo, proto_item *isitree) {
proto_item *item = NULL;
proto_tree *tree = NULL;
guint8 cmd, code;
if(isitree) {
item = proto_tree_add_text(isitree, tvb, 0, -1, "Payload");
tree = proto_item_add_subtree(item, ett_isi_msg);
proto_tree_add_item(tree, hf_isi_gpds_cmd, tvb, 0, 1, FALSE);
cmd = tvb_get_guint8(tvb, 0);
switch (cmd) {
case 0x00: /* GPDS_LL_CONFIGURE_REQ */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS LL Configure Request");
proto_tree_add_item(tree, hf_isi_gpds_cid, tvb, 1, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_pipe_handle, tvb, 2, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_ppp_mode, tvb, 3, 1, FALSE);
break;
case 0x01: /* GPDS_LL_CONFIGURE_RESP */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS LL Configure Response");
proto_tree_add_item(tree, hf_isi_gpds_cid, tvb, 1, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_status, tvb, 2, 1, FALSE);
break;
case 0x02: /* GPDS_CONTEXT_ID_CREATE_REQ */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS Context ID Create Request");
break;
case 0x03: /* GPDS_CONTEXT_ID_CREATE_RESP */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS Context ID Create Response");
proto_tree_add_item(tree, hf_isi_gpds_cid, tvb, 1, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_status, tvb, 2, 1, FALSE);
break;
case 0x04: /* GPDS_CONTEXT_ID_CREATE_IND */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS Context ID Create Indication");
proto_tree_add_item(tree, hf_isi_gpds_cid, tvb, 1, 1, FALSE);
break;
case 0x06: /* GPDS_CONTEXT_CONFIGURE_REQ */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS Context Configure Request");
proto_tree_add_item(tree, hf_isi_gpds_cid, tvb, 1, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_pdp_type, tvb, 2, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_context_type, tvb, 3, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_primary_cid, tvb, 4, 1, FALSE);
dissect_isi_subpacket(hf_isi_gpds_subblock_type, 7, tvb, pinfo, item, tree, dissect_isi_gpds_subblock);
break;
case 0x07: /* GPDS_CONTEXT_CONFIGURE_RESP */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS Context Configure Response");
proto_tree_add_item(tree, hf_isi_gpds_cid, tvb, 1, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_status, tvb, 2, 1, FALSE);
break;
case 0x08: /* GPDS_CONTEXT_ACTIVATE_REQ */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS Context Activate Request");
proto_tree_add_item(tree, hf_isi_gpds_cid, tvb, 1, 1, FALSE);
dissect_isi_subpacket(hf_isi_gpds_subblock_type, 3, tvb, pinfo, item, tree, dissect_isi_gpds_subblock);
break;
case 0x09: /* GPDS_CONTEXT_ACTIVATE_RESP */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS Context Activate Response");
proto_tree_add_item(tree, hf_isi_gpds_cid, tvb, 1, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_status, tvb, 2, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_cause, tvb, 3, 1, FALSE);
dissect_isi_subpacket(hf_isi_gpds_subblock_type, 7, tvb, pinfo, item, tree, dissect_isi_gpds_subblock);
break;
case 0x0A: /* GPDS_CONTEXT_ACTIVATE_IND */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS Context Activate Indication");
proto_tree_add_item(tree, hf_isi_gpds_cid, tvb, 1, 1, FALSE);
dissect_isi_subpacket(hf_isi_gpds_subblock_type, 3, tvb, pinfo, item, tree, dissect_isi_gpds_subblock);
break;
case 0x15: /* GPDS_ATTACH_IND */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS Attach Indication");
proto_tree_add_item(tree, hf_isi_gpds_attach_type, tvb, 1, 1, FALSE);
break;
case 0x19: /* GPDS_STATUS_REQ */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS Status Request");
break;
case 0x1A: /* GPDS_STATUS_RESP */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS Status Response");
proto_tree_add_item(tree, hf_isi_gpds_attach_status, tvb, 1, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_context_count, tvb, 2, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_tx_byte_count, tvb, 3, 4, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_rx_byte_count, tvb, 7, 4, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_transfer_status, tvb, 11, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_transfer_cause, tvb, 12, 1, FALSE);
// TODO: the cid list
break;
case 0x1E: /* GPDS_TRANSFER_STATUS_IND */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS Transfer Status Indication");
proto_tree_add_item(tree, hf_isi_gpds_transfer_status, tvb, 1, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_transfer_cause, tvb, 2, 1, FALSE);
break;
case 0x22: /* GPDS_CONTEXT_STATUS_REQ */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS Context Status Request");
proto_tree_add_item(tree, hf_isi_gpds_cid, tvb, 1, 1, FALSE);
break;
case 0x23: /* GPDS_CONTEXT_STATUS_RESP */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS Context Status Response");
proto_tree_add_item(tree, hf_isi_gpds_cid, tvb, 1, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_status, tvb, 2, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_tx_byte_count, tvb, 3, 4, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_rx_byte_count, tvb, 7, 4, FALSE);
dissect_isi_subpacket(hf_isi_gpds_subblock_type, 15, tvb, pinfo, item, tree, dissect_isi_gpds_subblock);
break;
case 0x24: /* GPDS_CONTEXT_STATUS_IND */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS Context Status Indication");
proto_tree_add_item(tree, hf_isi_gpds_cid, tvb, 2, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_tx_byte_count, tvb, 3, 4, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_rx_byte_count, tvb, 7, 4, FALSE);
break;
case 0x25: /* GPDS_CONTEXT_ACTIVATING_IND */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS Context Activating Indication");
proto_tree_add_item(tree, hf_isi_gpds_cid, tvb, 1, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_client_type, tvb, 2, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_pdp_type, tvb, 3, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_context_type, tvb, 4, 1, FALSE);
dissect_isi_subpacket(hf_isi_gpds_subblock_type, 7, tvb, pinfo, item, tree, dissect_isi_gpds_subblock);
break;
case 0x30: /* GPDS_CONFIGURATION_INFO_REQ */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS Configuration Info Request");
break;
case 0x31: /* GPDS_CONFIGURATION_INFO_RESP */
col_set_str(pinfo->cinfo, COL_INFO, "GPDS Configuration Info Response");
proto_tree_add_item(tree, hf_isi_gpds_attach_mode, tvb, 1, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_mt_act_mode, tvb, 2, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_classc_mode, tvb, 3, 1, FALSE);
proto_tree_add_item(tree, hf_isi_gpds_aol_context, tvb, 4, 1, FALSE);
break;
case 0xF0: /* GPDS_COMMON_MESSAGE */
dissect_isi_common("GPDS", tvb, pinfo, tree);
break;
case 0x05: /* GPDS_CONTEXT_ID_DELETE_IND */
case 0x20: /* GPDS_LL_BIND_REQ */
case 0x21: /* GPDS_LL_BIND_RESP */
case 0x2A: /* GPDS_CONTEXT_MODIFY_REQ */
case 0x2B: /* GPDS_CONTEXT_MODIFY_RESP */
case 0x2C: /* GPDS_CONTEXT_MODIFY_IND */
case 0x1F: /* GPDS_CONTEXT_ACTIVATE_FAIL_IND */
case 0x0B: /* GPDS_CONTEXT_DEACTIVATE_REQ */
case 0x0C: /* GPDS_CONTEXT_DEACTIVATE_RESP */
case 0x0D: /* GPDS_CONTEXT_DEACTIVATE_IND */
case 0x2F: /* GPDS_CONTEXT_DEACTIVATING_IND */
case 0x0E: /* GPDS_CONTEXT_NWI_ACT_REQUEST_IND */
case 0x0F: /* GPDS_CONTEXT_NWI_ACT_REJECT_REQ */
case 0x10: /* GPDS_CONTEXT_NWI_ACT_REJECT_RESP */
case 0x11: /* GPDS_CONFIGURE_REQ */
case 0x12: /* GPDS_CONFIGURE_RESP */
case 0x13: /* GPDS_ATTACH_REQ */
case 0x14: /* GPDS_ATTACH_RESP */
case 0x2D: /* GPDS_ATTACH_FAIL_IND */
case 0x16: /* GPDS_DETACH_REQ */
case 0x17: /* GPDS_DETACH_RESP */
case 0x18: /* GPDS_DETACH_IND */
case 0x1B: /* GPDS_SMS_PDU_SEND_REQ */
case 0x1C: /* GPDS_SMS_PDU_SEND_RESP */
case 0x1D: /* GPDS_SMS_PDU_RECEIVE_IND */
case 0x32: /* GPDS_CONFIGURATION_INFO_IND */
case 0x33: /* GPDS_CONTEXT_AUTH_REQ */
case 0x34: /* GPDS_CONTEXT_AUTH_RESP */
case 0x35: /* GPDS_TEST_MODE_REQ */
case 0x36: /* GPDS_TEST_MODE_RESP */
case 0x37: /* GPDS_RADIO_ACTIVITY_IND */
case 0x38: /* GPDS_FORCED_READY_STATE_REQ */
case 0x39: /* GPDS_FORCED_READY_STATE_RESP */
case 0x3A: /* GPDS_CONTEXTS_CLEAR_REQ */
case 0x3B: /* GPDS_CONTEXTS_CLEAR_RESP */
case 0x3C: /* GPDS_MBMS_SERVICE_SELECTION_REQ */
case 0x3D: /* GPDS_MBMS_SERVICE_SELECTION_RESP */
case 0x3E: /* GPDS_MBMS_STATUS_IND */
case 0x3F: /* GPDS_MBMS_CONTEXT_CREATE_REQ */
case 0x40: /* GPDS_MBMS_CONTEXT_CREATE_RESP */
case 0x41: /* GPDS_MBMS_CONTEXT_ACTIVATE_REQ */
case 0x42: /* GPDS_MBMS_CONTEXT_ACTIVATE_RESP */
case 0x43: /* GPDS_MBMS_CONTEXT_DELETE_REQ */
case 0x44: /* GPDS_MBMS_CONTEXT_DELETE_RESP */
case 0x45: /* GPDS_MBMS_CONTEXT_DELETE_IND */
case 0x46: /* GPDS_MBMS_SERVICE_SELECTION_IND */
case 0x47: /* GPDS_MBMS_SERVICE_AVAILABLE_IND */
case 0x48: /* GPDS_TEST_REQ */
case 0x49: /* GPDS_TEST_RESP */
case 0x50: /* GPDS_RESOURCE_CONTROL_IND */
case 0x51: /* GPDS_RESOURCE_CONTROL_REQ */
case 0x52: /* GPDS_RESOURCE_CONTROL_RESP */
case 0x54: /* GPDS_RESOURCE_CONF_REQ */
case 0x55: /* GPDS_RESOURCE_CONF_RESP */
case 0x53: /* GPDS_RESOURCE_CONF_IND */
case 0x56: /* GPDS_PROPERTY_SET_REQ */
case 0x57: /* GPDS_PROPERTY_SET_RESP */
case 0xEE: /* GPDS_RESP */
default:
col_set_str(pinfo->cinfo, COL_INFO, "unhandled GPDS packet");
expert_add_info_format(pinfo, item, PI_PROTOCOL, PI_WARN, "unsupported packet");
break;
}
}
}

9
src/isi-gpds.h Normal file
View File

@ -0,0 +1,9 @@
#ifndef _ISI_GPDS_H
#define _ISI_GPDS_H
void proto_reg_handoff_isi_gpds(void);
void proto_register_isi_gpds(void);
#endif

View File

@ -371,6 +371,7 @@ void proto_reg_handoff_isi(void) {
proto_reg_handoff_isi_call();
proto_reg_handoff_isi_light();
proto_reg_handoff_isi_commgr();
proto_reg_handoff_isi_gpds();
proto_reg_handoff_isi_selftest();
#ifdef ISI_USB
@ -445,6 +446,7 @@ void proto_register_isi(void) {
proto_register_isi_call();
proto_register_isi_light();
proto_register_isi_commgr();
proto_register_isi_gpds();
proto_register_isi_selftest();
}