aboutsummaryrefslogtreecommitdiffstats
path: root/asn1
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2007-02-17 20:04:10 +0000
committerAnders Broman <anders.broman@ericsson.com>2007-02-17 20:04:10 +0000
commit0e706015c2a15d31a0ef665deefebb33beef91c1 (patch)
tree4791de8cc0297da2fcbf31d3bc7d490e5d31e841 /asn1
parent38515fbf227156abf83ab99889794c04db4ebedc (diff)
From Florent Drouin:
Update the Camel dissector to have the same structure as the gsm map dissector. Now the dissector correctly handles the Tcap return error component. Some improvement have been made for ApplyChargingReport too. svn path=/trunk/; revision=20835
Diffstat (limited to 'asn1')
-rw-r--r--asn1/camel/camel.asn307
-rw-r--r--asn1/camel/camel.cnf65
-rw-r--r--asn1/camel/packet-camel-template.c283
-rw-r--r--asn1/camel/packet-camel-template.h5
4 files changed, 414 insertions, 246 deletions
diff --git a/asn1/camel/camel.asn b/asn1/camel/camel.asn
index f5b95d3ff4..43e88ceaf2 100644
--- a/asn1/camel/camel.asn
+++ b/asn1/camel/camel.asn
@@ -30,15 +30,13 @@ IMPORTS
Ext-BasicServiceCode,
IMEI,
IMSI,
--- ISDN-AddressString,
LAIFixedLength
FROM MAP-CommonDataTypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0)
gsm-Network(1) modules(3) map-CommonDataTypes(18) version9(9)}
-
--- CUG-Index,
--- CUG-Interlock,
- CUG-Info,
+
+ CUG-Index,
+ CUG-Interlock,
Ext-QoS-Subscribed,
Ext2-QoS-Subscribed,
GeographicalInformation,
@@ -48,7 +46,6 @@ gsm-Network(1) modules(3) map-CommonDataTypes(18) version9(9)}
MS-Classmark2,
QoS-Subscribed,
RAIdentity,
--- SubscriberState,
GPRSChargingID
FROM MAP-MS-DataTypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0)
gsm-Network(1) modules(3) map-MS-DataTypes(11) version9(9)}
@@ -62,6 +59,192 @@ gsm-Network(1) modules(3) map-CH-DataTypes(13) version9(9)}
-- MACRO OPERATION
-- ================================
+-- ROS def's
+-- Module Remote-Operations-Apdus (H.450.1:02/1998)
+--Remote-Operations-Apdus {itu-t recommendation h 450 1 version1(0)
+-- remote-operations-apdus(11)} DEFINITIONS AUTOMATIC TAGS ::=
+--BEGIN
+
+Component ::= CHOICE {
+ invoke [1] IMPLICIT Invoke,
+ returnResultLast [2] IMPLICIT ReturnResult,
+ returnError [3] IMPLICIT ReturnError,
+ reject [4] IMPLICIT Reject
+}
+
+Invoke ::= SEQUENCE {
+ invokeID InvokeIdType,
+ linkedID [0] IMPLICIT InvokeIdType OPTIONAL,
+ opCode OPERATION,
+ invokeparameter InvokeParameter OPTIONAL
+}
+InvokeParameter ::= ANY
+
+
+-- ANY is filled by the single ASN.1 data type following the keyword PARAMETER or the keyword ARGUMENT
+-- in the type definition of a particular operation.
+
+ReturnResult ::= SEQUENCE {
+ invokeID InvokeIdType,
+ resultretres SEQUENCE {
+ opCode OPERATION,
+ returnparameter ReturnResultParameter OPTIONAL
+ } OPTIONAL
+}
+
+ReturnResultParameter ::= ANY
+
+-- ANY is filled by the single ASN.1 data type following the keyword RESULT in the type definition
+-- of a particular operation.
+
+ReturnError ::= SEQUENCE {
+ invokeID InvokeIdType,
+ errorCode ERROR,
+ parameter ReturnErrorParameter OPTIONAL }
+
+ReturnErrorParameter ::= ANY
+
+-- ANY is filled by the single ASN.1 data type following the keyword PARAMETER in the type definition
+-- of a particular error.
+
+Reject ::= SEQUENCE {
+ invokeIDRej CHOICE {
+ derivable InvokeIdType,
+ not-derivable NULL },
+ problem CHOICE {
+ generalProblem [0] IMPLICIT GeneralProblem,
+ invokeProblem [1] IMPLICIT InvokeProblem,
+ returnResultProblem [2] IMPLICIT ReturnResultProblem,
+ returnErrorProblem [3] IMPLICIT ReturnErrorProblem } }
+
+InvokeIdType ::= INTEGER (-128..127)
+
+
+OPERATION ::= CHOICE {
+ localValue OperationLocalvalue,
+ globalValue OBJECT IDENTIFIER }
+
+
+CAMELOperationLocalvalue ::= INTEGER{
+ initialDP (0),
+ assistRequestInstructions (16),
+ establishTemporaryConnection (17),
+ disconnectForwardConnection (18),
+ connectToResource (19),
+ connect (20),
+ releaseCall (22),
+ requestReportBCSMEvent (23),
+ eventReportBCSM (24),
+ collectInformation (27),
+ continue (31),
+ initiateCallAttempt (32),
+ resetTimer (33),
+ furnishChargingInformation (34),
+ applyCharging (35),
+ applyChargingReport (36),
+ callGap (41),
+ callInformationReport (44),
+ callInformationRequest (45),
+ sendChargingInformation (46),
+ playAnnouncement (47),
+ promptAndCollectUserInformation (48),
+ specializedResourceReport (49),
+ cancel (53),
+ activityTest (55),
+ continueWithArgument (56),
+ initialDPSMS (60),
+ furnishChargingInformationSMS (61),
+ connectSMS (62),
+ requestReportSMSEvent (63),
+ eventReportSMS (64),
+ continueSMS (65),
+ releaseSMS (66),
+ resetTimerSMS (67),
+ activityTestGPRS (70),
+ applyChargingGPRS (71),
+ applyChargingReportGPRS (72),
+ cancelGPRS (73),
+ connectGPRS (74),
+ continueGPRS (75),
+ entityReleasedGPRS (76),
+ furnishChargingInformationGPRS (77),
+ initialDPGPRS (78),
+ releaseGPRS (79),
+ eventReportGPRS (80),
+ requestReportGPRSEvent (81),
+ resetTimerGPRS (82),
+ sendChargingInformationGPRS (83),
+ dFCWithArgument (86),
+ continueWithArgument (88),
+ disconnectLeg (90),
+ moveLeg (93),
+ splitLeg (95),
+ entityReleased (96),
+ playTone (97)
+}
+
+OperationLocalvalue ::= CAMELOperationLocalvalue
+
+
+ERROR ::= CHOICE {
+ localErrorValue LocalErrorcode,
+ globalErrorValue OBJECT IDENTIFIER
+}
+
+CAMELLocalErrorcode ::= INTEGER{
+ canceled (0),
+ cancelFailed (1),
+ eTCFailed (3),
+ improperCallerResponse (4),
+ missingCustomerRecord (6),
+ missingParameter (7),
+ parameterOutOfRange (8),
+ requestedInfoError (10),
+ systemFailure (11),
+ taskRefused (12),
+ unavailableResource (13),
+ unexpectedComponentSequence (14),
+ unexpectedDataValue (15),
+ unexpectedParameter (16),
+ unknownLegID (17),
+ unknownPDPID (50),
+ unknownCSID (51)
+}
+
+LocalErrorcode ::= CAMELLocalErrorcode
+
+-- PROBLEMS
+
+GeneralProblem ::= INTEGER { unrecognizedComponent (0),
+ mistypedComponent (1),
+ badlyStructuredComponent (2) }
+
+InvokeProblem ::= INTEGER { duplicateInvokeID (0),
+ unrecognizedOperation (1),
+ mistypedParameter (2),
+ resourceLimitation (3),
+ initiatingRelease (4),
+ unrecognizedLinkedID (5),
+ linkedResponseUnexpected (6),
+ unexpectedLinkedOperation (7) }
+
+ReturnResultProblem ::= INTEGER { unrecognizedInvokeID (0),
+ returnResultUnexpected (1),
+ mistypedParameter (2) }
+
+ReturnErrorProblem ::= INTEGER { unrecognizedInvokeID (0),
+ returnErrorUnexpected (1),
+ unrecognizedError (2),
+ unexpectedError (3),
+ mistypedParameter (4) }
+
+
+--END
+
+--
+--
+--
+
@@ -100,9 +283,10 @@ AdditionalCallingPartyNumber ::= Digits
-- AlertingPattern notes: not recursive, exported,
-- locally refd 2 times, import refd 0 times
-AlertingPattern ::=
-
-OCTET STRING (SIZE (3))
+AlertingPattern ::= OCTET STRING (SIZE(3))
+-- Indicates a specific pattern that is used to alert a subscriber
+-- (e.g. distinctive ringing, tones, etc.).
+-- The encoding of the last octet of this parameter is as defined in 3GPP TS 29.002 [11].
-- This one Commented out by Javier Acuņa (javier.acuna@sixbell.cl)
@@ -326,7 +510,7 @@ CallSegmentFailure ::= SEQUENCE {
CallSegmentID ::= INTEGER (1..cAPSpecificBoundsSetnumOfCSs)
CallSegmentToCancel ::= SEQUENCE {
- invokeID [0] InvokeID OPTIONAL,
+ callInvokeID [0] InvokeID OPTIONAL,
callSegmentID [1] CallSegmentID OPTIONAL,
...
}
@@ -348,19 +532,34 @@ CAMEL-AChBillingChargingCharacteristics ::= CHOICE
-- CAMEL-CallResult notes: not recursive, exported,
-- locally refd 1 times, import refd 0 times
+--CAMEL-CallResult ::= CHOICE
+--{
+-- timeDurationChargingResult [0] SEQUENCE {
+-- partyToCharge [0] ReceivingSideID,
+-- timeInformation [1] TimeInformation,
+-- legActive [2] BOOLEAN DEFAULT TRUE,
+-- callLegReleasedAtTcpExpiry [3] NULL OPTIONAL,
+-- extensions [4] ExtensionsArray OPTIONAL,
+-- aChChargingAddress [5] AChChargingAddress,
+-- ...
+-- }
+-- }
+
CAMEL-CallResult ::= CHOICE
{
- timeDurationChargingResult [0] SEQUENCE {
- partyToCharge [0] ReceivingSideID,
- timeInformation [1] TimeInformation,
- legActive [2] BOOLEAN DEFAULT TRUE,
- callLegReleasedAtTcpExpiry [3] NULL OPTIONAL,
- extensions [4] Extensions OPTIONAL,
- aChChargingAddress [5] AChChargingAddress,
- ...
- }
- }
+ timeDurationChargingResult [0] TimeDurationChargingResult,
+ void [99] NULL
+}
+TimeDurationChargingResult ::= SEQUENCE {
+ partyToCharge [0] ReceivingSideID,
+ timeInformation [1] TimeInformation,
+ legActive [2] BOOLEAN OPTIONAL,
+ callLegReleasedAtTcpExpiry [3] NULL OPTIONAL,
+ extensions [4] ExtensionsArray OPTIONAL,
+ aChChargingAddress [5] AChChargingAddress OPTIONAL,
+ ...
+}
-- CAMEL-FCIBillingChargingCharacteristics notes: not recursive, exported,
@@ -891,9 +1090,9 @@ EventTypeSMS ::= ENUMERATED
t-smsDelivery (13)
}
-- Values sms-CollectedInfo and sms-DeliveryRequested may be used for TDPs only.
-
-Extensions ::= SEQUENCE SIZE (1..cAPSpecificBoundSetnumOfExtensions) OF ExtensionField
-
+-- Replace by ExtensionsArray
+--Extensions ::= SEQUENCE SIZE (1..cAPSpecificBoundSetnumOfExtensions) OF ExtensionField
+--
-- FCIBillingChargingCharacteristics notes: not recursive, exported,
-- locally refd 2 times, import refd 0 times
@@ -1094,10 +1293,10 @@ GPRSEventType ::= ENUMERATED
-- GPRSMSClass notes: not recursive, exported,
-- locally refd 1 times, import refd 0 times
GPRSMSClass ::= SEQUENCE
-{
+ {
mSNetworkCapability [0] MSNetworkCapability,
mSRadioAccessCapability [1] MSRadioAccessCapability OPTIONAL
-}
+ }
-- InbandInfo notes: not recursive, exported,
-- locally refd 1 times, import refd 0 times
@@ -1137,7 +1336,8 @@ InitiatorOfServiceChange ::= ENUMERATED
-- InvokeID notes: not recursive, exported,
-- locally refd 1 times, import refd 0 times
-InvokeID ::= TCInvokeIdSet
+--InvokeID ::= TCInvokeIdSet
+InvokeID ::= InvokeIdType
-- IPRoutingAddress notes: not recursive, exported,
-- locally refd 2 times, import refd 0 times
@@ -1782,19 +1982,17 @@ SpecializedResourceReportArg ::= CHOICE {
-- CUG-Interlock notes: not recursive, exported,
-- locally refd 3 times, import refd 0 times
-CUG-Interlock ::=
-
-OCTET STRING (SIZE (4))
+-- imported from gsmmap
+-- CUG-Interlock ::= OCTET STRING (SIZE (4))
-- CUG-Index notes: not recursive, exported,
-- locally refd 1 times, import refd 0 times
-CUG-Index ::= INTEGER (0..32767)
+-- imported from gsmmap
+-- CUG-Index ::= INTEGER (0..32767)
-- CallReferenceNumber notes: not recursive, exported,
-- locally refd 1 times, import refd 0 times
-CallReferenceNumber ::=
-
-OCTET STRING (SIZE (1..8))
+CallReferenceNumber ::= OCTET STRING (SIZE (1..8))
-- SuppressionOfAnnouncement notes: not recursive, exported,
-- locally refd 2 times, import refd 0 times
@@ -1876,7 +2074,7 @@ BothwayThroughConnectionInd ::= ENUMERATED
-- TCInvokeIdSet notes: not recursive, exported,
-- locally refd 1 times, import refd 0 times
-TCInvokeIdSet ::= INTEGER (-128..127)
+-- TCInvokeIdSet ::= INTEGER (-128..127)
-- ExtensionSetExtensionType notes: not recursive, exported,
-- locally refd 1 times, import refd 0 times
@@ -1977,16 +2175,18 @@ OCTET STRING (SIZE (cAPSpecificBoundSetminSCIBillingChargingLength..cAPSpecificB
-- locally refd 1 times, import refd 0 times
CallresultoctetPDU ::= OCTET STRING (SIZE (cAPSpecificBoundSetminCallResultLength..cAPSpecificBoundSetmaxCallResultLength))
-ApplyChargingReportArg ::= SEQUENCE {
- callresultOctet CallresultoctetPDU
- }
+--ApplyChargingReportArg ::= SEQUENCE {
+-- callresultOctet CallresultoctetPDU
+-- }
-- (
-- CONTAINING CamelCallResult
-- ENCODED BY enc-BER
-- )
-- CallResult type
-
+ApplyChargingReportArg ::= SEQUENCE {
+ callresultOctet CAMEL-CallResult
+ }
-- CancelArg notes: not recursive, exported,
-- locally refd 1 times, import refd 0 times
@@ -1994,7 +2194,7 @@ CancelArg ::=
CHOICE
{
- invokeID [0] InvokeID,
+ callInvokeID [0] InvokeID,
allRequests [1] NULL,
callSegmentToCancel [2] CallSegmentToCancel
@@ -2160,7 +2360,7 @@ InitialDPArgExtension ::= SEQUENCE {
InitiateCallAttemptArg ::= SEQUENCE {
destinationRoutingAddress [0] DestinationRoutingAddress,
- extensions [4] Extensions OPTIONAL,
+ extensions [4] ExtensionsArray OPTIONAL,
legToBeCreated [5] LegID OPTIONAL,
newCallSegment [6] CallSegmentID OPTIONAL,
callingPartyNumber [30] CallingPartyNumber OPTIONAL,
@@ -2173,20 +2373,20 @@ InitiateCallAttemptArg ::= SEQUENCE {
InitiateCallAttemptRes ::= SEQUENCE {
supportedCamelPhases [0] SupportedCamelPhases OPTIONAL,
offeredCamel4Functionalities [1] OfferedCamel4Functionalities OPTIONAL,
- extensions [2] Extensions OPTIONAL,
+ extensions [2] ExtensionsArray OPTIONAL,
...
}
MoveLegArg ::= SEQUENCE{
legIDToMove [0] LegID,
- extensions [2] Extensions OPTIONAL,
+ extensions [2] ExtensionsArray OPTIONAL,
...
}
PlayToneArg ::= SEQUENCE {
legOrCallSegment [0] LegOrCallSegment,
bursts [1] Burst,
- extensions [2] Extensions OPTIONAL,
+ extensions [2] ExtensionsArray OPTIONAL,
...
}
@@ -2223,6 +2423,7 @@ SupportedCamelPhases ::= BIT STRING {
phase3 (2 ),
phase4 (3 )}
+
OfferedCamel4Functionalities ::= BIT STRING {
initiateCallAttempt (0),
splitLeg (1),
@@ -2291,9 +2492,7 @@ ApplyChargingArg ::= SEQUENCE
...
}
-ExtensionsArray ::=
- SEQUENCE SIZE (1..10) OF ExtensionField
-
+ExtensionsArray ::= SEQUENCE SIZE (1..cAPSpecificBoundSetnumOfExtensions) OF ExtensionField
-- AssistRequestInstructionsArg notes: not recursive, exported,
@@ -2405,7 +2604,7 @@ ContinueWithArgumentArgExtension ::= SEQUENCE {
DisconnectLegArg ::= SEQUENCE {
legToBeReleased [0] LegID,
releaseCause [1] Cause OPTIONAL,
- extensions [2] Extensions OPTIONAL,
+ extensions [2] ExtensionsArray OPTIONAL,
...
}
EntityReleasedArg ::= CHOICE {
@@ -2415,7 +2614,7 @@ EntityReleasedArg ::= CHOICE {
DisconnectForwardConnectionWithArgumentArg ::= SEQUENCE {
callSegmentID [1] CallSegmentID OPTIONAL,
- extensions [2] Extensions OPTIONAL,
+ extensions [2] ExtensionsArray OPTIONAL,
...
}
@@ -2464,7 +2663,7 @@ ResetTimerArg ::=
{
timerID [0] TimerID DEFAULT tssf,
timervalue [1] TimerValue,
- extensions [2] Extensions OPTIONAL,
+ extensions [2] ExtensionsArray OPTIONAL,
callSegmentID [3] CallSegmentID OPTIONAL,
...
}
@@ -2486,7 +2685,7 @@ SendChargingInformationArg ::=
SplitLegArg ::= SEQUENCE {
legToBeSplit [0] LegID,
newCallSegment [1] CallSegmentID OPTIONAL,
- extensions [2] Extensions OPTIONAL,
+ extensions [2] ExtensionsArray OPTIONAL,
...
}
@@ -3009,7 +3208,7 @@ DEFINITIONS IMPLICIT TAGS ::= BEGIN
-- PARAMETER
CancelFailedPARAM ::= SEQUENCE
{
- problem [0] ENUMERATED
+ cancelproblem [0] ENUMERATED
{
unknownOperation (0),
tooLate (1),
@@ -3030,6 +3229,9 @@ RequestedInfoErrorPARAM ::= ENUMERATED
}
-- The requested information cannot be found.
+SystemFailurePARAM ::= UnavailableNetworkResource
+-- The operation could not be completed due to a system failure at the serving physical entity.
+
--taskRefused ERROR ::= {
-- PARAMETER
TaskRefusedPARAM ::= ENUMERATED
@@ -3038,6 +3240,9 @@ TaskRefusedPARAM ::= ENUMERATED
unobtainable (1),
congestion (2)
}
+-- An entity normally capable of the task requested cannot or chooses not to perform the task at
+-- this time. This includes error situations like congestion and unobtainable address as used in
+-- e.g. the connect operation.)
END
diff --git a/asn1/camel/camel.cnf b/asn1/camel/camel.cnf
index b90e9708a3..e68be422e2 100644
--- a/asn1/camel/camel.cnf
+++ b/asn1/camel/camel.cnf
@@ -10,8 +10,6 @@ MAP-CH-DataTypes gsm_map
#.INCLUDE ../gsmmap/gsm_map-exp.cnf
-#.EXPORTS
-
#.PDU
@@ -21,6 +19,41 @@ MAP-CH-DataTypes gsm_map
#.TYPE_RENAME
#.FIELD_RENAME
+#----------------------------------------------------------------------------------------
+#.PDU
+Component
+#----------------------------------------------------------------------------------------
+#.FN_BODY InvokeParameter
+ offset = dissect_invokeData(pinfo, tree, tvb, offset);
+
+#----------------------------------------------------------------------------------------
+#.FN_BODY ReturnResultParameter
+ offset = dissect_returnResultData(pinfo, tree, tvb, offset);
+
+#----------------------------------------------------------------------------------------
+#.FN_BODY ReturnErrorParameter
+ offset = dissect_returnErrorData(pinfo, tree, tvb, offset);
+
+#----------------------------------------------------------------------------------------
+#.FN_PARS CAMELOperationLocalvalue
+
+ VAL_PTR = &opcode
+
+#.FN_BODY CAMELOperationLocalvalue
+
+%(DEFAULT_BODY)s
+ if (check_col(pinfo->cinfo, COL_INFO)){
+ col_append_fstr(pinfo->cinfo, COL_INFO,
+ val_to_str(opcode, camel_opr_code_strings, "Unknown CAMEL (%%u)"));
+ col_append_str(pinfo->cinfo, COL_INFO, " ");
+ col_set_fence(pinfo->cinfo, COL_INFO);
+ }
+ gp_camelsrt_info->opcode=opcode;
+
+#----------------------------------------------------------------------------------------
+#.FN_PARS CAMELLocalErrorcode
+
+ VAL_PTR = &errorCode
#----------------------------------------------------------------------------------------
#.FN_BODY CallingPartyNumber
@@ -52,6 +85,7 @@ MAP-CH-DataTypes gsm_map
offset += len;
#.END
+
#----------------------------------------------------------------------------------------
#.FN_PARS ISDN-AddressString
VAL_PTR = &parameter_tvb
@@ -110,6 +144,7 @@ tvbuff_t *parameter_tvb;
return offset;
#.END
+
#----------------------------------------------------------------------------------------
#.FN_PARS Q850Cause
VAL_PTR = &camel_tvb
@@ -240,7 +275,9 @@ tvbuff_t *parameter_tvb;
time);
return 7; /* 7 octets eaten*/
+#.END
+#----------------------------------------------------------------------------------------
#.FN_PARS BearerCap
VAL_PTR = &parameter_tvb
@@ -255,7 +292,9 @@ tvbuff_t *parameter_tvb;
return offset;
dissect_q931_bearer_capability_ie(parameter_tvb, 0, tvb_length_remaining(parameter_tvb,0), tree);
+#.END
+#----------------------------------------------------------------------------------------
#.FN_PARS RedirectionInformation
VAL_PTR = &parameter_tvb
@@ -270,7 +309,9 @@ tvbuff_t *parameter_tvb;
return offset;
dissect_isup_redirection_information_parameter(parameter_tvb, tree, NULL);
+#.END
+#----------------------------------------------------------------------------------------
#.FN_PARS OriginalCalledPartyID
VAL_PTR = &parameter_tvb
@@ -284,7 +325,9 @@ tvbuff_t *parameter_tvb;
if (!parameter_tvb)
return offset;
dissect_isup_original_called_number_parameter(parameter_tvb, tree, NULL);
+#.END
+#----------------------------------------------------------------------------------------
#.FN_PARS RedirectingPartyID
VAL_PTR = &parameter_tvb
@@ -298,7 +341,9 @@ tvbuff_t *parameter_tvb;
if (!parameter_tvb)
return offset;
dissect_isup_redirecting_number_parameter(parameter_tvb, tree, NULL);
+#.END
+#----------------------------------------------------------------------------------------
#.FN_PARS MSNetworkCapability
VAL_PTR = &parameter_tvb
@@ -315,7 +360,9 @@ tvbuff_t *parameter_tvb;
item = get_ber_last_created_item();
subtree = proto_item_add_subtree(item, ett_camel_MSNetworkCapability);
de_gmm_ms_net_cap(parameter_tvb, subtree, 0, tvb_length_remaining(parameter_tvb,0), NULL, 0);
+#.END
+#----------------------------------------------------------------------------------------
#.FN_PARS MSRadioAccessCapability
VAL_PTR = &parameter_tvb
@@ -332,7 +379,9 @@ tvbuff_t *parameter_tvb;
item = get_ber_last_created_item();
subtree = proto_item_add_subtree(item, ett_camel_MSRadioAccessCapability);
de_gmm_ms_radio_acc_cap(parameter_tvb, subtree, 0, tvb_length_remaining(parameter_tvb,0), NULL, 0);
+#.END
+#----------------------------------------------------------------------------------------
#.FN_PARS AccessPointName
VAL_PTR = &parameter_tvb
@@ -349,8 +398,9 @@ tvbuff_t *parameter_tvb;
item = get_ber_last_created_item();
subtree = proto_item_add_subtree(item, ett_camel_AccessPointName);
de_sm_apn(parameter_tvb, subtree, 0, tvb_length_remaining(parameter_tvb,0), NULL, 0);
+#.END
-
+#----------------------------------------------------------------------------------------
#.FN_PARS PDPTypeOrganization
VAL_PTR = &parameter_tvb
@@ -363,7 +413,9 @@ tvbuff_t *parameter_tvb;
if (!parameter_tvb)
return offset;
PDPTypeOrganization = (tvb_get_guint8(parameter_tvb,0) &0x0f);
+#.END
+#----------------------------------------------------------------------------------------
#.FN_PARS PDPTypeNumber
VAL_PTR = &parameter_tvb
@@ -390,7 +442,9 @@ tvbuff_t *parameter_tvb;
default:
break;
}
+#.END
+#----------------------------------------------------------------------------------------
#.FN_PARS PDPAddress
VAL_PTR = &parameter_tvb
@@ -424,7 +478,9 @@ tvbuff_t *parameter_tvb;
break;
}
+#.END
+#----------------------------------------------------------------------------------------
#.FN_BODY CellGlobalIdOrServiceAreaIdOrLAI
proto_item *item;
proto_tree *subtree;
@@ -441,7 +497,10 @@ tvbuff_t *parameter_tvb;
}else{
dissect_gsm_map_LAIFixedLength(TRUE, tvb, start_offset, pinfo, subtree, hf_camel_locationAreaId);
}
+#.END
+#----------------------------------------------------------------------------------------
+#----------------------------------------------------------------------------------------
#.TYPE_ATTR
CallingPartysCategory TYPE = FT_UINT16 DISPLAY = BASE_DEC STRINGS = VALS(isup_calling_partys_category_value)
diff --git a/asn1/camel/packet-camel-template.c b/asn1/camel/packet-camel-template.c
index 33fcb2d68e..e200f446f5 100644
--- a/asn1/camel/packet-camel-template.c
+++ b/asn1/camel/packet-camel-template.c
@@ -43,6 +43,7 @@
#include <epan/conversation.h>
#include <epan/oid_resolv.h>
#include <epan/tap.h>
+#include "epan/expert.h"
#include <stdio.h>
#include <string.h>
@@ -66,17 +67,12 @@
int proto_camel = -1;
int date_format = 1; /*assume european date format */
int camel_tap = -1;
+/* Global variables */
+static guint32 opcode=0;
+static guint32 errorCode=0;
+
static int hf_digit = -1;
-static int hf_camel_invokeCmd = -1; /* Opcode */
-static int hf_camel_invokeid = -1; /* INTEGER */
-static int hf_camel_linkedID = -1; /* INTEGER */
-static int hf_camel_absent = -1; /* NULL */
-static int hf_camel_invokeId = -1; /* InvokeId */
-static int hf_camel_invoke = -1; /* InvokePDU */
-static int hf_camel_returnResult = -1; /* InvokePDU */
-static int hf_camel_returnResult_result = -1;
-static int hf_camel_imsi_digits = -1;
static int hf_camel_addr_extension = -1;
static int hf_camel_addr_natureOfAddressIndicator = -1;
static int hf_camel_addr_numberingPlanInd = -1;
@@ -106,6 +102,12 @@ int hf_camelsrt_DeltaTime80=-1;
static struct camelsrt_info_t * gp_camelsrt_info;
+/* Forward declarations */
+static int dissect_invokeData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset);
+static int dissect_returnResultData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset);
+static int dissect_returnErrorData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset);
+
+
#include "packet-camel-hf.c"
gboolean gcamel_HandleSRT=FALSE;
@@ -114,13 +116,7 @@ extern gboolean gcamel_DisplaySRT;
/* Initialize the subtree pointers */
static gint ett_camel = -1;
-static gint ett_camel_InvokeId = -1;
-static gint ett_camel_InvokePDU = -1;
-static gint ett_camel_ReturnResultPDU = -1;
-static gint ett_camel_ReturnResult_result = -1;
-static gint ett_camel_camelPDU = -1;
static gint ett_camelisup_parameter = -1;
-static gint ett_camel_addr = -1;
static gint ett_camel_isdn_address_string = -1;
static gint ett_camel_MSRadioAccessCapability = -1;
static gint ett_camel_MSNetworkCapability = -1;
@@ -143,8 +139,7 @@ static int application_context_version;
static guint8 PDPTypeOrganization;
static guint8 PDPTypeNumber;
-
-static int dissect_invokeCmd(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset);
+static char camel_number_to_char(int );
static guint8 dissect_RP_cause_ie(tvbuff_t *tvb, guint32 offset, guint len,
proto_tree *tree, int hf_cause_value, guint8 *cause_value);
@@ -298,7 +293,28 @@ const value_string camel_opr_code_strings[] = {
{0, NULL}
};
-char camel_number_to_char(int number)
+static const value_string camel_err_code_string_vals[] = {
+ { 0, "Canceled"},
+ { 1, "CancelFailed"},
+ { 3, "ETCFailed"},
+ { 4, "ImproperCallerResponse"},
+ { 6, "MissingCustomerRecord"},
+ { 7, "MissingParameter"},
+ { 8, "ParameterOutOfRange"},
+ { 10, "RequestedInfoError"},
+ { 11, "SystemFailure"},
+ { 12, "TaskRefused"},
+ { 13, "UnavailableResource"},
+ { 14, "UnexpectedComponentSequence"},
+ { 15, "UnexpectedDataValue"},
+ { 16, "UnexpectedParameter"},
+ { 17, "UnknownLegID"},
+ { 50, "UnknownPDPID"},
+ { 51, "UnknownCSID"},
+ { 0, NULL}
+};
+
+static char camel_number_to_char(int number)
{
if (number < 10)
return (char) (number + 48 ); /* this is ASCII specific */
@@ -341,23 +357,14 @@ dissect_RP_cause_ie(tvbuff_t *tvb, guint32 offset, _U_ guint len,
return(curr_offset - offset);
}
-static guint32 opcode=0;
-
-static int
-dissect_camel_Opcode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
- offset = dissect_ber_integer(FALSE, pinfo, tree, tvb, offset, hf_index, &opcode);
- gp_camelsrt_info->opcode=opcode;
-
- if (check_col(pinfo->cinfo, COL_INFO)){
- /* Add Camel Opcode to INFO column */
- col_append_fstr(pinfo->cinfo, COL_INFO, val_to_str(opcode, camel_opr_code_strings, "Unknown Camel (%u)"));
- col_append_fstr(pinfo->cinfo, COL_INFO, " ");
- col_set_fence(pinfo->cinfo, COL_INFO);
- }
- return offset;
-}
static int dissect_invokeData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ proto_item *cause;
+ gint8 bug_class;
+ gboolean bug_pc, bug_ind_field;
+ gint32 bug_tag;
+ guint32 bug_len1;
+
switch(opcode){
case 0: /*InitialDP*/
offset=dissect_camel_InitialDPArg(FALSE, tvb, offset, pinfo, tree, -1);
@@ -399,13 +406,19 @@ static int dissect_invokeData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tv
offset=dissect_camel_ResetTimerArg(FALSE, tvb, offset, pinfo, tree, -1);
break;
case 34: /*FurnishChargingInformation*/
- offset=dissect_camel_FurnishChargingInformationArg(FALSE, tvb, offset, pinfo, tree, -1);
+ /* offset=dissect_camel_FurnishChargingInformationArg(TRUE, tvb, offset, pinfo, tree, -1); */
+ offset = get_ber_identifier(tvb, offset, &bug_class, &bug_pc, &bug_tag);
+ offset = get_ber_length(tree, tvb, offset, &bug_len1, &bug_ind_field);
+ offset=dissect_camel_CAMEL_FCIBillingChargingCharacteristics(TRUE, tvb, offset, pinfo, tree, -1);
break;
case 35: /*ApplyCharging*/
offset=dissect_camel_ApplyChargingArg(FALSE, tvb, offset, pinfo, tree, -1);
break;
case 36: /*ApplyChargingReport*/
- offset=dissect_camel_ApplyChargingReportArg(TRUE, tvb, offset, pinfo, tree, -1);
+ /* offset=dissect_camel_ApplyChargingReportArg(TRUE, tvb, offset, pinfo, tree, -1); */
+ offset = get_ber_identifier(tvb, offset, &bug_class, &bug_pc, &bug_tag);
+ offset = get_ber_length(tree, tvb, offset, &bug_len1, &bug_ind_field);
+ offset=dissect_camel_CAMEL_CallResult(TRUE, tvb, offset, pinfo, tree, -1);
break;
case 41: /*CallGap*/
offset=dissect_camel_CallGapArg(FALSE, tvb, offset, pinfo, tree, -1);
@@ -438,7 +451,10 @@ static int dissect_invokeData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tv
offset=dissect_camel_InitialDPSMSArg(FALSE, tvb, offset, pinfo, tree, -1);
break;
case 61: /*FurnishChargingInformationSMS*/
- offset=dissect_camel_FurnishChargingInformationSMSArg(FALSE, tvb, offset, pinfo, tree, -1);
+ /* offset=dissect_camel_FurnishChargingInformationSMSArg(FALSE, tvb, offset, pinfo, tree, -1); */
+ offset = get_ber_identifier(tvb, offset, &bug_class, &bug_pc, &bug_tag);
+ offset = get_ber_length(tree, tvb, offset, &bug_len1, &bug_ind_field);
+ offset=dissect_camel_CAMEL_FCISMSBillingChargingCharacteristics(TRUE, tvb, offset, pinfo, tree, -1);
break;
case 62: /*ConnectSMS*/
offset=dissect_camel_ConnectSMSArg(FALSE, tvb, offset, pinfo, tree, -1);
@@ -477,7 +493,10 @@ static int dissect_invokeData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tv
offset=dissect_camel_EntityReleasedGPRSArg(FALSE, tvb, offset, pinfo, tree, -1);
break;
case 77: /*FurnishChargingInformationGPRS*/
- offset=dissect_camel_FurnishChargingInformationGPRSArg(FALSE, tvb, offset, pinfo, tree, -1);
+ /* offset=dissect_camel_FurnishChargingInformationGPRSArg(FALSE, tvb, offset, pinfo, tree, -1); */
+ offset = get_ber_identifier(tvb, offset, &bug_class, &bug_pc, &bug_tag);
+ offset = get_ber_length(tree, tvb, offset, &bug_len1, &bug_ind_field);
+ offset=dissect_camel_CAMEL_FCIGPRSBillingChargingCharacteristics(TRUE, tvb, offset, pinfo, tree, -1);
break;
case 78: /*InitialDPGPRS*/
offset=dissect_camel_InitialDPGPRSArg(FALSE, tvb, offset, pinfo, tree, -1);
@@ -520,7 +539,9 @@ static int dissect_invokeData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tv
offset= dissect_camel_PlayToneArg(FALSE, tvb, offset, pinfo, tree, -1);
break;
default:
- proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob");
+ cause=proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob");
+ proto_item_set_expert_flags(cause, PI_MALFORMED, PI_WARN);
+ expert_add_info_format(pinfo, cause, PI_MALFORMED, PI_WARN, "Unknown invokeData %d",opcode);
/* todo call the asn.1 dissector */
}
return offset;
@@ -528,6 +549,8 @@ static int dissect_invokeData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tv
static int dissect_returnResultData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ proto_item *cause;
+
switch(opcode){
case 32: /*initiateCallAttempt*/
offset=dissect_camel_InitiateCallAttemptRes(FALSE, tvb, offset, pinfo, tree, -1);
@@ -542,117 +565,36 @@ static int dissect_returnResultData(packet_info *pinfo, proto_tree *tree, tvbuff
/* ActivityTestGPRS: no arguments - do nothing */
break;
default:
- proto_tree_add_text(tree, tvb, offset, -1, "Unknown returnResultData blob");
+ cause=proto_tree_add_text(tree, tvb, offset, -1, "Unknown returnResultData blob");
+ proto_item_set_expert_flags(cause, PI_MALFORMED, PI_WARN);
+ expert_add_info_format(pinfo, cause, PI_MALFORMED, PI_WARN, "Unknown returnResultData %d",opcode);
}
return offset;
}
-static int
-dissect_invokeCmd(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- return dissect_camel_Opcode(FALSE, tvb, offset, pinfo, tree, hf_camel_invokeCmd);
-}
-
-static int dissect_invokeid(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- return dissect_ber_integer(FALSE, pinfo, tree, tvb, offset, hf_camel_invokeid, NULL);
-}
-
-
-static const value_string InvokeId_vals[] = {
- { 0, "invokeid" },
- { 1, "absent" },
- { 0, NULL }
-};
-
-static int dissect_absent(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- return dissect_camel_NULL(FALSE, tvb, offset, pinfo, tree, hf_camel_absent);
-}
-
-static const ber_choice_t InvokeId_choice[] = {
- { 0, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_invokeid },
- { 1, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_absent },
- { 0, 0, 0, 0, NULL }
-};
-
-static int
-dissect_camel_InvokeId(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
- offset = dissect_ber_choice(pinfo, tree, tvb, offset,
- InvokeId_choice, hf_index, ett_camel_InvokeId, NULL);
-
- return offset;
-}
-static int dissect_invokeId(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- return dissect_camel_InvokeId(FALSE, tvb, offset, pinfo, tree, hf_camel_invokeId);
-}
-static int dissect_linkedID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- return dissect_ber_integer(TRUE, pinfo, tree, tvb, offset, hf_camel_linkedID, NULL);
-}
-
-static const ber_sequence_t InvokePDU_sequence[] = {
- { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_invokeId },
- { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_linkedID_impl },
- { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_invokeCmd },
- { BER_CLASS_UNI, -1/*depends on Cmd*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_invokeData },
- { 0, 0, 0, NULL }
-};
-
-static int
-dissect_camel_InvokePDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
- offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
- InvokePDU_sequence, hf_index, ett_camel_InvokePDU);
-
- return offset;
-}
-static int dissect_invoke_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- return dissect_camel_InvokePDU(TRUE, tvb, offset, pinfo, tree, hf_camel_invoke);
-}
-
-static const ber_sequence_t ReturnResult_result_sequence[] = {
- { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_invokeCmd },
- { BER_CLASS_UNI, -1/*depends on Cmd*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_returnResultData },
- { 0, 0, 0, NULL }
-};
-static int
-dissect_returnResult_result(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- offset = dissect_ber_sequence(FALSE, pinfo, tree, tvb, offset,
- ReturnResult_result_sequence, hf_camel_returnResult_result, ett_camel_ReturnResult_result);
-
- return offset;
-}
-
-static const ber_sequence_t ReturnResultPDU_sequence[] = {
- { BER_CLASS_UNI, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_invokeId },
- { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_returnResult_result },
- { 0, 0, 0, NULL }
-};
-
-static int
-dissect_camel_returnResultPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
- offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
- ReturnResultPDU_sequence, hf_index, ett_camel_ReturnResultPDU);
+static int dissect_returnErrorData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ proto_item *cause;
+ switch(errorCode) {
+ case 1: /*CancelFailed*/
+ offset=dissect_camel_CancelFailedPARAM(TRUE, tvb, offset, pinfo, tree, -1);
+ break;
+ case 10: /*RequestedInfoError*/
+ offset=dissect_camel_RequestedInfoErrorPARAM(TRUE, tvb, offset, pinfo, tree, -1);
+ break;
+ case 11: /*SystemFailure*/
+ offset=dissect_camel_SystemFailurePARAM(TRUE, tvb, offset, pinfo, tree, -1);
+ break;
+ case 12: /*TaskRefused*/
+ offset=dissect_camel_TaskRefusedPARAM(TRUE, tvb, offset, pinfo, tree, -1);
+ break;
+ default:
+ cause=proto_tree_add_text(tree, tvb, offset, -1, "Unknown returnErrorData blob");
+ proto_item_set_expert_flags(cause, PI_MALFORMED, PI_WARN);
+ expert_add_info_format(pinfo, cause, PI_MALFORMED, PI_WARN, "Unknown returnErrorData %d",errorCode);
+ }
return offset;
}
-static int dissect_returnResult_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- return dissect_camel_returnResultPDU(TRUE, tvb, offset, pinfo, tree, hf_camel_returnResult);
-}
-
-static const value_string camelPDU_vals[] = {
- { 1, "Invoke " },
- { 2, "ReturnResult " },
- { 3, "ReturnError " },
- { 4, "Reject " },
- { 0, NULL }
-};
-
-static const ber_choice_t camelPDU_choice[] = {
- { 1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_invoke_impl },
- { 2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_returnResult_impl },
-#ifdef REMOVED
- { 3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_returnError_impl },
- { 4, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_reject_impl },
-#endif
- { 0, 0, 0, 0, NULL }
-};
static guint8 camel_pdu_type = 0;
static guint8 camel_pdu_size = 0;
@@ -709,11 +651,11 @@ dissect_camel_camelPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, pac
if (check_col(pinfo->cinfo, COL_INFO)){
/* Populate the info column with PDU type*/
- col_set_str(pinfo->cinfo, COL_INFO, val_to_str(camel_pdu_type, camelPDU_vals, "Unknown Camel (%u)"));
+ col_set_str(pinfo->cinfo, COL_INFO, val_to_str(camel_pdu_type, camel_Component_vals, "Unknown Camel (%u)"));
+ col_append_fstr(pinfo->cinfo, COL_INFO, " ");
}
- offset = dissect_ber_choice(pinfo, tree, tvb, offset,
- camelPDU_choice, hf_index, ett_camel_camelPDU, NULL);
+ offset = dissect_camel_Component(FALSE, tvb, 0, pinfo, tree, hf_index);
return offset;
}
@@ -801,40 +743,7 @@ void proto_register_camel(void) {
{ "Cause indicator", "camel.cause_indicator",
FT_UINT8, BASE_DEC, VALS(q850_cause_code_vals), 0x7f,
"", HFILL }},
- { &hf_camel_invokeCmd,
- { "invokeCmd", "camel.invokeCmd",
- FT_UINT32, BASE_DEC, VALS(camel_opr_code_strings), 0,
- "InvokePDU/invokeCmd", HFILL }},
- { &hf_camel_invokeid,
- { "invokeid", "camel.invokeid",
- FT_INT32, BASE_DEC, NULL, 0,
- "InvokeId/invokeid", HFILL }},
- { &hf_camel_linkedID,
- { "linkedid", "camel.linkedid",
- FT_INT32, BASE_DEC, NULL, 0,
- "LinkedId/linkedid", HFILL }},
-
- { &hf_camel_absent,
- { "absent", "camel.absent",
- FT_NONE, BASE_NONE, NULL, 0,
- "InvokeId/absent", HFILL }},
- { &hf_camel_invokeId,
- { "invokeId", "camel.invokeId",
- FT_UINT32, BASE_DEC, VALS(InvokeId_vals), 0,
- "InvokePDU/invokeId", HFILL }},
- { &hf_camel_invoke,
- { "invoke", "camel.invoke",
- FT_NONE, BASE_NONE, NULL, 0,
- "camelPDU/invoke", HFILL }},
- { &hf_camel_returnResult,
- { "returnResult", "camel.returnResult",
- FT_NONE, BASE_NONE, NULL, 0,
- "camelPDU/returnResult", HFILL }},
- { &hf_camel_imsi_digits,
- { "Imsi digits", "camel.imsi_digits",
- FT_STRING, BASE_NONE, NULL, 0,
- "Imsi digits", HFILL }},
- { &hf_camel_addr_extension,
+ { &hf_camel_addr_extension,
{ "Extension", "camel.addr_extension",
FT_BOOLEAN, 8, TFS(&camel_extension_value), 0x80,
"Extension", HFILL }},
@@ -966,18 +875,12 @@ void proto_register_camel(void) {
/* List of subtrees */
static gint *ett[] = {
&ett_camel,
- &ett_camel_InvokeId,
- &ett_camel_InvokePDU,
- &ett_camel_ReturnResultPDU,
- &ett_camel_ReturnResult_result,
- &ett_camel_camelPDU,
&ett_camelisup_parameter,
- &ett_camel_addr,
- &ett_camel_isdn_address_string,
- &ett_camel_MSRadioAccessCapability,
- &ett_camel_MSNetworkCapability,
- &ett_camel_AccessPointName,
- &ett_camel_pdptypenumber,
+ &ett_camel_isdn_address_string,
+ &ett_camel_MSRadioAccessCapability,
+ &ett_camel_MSNetworkCapability,
+ &ett_camel_AccessPointName,
+ &ett_camel_pdptypenumber,
&ett_camel_stat,
#include "packet-camel-ettarr.c"
diff --git a/asn1/camel/packet-camel-template.h b/asn1/camel/packet-camel-template.h
index 3153472ba2..ccc0e9fadc 100644
--- a/asn1/camel/packet-camel-template.h
+++ b/asn1/camel/packet-camel-template.h
@@ -34,8 +34,9 @@
#ifndef PACKET_camel_H
#define PACKET_camel_H
-char camel_number_to_char(int );
-
+void proto_reg_handoff_camel(void);
+void proto_register_camel(void);
+
/* Defines for the camel taps */
#define camel_MAX_NUM_OPR_CODES 256