--- ./epan/dissectors/packet-bgp.h	2008-12-10 00:10:30.000000000 +0100
+++ ../wireshark-1.0.5_qos/epan/dissectors/packet-bgp.h	2009-01-12 14:33:40.000000000 +0100
@@ -165,6 +165,13 @@
 #define BGPTYPE_SAFI_SPECIFIC_ATTR 19 /* draft-kapoor-nalawade-idr-bgp-ssa-00.txt */
 
 /* Extended community type */
+/* according to IANA's number assignment at: http://www.iana.org/assignments/bgp-extended-communities */
+#define BGP_EXT_COM_QOS_MARK_T  0x04	/* QoS Marking transitive attribute of regular type (8bit)           */
+#define BGP_EXT_COM_QOS_MARK_NT 0x44	/* QoS Marking non-transitive attribute of regular type (8bit)       */
+                                        /* Format Type(1byte):Flags(1byte):QoS Set(1byte):Tec. Type(1byte):  */
+                                        /*        Marking O(2bytes):Marking A(1byte):Proc.Cnt(1byte)         */
+#define BGP_EXT_COM_COS_CAP_NT  0x40    /* CoS Capability - Format Type(1byte):Flags(1byte):remaining '0..0' */
+
                                         /* draft-ietf-idr-bgp-ext-communities */
 #define BGP_EXT_COM_RT_0        0x0002  /* Route Target,Format AS(2bytes):AN(4bytes) */
 #define BGP_EXT_COM_RT_1        0x0102  /* Route Target,Format IP address:AN(2bytes) */
@@ -180,6 +187,16 @@
 #define BGP_EXT_COM_OSPF_RID    0x8001  /* OSPF Router ID,Format RouterID(4B):Unused(2B) */
 #define BGP_EXT_COM_L2INFO      0x800a  /* draft-kompella-ppvpn-l2vpn */
 
+/* Extended community QoS Marking technology type */
+#define QOS_TECH_TYPE_DSCP         0x00  /* DiffServ enabled IP (DSCP encoding) */
+#define QOS_TECH_TYPE_802_1q       0x01  /* Ethernet using 802.1q priority tag */
+#define QOS_TECH_TYPE_E_LSP        0x02  /* MPLS using E-LSP */
+#define QOS_TECH_TYPE_VC           0x03  /* Virtual Channel (VC) encoding using separate channels for */
+                                         /* QoS forwarding / one channel per class (e.g. ATM VCs, FR  */
+                                         /* VCs, MPLS L-LSPs) */
+#define QOS_TECH_TYPE_GMPLS_TIME   0x04	 /* GMPLS - time slot encoding */
+#define QOS_TECH_TYPE_GMPLS_LAMBDA 0x05  /* GMPLS - lambda encoding */
+#define QOS_TECH_TYPE_GMPLS_FIBRE  0x06  /* GMPLS - fibre encoding */
 
 /* OSPF codes for  BGP_EXT_COM_OSPF_RTYPE draft-rosen-vpns-ospf-bgp-mpls  */
 #define BGP_OSPF_RTYPE_RTR      1 /* OSPF Router LSA */
--- ./epan/dissectors/packet-bgp.c	2008-12-10 00:10:30.000000000 +0100
+++ ../wireshark-1.0.5_qos/epan/dissectors/packet-bgp.c	2009-01-12 14:50:27.000000000 +0100
@@ -185,6 +185,13 @@
     { 0, NULL }
 };
 
+static const value_string bgpext_com8_type[] = {
+    { BGP_EXT_COM_QOS_MARK_T, "QoS Marking - transitive" },
+    { BGP_EXT_COM_QOS_MARK_NT, "QoS Marking - non-transitive" },
+    { BGP_EXT_COM_COS_CAP_NT, "CoS Capability - non-transitive" },
+    { 0, NULL }
+};
+
 static const value_string bgpext_com_type[] = {
     { BGP_EXT_COM_RT_0, "Route Target" },
     { BGP_EXT_COM_RT_1, "Route Target" },
@@ -200,6 +207,17 @@
     { 0, NULL }
 };
 
+static const value_string qos_tech_type[] = {
+    { QOS_TECH_TYPE_DSCP, "DiffServ enabled IP (DSCP encoding)" },
+    { QOS_TECH_TYPE_802_1q, "Ethernet using 802.1q priority tag" },
+    { QOS_TECH_TYPE_E_LSP, "MPLS using E-LSP" },
+    { QOS_TECH_TYPE_VC, "Virtual Channel (VC) encoding" },
+    { QOS_TECH_TYPE_GMPLS_TIME, "GMPLS - time slot encoding" },
+    { QOS_TECH_TYPE_GMPLS_LAMBDA, "GMPLS - lambda encoding" },
+    { QOS_TECH_TYPE_GMPLS_FIBRE, "GMPLS - fibre encoding" },
+    { 0, NULL }
+};
+
 static const value_string bgp_ssa_type[] = {
     { BGP_SSA_L2TPv3 , "L2TPv3 Tunnel" },
     { BGP_SSA_mGRE , "mGRE Tunnel" },
@@ -367,6 +385,7 @@
 static gint ett_bgp_options = -1;       /* optional parameters tree   */
 static gint ett_bgp_option = -1;        /* an optional parameter tree */
 static gint ett_bgp_extended_communities = -1 ; /* extended communities list tree */
+static gint ett_bgp_ext_com_flags = -1; /* extended communities flags tree */
 static gint ett_bgp_ssa = -1;		/* safi specific attribute */
 static gint ett_bgp_ssa_subtree = -1;	/* safi specific attribute Subtrees */
 static gint ett_bgp_orf = -1; 		/* orf (outbound route filter) tree */
@@ -1436,7 +1455,10 @@
     gint            o;                          /* packet offset            */
     gint            q;                          /* tmp                      */
     gint            end;                        /* message end              */
-    guint16         ext_com;                    /* EXTENDED COMMUNITY type  */
+    guint16         ext_com;                    /* EXTENDED COMMUNITY extended length type  */
+    guint8          ext_com8;                   /* EXTENDED COMMUNITY regular type  */
+    gboolean        is_regular_type;            /* flag for regular types   */
+    gboolean        is_extended_type;           /* flag for extended types  */
     guint16         len;                        /* tmp                      */
     int             advance;                    /* tmp                      */
     proto_item      *ti;                        /* tree item                */
@@ -1444,6 +1466,7 @@
     proto_tree      *subtree2;                  /* subtree for attributes   */
     proto_tree      *subtree3;                  /* subtree for attributes   */
     proto_tree      *subtree4;                  /* subtree for attributes   */
+    proto_tree      *subtree5;                  /* subtree for attributes   */
     proto_tree      *as_paths_tree;             /* subtree for AS_PATHs     */
     proto_tree      *as_path_tree;              /* subtree for AS_PATH      */
     proto_tree      *as_path_segment_tree;      /* subtree for AS_PATH segments */
@@ -2240,84 +2263,159 @@
                         subtree3 = proto_item_add_subtree(ti,ett_bgp_extended_communities);
 
                         while (q < end) {
-                            ext_com = tvb_get_ntohs(tvb,q);
+                            ext_com8 = tvb_get_guint8(tvb,q); /* handle regular types (8 bit) */
+                            ext_com  = tvb_get_ntohs(tvb,q);  /* handle extended length types (16 bit) */
                             junk_gbuf[0]=0;
                             junk_gbuf_ptr=junk_gbuf;
                             junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), "%s",
-                                                  val_to_str(ext_com,bgpext_com_type,"Unknown"));
-                            switch (ext_com) {
-                            case BGP_EXT_COM_RT_0:
-                            case BGP_EXT_COM_RT_2:
-                            case BGP_EXT_COM_RO_0:
-                            case BGP_EXT_COM_RO_2:
-                                junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), ": %u%s%d",
-                                                       tvb_get_ntohs(tvb,q+2),":",tvb_get_ntohl(tvb,q+4));
-                                proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_gbuf);
-                                break ;
-                            case BGP_EXT_COM_RT_1:
-                            case BGP_EXT_COM_RO_1:
-                                ipaddr = tvb_get_ipv4(tvb,q+2);
-                                junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), ": %s%s%u",
-                                                       ip_to_str((guint8 *)&ipaddr),":",tvb_get_ntohs(tvb,q+6));
-                                proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_gbuf);
-                                break;
-                            case BGP_EXT_COM_VPN_ORIGIN:
-                            case BGP_EXT_COM_OSPF_RID:
-                                ipaddr = tvb_get_ipv4(tvb,q+2);
-                                junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), ": %s", ip_to_str((guint8 *)&ipaddr));
-                                proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_gbuf);
-                                break;
-                            case BGP_EXT_COM_OSPF_RTYPE:
-                                ipaddr = tvb_get_ipv4(tvb,q+2);
-                                junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), ": Area: %s, Type: %s", ip_to_str((guint8 *)&ipaddr),
-                                         val_to_str(tvb_get_guint8(tvb,q+6),bgpext_ospf_rtype,"Unknown"));
-				/* print OSPF Metric type if selected */
-				/* always print E2 even if not external route -- receiving router should ignore */
-                                if ( (tvb_get_guint8(tvb,q+7)) & BGP_OSPF_RTYPE_METRIC_TYPE ) {
-                                    junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), " E2");
-                                } else if ((tvb_get_guint8(tvb,q+6)==BGP_OSPF_RTYPE_EXT) || (tvb_get_guint8(tvb,q+6)==BGP_OSPF_RTYPE_NSSA)) {
-                                    junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), " E1");
-                                } else {
-				    junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), ", no options");
-				}
-                                proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_gbuf);
-                                break;
-                            case BGP_EXT_COM_LINKBAND:
-                                linkband = tvb_get_ntohieee_float(tvb,q+2);
-                                junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), ": %.3f Mbps",
-                                                       linkband*8/1000000);
-                                proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_gbuf);
-                                break;
-                            case BGP_EXT_COM_L2INFO:
-                                junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), 
-                                                       ": %s, Control Flags: %s%s%s%s%s, MTU: %u byte%s",
-                                                       val_to_str(tvb_get_guint8(tvb,q+2),bgp_l2vpn_encaps,"Unknown"),
-                                                       tvb_get_guint8(tvb,q+3) ? "" : "none",
-                                                       tvb_get_ntohs(tvb,q+3)&0x08 ? "Q" : "",
-                                                       tvb_get_ntohs(tvb,q+3)&0x04 ? "F" : "",
-                                                       tvb_get_ntohs(tvb,q+3)&0x02 ? "C" : "",
-                                                       tvb_get_ntohs(tvb,q+3)&0x01 ? "S" : "",
-                                                       tvb_get_ntohs(tvb,q+4),
-                                                       plurality(tvb_get_ntohs(tvb,q+4), "", "s"));
-                                ti = proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_gbuf);
-
-                                subtree4 = proto_item_add_subtree(ti,ett_bgp_extended_communities) ;
-                                proto_tree_add_text(subtree4,tvb,q+2,1, "Encapsulation: %s",
-                                                         val_to_str(tvb_get_guint8(tvb,q+2),bgp_l2vpn_encaps,"Unknown"));
-                                proto_tree_add_text(subtree4,tvb,q+3,1, "Control Flags: %s%sControl Word %s required, Sequenced delivery %s required",
-                                                    tvb_get_ntohs(tvb,q+3)&0x08 ? "Q flag (Reserved) set" : "",
-                                                    tvb_get_ntohs(tvb,q+3)&0x04 ? "F flag (reserved) set" : "",
-                                                    tvb_get_ntohs(tvb,q+3)&0x02 ? "is" : "not",
-                                                    tvb_get_ntohs(tvb,q+3)&0x01 ? "is" : "not");
-                                proto_tree_add_text(subtree4,tvb,q+4,2, "MTU: %u byte%s",
-                                                    tvb_get_ntohs(tvb,q+4),
-                                                    plurality(tvb_get_ntohs(tvb,q+4), "", "s"));
-                                break;
-                            default:
-                                proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_gbuf);
-                                break ;
+                                                  val_to_str(ext_com8,bgpext_com8_type,"Unknown"));
+                            is_regular_type = FALSE;
+                            is_extended_type = FALSE;
+                            /* handle regular types (8 bit) */
+                            switch (ext_com8) {
+			    case BGP_EXT_COM_QOS_MARK_T:
+			    case BGP_EXT_COM_QOS_MARK_NT:
+                                is_regular_type = TRUE;
+				ti = proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_gbuf);
+
+                                subtree4 = proto_item_add_subtree(ti,ett_bgp_extended_communities);
+				ti = proto_tree_add_text(subtree4, tvb, q, 1,
+						    "Type: 0x%02x", tvb_get_guint8(tvb,q));
+				ti = proto_tree_add_text(subtree4, tvb, q+1, 1,
+						    "Flags: 0x%02x", tvb_get_guint8(tvb,q+1));
+				subtree5 = proto_item_add_subtree(ti,ett_bgp_ext_com_flags);
+			        /* add flag bitfield */
+				ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1),
+							 0x10, 8, "Remarking", "No Remarking"));
+				ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1),
+							 0x08, 8, "Ignored marking", "No Ignored marking"));
+				ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1),
+							 0x04, 8, "Aggregation of markings", "No Aggregation of markings"));
+
+				ti = proto_tree_add_text(subtree4, tvb, q+2, 1,
+						    "QoS Set Number: 0x%02x", tvb_get_guint8(tvb,q+2));
+				ti = proto_tree_add_text(subtree4, tvb, q+3, 1,
+						    "Technology Type: 0x%02x (%s)", tvb_get_guint8(tvb,q+3),
+							 val_to_str(tvb_get_guint8(tvb,q+3),qos_tech_type,"Unknown"));
+				ti = proto_tree_add_text(subtree4, tvb, q+4, 2,
+						    "QoS Marking O (16 bit): %s", decode_numeric_bitfield(tvb_get_ntohs(tvb,q+4),
+							 0xffff, 16, "0x%04x"));
+				ti = proto_tree_add_text(subtree4, tvb, q+6, 1,
+						    "QoS Marking A  (8 bit): %s (decimal %d)", decode_numeric_bitfield(tvb_get_guint8(tvb,q+6),
+							 0xff, 8, "0x%02x"), tvb_get_guint8(tvb,q+6));
+				ti = proto_tree_add_text(subtree4, tvb, q+7, 1,
+						    "Defaults to zero: 0x%02x", tvb_get_guint8(tvb,q+7));
+				break;
+			    case BGP_EXT_COM_COS_CAP_NT:
+                                is_regular_type = TRUE;
+				ti = proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_gbuf);
+
+                                subtree4 = proto_item_add_subtree(ti,ett_bgp_extended_communities);
+				ti = proto_tree_add_text(subtree4, tvb, q, 1,
+						    "Type: 0x%02x", tvb_get_guint8(tvb,q));
+				ti = proto_tree_add_text(subtree4, tvb, q+1, 1,
+						    "Flags byte 1 : 0x%02x", tvb_get_guint8(tvb,q+1));
+				subtree5 = proto_item_add_subtree(ti,ett_bgp_ext_com_flags);
+			        /* add flag bitfield */
+				ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1),
+							 0x80, 8, "BE class supported", "BE class NOT supported"));
+				ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1),
+							 0x40, 8, "EF class supported", "EF class NOT supported"));
+				ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1),
+							 0x20, 8, "AF class supported", "AF class NOT supported"));
+				ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1),
+							 0x10, 8, "LE class supported", "LE class NOT supported"));
+				ti = proto_tree_add_text(subtree4, tvb, q+2, 1,
+						    "Flags byte 2..7 : 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x", 
+							tvb_get_guint8(tvb,q+2),tvb_get_guint8(tvb,q+3),tvb_get_guint8(tvb,q+4),
+							tvb_get_guint8(tvb,q+5),tvb_get_guint8(tvb,q+6),tvb_get_guint8(tvb,q+7));
+				break;
+                            }
+
+                            if (!is_regular_type) {
+                                    junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), "%s",
+                                                          val_to_str(ext_com,bgpext_com_type,"Unknown"));
+
+                                    /* handle extended length types (16 bit) */
+                                    switch (ext_com) {
+                                    case BGP_EXT_COM_RT_0:
+                                    case BGP_EXT_COM_RT_2:
+                                    case BGP_EXT_COM_RO_0:
+                                    case BGP_EXT_COM_RO_2:
+                                        is_extended_type = TRUE;
+                                        junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), ": %u%s%d",
+                                                               tvb_get_ntohs(tvb,q+2),":",tvb_get_ntohl(tvb,q+4));
+                                        proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_gbuf);
+                                        break ;
+                                    case BGP_EXT_COM_RT_1:
+                                    case BGP_EXT_COM_RO_1:
+                                        is_extended_type = TRUE;
+                                        ipaddr = tvb_get_ipv4(tvb,q+2);
+                                        junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), ": %s%s%u",
+                                                               ip_to_str((guint8 *)&ipaddr),":",tvb_get_ntohs(tvb,q+6));
+                                        proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_gbuf);
+                                        break;
+                                    case BGP_EXT_COM_VPN_ORIGIN:
+                                    case BGP_EXT_COM_OSPF_RID:
+                                        is_extended_type = TRUE;
+                                        ipaddr = tvb_get_ipv4(tvb,q+2);
+                                        junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), ": %s", ip_to_str((guint8 *)&ipaddr));
+                                        proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_gbuf);
+                                        break;
+                                    case BGP_EXT_COM_OSPF_RTYPE:
+                                        is_extended_type = TRUE;
+                                        ipaddr = tvb_get_ipv4(tvb,q+2);
+                                        junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), ": Area: %s, Type: %s", ip_to_str((guint8 *)&ipaddr),
+                                                 val_to_str(tvb_get_guint8(tvb,q+6),bgpext_ospf_rtype,"Unknown"));
+        				/* print OSPF Metric type if selected */
+        				/* always print E2 even if not external route -- receiving router should ignore */
+                                        if ( (tvb_get_guint8(tvb,q+7)) & BGP_OSPF_RTYPE_METRIC_TYPE ) {
+                                            junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), " E2");
+                                        } else if ((tvb_get_guint8(tvb,q+6)==BGP_OSPF_RTYPE_EXT) || (tvb_get_guint8(tvb,q+6)==BGP_OSPF_RTYPE_NSSA)) {
+                                            junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), " E1");
+                                        } else {
+        				    junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), ", no options");
+        				}
+                                        proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_gbuf);
+                                        break;
+                                    case BGP_EXT_COM_LINKBAND:
+                                        is_extended_type = TRUE;
+                                        linkband = tvb_get_ntohieee_float(tvb,q+2);
+                                        junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), ": %.3f Mbps",
+                                                               linkband*8/1000000);
+                                        proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_gbuf);
+                                        break;
+                                    case BGP_EXT_COM_L2INFO:
+                                        is_extended_type = TRUE;
+                                        junk_gbuf_ptr += g_snprintf(junk_gbuf_ptr, MAX_STR_LEN-(junk_gbuf_ptr-junk_gbuf), 
+                                                               ": %s, Control Flags: %s%s%s%s%s, MTU: %u byte%s",
+                                                               val_to_str(tvb_get_guint8(tvb,q+2),bgp_l2vpn_encaps,"Unknown"),
+                                                               tvb_get_guint8(tvb,q+3) ? "" : "none",
+                                                               tvb_get_ntohs(tvb,q+3)&0x08 ? "Q" : "",
+                                                               tvb_get_ntohs(tvb,q+3)&0x04 ? "F" : "",
+                                                               tvb_get_ntohs(tvb,q+3)&0x02 ? "C" : "",
+                                                               tvb_get_ntohs(tvb,q+3)&0x01 ? "S" : "",
+                                                               tvb_get_ntohs(tvb,q+4),
+                                                               plurality(tvb_get_ntohs(tvb,q+4), "", "s"));
+                                        ti = proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_gbuf);
+
+                                        subtree4 = proto_item_add_subtree(ti,ett_bgp_extended_communities);
+                                        proto_tree_add_text(subtree4,tvb,q+2,1, "Encapsulation: %s",
+                                                                 val_to_str(tvb_get_guint8(tvb,q+2),bgp_l2vpn_encaps,"Unknown"));
+                                        proto_tree_add_text(subtree4,tvb,q+3,1, "Control Flags: %s%sControl Word %s required, Sequenced delivery %s required",
+                                                            tvb_get_ntohs(tvb,q+3)&0x08 ? "Q flag (Reserved) set" : "",
+                                                            tvb_get_ntohs(tvb,q+3)&0x04 ? "F flag (reserved) set" : "",
+                                                            tvb_get_ntohs(tvb,q+3)&0x02 ? "is" : "not",
+                                                            tvb_get_ntohs(tvb,q+3)&0x01 ? "is" : "not");
+                                        proto_tree_add_text(subtree4,tvb,q+4,2, "MTU: %u byte%s",
+                                                            tvb_get_ntohs(tvb,q+4),
+                                                            plurality(tvb_get_ntohs(tvb,q+4), "", "s"));
+                                        break;
+                                    }
                             }
-                            q = q + 8 ;
+                            if (!is_regular_type && !is_extended_type)
+                                proto_tree_add_text(subtree3,tvb,q,8, "%s","Unknown");
+                            q = q + 8;
                         }
                 }
                 break;
@@ -3027,6 +3125,7 @@
       &ett_bgp_options,
       &ett_bgp_option,
       &ett_bgp_extended_communities,
+      &ett_bgp_ext_com_flags,
       &ett_bgp_ssa,
       &ett_bgp_ssa_subtree,
       &ett_bgp_orf,

