Ethereal-dev: [Ethereal-dev] [PATCH] Contribution - Extensions to 3GPP2 A11 Dissector

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

Date Next Thread Next
From: "Ravi Valmikam" <rvalmikam@xxxxxxxxxxxxxx>
Date: Sun, 1 Jan 2006 10:30:35 -0500
Resending the email with [PATCH] in subject line. 
 
Thanks
Ravi
==== 
 Over the last year or so there have been several developments in the 3GPP2 specifications. One of the areas that saw significant changes was A11 interface between PDSN and PCF. With the introduction of QoS support on this interface, the specification includes a lot of new information elements in this protocol.
 
I have enhanced the ethereal packet-3g-a11.c dissector to dissect all new information elements. I have attached the diff file, a sample .cap file and the corresponding dissected plain-text output file from ethereal print to file option.
 
I would really appreciate if you can include this in the ethereal code base.
 
This is my first contribution to ethereal, so incase I have missed something or if you have any questions and issues, please feel free to email me.
 
Thanks
Ravi
Index: dissectors/packet-3g-a11.c
===================================================================
--- dissectors/packet-3g-a11.c	(revision 16925)
+++ dissectors/packet-3g-a11.c	(working copy)
@@ -4,6 +4,9 @@
  * Copyright 2002, Ryuji Somegawa <somegawa@xxxxxxxxxx>
  * packet-3g-a11.c was written based on 'packet-mip.c'.
  *
+ * packet-3g-a11.c updated by Ravi Valmikam for 3GPP2 TIA-878-A
+ * Copyright 2005, Ravi Valmikam <rvalmikam@xxxxxxxxxxxxxx>
+ *
  * packet-mip.c
  * Routines for Mobile IP dissection
  * Copyright 2000, Stefan Raab <sraab@xxxxxxxxx>
@@ -85,18 +88,59 @@
 static int hf_a11_vse_canid = -1;
 static int hf_a11_vse_panid = -1;
 static int hf_a11_vse_srvopt = -1;
+static int hf_a11_vse_qosmode = -1;
 static int hf_a11_vse_pdit = -1;
 static int hf_a11_vse_code = -1;
 static int hf_a11_vse_dormant = -1;
 static int hf_a11_vse_ppaddr = -1;
 
+/* Additional Session Information */
+static int hf_a11_ase_len_type = -1;
+static int hf_a11_ase_srid_type = -1;
+static int hf_a11_ase_servopt_type = -1;
+static int hf_a11_ase_gre_proto_type = -1;
+static int hf_a11_ase_gre_key = -1;
+static int hf_a11_ase_pcf_addr_key = -1;
+
+/* Foward QoS Information */
+static int hf_a11_fqi_srid = -1;
+static int hf_a11_fqi_flags = -1;
+static int hf_a11_fqi_flowcount = -1;
+static int hf_a11_fqi_flowid = -1;
+static int hf_a11_fqi_entrylen = -1;
+static int hf_a11_fqi_dscp = -1;
+static int hf_a11_fqi_flowstate = -1;
+static int hf_a11_fqi_requested_qoslen = -1;
+static int hf_a11_fqi_requested_qos = -1;
+static int hf_a11_fqi_granted_qoslen = -1;
+static int hf_a11_fqi_granted_qos = -1;
+
+/* Reverse QoS Information */
+static int hf_a11_rqi_srid = -1;
+static int hf_a11_rqi_flowcount = -1;
+static int hf_a11_rqi_flowid = -1;
+static int hf_a11_rqi_entrylen = -1;
+static int hf_a11_rqi_flowstate = -1;
+static int hf_a11_rqi_requested_qoslen = -1;
+static int hf_a11_rqi_requested_qos = -1;
+static int hf_a11_rqi_granted_qoslen = -1;
+static int hf_a11_rqi_granted_qos = -1;
+
 /* Initialize the subtree pointers */
+
+/* Initialize the subtree pointers */
 static gint ett_a11 = -1;
 static gint ett_a11_flags = -1;
 static gint ett_a11_ext = -1;
 static gint ett_a11_exts = -1;
 static gint ett_a11_radius = -1;
 static gint ett_a11_radiuses = -1;
+static gint ett_a11_ase = -1;
+static gint ett_a11_fqi_flowentry = -1;
+static gint ett_a11_rqi_flowentry = -1;
+static gint ett_a11_fqi_flags = -1;
+static gint ett_a11_fqi_entry_flags = -1;
+static gint ett_a11_rqi_entry_flags = -1;
 
 /* Port used for Mobile IP based Tunneling Protocol (A11) */
 #define UDP_PORT_3GA11    699
@@ -122,6 +166,7 @@
 
 static const value_string a11_ses_ptype_vals[] = {
 	{0x8881, "Unstructured Byte Stream"},
+	{0x88D2, "3GPP2 Packet"},
 	{0, NULL},
 };
 
@@ -217,10 +262,18 @@
   {0, NULL},
 };
 
+static const value_string a11_ext_nvose_qosmode[]= {
+  {0x00, "QoS Disabled"},
+  {0x01, "QoS Enabled"},
+  {0, NULL},
+};
+
 static const value_string a11_ext_nvose_srvopt[]= {
   {0x0021, "3G High Speed Packet Data"},
+  {0x003B, "HRPD Main Service Connection"},
   {0x003C, "Link Layer Assisted Header Removal"},
   {0x003D, "Link Layer Assisted Robust Header Compression"},
+  {0x0040, "HRPD Auxiliary Service Connection"},
   {0, NULL},
 };
 
@@ -252,7 +305,17 @@
   {0x0601, "Indicators (All Dormant Indicator)"},
   {0x0701, "PDSN Code (PDSN Code)"},
   {0x0801, "Session Parameter (RN-PDIT:Radio Network Packet Data Inactivity Timer)"},
+  {0x0802, "Session Parameter (Always On)"},
+  {0x0803, "Session Parameter (QoS Mode)"},
   {0x0901, "Service Option (Service Option Value)"},
+  {0x0A01, "PDSN Enabled Features (Flow Control Enabled)"},
+  {0x0A02, "PDSN Enabled Features (Packet Boundary Enabled)"},
+  {0x0B01, "PCF Enabled Features (Short Data Indication Supported)"},
+  {0x0B02, "PCF Enabled Features (GRE Segmentation Enabled)"},
+  {0x0C01, "Additional Session Info"},
+  {0x0D01, "Forward QoS Info"},
+  {0x0D02, "Reverse QoS Info"},
+  {0x0D08, "Subscriber QoS Profile"},
   {0, NULL},
 };
 
@@ -521,6 +584,273 @@
 
 }
 
+
+/* Code to dissect Additional Session Info */
+static void dissect_ase(tvbuff_t* tvb, int offset, int ase_len, proto_tree* ext_tree)
+{
+   int clen = 0; /* consumed length */
+
+   while(clen < ase_len)
+   {
+      guint8 srid = tvb_get_guint8(tvb, offset+clen+1);
+      proto_item* ti = proto_tree_add_text
+              (ext_tree, tvb, offset+clen, 0x0D+1, "GRE Key Entry (SRID: %d)", srid);
+      proto_tree* exts_tree = proto_item_add_subtree(ti, ett_a11_ase);
+   
+      /* Entry Length */
+      proto_tree_add_item(exts_tree, hf_a11_ase_len_type, tvb, offset+clen, 1, FALSE);
+      clen++;
+
+      /* SRID */
+      proto_tree_add_item(exts_tree, hf_a11_ase_srid_type, tvb, offset+clen, 1, FALSE);
+      clen++;
+
+      /* Service Option */
+      proto_tree_add_item(exts_tree, hf_a11_ase_servopt_type, tvb, offset+clen, 2, FALSE);
+      clen+=2;
+
+      /* GRE Protocol Type*/
+      proto_tree_add_item(exts_tree, hf_a11_ase_gre_proto_type, tvb, offset+clen, 2, FALSE);
+      clen+=2;
+
+      /* GRE Key */
+      proto_tree_add_item(exts_tree, hf_a11_ase_gre_key, tvb, offset+clen, 4, FALSE);
+      clen+=4;
+
+      /* PCF IP Address */
+      proto_tree_add_item(exts_tree, hf_a11_ase_pcf_addr_key, tvb, offset+clen, 4, FALSE);
+      clen+=4;
+   }
+}
+
+#define A11_FQI_IPFLOW_DISC_ENABLED 0x80
+#define A11_FQI_DSCP_INCLUDED 0x40
+
+static void dissect_fwd_qosinfo_flags
+       (tvbuff_t* tvb, int offset, proto_tree* ext_tree, guint8* p_dscp_included)
+{
+      guint8 flags = tvb_get_guint8(tvb, offset);
+      guint8 nbits = sizeof(flags) * 8;
+
+      proto_item* ti = proto_tree_add_text(ext_tree, tvb, offset, sizeof(flags),
+                           "Flags: %#02x", flags);
+
+      proto_tree* flags_tree = proto_item_add_subtree(ti, ett_a11_fqi_flags);
+
+      proto_tree_add_text(flags_tree, tvb, offset, sizeof(flags), "%s",
+                      decode_boolean_bitfield(flags, A11_FQI_IPFLOW_DISC_ENABLED, nbits,
+                       "IP Flow Discriminator Enabled", "IP Flow Discriminator Disabled"));
+
+      proto_tree_add_text(flags_tree, tvb, offset, sizeof(flags), "%s",
+                      decode_boolean_bitfield(flags, A11_FQI_DSCP_INCLUDED, nbits,
+                                        "DSCP Included", "DSCP Not Included"));
+      if(flags & A11_FQI_DSCP_INCLUDED)
+      {
+         *p_dscp_included = 1;
+      }else
+      {
+         *p_dscp_included = 0;
+      }
+}
+
+#define A11_FQI_DSCP 0x7E
+#define A11_FQI_FLOW_STATE 0x01
+
+static void dissect_fqi_entry_flags
+       (tvbuff_t* tvb, int offset, proto_tree* ext_tree, guint8 dscp_enabled)
+{
+      guint8 dscp = tvb_get_guint8(tvb, offset);
+      guint8 nbits = sizeof(dscp) * 8;
+
+      proto_item* ti = proto_tree_add_text(ext_tree, tvb, offset, sizeof(dscp),
+                           "DSCP and Flow State: %#02x", dscp);
+
+      proto_tree* flags_tree = proto_item_add_subtree(ti, ett_a11_fqi_entry_flags);
+
+      if(dscp_enabled)
+      {
+         proto_tree_add_text(flags_tree, tvb, offset, sizeof(dscp), "%s",
+                      decode_numeric_bitfield(dscp, A11_FQI_DSCP, nbits,
+                                              "DSCP: %u"));
+      }
+
+      proto_tree_add_text(flags_tree, tvb, offset, sizeof(dscp), "%s",
+                      decode_boolean_bitfield(dscp, A11_FQI_FLOW_STATE, nbits,
+                          "Flow State: Active", "Flow State: Inactive"));
+}
+
+
+#define A11_RQI_FLOW_STATE 0x01
+
+static void dissect_rqi_entry_flags
+       (tvbuff_t* tvb, int offset, proto_tree* ext_tree)
+{
+      guint8 flags = tvb_get_guint8(tvb, offset);
+      guint8 nbits = sizeof(flags) * 8;
+
+      proto_item* ti = proto_tree_add_text(ext_tree, tvb, offset, sizeof(flags),
+                           "Flags: %#02x", flags);
+
+      proto_tree* flags_tree = proto_item_add_subtree(ti, ett_a11_rqi_entry_flags);
+
+      proto_tree_add_text(flags_tree, tvb, offset, sizeof(flags), "%s",
+                      decode_boolean_bitfield(flags, A11_RQI_FLOW_STATE, nbits,
+                          "Flow State: Active", "Flow State: Inactive"));
+}
+
+/* Code to dissect Forward QoS Info */
+static void dissect_fwd_qosinfo(tvbuff_t* tvb, int offset, proto_tree* ext_tree)
+{
+   int clen = 0; /* consumed length */
+   guint8 srid = 0;
+   guint8 flow_count = 0;
+   guint8 flow_index = 0;
+   guint8 dscp_enabled = 0;
+
+
+   /* SR Id */
+   srid = tvb_get_guint8(tvb, offset+clen); 
+   proto_tree_add_item(ext_tree, hf_a11_fqi_srid, tvb, offset+clen, 1, FALSE);
+   clen++;
+
+   /* Flags */
+   dissect_fwd_qosinfo_flags(tvb, offset+clen, ext_tree, &dscp_enabled);
+   clen++;
+
+   /* Flow Count */
+   flow_count = tvb_get_guint8(tvb, offset+clen);
+   flow_count &= 0x1F;
+   proto_tree_add_item(ext_tree, hf_a11_fqi_flowcount, tvb, offset+clen, 1, FALSE);
+   clen++;
+
+   for(flow_index=0; flow_index<flow_count; flow_index++)
+   {
+      guint8 requested_qos_len = 0;
+      guint8 granted_qos_len = 0;
+
+      guint8 entry_len = tvb_get_guint8(tvb, offset+clen);
+      guint8 flow_id = tvb_get_guint8(tvb, offset+clen+1);
+
+      proto_item* ti = proto_tree_add_text
+          (ext_tree, tvb, offset+clen, entry_len+1, "Forward Flow Entry (Flow Id: %d)", flow_id);
+
+      proto_tree* exts_tree = proto_item_add_subtree(ti, ett_a11_fqi_flowentry);
+   
+      /* Entry Length */
+      proto_tree_add_item(exts_tree, hf_a11_fqi_entrylen, tvb, offset+clen, 1, FALSE);
+      clen++;
+
+      /* Flow Id */
+      proto_tree_add_item(exts_tree, hf_a11_fqi_flowid, tvb, offset+clen, 1, FALSE);
+      clen++;
+
+      /* DSCP and Flow State*/
+      dissect_fqi_entry_flags(tvb, offset+clen, exts_tree, dscp_enabled);
+      clen++;
+
+
+      /* Requested QoS Length */
+      requested_qos_len = tvb_get_guint8(tvb, offset+clen);
+      proto_tree_add_item
+        (exts_tree, hf_a11_fqi_requested_qoslen, tvb, offset+clen, 1, FALSE);
+      clen++;
+
+      /* Requested QoS Blob */
+      if(requested_qos_len)
+      {
+        proto_tree_add_item
+          (exts_tree, hf_a11_fqi_requested_qos, tvb, offset+clen, 
+              requested_qos_len, FALSE);
+        clen += requested_qos_len;
+      }
+
+      /* Granted QoS Length */
+      granted_qos_len = tvb_get_guint8(tvb, offset+clen);
+      proto_tree_add_item(exts_tree, hf_a11_fqi_granted_qoslen, tvb, offset+clen, 1, FALSE);
+      clen++;
+
+      /* Granted QoS Blob */
+      if(granted_qos_len)
+      {
+        proto_tree_add_item
+          (exts_tree, hf_a11_fqi_granted_qos, tvb, offset+clen, granted_qos_len, FALSE);
+        clen += granted_qos_len;
+      }
+   }
+}
+
+/* Code to dissect Reverse QoS Info */
+static void dissect_rev_qosinfo(tvbuff_t* tvb, int offset, proto_tree* ext_tree)
+{
+   int clen = 0; /* consumed length */
+   guint8 srid = 0;
+   guint8 flow_count = 0;
+   guint8 flow_index = 0;
+
+   /* SR Id */
+   srid = tvb_get_guint8(tvb, offset+clen); 
+   proto_tree_add_item(ext_tree, hf_a11_rqi_srid, tvb, offset+clen, 1, FALSE);
+   clen++;
+
+   /* Flow Count */
+   flow_count = tvb_get_guint8(tvb, offset+clen);
+   flow_count &= 0x1F;
+   proto_tree_add_item(ext_tree, hf_a11_rqi_flowcount, tvb, offset+clen, 1, FALSE);
+   clen++;
+
+   for(flow_index=0; flow_index<flow_count; flow_index++)
+   {
+      guint8 requested_qos_len = 0;
+      guint8 granted_qos_len = 0;
+
+      guint8 entry_len = tvb_get_guint8(tvb, offset+clen);
+      guint8 flow_id = tvb_get_guint8(tvb, offset+clen+1);
+
+      proto_item* ti = proto_tree_add_text
+          (ext_tree, tvb, offset+clen, entry_len+1, "Reverse Flow Entry (Flow Id: %d)", flow_id);
+
+      proto_tree* exts_tree = proto_item_add_subtree(ti, ett_a11_rqi_flowentry);
+   
+      /* Entry Length */
+      proto_tree_add_item(exts_tree, hf_a11_rqi_entrylen, tvb, offset+clen, 1, FALSE);
+      clen++;
+
+      /* Flow Id */
+      proto_tree_add_item(exts_tree, hf_a11_rqi_flowid, tvb, offset+clen, 1, FALSE);
+      clen++;
+
+      /* Flags */
+      dissect_rqi_entry_flags(tvb, offset+clen, exts_tree);
+      clen++;
+
+      /* Requested QoS Length */
+      requested_qos_len = tvb_get_guint8(tvb, offset+clen);
+      proto_tree_add_item(exts_tree, hf_a11_rqi_requested_qoslen, tvb, offset+clen, 1, FALSE);
+      clen++;
+
+      /* Requested QoS Blob */
+      if(requested_qos_len)
+      {
+        proto_tree_add_item
+          (exts_tree, hf_a11_rqi_requested_qos, tvb, offset+clen, requested_qos_len, FALSE);
+        clen += requested_qos_len;
+      }
+
+      /* Granted QoS Length */
+      granted_qos_len = tvb_get_guint8(tvb, offset+clen);
+      proto_tree_add_item(exts_tree, hf_a11_rqi_granted_qoslen, tvb, offset+clen, 1, FALSE);
+      clen++;
+
+      /* Granted QoS Blob */
+      if(granted_qos_len)
+      {
+        proto_tree_add_item
+          (exts_tree, hf_a11_rqi_granted_qos, tvb, offset+clen, granted_qos_len, FALSE);
+        clen += granted_qos_len;
+      }
+   }
+}
+
 /* Code to dissect extensions */
 static void
 dissect_a11_extensions( tvbuff_t *tvb, int offset, proto_tree *tree)
@@ -733,11 +1063,23 @@
         case 0x0802:
           proto_tree_add_text(ext_tree, tvb, offset, -1, "Session Parameter - Always On");
           break;
+        case 0x0803:
+          proto_tree_add_item(ext_tree, hf_a11_vse_qosmode, tvb, offset, 1, FALSE);
+          break;
         case 0x0901:
           if (ext_len < 2)
             break;
           proto_tree_add_item(ext_tree, hf_a11_vse_srvopt, tvb, offset, 2, FALSE);
           break;
+        case 0x0C01:
+          dissect_ase(tvb, offset, ext_len, ext_tree);
+          break;
+        case 0x0D01:
+          dissect_fwd_qosinfo(tvb, offset, ext_tree);
+          break;
+        case 0x0D02:
+          dissect_rev_qosinfo(tvb, offset, ext_tree);
+          break;
       }
 
       break;
@@ -1234,7 +1576,141 @@
 			FT_BYTES, BASE_HEX, NULL, 0,
 			"CANID", HFILL }
 	  },
-     
+	  { &hf_a11_vse_qosmode,
+		 { "QoS Mode",       "a11.ext.qosmode",
+			FT_UINT8, BASE_HEX, VALS(a11_ext_nvose_qosmode), 0,
+			"QoS Mode.", HFILL }
+      },
+      { &hf_a11_ase_len_type,
+		 { "Entry Length",   "a11.ext.ase.len",
+			FT_UINT8, BASE_DEC, NULL, 0,
+			"Entry Length.", HFILL }
+      },
+      { &hf_a11_ase_srid_type,
+		 { "Service Reference ID (SRID)",   "a11.ext.ase.srid",
+			FT_UINT8, BASE_DEC, NULL, 0,
+			"Service Reference ID (SRID).", HFILL }
+      },
+      { &hf_a11_ase_servopt_type,
+		 { "Service Option", "a11.ext.ase.srvopt",
+			FT_UINT16, BASE_HEX, VALS(a11_ext_nvose_srvopt), 0,
+			"Service Option.", HFILL }
+      },
+	  { &hf_a11_ase_gre_proto_type,
+		 { "GRE Protocol Type",   "a11.ext.ase.ptype",
+			FT_UINT16, BASE_HEX, VALS(a11_ses_ptype_vals), 0,
+			"GRE Protocol Type.", HFILL }
+	  },
+	  { &hf_a11_ase_gre_key,
+		 { "GRE Key",   "a11.ext.ase.key",
+			FT_UINT32, BASE_HEX, NULL, 0,
+			"GRE Key.", HFILL }
+	  },
+	  { &hf_a11_ase_pcf_addr_key,
+		 { "PCF IP Address",           "a11.ext.ase.pcfip",
+			FT_IPv4, BASE_NONE, NULL, 0,
+			"PCF IP Address.", HFILL }
+	  },
+	  { &hf_a11_fqi_srid,
+		 { "SRID",   "a11.ext.fqi.srid",
+			FT_UINT8, BASE_DEC, NULL, 0,
+			"Forward Flow Entry SRID.", HFILL }
+	  },
+	  { &hf_a11_fqi_flags,
+		 { "Flags",   "a11.ext.fqi.flags",
+			FT_UINT8, BASE_HEX, NULL, 0,
+			"Forward Flow Entry Flags.", HFILL }
+	  },
+	  { &hf_a11_fqi_flowcount,
+		 { "Forward Flow Count",   "a11.ext.fqi.flowcount",
+			FT_UINT8, BASE_DEC, NULL, 0,
+			"Forward Flow Count.", HFILL }
+	  },
+	  { &hf_a11_fqi_flowid,
+		 { "Forward Flow Id",   "a11.ext.fqi.flowid",
+			FT_UINT8, BASE_DEC, NULL, 0,
+			"Forward Flow Id.", HFILL }
+	  },
+	  { &hf_a11_fqi_entrylen,
+		 { "Entry Length",   "a11.ext.fqi.entrylen",
+			FT_UINT8, BASE_DEC, NULL, 0,
+			"Forward Entry Length.", HFILL }
+	  },
+	  { &hf_a11_fqi_dscp,
+		 { "Forward DSCP",   "a11.ext.fqi.dscp",
+			FT_UINT8, BASE_HEX, NULL, 0,
+			"Forward Flow DSCP.", HFILL }
+	  },
+	  { &hf_a11_fqi_flowstate,
+		 { "Forward Flow State",   "a11.ext.fqi.flowstate",
+			FT_UINT8, BASE_HEX, NULL, 0,
+			"Forward Flow State.", HFILL }
+	  },
+	  { &hf_a11_fqi_requested_qoslen,
+		 { "Requested QoS Length",   "a11.ext.fqi.reqqoslen",
+			FT_UINT8, BASE_DEC, NULL, 0,
+			"Forward Requested QoS Length.", HFILL }
+	  },
+	  { &hf_a11_fqi_requested_qos,
+		 { "Requested QoS",   "a11.ext.fqi.reqqos",
+			FT_BYTES, BASE_NONE, NULL, 0,
+			"Forward Requested QoS.", HFILL }
+	  },
+	  { &hf_a11_fqi_granted_qoslen,
+		 { "Granted QoS Length",   "a11.ext.fqi.graqoslen",
+			FT_UINT8, BASE_DEC, NULL, 0,
+			"Forward Granted QoS Length.", HFILL }
+	  },
+	  { &hf_a11_fqi_granted_qos,
+		 { "Granted QoS",   "a11.ext.fqi.graqos",
+			FT_BYTES, BASE_NONE, NULL, 0,
+			"Forward Granted QoS.", HFILL }
+	  },
+	  { &hf_a11_rqi_srid,
+		 { "SRID",   "a11.ext.rqi.srid",
+			FT_UINT8, BASE_DEC, NULL, 0,
+			"Reverse Flow Entry SRID.", HFILL }
+	  },
+	  { &hf_a11_rqi_flowcount,
+		 { "Reverse Flow Count",   "a11.ext.rqi.flowcount",
+			FT_UINT8, BASE_DEC, NULL, 0,
+			"Reverse Flow Count.", HFILL }
+	  },
+	  { &hf_a11_rqi_flowid,
+		 { "Reverse Flow Id",   "a11.ext.rqi.flowid",
+			FT_UINT8, BASE_DEC, NULL, 0,
+			"Reverse Flow Id.", HFILL }
+	  },
+	  { &hf_a11_rqi_entrylen,
+		 { "Entry Length",   "a11.ext.rqi.entrylen",
+			FT_UINT8, BASE_DEC, NULL, 0,
+			"Reverse Flow Entry Length.", HFILL }
+	  },
+	  { &hf_a11_rqi_flowstate,
+		 { "Flow State",   "a11.ext.rqi.flowstate",
+			FT_UINT8, BASE_HEX, NULL, 0,
+			"Reverse Flow State.", HFILL }
+	  },
+	  { &hf_a11_rqi_requested_qoslen,
+		 { "Requested QoS Length",   "a11.ext.rqi.reqqoslen",
+			FT_UINT8, BASE_DEC, NULL, 0,
+			"Reverse Requested QoS Length.", HFILL }
+	  },
+	  { &hf_a11_rqi_requested_qos,
+		 { "Requested QoS",   "a11.ext.rqi.reqqos",
+			FT_BYTES, BASE_NONE, NULL, 0,
+			"Reverse Requested QoS.", HFILL }
+	  },
+	  { &hf_a11_rqi_granted_qoslen,
+		 { "Granted QoS Length",   "a11.ext.rqi.graqoslen",
+			FT_UINT8, BASE_DEC, NULL, 0,
+			"Reverse Granted QoS Length.", HFILL }
+	  },
+	  { &hf_a11_rqi_granted_qos,
+		 { "Granted QoS",   "a11.ext.rqi.graqos",
+			FT_BYTES, BASE_NONE, NULL, 0,
+			"Reverse Granted QoS.", HFILL }
+	  },
 	};
 
 	/* Setup protocol subtree array */
@@ -1245,6 +1721,12 @@
 		&ett_a11_exts,
 		&ett_a11_radius,
 		&ett_a11_radiuses,
+		&ett_a11_ase,
+		&ett_a11_fqi_flowentry,
+		&ett_a11_rqi_flowentry,
+		&ett_a11_fqi_flags,
+		&ett_a11_fqi_entry_flags,
+		&ett_a11_rqi_entry_flags,
 	};
 
 	/* Register the protocol name and description */

Attachment: rrq.cap
Description: rrq.cap

3GPP2 A11
    Message Type: Registration Request (1)
    Flags: 0x0a
        0... .... = Simultaneous Bindings: False
        .0.. .... = Broadcast Datagrams: False
        ..0. .... = Co-lcated Care-of Address: False
        ...0 .... = Minimal Encapsulation: False
        .... 1... = GRE: True
        .... .0.. = Van Jacobson: False
        .... ..1. = Reverse Tunneling: True
    Lifetime: 1800
    Home Address: 0.0.0.0 (0.0.0.0)
    Home Agent: 30.136.1.254 (30.136.1.254)
    Care of Address: 30.136.1.1 (30.136.1.1)
    Identification: Feb  7, 2036 01:28:16.000000000
    Extensions
        Extension: Session Specific Extension
            Extension Type: Session Specific Extension (39)
            Extension Length: 21
            Protocol Type: Unstructured Byte Stream (0x8881)
            Key: 0x02000000
            .... ..00 = Session ID Version: 0
            MNSR-ID: 0x0000
            MSID Type: 6
            MSID Length: 8
            MSID(BCD): 1123456789012345
        Extension: Critical Vendor/Organization Specific Extension
            Extension Type: Critical Vendor/Organization Specific Extension (38)
            Extension Length: 107
            Vendor ID: 3rd Generation Partnership Project 2 (3GPP2) (0x0000159f)
            Application Type: Accounting (RADIUS) (0x101)
            Airlink Record
                3GPP2: Airlink Record (Session Setup (Y=1))
                3GPP2: R-P Session ID (2000000)
                3GPP2: Airlink Sequence Number (0000)
                MSID: 123456789012345
                3GPP2: ESN (00000012)
                3GPP2: Serving PCF (30.136.1.1)
                3GPP2: BSID (123456789012)
        Extension: Critical Vendor/Organization Specific Extension
            Extension Type: Critical Vendor/Organization Specific Extension (38)
            Extension Length: 78
            Vendor ID: 3rd Generation Partnership Project 2 (3GPP2) (0x0000159f)
            Application Type: Accounting (RADIUS) (0x101)
            Airlink Record
                3GPP2: Airlink Record (Active Start (Y=2))
                3GPP2: R-P Session ID (2000000)
                3GPP2: Airlink Sequence Number (0001)
                3GPP2: Service Option (003b)
                3GPP2: Forward Traffic Type (0000)
                3GPP2: Airlink Priority (0000)
        Extension: Normal Vendor/Organization Specific Extension
            Extension Type: Normal Vendor/Organization Specific Extension (134)
            Extension Length: 9
            Vendor ID: 3rd Generation Partnership Project 2 (3GPP2) (0x0000159f)
            Application Type: Session Parameter (QoS Mode) (0x803)
            QoS Mode: QoS Enabled (0x01)
        Extension: Normal Vendor/Organization Specific Extension
            Extension Type: Normal Vendor/Organization Specific Extension (134)
            Extension Length: 10
            Vendor ID: 3rd Generation Partnership Project 2 (3GPP2) (0x0000159f)
            Application Type: Service Option (Service Option Value) (0x901)
            Service Option: HRPD Main Service Connection (0x003b)
        Extension: Mobile-Home Authentication Extension
            Extension Type: Mobile-Home Authentication Extension (32)
            Extension Length: 20
            SPI: 0x00000100
            Authenticator: F3566B589D17E9232F38CEAA747A8A9F

0000  00 09 5b 1f fa 31 00 01 af 04 63 84 08 00 45 c0   ..[..1....c...E.
0010  01 39 0b 86 00 00 40 11 2d 60 1e 88 01 01 1e 88   .9....@.-`......
0020  01 fe 7b 4f 02 bb 01 25 36 68 01 0a 07 08 00 00   ..{O...%6h......
0030  00 00 1e 88 01 fe 1e 88 01 01 00 00 00 00 00 00   ................
0040  00 00 27 15 88 81 02 00 00 00 00 00 00 00 00 06   ..'.............
0050  08 11 23 45 67 89 01 23 45 26 00 00 6b 00 00 15   ..#Eg..#E&..k...
0060  9f 01 01 1a 0c 00 00 15 9f 28 06 00 00 00 01 1a   .........(......
0070  0c 00 00 15 9f 29 06 02 00 00 00 1a 0c 00 00 15   .....)..........
0080  9f 2a 06 00 00 00 00 1f 11 31 32 33 34 35 36 37   .*.......1234567
0090  38 39 30 31 32 33 34 35 1a 10 00 00 15 9f 34 0a   89012345......4.
00a0  30 30 30 30 30 30 31 32 1a 0c 00 00 15 9f 09 06   00000012........
00b0  1e 88 01 01 1a 14 00 00 15 9f 0a 0e 31 32 33 34   ............1234
00c0  35 36 37 38 39 30 31 32 26 00 00 4e 00 00 15 9f   56789012&..N....
00d0  01 01 1a 0c 00 00 15 9f 28 06 00 00 00 02 1a 0c   ........(.......
00e0  00 00 15 9f 29 06 02 00 00 00 1a 0c 00 00 15 9f   ....)...........
00f0  2a 06 00 00 00 01 1a 0c 00 00 15 9f 10 06 00 00   *...............
0100  00 3b 1a 0c 00 00 15 9f 11 06 00 00 00 00 1a 0c   .;..............
0110  00 00 15 9f 27 06 00 00 00 00 86 09 00 00 00 00   ....'...........
0120  15 9f 08 03 01 86 0a 00 00 00 00 15 9f 09 01 00   ................
0130  3b 20 14 00 00 01 00 f3 56 6b 58 9d 17 e9 23 2f   ; ......VkX...#/
0140  38 ce aa 74 7a 8a 9f                              8..tz..

3GPP2 A11
    Message Type: Registration Reply (3)
    Reply Code: Reg Accepted (0)
    Lifetime: 1800
    Home Address: 0.0.0.0 (0.0.0.0)
    Home Agent: 30.136.1.254 (30.136.1.254)
    Identification: Feb  7, 2036 01:28:16.000000000
    Extensions
        Extension: Session Specific Extension
            Extension Type: Session Specific Extension (39)
            Extension Length: 21
            Protocol Type: Unstructured Byte Stream (0x8881)
            Key: 0x02000000
            .... ..00 = Session ID Version: 0
            MNSR-ID: 0x0001
            MSID Type: 6
            MSID Length: 8
            MSID(BCD): 1123456789012345
        Extension: Mobile-Home Authentication Extension
            Extension Type: Mobile-Home Authentication Extension (32)
            Extension Length: 20
            SPI: 0x00000100
            Authenticator: EB911977EC3935054AD762B3EDD85C63

0000  00 01 af 04 63 84 00 09 5b 1f fa 31 08 00 45 00   ....c...[..1..E.
0010  00 5d 00 00 40 00 40 11 fa 81 1e 88 01 fe 1e 88   .]..@.@.........
0020  01 01 02 bb 7b 4f 00 49 68 d5 03 00 07 08 00 00   ....{O.Ih.......
0030  00 00 1e 88 01 fe 00 00 00 00 00 00 00 00 27 15   ..............'.
0040  88 81 02 00 00 00 00 00 00 01 00 06 08 11 23 45   ..............#E
0050  67 89 01 23 45 20 14 00 00 01 00 eb 91 19 77 ec   g..#E ........w.
0060  39 35 05 4a d7 62 b3 ed d8 5c 63                  95.J.b...\c

3GPP2 A11
    Message Type: Registration Request (1)
    Flags: 0x0a
        0... .... = Simultaneous Bindings: False
        .0.. .... = Broadcast Datagrams: False
        ..0. .... = Co-lcated Care-of Address: False
        ...0 .... = Minimal Encapsulation: False
        .... 1... = GRE: True
        .... .0.. = Van Jacobson: False
        .... ..1. = Reverse Tunneling: True
    Lifetime: 1800
    Home Address: 0.0.0.0 (0.0.0.0)
    Home Agent: 30.136.1.254 (30.136.1.254)
    Care of Address: 30.136.1.1 (30.136.1.1)
    Identification: Feb  7, 2036 01:28:16.000000000
    Extensions
        Extension: Session Specific Extension
            Extension Type: Session Specific Extension (39)
            Extension Length: 21
            Protocol Type: Unstructured Byte Stream (0x8881)
            Key: 0x02000000
            .... ..00 = Session ID Version: 0
            MNSR-ID: 0x0000
            MSID Type: 6
            MSID Length: 8
            MSID(BCD): 1123456789012345
        Extension: Normal Vendor/Organization Specific Extension
            Extension Type: Normal Vendor/Organization Specific Extension (134)
            Extension Length: 9
            Vendor ID: 3rd Generation Partnership Project 2 (3GPP2) (0x0000159f)
            Application Type: Session Parameter (QoS Mode) (0x803)
            QoS Mode: QoS Enabled (0x01)
        Extension: Normal Vendor/Organization Specific Extension
            Extension Type: Normal Vendor/Organization Specific Extension (134)
            Extension Length: 10
            Vendor ID: 3rd Generation Partnership Project 2 (3GPP2) (0x0000159f)
            Application Type: Service Option (Service Option Value) (0x901)
            Service Option: HRPD Main Service Connection (0x003b)
        Extension: Normal Vendor/Organization Specific Extension
            Extension Type: Normal Vendor/Organization Specific Extension (134)
            Extension Length: 36
            Vendor ID: 3rd Generation Partnership Project 2 (3GPP2) (0x0000159f)
            Application Type: Additional Session Info (0xc01)
            GRE Key Entry (SRID: 2)
                Entry Length: 13
                Service Reference ID (SRID): 2
                Service Option: Unknown (0x003e)
                GRE Protocol Type: 3GPP2 Packet (0x88d2)
                GRE Key: 0x02100000
                PCF IP Address: 30.136.1.1 (30.136.1.1)
            GRE Key Entry (SRID: 3)
                Entry Length: 13
                Service Reference ID (SRID): 3
                Service Option: Unknown (0x003f)
                GRE Protocol Type: 3GPP2 Packet (0x88d2)
                GRE Key: 0x02200000
                PCF IP Address: 30.136.1.1 (30.136.1.1)
        Extension: Normal Vendor/Organization Specific Extension
            Extension Type: Normal Vendor/Organization Specific Extension (134)
            Extension Length: 20
            Vendor ID: 3rd Generation Partnership Project 2 (3GPP2) (0x0000159f)
            Application Type: Forward QoS Info (0xd01)
            SRID: 1
            Flags: 0xc0
                1... .... = IP Flow Discriminator Enabled
                .1.. .... = DSCP Included
            Forward Flow Count: 1
            Forward Flow Entry (Flow Id: 30)
                Entry Length: 8
                Forward Flow Id: 30
                DSCP and Flow State: 0x6e
                    .110 111. = DSCP: 55
                    .... ...0 = Flow State: Inactive
                Requested QoS Length: 4
                Requested QoS: 31323232
                Granted QoS Length: 0
        Extension: Normal Vendor/Organization Specific Extension
            Extension Type: Normal Vendor/Organization Specific Extension (134)
            Extension Length: 24
            Vendor ID: 3rd Generation Partnership Project 2 (3GPP2) (0x0000159f)
            Application Type: Forward QoS Info (0xd01)
            SRID: 2
            Flags: 0xc0
                1... .... = IP Flow Discriminator Enabled
                .1.. .... = DSCP Included
            Forward Flow Count: 1
            Forward Flow Entry (Flow Id: 31)
                Entry Length: 12
                Forward Flow Id: 31
                DSCP and Flow State: 0x73
                    .111 001. = DSCP: 57
                    .... ...1 = Flow State: Active
                Requested QoS Length: 4
                Requested QoS: 32323232
                Granted QoS Length: 4
                Granted QoS: 32333333
        Extension: Normal Vendor/Organization Specific Extension
            Extension Type: Normal Vendor/Organization Specific Extension (134)
            Extension Length: 24
            Vendor ID: 3rd Generation Partnership Project 2 (3GPP2) (0x0000159f)
            Application Type: Forward QoS Info (0xd01)
            SRID: 3
            Flags: 0xc0
                1... .... = IP Flow Discriminator Enabled
                .1.. .... = DSCP Included
            Forward Flow Count: 1
            Forward Flow Entry (Flow Id: 32)
                Entry Length: 12
                Forward Flow Id: 32
                DSCP and Flow State: 0x77
                    .111 011. = DSCP: 59
                    .... ...1 = Flow State: Active
                Requested QoS Length: 4
                Requested QoS: 33323232
                Granted QoS Length: 4
                Granted QoS: 33333333
        Extension: Normal Vendor/Organization Specific Extension
            Extension Type: Normal Vendor/Organization Specific Extension (134)
            Extension Length: 19
            Vendor ID: 3rd Generation Partnership Project 2 (3GPP2) (0x0000159f)
            Application Type: Reverse QoS Info (0xd02)
            SRID: 1
            Reverse Flow Count: 1
            Reverse Flow Entry (Flow Id: 40)
                Entry Length: 8
                Reverse Flow Id: 40
                Flags: 00
                    .... ...0 = Flow State: Inactive
                Requested QoS Length: 4
                Requested QoS: 31343434
                Granted QoS Length: 0
        Extension: Normal Vendor/Organization Specific Extension
            Extension Type: Normal Vendor/Organization Specific Extension (134)
            Extension Length: 23
            Vendor ID: 3rd Generation Partnership Project 2 (3GPP2) (0x0000159f)
            Application Type: Reverse QoS Info (0xd02)
            SRID: 2
            Reverse Flow Count: 1
            Reverse Flow Entry (Flow Id: 41)
                Entry Length: 12
                Reverse Flow Id: 41
                Flags: 0x1
                    .... ...1 = Flow State: Active
                Requested QoS Length: 4
                Requested QoS: 32343434
                Granted QoS Length: 4
                Granted QoS: 32353535
        Extension: Normal Vendor/Organization Specific Extension
            Extension Type: Normal Vendor/Organization Specific Extension (134)
            Extension Length: 23
            Vendor ID: 3rd Generation Partnership Project 2 (3GPP2) (0x0000159f)
            Application Type: Reverse QoS Info (0xd02)
            SRID: 3
            Reverse Flow Count: 1
            Reverse Flow Entry (Flow Id: 42)
                Entry Length: 12
                Reverse Flow Id: 42
                Flags: 0x1
                    .... ...1 = Flow State: Active
                Requested QoS Length: 4
                Requested QoS: 33343434
                Granted QoS Length: 4
                Granted QoS: 33353535
        Extension: Mobile-Home Authentication Extension
            Extension Type: Mobile-Home Authentication Extension (32)
            Extension Length: 20
            SPI: 0x00000100
            Authenticator: 3CF49156B3DF9F9A065F42B98D253AAF

0000  00 09 5b 1f fa 31 00 01 af 04 63 84 08 00 45 c0   ..[..1....c...E.
0010  01 2f 0b 88 00 00 40 11 2d 68 1e 88 01 01 1e 88   ./....@.-h......
0020  01 fe 7b 4f 02 bb 01 1b 79 62 01 0a 07 08 00 00   ..{O....yb......
0030  00 00 1e 88 01 fe 1e 88 01 01 00 00 00 00 00 00   ................
0040  00 00 27 15 88 81 02 00 00 00 00 00 00 00 00 06   ..'.............
0050  08 11 23 45 67 89 01 23 45 86 09 00 00 00 00 15   ..#Eg..#E.......
0060  9f 08 03 01 86 0a 00 00 00 00 15 9f 09 01 00 3b   ...............;
0070  86 24 00 00 00 00 15 9f 0c 01 0d 02 00 3e 88 d2   .$...........>..
0080  02 10 00 00 1e 88 01 01 0d 03 00 3f 88 d2 02 20   ...........?... 
0090  00 00 1e 88 01 01 86 14 00 00 00 00 15 9f 0d 01   ................
00a0  01 c0 01 08 1e 6e 04 31 32 32 32 00 86 18 00 00   .....n.1222.....
00b0  00 00 15 9f 0d 01 02 c0 01 0c 1f 73 04 32 32 32   ...........s.222
00c0  32 04 32 33 33 33 86 18 00 00 00 00 15 9f 0d 01   2.2333..........
00d0  03 c0 01 0c 20 77 04 33 32 32 32 04 33 33 33 33   .... w.3222.3333
00e0  86 13 00 00 00 00 15 9f 0d 02 01 01 08 28 00 04   .............(..
00f0  31 34 34 34 00 86 17 00 00 00 00 15 9f 0d 02 02   1444............
0100  01 0c 29 01 04 32 34 34 34 04 32 35 35 35 86 17   ..)..2444.2555..
0110  00 00 00 00 15 9f 0d 02 03 01 0c 2a 01 04 33 34   ...........*..34
0120  34 34 04 33 35 35 35 20 14 00 00 01 00 3c f4 91   44.3555 .....<..
0130  56 b3 df 9f 9a 06 5f 42 b9 8d 25 3a af            V....._B..%:.

3GPP2 A11
    Message Type: Registration Reply (3)
    Reply Code: Reg Accepted (0)
    Lifetime: 1800
    Home Address: 0.0.0.0 (0.0.0.0)
    Home Agent: 30.136.1.254 (30.136.1.254)
    Identification: Feb  7, 2036 01:28:16.000000000
    Extensions
        Extension: Session Specific Extension
            Extension Type: Session Specific Extension (39)
            Extension Length: 21
            Protocol Type: Unstructured Byte Stream (0x8881)
            Key: 0x02000000
            .... ..00 = Session ID Version: 0
            MNSR-ID: 0x0001
            MSID Type: 6
            MSID Length: 8
            MSID(BCD): 1123456789012345
        Extension: Mobile-Home Authentication Extension
            Extension Type: Mobile-Home Authentication Extension (32)
            Extension Length: 20
            SPI: 0x00000100
            Authenticator: EB911977EC3935054AD762B3EDD85C63

0000  00 01 af 04 63 84 00 09 5b 1f fa 31 08 00 45 00   ....c...[..1..E.
0010  00 5d 00 00 40 00 40 11 fa 81 1e 88 01 fe 1e 88   .]..@.@.........
0020  01 01 02 bb 7b 4f 00 49 68 d5 03 00 07 08 00 00   ....{O.Ih.......
0030  00 00 1e 88 01 fe 00 00 00 00 00 00 00 00 27 15   ..............'.
0040  88 81 02 00 00 00 00 00 00 01 00 06 08 11 23 45   ..............#E
0050  67 89 01 23 45 20 14 00 00 01 00 eb 91 19 77 ec   g..#E ........w.
0060  39 35 05 4a d7 62 b3 ed d8 5c 63                  95.J.b...\c