SOURCES: ethereal-0.10.13-packet-ospf.diff (NEW) - added

glen glen at pld-linux.org
Tue Dec 20 09:21:03 CET 2005


Author: glen                         Date: Tue Dec 20 08:21:03 2005 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- added

---- Files affected:
SOURCES:
   ethereal-0.10.13-packet-ospf.diff (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/ethereal-0.10.13-packet-ospf.diff
diff -u /dev/null SOURCES/ethereal-0.10.13-packet-ospf.diff:1.1
--- /dev/null	Tue Dec 20 09:21:03 2005
+++ SOURCES/ethereal-0.10.13-packet-ospf.diff	Tue Dec 20 09:20:58 2005
@@ -0,0 +1,552 @@
+--- ethereal-0.10.13.orig/epan/dissectors/packet-ospf.c	2005-12-10 12:40:02.000000000 -0200
++++ ethereal-0.10.13/epan/dissectors/packet-ospf.c	2005-12-11 20:13:21.000000000 -0200
+@@ -199,6 +199,25 @@
+ 
+ 
+ static int proto_ospf = -1;
++static int hf_ospf_options_v2 = -1;
++static int hf_ospf_options_v2_e = -1;
++static int hf_ospf_options_v2_mc = -1;
++static int hf_ospf_options_v2_np = -1;
++static int hf_ospf_options_v2_ea = -1;
++static int hf_ospf_options_v2_dc = -1;
++static int hf_ospf_options_v2_o = -1;
++static int hf_ospf_options_v2_dn = -1;
++static int hf_ospf_options_v3 = -1;
++static int hf_ospf_options_v3_v6 = -1;
++static int hf_ospf_options_v3_e = -1;
++static int hf_ospf_options_v3_mc = -1;
++static int hf_ospf_options_v3_n = -1;
++static int hf_ospf_options_v3_r = -1;
++static int hf_ospf_options_v3_dc = -1;
++static int hf_ospf_dbd = -1;
++static int hf_ospf_dbd_i = -1;
++static int hf_ospf_dbd_m = -1;
++static int hf_ospf_dbd_ms = -1;
+ 
+ static gint ett_ospf = -1;
+ static gint ett_ospf_hdr = -1;
+@@ -208,6 +227,9 @@
+ static gint ett_ospf_lsa = -1;
+ static gint ett_ospf_lsa_router_link = -1;
+ static gint ett_ospf_lsa_upd = -1;
++static gint ett_ospf_options_v2 = -1;
++static gint ett_ospf_options_v3 = -1;
++static gint ett_ospf_dbd = -1;
+ 
+ /* Trees for opaque LSAs */
+ static gint ett_ospf_lsa_mpls = -1;
+@@ -218,6 +240,74 @@
+ static gint ett_ospf_lsa_oif_tna = -1;
+ static gint ett_ospf_lsa_oif_tna_stlv = -1;
+ 
++
++
++static const true_false_string tfs_options_v2_dc = {
++	"Demand Circuits are supported",
++	"Demand circuits are NOT supported"
++};
++static const true_false_string tfs_options_v2_ea = {
++	"External Attributes are supported",
++	"External attributes are NOT supported"
++};
++static const true_false_string tfs_options_v2_np = {
++	"NSSA is supported",
++	"Nssa is NOT supported"
++};
++static const true_false_string tfs_options_v2_mc = {
++	"Multicast Capable",
++	"NOT multicast capable"
++};
++static const true_false_string tfs_options_v2_e = {
++	"ExternalRoputingCapability",
++	"NO ExternalRoutingCapability"
++};
++static const true_false_string tfs_options_v2_o = {
++	"O-bit is SET",
++	"O-bit is CLEAR"
++};
++static const true_false_string tfs_options_v2_dn = {
++	"DN-bit is SET",
++	"DN-bit is CLEAR"
++};
++
++static const true_false_string tfs_options_v3_v6 = {
++	"V6 is SET",
++	"V6 is NOT set"
++};
++static const true_false_string tfs_options_v3_e = {
++	"E is SET",
++	"E is NOT set"
++};
++static const true_false_string tfs_options_v3_mc = {
++	"MC is SET",
++	"MC is NOT set"
++};
++static const true_false_string tfs_options_v3_n = {
++	"N is SET",
++	"N is NOT set"
++};
++static const true_false_string tfs_options_v3_r = {
++	"R is SET",
++	"R is NOT set"
++};
++static const true_false_string tfs_options_v3_dc = {
++	"DC is SET",
++	"DC is NOT set"
++};
++static const true_false_string tfs_dbd_i = {
++	"I is SET",
++	"I is NOT set"
++};
++static const true_false_string tfs_dbd_m = {
++	"M is SET",
++	"M is NOT set"
++};
++static const true_false_string tfs_dbd_ms = {
++	"MS is SET",
++	"MS is NOT set"
++};
++
+ /*-----------------------------------------------------------------------
+  * OSPF Filtering
+  *-----------------------------------------------------------------------*/
+@@ -373,7 +463,63 @@
+     {&ospf_filter[OSPFF_LS_MPLS_LINKCOLOR],
+      { "MPLS/TE Link Resource Class/Color", "ospf.mpls.linkcolor", FT_UINT32,
+        BASE_HEX, NULL, 0x0, "MPLS/TE Link Resource Class/Color", HFILL }},
+-
++    {&hf_ospf_options_v2,
++     { "Options", "ospf.options.v2", FT_UINT8, BASE_HEX,
++       NULL, 0x0, "", HFILL }},
++    {&hf_ospf_options_v2_e,
++     { "E", "ospf.options.v2.e", FT_BOOLEAN, 8, 
++       TFS(&tfs_options_v2_e), OSPF_V2_OPTIONS_E, "", HFILL }},
++    {&hf_ospf_options_v2_mc,
++     { "MC", "ospf.options.v2.mc", FT_BOOLEAN, 8, 
++       TFS(&tfs_options_v2_mc), OSPF_V2_OPTIONS_MC, "", HFILL }},
++    {&hf_ospf_options_v2_np,
++     { "NP", "ospf.options.v2.np", FT_BOOLEAN, 8, 
++       TFS(&tfs_options_v2_np), OSPF_V2_OPTIONS_NP, "", HFILL }},
++    {&hf_ospf_options_v2_ea,
++     { "EA", "ospf.options.v2.ea", FT_BOOLEAN, 8, 
++       TFS(&tfs_options_v2_ea), OSPF_V2_OPTIONS_EA, "", HFILL }},
++    {&hf_ospf_options_v2_dc,
++     { "DC", "ospf.options.v2.dc", FT_BOOLEAN, 8, 
++       TFS(&tfs_options_v2_dc), OSPF_V2_OPTIONS_DC, "", HFILL }},
++    {&hf_ospf_options_v2_o,
++     { "O", "ospf.options.v2.o", FT_BOOLEAN, 8, 
++       TFS(&tfs_options_v2_o), OSPF_V2_OPTIONS_O, "", HFILL }},
++    {&hf_ospf_options_v2_dn,
++     { "DN", "ospf.options.v2.dn", FT_BOOLEAN, 8, 
++       TFS(&tfs_options_v2_dn), OSPF_V2_OPTIONS_DN, "", HFILL }},
++    {&hf_ospf_options_v3,
++     { "Options", "ospf.options.v3", FT_UINT24, BASE_HEX,
++       NULL, 0x0, "", HFILL }},
++    {&hf_ospf_options_v3_v6,
++     { "V6", "ospf.options.v3.v6", FT_BOOLEAN, 24, 
++       TFS(&tfs_options_v3_v6), OSPF_V3_OPTIONS_V6, "", HFILL }},
++    {&hf_ospf_options_v3_e,
++     { "E", "ospf.options.v3.e", FT_BOOLEAN, 24, 
++       TFS(&tfs_options_v3_e), OSPF_V3_OPTIONS_E, "", HFILL }},
++    {&hf_ospf_options_v3_mc,
++     { "MC", "ospf.options.v3.mc", FT_BOOLEAN, 24, 
++       TFS(&tfs_options_v3_mc), OSPF_V3_OPTIONS_MC, "", HFILL }},
++    {&hf_ospf_options_v3_n,
++     { "N", "ospf.options.v3.n", FT_BOOLEAN, 24, 
++       TFS(&tfs_options_v3_n), OSPF_V3_OPTIONS_N, "", HFILL }},
++    {&hf_ospf_options_v3_r,
++     { "R", "ospf.options.v3.r", FT_BOOLEAN, 24, 
++       TFS(&tfs_options_v3_r), OSPF_V3_OPTIONS_R, "", HFILL }},
++    {&hf_ospf_options_v3_dc,
++     { "DC", "ospf.options.v3.dc", FT_BOOLEAN, 24, 
++       TFS(&tfs_options_v3_dc), OSPF_V3_OPTIONS_DC, "", HFILL }},
++    {&hf_ospf_dbd,
++     { "DB Description", "ospf.dbd", FT_UINT8, BASE_HEX,
++       NULL, 0x0, "", HFILL }},
++    {&hf_ospf_dbd_i,
++     { "I", "ospf.dbd.i", FT_BOOLEAN, 8, 
++       TFS(&tfs_dbd_i), OSPF_DBD_FLAG_I, "", HFILL }},
++    {&hf_ospf_dbd_m,
++     { "M", "ospf.dbd.m", FT_BOOLEAN, 8, 
++       TFS(&tfs_dbd_m), OSPF_DBD_FLAG_M, "", HFILL }},
++    {&hf_ospf_dbd_ms,
++     { "MS", "ospf.dbd.ms", FT_BOOLEAN, 8, 
++       TFS(&tfs_dbd_ms), OSPF_DBD_FLAG_MS, "", HFILL }},
+ 
+ 
+ };
+@@ -742,13 +888,45 @@
+ }
+ 
+ static void
++dissect_ospf_dbd (proto_tree *parent_tree, tvbuff_t *tvb, int offset)
++{
++	proto_item *item=NULL;
++	proto_tree *tree=NULL;
++	guint8 flags;
++
++	flags = tvb_get_guint8 (tvb, offset);
++	if(parent_tree){
++		item=proto_tree_add_uint(parent_tree, hf_ospf_dbd, 
++				tvb, offset, 1, flags);
++		tree=proto_item_add_subtree(item, ett_ospf_dbd);
++	}
++
++	proto_tree_add_boolean(tree, hf_ospf_dbd_i, tvb, offset, 1, flags);
++	if (flags&OSPF_DBD_FLAG_I){
++		proto_item_append_text(item, "  I");
++	}
++	flags&=(~( OSPF_DBD_FLAG_I ));
++
++	proto_tree_add_boolean(tree, hf_ospf_dbd_m, tvb, offset, 1, flags);
++	if (flags&OSPF_DBD_FLAG_M){
++		proto_item_append_text(item, "  M");
++	}
++	flags&=(~( OSPF_DBD_FLAG_M ));
++
++	proto_tree_add_boolean(tree, hf_ospf_dbd_ms, tvb, offset, 1, flags);
++	if (flags&OSPF_DBD_FLAG_MS){
++		proto_item_append_text(item, "  MS");
++	}
++	flags&=(~( OSPF_DBD_FLAG_MS ));
++}
++
++
++static void
+ dissect_ospf_db_desc(tvbuff_t *tvb, int offset, proto_tree *tree, guint8 version)
+ {
+     proto_tree *ospf_db_desc_tree=NULL;
+     proto_item *ti;
+-    guint8 flags;
+     guint8 reserved;
+-    char flags_string[20] = "";
+ 
+     if (tree) {
+ 	ti = proto_tree_add_text(tree, tvb, offset, -1, "OSPF DB Description");
+@@ -757,27 +935,13 @@
+         switch (version ) {
+ 
+ 	    case OSPF_VERSION_2:
+-
+                 proto_tree_add_text(ospf_db_desc_tree, tvb, offset, 2, "Interface MTU: %u",
+ 			    tvb_get_ntohs(tvb, offset));
+ 
+ 	        dissect_ospf_options(tvb, offset + 2, ospf_db_desc_tree, version);
+ 
+-	        flags = tvb_get_guint8(tvb, offset + 3);
+-	        if (flags & OSPF_DBD_FLAG_MS)
+-	            strcat(flags_string, "MS");
+-	        if (flags & OSPF_DBD_FLAG_M) {
+-	            if (flags_string[0] != '\0')
+-		        strcat(flags_string, "/");
+-	            strcat(flags_string, "M");
+-	        }
+-	        if (flags & OSPF_DBD_FLAG_I) {
+-	            if (flags_string[0] != '\0')
+-		        strcat(flags_string, "/");
+-	            strcat(flags_string, "I");
+-	        }
+-	        proto_tree_add_text(ospf_db_desc_tree, tvb, offset + 3, 1, "Flags: 0x%x (%s)",
+-			    flags, flags_string);
++                dissect_ospf_dbd(ospf_db_desc_tree, tvb, offset+3);
++
+ 	        proto_tree_add_text(ospf_db_desc_tree, tvb, offset + 4, 4, "DD Sequence: %u",
+ 			    tvb_get_ntohl(tvb, offset + 4));
+ 
+@@ -799,21 +963,7 @@
+ 	        proto_tree_add_text(ospf_db_desc_tree, tvb, offset + 6, 1, (reserved == 0 ? "Reserved: %u" : "Reserved: %u [incorrect, should be 0]"),
+ 				reserved);
+ 
+-	        flags = tvb_get_guint8(tvb, offset + 7);
+-	        if (flags & OSPF_DBD_FLAG_MS)
+-	            strcat(flags_string, "MS");
+-	        if (flags & OSPF_DBD_FLAG_M) {
+-	            if (flags_string[0] != '\0')
+-		        strcat(flags_string, "/");
+-	            strcat(flags_string, "M");
+-	        }
+-	        if (flags & OSPF_DBD_FLAG_I) {
+-	            if (flags_string[0] != '\0')
+-		        strcat(flags_string, "/");
+-	            strcat(flags_string, "I");
+-	        }
+-	        proto_tree_add_text(ospf_db_desc_tree, tvb, offset + 7, 1, "Flags: 0x%x (%s)",
+-			    flags, flags_string);
++                dissect_ospf_dbd(ospf_db_desc_tree, tvb, offset+7);
+ 
+ 	        proto_tree_add_text(ospf_db_desc_tree, tvb, offset + 8, 4, "DD Sequence: %u",
+ 			    tvb_get_ntohl(tvb, offset + 8));
+@@ -2165,103 +2315,128 @@
+ 
+ 
+ static void
+-dissect_ospf_options(tvbuff_t *tvb, int offset, proto_tree *tree, guint8 version)
++dissect_ospf_v2_options (proto_tree *parent_tree, tvbuff_t *tvb, int offset)
+ {
+-    guint8 options_ospfv2;
+-    guint32 options_ospfv3;
+-    char options_string[20] = "";
+-
+-    /* ATTENTION !!! no check for length of options string  - with OSPFv3 maximum length is 14 characters */
++	proto_item *item=NULL;
++	proto_tree *tree=NULL;
++	guint8 flags;
++
++	flags = tvb_get_guint8 (tvb, offset);
++	if(parent_tree){
++		item=proto_tree_add_uint(parent_tree, hf_ospf_options_v2, 
++				tvb, offset, 1, flags);
++		tree=proto_item_add_subtree(item, ett_ospf_options_v2);
++	}
+ 
+-    switch ( version ) {
++	proto_tree_add_boolean(tree, hf_ospf_options_v2_o, tvb, offset, 1, flags);
++	if (flags&OSPF_V2_OPTIONS_O){
++		proto_item_append_text(item, "  O");
++	}
++	flags&=(~( OSPF_V2_OPTIONS_O ));
+ 
+-        case OSPF_VERSION_2:
+ 
+-            options_ospfv2 = tvb_get_guint8(tvb, offset);
++	proto_tree_add_boolean(tree, hf_ospf_options_v2_dc, tvb, offset, 1, flags);
++	if (flags&OSPF_V2_OPTIONS_DC){
++		proto_item_append_text(item, "  DC");
++	}
++	flags&=(~( OSPF_V2_OPTIONS_DC ));
+ 
+-            if (options_ospfv2 & OSPF_V2_OPTIONS_E)
+-	        strcat(options_string, "E");
++	proto_tree_add_boolean(tree, hf_ospf_options_v2_ea, tvb, offset, 1, flags);
++	if (flags&OSPF_V2_OPTIONS_EA){
++		proto_item_append_text(item, "  EA");
++	}
++	flags&=(~( OSPF_V2_OPTIONS_EA ));
+ 
+-            if (options_ospfv2 & OSPF_V2_OPTIONS_MC) {
+-	        if (options_string[0] != '\0')
+-	            strcat(options_string, "/");
+-	        strcat(options_string, "MC");
+-            }
++	proto_tree_add_boolean(tree, hf_ospf_options_v2_np, tvb, offset, 1, flags);
++	if (flags&OSPF_V2_OPTIONS_NP){
++		proto_item_append_text(item, "  NP");
++	}
++	flags&=(~( OSPF_V2_OPTIONS_NP ));
+ 
+-            if (options_ospfv2 & OSPF_V2_OPTIONS_NP) {
+-	        if (options_string[0] != '\0')
+-	            strcat(options_string, "/");
+-	        strcat(options_string, "NP");
+-            }
++	proto_tree_add_boolean(tree, hf_ospf_options_v2_mc, tvb, offset, 1, flags);
++	if (flags&OSPF_V2_OPTIONS_MC){
++		proto_item_append_text(item, "  MC");
++	}
++	flags&=(~( OSPF_V2_OPTIONS_MC ));
+ 
+-            if (options_ospfv2 & OSPF_V2_OPTIONS_EA) {
+-	        if (options_string[0] != '\0')
+-	            strcat(options_string, "/");
+-	        strcat(options_string, "EA");
+-            }
++	proto_tree_add_boolean(tree, hf_ospf_options_v2_e, tvb, offset, 1, flags);
++	if (flags&OSPF_V2_OPTIONS_E){
++		proto_item_append_text(item, "  E");
++	}
++	flags&=(~( OSPF_V2_OPTIONS_E ));
+ 
+-            if (options_ospfv2 & OSPF_V2_OPTIONS_DC) {
+-	        if (options_string[0] != '\0')
+-	            strcat(options_string, "/");
+-	        strcat(options_string, "DC");
+-            }
++	proto_tree_add_boolean(tree, hf_ospf_options_v2_dn, tvb, offset, 1, flags);
++	if (flags&OSPF_V2_OPTIONS_DN){
++		proto_item_append_text(item, "  DN");
++	}
++	flags&=(~( OSPF_V2_OPTIONS_DN ));
++}
+ 
+-            if (options_ospfv2 & OSPF_V2_OPTIONS_O) {
+-	        if (options_string[0] != '\0')
+-	            strcat(options_string, "/");
+-	        strcat(options_string, "O");
+-            }
++static void
++dissect_ospf_v3_options (proto_tree *parent_tree, tvbuff_t *tvb, int offset)
++{
++	proto_item *item=NULL;
++	proto_tree *tree=NULL;
++	guint32 flags;
++
++	flags = tvb_get_ntoh24 (tvb, offset);
++	if(parent_tree){
++		item=proto_tree_add_uint(parent_tree, hf_ospf_options_v3, 
++				tvb, offset, 3, flags);
++		tree=proto_item_add_subtree(item, ett_ospf_options_v3);
++	}
+ 
+-            if (options_ospfv2 & OSPF_V2_OPTIONS_DN) {
+-    	        if (options_string[0] != '\0')
+-	            strcat(options_string, "/");
+-	        strcat(options_string, "DN");
+-            }
++	proto_tree_add_boolean(tree, hf_ospf_options_v3_dc, tvb, offset, 3, flags);
++	if (flags&OSPF_V3_OPTIONS_DC){
++		proto_item_append_text(item, "  DC");
++	}
++	flags&=(~( OSPF_V3_OPTIONS_DC ));
+ 
+-            proto_tree_add_text(tree, tvb, offset, 1, "Options: 0x%x (%s)",
+-			options_ospfv2, options_string);
+-	    break;
++	proto_tree_add_boolean(tree, hf_ospf_options_v3_r, tvb, offset, 3, flags);
++	if (flags&OSPF_V3_OPTIONS_R){
++		proto_item_append_text(item, "  R");
++	}
++	flags&=(~( OSPF_V3_OPTIONS_R ));
+ 
++	proto_tree_add_boolean(tree, hf_ospf_options_v3_n, tvb, offset, 3, flags);
++	if (flags&OSPF_V3_OPTIONS_N){
++		proto_item_append_text(item, "  N");
++	}
++	flags&=(~( OSPF_V3_OPTIONS_N ));
+ 
+-        case OSPF_VERSION_3:
++	proto_tree_add_boolean(tree, hf_ospf_options_v3_mc, tvb, offset, 3, flags);
++	if (flags&OSPF_V3_OPTIONS_MC){
++		proto_item_append_text(item, "  MC");
++	}
++	flags&=(~( OSPF_V3_OPTIONS_MC ));
+ 
+-            options_ospfv3 = tvb_get_ntoh24(tvb, offset);
++	proto_tree_add_boolean(tree, hf_ospf_options_v3_e, tvb, offset, 3, flags);
++	if (flags&OSPF_V3_OPTIONS_E){
++		proto_item_append_text(item, "  E");
++	}
++	flags&=(~( OSPF_V3_OPTIONS_E ));
+ 
+-            if (options_ospfv3 & OSPF_V3_OPTIONS_V6)
+-	        strcat(options_string, "V6");
++	proto_tree_add_boolean(tree, hf_ospf_options_v3_v6, tvb, offset, 3, flags);
++	if (flags&OSPF_V3_OPTIONS_V6){
++		proto_item_append_text(item, "  V6");
++	}
++	flags&=(~( OSPF_V3_OPTIONS_V6 ));
+ 
+-            if (options_ospfv3 & OSPF_V3_OPTIONS_E) {
+-	        if (options_string[0] != '\0')
+-	            strcat(options_string, "/");
+-	        strcat(options_string, "E");
+-	    }
++}
+ 
+-            if (options_ospfv3 & OSPF_V3_OPTIONS_MC) {
+-	        if (options_string[0] != '\0')
+-	            strcat(options_string, "/");
+-	        strcat(options_string, "MC");
+-            }
+ 
+-            if (options_ospfv3 & OSPF_V3_OPTIONS_N) {
+-	        if (options_string[0] != '\0')
+-	            strcat(options_string, "/");
+-	        strcat(options_string, "N");
+-            }
++static void
++dissect_ospf_options(tvbuff_t *tvb, int offset, proto_tree *tree, guint8 version)
++{
++    switch ( version ) {
+ 
+-            if (options_ospfv3 & OSPF_V3_OPTIONS_R) {
+-	        if (options_string[0] != '\0')
+-	            strcat(options_string, "/");
+-	        strcat(options_string, "R");
+-            }
++        case OSPF_VERSION_2:
++            dissect_ospf_v2_options (tree, tvb, offset);
++	    break;
+ 
+-            if (options_ospfv3 & OSPF_V3_OPTIONS_DC) {
+-	        if (options_string[0] != '\0')
+-	            strcat(options_string, "/");
+-	        strcat(options_string, "DC");
+-            }
+ 
+-            proto_tree_add_text(tree, tvb, offset, 3, "Options: 0x%x (%s)",
+-			options_ospfv3, options_string);
++        case OSPF_VERSION_3:
++            dissect_ospf_v3_options (tree, tvb, offset);
+             break;
+     }
+ 
+@@ -2321,39 +2496,28 @@
+ static void dissect_ospf_v3_address_prefix(tvbuff_t *tvb, int offset, int prefix_length, proto_tree *tree)
+ {
+ 
+-    guint8 value;
+-    guint8 position;
+-    guint8 bufpos;
+-    gchar  *buffer;
+-    gchar  *bytebuf;
+-    guint8 bytes_to_process;
+-    int start_offset;
++    int bytes_to_process;
++    struct e_in6_addr prefix;
+ 
+-    start_offset=offset;
+-    position=0;
+-    bufpos=0;
+     bytes_to_process=((prefix_length+31)/32)*4;
+ 
+-    buffer=ep_alloc(32+7);
+-    while (bytes_to_process > 0 ) {
+-
+-        value=tvb_get_guint8(tvb, offset);
+-
+-        if ( (position > 0) && ( (position%2) == 0 ) )
+-	    buffer[bufpos++]=':';
+-
+-	bytebuf=ep_alloc(3);
+-        g_snprintf(bytebuf, 3, "%02x",value);
+-        buffer[bufpos++]=bytebuf[0];
+-        buffer[bufpos++]=bytebuf[1];
+-
+-	position++;
+-	offset++;
+-        bytes_to_process--;
++    if (prefix_length > 128) {
++        proto_tree_add_text(tree, tvb, offset, bytes_to_process,
++            "Address Prefix: length is invalid (%d, should be <= 128)",
++            prefix_length);
++        return;
+     }
+ 
+-    buffer[bufpos]=0;
+-    proto_tree_add_text(tree, tvb, start_offset, ((prefix_length+31)/32)*4, "Address Prefix: %s",buffer);
++    memset(prefix.bytes, 0, sizeof prefix.bytes);
++    if (bytes_to_process != 0) {
++        tvb_memcpy(tvb, prefix.bytes, offset, bytes_to_process);
++        if (prefix_length % 8) {
++            prefix.bytes[bytes_to_process - 1] &=
++                ((0xff00 >> (prefix_length % 8)) & 0xff);
++        }
++    }
++    proto_tree_add_text(tree, tvb, offset, bytes_to_process,
++        "Address Prefix: %s", ip6_to_str(&prefix));
+ 
+ }
+ 
+@@ -2376,7 +2540,10 @@
+ 	&ett_ospf_lsa_mpls_link_stlv,
+ 	&ett_ospf_lsa_mpls_link_stlv_admingrp,
+         &ett_ospf_lsa_oif_tna,
+-        &ett_ospf_lsa_oif_tna_stlv
++        &ett_ospf_lsa_oif_tna_stlv,
++        &ett_ospf_options_v2,
++        &ett_ospf_options_v3,
++        &ett_ospf_dbd
+     };
+ 
+     proto_ospf = proto_register_protocol("Open Shortest Path First",
================================================================


More information about the pld-cvs-commit mailing list