Added a dissector table for AttributeId localForm.

Use correct object identifier in ModificationList.

svn path=/trunk/; revision=35894
This commit is contained in:
Stig Bjørlykke 2011-02-10 10:11:38 +00:00
parent 60297df554
commit 1ba57f4c04
3 changed files with 70 additions and 36 deletions

View File

@ -266,15 +266,19 @@ RejectProblem
attributeform = ATTRIBUTE_GLOBAL_FORM;
%(DEFAULT_BODY)s
#.FN_BODY AttributeId/localForm
#.FN_BODY AttributeId/localForm VAL_PTR = &attribute_local_id
attributeform = ATTRIBUTE_LOCAL_FORM;
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_cmip_localForm, NULL);
%(DEFAULT_BODY)s
#.FN_BODY Attribute/value
/*XXX handle local form here */
if(attributeform==ATTRIBUTE_GLOBAL_FORM){
offset=call_ber_oid_callback(attribute_identifier_id, tvb, offset, actx->pinfo, tree);
} else if (dissector_try_uint(attribute_id_dissector_table, attribute_local_id, tvb, actx->pinfo, tree)) {
offset=tvb_length (tvb);
} else {
offset=dissect_unknown_ber(actx->pinfo, tvb, offset, tree);
}
#.FN_PARS AttributeValueAssertion/id
FN_VARIANT = _str VAL_PTR = &attributevalueassertion_id
@ -446,8 +450,14 @@ RejectProblem
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
#.FN_BODY SetArgument/modificationList/_item/attributeValue
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
if(attributeform==ATTRIBUTE_GLOBAL_FORM){
offset=call_ber_oid_callback(attribute_identifier_id, tvb, offset, actx->pinfo, tree);
} else if (dissector_try_uint(attribute_id_dissector_table, attribute_local_id, tvb, actx->pinfo, tree)) {
offset=tvb_length (tvb);
} else {
offset=dissect_unknown_ber(actx->pinfo, tvb, offset, tree);
}
#.FN_PARS SpecificErrorInfo/errorId
FN_VARIANT = _str HF_INDEX = hf_cmip_errorId_OID VAL_PTR = &object_identifier_id
@ -458,8 +468,8 @@ RejectProblem
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
#.FN_BODY InvalidArgumentValue/eventValue/eventInfo
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
#.FN_BODY ActionReply/actionReplyInfo
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);

View File

@ -63,6 +63,9 @@ static gint ett_cmip = -1;
static guint32 opcode;
/* Dissector table */
static dissector_table_t attribute_id_dissector_table;
#include "packet-cmip-table.c"
static int opcode_type;
@ -74,6 +77,7 @@ static int opcode_type;
static int attributeform;
#define ATTRIBUTE_LOCAL_FORM 0
#define ATTRIBUTE_GLOBAL_FORM 1
static int attribute_local_id;
static const char *attribute_identifier_id;
static const char *attributevalueassertion_id;
@ -198,6 +202,8 @@ void proto_register_cmip(void) {
#include "packet-cmip-dis-tab.c"
oid_add_from_string("discriminatorId(1)","2.9.3.2.7.1");
attribute_id_dissector_table = register_dissector_table("cmip.attribute_id", "CMIP Attribute Id", FT_UINT32, BASE_DEC);
}

View File

@ -478,6 +478,9 @@ static gint ett_cmip_T_modificationList_item = -1;
static guint32 opcode;
/* Dissector table */
static dissector_table_t attribute_id_dissector_table;
/*--- Included file: packet-cmip-table.c ---*/
#line 1 "packet-cmip-table.c"
@ -530,7 +533,7 @@ static const value_string cmip_error_code_vals[] = {
/*--- End of included file: packet-cmip-table.c ---*/
#line 67 "packet-cmip-template.c"
#line 70 "packet-cmip-template.c"
static int opcode_type;
#define OPCODE_INVOKE 1
@ -541,6 +544,7 @@ static int opcode_type;
static int attributeform;
#define ATTRIBUTE_LOCAL_FORM 0
#define ATTRIBUTE_GLOBAL_FORM 1
static int attribute_local_id;
static const char *attribute_identifier_id;
static const char *attributevalueassertion_id;
@ -641,7 +645,7 @@ static const char *objectclass_identifier_id;
#define noInvokeId NULL
/*--- End of included file: packet-cmip-val.h ---*/
#line 89 "packet-cmip-template.c"
#line 93 "packet-cmip-template.c"
/*--- Included file: packet-cmip-fn.c ---*/
#line 1 "packet-cmip-fn.c"
@ -672,7 +676,9 @@ static int
dissect_cmip_T_attributeIdlocalForm(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 270 "cmip.cnf"
attributeform = ATTRIBUTE_LOCAL_FORM;
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_cmip_localForm, NULL);
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
&attribute_local_id);
@ -727,7 +733,7 @@ dissect_cmip_AccessControl(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int off
static int
dissect_cmip_T_objectClass_globalForm(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 426 "cmip.cnf"
#line 430 "cmip.cnf"
objectclassform = OBJECTCLASS_GLOBAL_FORM;
offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_index, &objectclass_identifier_id);
@ -739,7 +745,7 @@ dissect_cmip_T_objectClass_globalForm(gboolean implicit_tag _U_, tvbuff_t *tvb _
static int
dissect_cmip_T_objectClasslocalForm(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 431 "cmip.cnf"
#line 435 "cmip.cnf"
objectclassform = OBJECTCLASS_LOCAL_FORM;
@ -784,7 +790,7 @@ dissect_cmip_T_id(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_,
static int
dissect_cmip_T_attributeValueAssertionvalue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 282 "cmip.cnf"
#line 286 "cmip.cnf"
offset=call_ber_oid_callback(attributevalueassertion_id, tvb, offset, actx->pinfo, tree);
@ -948,12 +954,16 @@ dissect_cmip_Scope(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_,
static int
dissect_cmip_AttributeValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 274 "cmip.cnf"
/*XXX handle local form here */
if(attributeform==ATTRIBUTE_GLOBAL_FORM){
offset=call_ber_oid_callback(attribute_identifier_id, tvb, offset, actx->pinfo, tree);
} else if (dissector_try_uint(attribute_id_dissector_table, attribute_local_id, tvb, actx->pinfo, tree)) {
offset=tvb_length (tvb);
} else {
offset=dissect_unknown_ber(actx->pinfo, tvb, offset, tree);
}
return offset;
}
@ -1117,7 +1127,7 @@ dissect_cmip_ActionTypeId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offs
static int
dissect_cmip_T_actionInfoArg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 437 "cmip.cnf"
#line 441 "cmip.cnf"
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
@ -1274,11 +1284,11 @@ dissect_cmip_NoSuchArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of
static int
dissect_cmip_T_eventInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 461 "cmip.cnf"
#line 471 "cmip.cnf"
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
return offset;
}
@ -1379,7 +1389,7 @@ dissect_cmip_ActionError(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offse
static int
dissect_cmip_T_actionReplyInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 464 "cmip.cnf"
#line 474 "cmip.cnf"
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
@ -1461,7 +1471,7 @@ dissect_cmip_ModifyOperator(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of
static int
dissect_cmip_T_attributeValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 458 "cmip.cnf"
#line 468 "cmip.cnf"
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
@ -1689,7 +1699,7 @@ dissect_cmip_DeleteResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offs
static int
dissect_cmip_T_eventReplyInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 446 "cmip.cnf"
#line 450 "cmip.cnf"
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
@ -1716,7 +1726,7 @@ dissect_cmip_EventReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset
static int
dissect_cmip_EventReportArgumentEventInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 443 "cmip.cnf"
#line 447 "cmip.cnf"
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
@ -1983,7 +1993,7 @@ dissect_cmip_T_errorId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset
static int
dissect_cmip_T_errorInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 455 "cmip.cnf"
#line 465 "cmip.cnf"
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
@ -2092,9 +2102,15 @@ dissect_cmip_NoSuchEventType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int o
static int
dissect_cmip_T_attributevalue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 449 "cmip.cnf"
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
#line 453 "cmip.cnf"
if(attributeform==ATTRIBUTE_GLOBAL_FORM){
offset=call_ber_oid_callback(attribute_identifier_id, tvb, offset, actx->pinfo, tree);
} else if (dissector_try_uint(attribute_id_dissector_table, attribute_local_id, tvb, actx->pinfo, tree)) {
offset=tvb_length (tvb);
} else {
offset=dissect_unknown_ber(actx->pinfo, tvb, offset, tree);
}
return offset;
@ -2330,7 +2346,7 @@ dissect_cmip_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U
static int
dissect_cmip_T_information(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 471 "cmip.cnf"
#line 481 "cmip.cnf"
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
@ -2427,7 +2443,7 @@ dissect_cmip_AttributeList(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int off
static int
dissect_cmip_T_oldAttributeValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 474 "cmip.cnf"
#line 484 "cmip.cnf"
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
@ -2439,7 +2455,7 @@ dissect_cmip_T_oldAttributeValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, i
static int
dissect_cmip_T_newAttributeValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 477 "cmip.cnf"
#line 487 "cmip.cnf"
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
@ -3215,7 +3231,7 @@ dissect_cmip_T_serviceUseridentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U
static int
dissect_cmip_T_details(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 482 "cmip.cnf"
#line 492 "cmip.cnf"
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
@ -3338,7 +3354,7 @@ dissect_cmip_T_featureIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, i
static int
dissect_cmip_T_featureInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 487 "cmip.cnf"
#line 497 "cmip.cnf"
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
@ -3669,7 +3685,7 @@ dissect_cmip_T_linkedId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset
static int
dissect_cmip_InvokeArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 285 "cmip.cnf"
#line 289 "cmip.cnf"
switch(opcode){
case 0: /* M-eventreport */
offset = dissect_cmip_EventReportArgument(FALSE, tvb, offset, actx, tree, -1);
@ -3737,7 +3753,7 @@ dissect_cmip_Invoke(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_
static int
dissect_cmip_ResultArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 323 "cmip.cnf"
#line 327 "cmip.cnf"
switch(opcode){
case 0: /* M-eventreport*/
@ -3814,7 +3830,7 @@ dissect_cmip_ReturnResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offs
static int
dissect_cmip_T_parameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 357 "cmip.cnf"
#line 361 "cmip.cnf"
switch(opcode){
case 19: /* classInstanceConflict */
@ -4364,7 +4380,7 @@ static void dissect_WeekMask_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, prot
/*--- End of included file: packet-cmip-fn.c ---*/
#line 90 "packet-cmip-template.c"
#line 94 "packet-cmip-template.c"
@ -5563,7 +5579,7 @@ void proto_register_cmip(void) {
NULL, HFILL }},
/*--- End of included file: packet-cmip-hfarr.c ---*/
#line 184 "packet-cmip-template.c"
#line 188 "packet-cmip-template.c"
};
/* List of subtrees */
@ -5695,7 +5711,7 @@ void proto_register_cmip(void) {
&ett_cmip_T_modificationList_item,
/*--- End of included file: packet-cmip-ettarr.c ---*/
#line 190 "packet-cmip-template.c"
#line 194 "packet-cmip-template.c"
};
/* Register protocol */
@ -5780,9 +5796,11 @@ void proto_register_cmip(void) {
/*--- End of included file: packet-cmip-dis-tab.c ---*/
#line 199 "packet-cmip-template.c"
#line 203 "packet-cmip-template.c"
oid_add_from_string("discriminatorId(1)","2.9.3.2.7.1");
attribute_id_dissector_table = register_dissector_table("cmip.attribute_id", "CMIP Attribute Id", FT_UINT32, BASE_DEC);
}