Index: Makefile.nmake
===================================================================
RCS file: /cvsroot/ethereal/Makefile.nmake,v
retrieving revision 1.271
diff -u -r1.271 Makefile.nmake
--- Makefile.nmake	19 Jan 2003 21:29:08 -0000	1.271
+++ Makefile.nmake	21 Jan 2003 23:11:20 -0000
@@ -198,6 +198,7 @@
 	packet-m2ua.c  \
 	packet-m3ua.c  \
 	packet-mbtcp.c \
+	packet-mdshdr.c \
 	packet-mip.c  \
 	packet-mmse.c  \
 	packet-mount.c \

Index: Makefile.am
===================================================================
RCS file: /cvsroot/ethereal/Makefile.am,v
retrieving revision 1.541
diff -u -r1.541 Makefile.am
--- Makefile.am	21 Jan 2003 00:39:57 -0000	1.541
+++ Makefile.am	21 Jan 2003 23:11:52 -0000
@@ -255,6 +255,7 @@
 	packet-m2ua.c  \
 	packet-m3ua.c  \
 	packet-mbtcp.c \
+	packet-mdshdr.c \
 	packet-mip.c  \
 	packet-mmse.c  \
 	packet-mount.c \

Index: column.c
===================================================================
RCS file: /cvsroot/ethereal/column.c,v
retrieving revision 1.40
diff -u -r1.40 column.c
--- column.c	10 Dec 2002 01:17:07 -0000	1.40
+++ column.c	21 Jan 2003 23:12:19 -0000
@@ -52,7 +52,7 @@
                      "%us","%hs", "%rhs", "%uhs", "%ns", "%rns", "%uns", "%d",
                      "%rd", "%ud", "%hd", "%rhd", "%uhd", "%nd", "%rnd",
                      "%und", "%S", "%rS", "%uS", "%D", "%rD", "%uD", "%p",
-                     "%i", "%L", "%XO", "%XR", "%I", "%c" };
+                     "%i", "%L", "%XO", "%XR", "%I", "%c", "%Xs", "%Xd", "%V" };
                      
   if (fmt < 0 || fmt > NUM_COL_FMTS)
     return NULL;
@@ -81,7 +81,8 @@
                      "Dest port (resolved)", "Dest port (unresolved)",
                      "Protocol", "Information", "Packet length (bytes)" ,
                      "OXID", "RXID", "FW-1 monitor if/direction",
-                     "Circuit ID" };
+                     "Circuit ID"
+                     "Src PortIdx", "Dst PortIdx", "VSAN",};
 
   return(dlist[fmt]);
 }
@@ -151,6 +152,15 @@
     case COL_CIRCUIT_ID:
       fmt_list[COL_CIRCUIT_ID] = TRUE;
       break;
+    case COL_SRCIDX:
+      fmt_list[COL_SRCIDX] = TRUE;
+      break;
+    case COL_DSTIDX:
+      fmt_list[COL_DSTIDX] = TRUE;
+      break;
+    case COL_VSAN:
+      fmt_list[COL_VSAN] = TRUE;
+      break;
     default:
       break;
   }
@@ -229,14 +239,21 @@
       break;
     case COL_RXID:
     case COL_OXID:
-      return "000000";
-      break;
+        return "000000";
+        break;
     case COL_IF_DIR:
       return "i 00000000 I";
       break;
     case COL_CIRCUIT_ID:
       return "000000";
       break;
+    case COL_SRCIDX:
+    case COL_DSTIDX:
+        return "0000000";
+        break;
+    case COL_VSAN:
+      return "000000";
+      break;
     default: /* COL_INFO */
       return "Source port: kerberos-master  Destination port: kerberos-master";
       break;
@@ -295,6 +312,9 @@
     case COL_UNRES_NET_DST:
     case COL_OXID:
     case COL_RXID:
+    case COL_SRCIDX:
+    case COL_DSTIDX:
+    case COL_VSAN:
       /* We don't want these to resize dynamically; if they get resolved
          to names, those names could be very long, and auto-resizing
 	 columns showing those names may leave too little room for
@@ -350,10 +370,20 @@
         return COL_NUMBER;
         break;
       case 's':
-        return COL_DEF_SRC + res_off + addr_off;
+          if (prev_code == COL_OXID) {
+              return COL_SRCIDX;
+          }
+          else {
+              return COL_DEF_SRC + res_off + addr_off;
+          }
         break;
       case 'd':
-        return COL_DEF_DST + res_off + addr_off;
+          if (prev_code == COL_OXID) {
+              return COL_DSTIDX;
+          }
+          else {
+              return COL_DEF_DST + res_off + addr_off;
+          }
         break;
       case 'S':
         return COL_DEF_SRC_PORT + res_off;
@@ -410,6 +440,9 @@
         break;
       case 'c':
         return COL_CIRCUIT_ID;
+        break;
+      case 'V':
+        return COL_VSAN;
         break;
     }
     cptr++;

Index: packet-eth.c
===================================================================
RCS file: /cvsroot/ethereal/packet-eth.c,v
retrieving revision 1.77
diff -u -r1.77 packet-eth.c
--- packet-eth.c	28 Aug 2002 21:00:13 -0000	1.77
+++ packet-eth.c	21 Jan 2003 23:13:14 -0000
@@ -84,7 +84,7 @@
 
   etype = pntohs(&pd[offset+12]);
 
-	/* either ethernet802.3 or ethernet802.2 */
+  /* either ethernet802.3 or ethernet802.2 */
   if (etype <= IEEE_802_3_MAX_LEN) {
     length = etype;
 
@@ -94,7 +94,11 @@
        (IPX/SPX is they only thing that can be contained inside a
        straight 802.3 packet). A non-0xffff value means that there's an
        802.2 layer inside the 802.3 layer */
-    if (pd[offset+14] == 0xff && pd[offset+15] == 0xff) {
+    if (etype == 0) {
+        /* This is the Vegas FC format */
+        ethhdr_type = ETHERNET_II;
+    }
+    else if (pd[offset+14] == 0xff && pd[offset+15] == 0xff) {
       ethhdr_type = ETHERNET_802_3;
     }
     else {
@@ -160,7 +164,26 @@
   etype = tvb_get_ntohs(tvb, 12);
 
 	/* either ethernet802.3 or ethernet802.2 */
-  if (etype <= IEEE_802_3_MAX_LEN) {
+  if (etype == 0) {
+    if (check_col(pinfo->cinfo, COL_INFO))
+      col_set_str(pinfo->cinfo, COL_INFO, "Ethernet II");
+    if (tree) {
+      ti = proto_tree_add_protocol_format(tree, proto_eth, tvb, 0, ETH_HEADER_SIZE,
+		"Ethernet II");
+
+      fh_tree = proto_item_add_subtree(ti, ett_ether2);
+
+      proto_tree_add_ether(fh_tree, hf_eth_dst, tvb, 0, 6, dst);
+      proto_tree_add_ether(fh_tree, hf_eth_src, tvb, 6, 6, src);
+/* add items for eth.addr filter */
+      proto_tree_add_ether_hidden(fh_tree, hf_eth_addr, tvb, 0, 6, dst);
+      proto_tree_add_ether_hidden(fh_tree, hf_eth_addr, tvb, 6, 6, src);
+    }
+
+    ethertype(etype, tvb, ETH_HEADER_SIZE, pinfo, tree, fh_tree, hf_eth_type,
+          hf_eth_trailer);
+  }
+  else if (etype <= IEEE_802_3_MAX_LEN) {
     /* Oh, yuck.  Cisco ISL frames require special interpretation of the
        destination address field; fortunately, they can be recognized by
        checking the first 5 octets of the destination address, which are

Index: epan/column-utils.c
===================================================================
RCS file: /cvsroot/ethereal/epan/column-utils.c,v
retrieving revision 1.30
diff -u -r1.30 epan/column-utils.c
--- epan/column-utils.c	10 Dec 2002 01:17:21 -0000	1.30
+++ epan/column-utils.c	21 Jan 2003 23:13:45 -0000
@@ -784,6 +784,26 @@
       col_set_circuit_id(pinfo, i);
       break;
 
+    case COL_SRCIDX:
+        snprintf (pinfo->cinfo->col_buf[i], COL_MAX_LEN, "0x%x",
+                  pinfo->src_idx);
+        pinfo->cinfo->col_buf[i][COL_MAX_LEN - 1] = '\0';
+        pinfo->cinfo->col_data[i] = pinfo->cinfo->col_buf[i];
+        break;
+
+    case COL_DSTIDX:
+        snprintf (pinfo->cinfo->col_buf[i], COL_MAX_LEN, "0x%x",
+                  pinfo->dst_idx);
+        pinfo->cinfo->col_buf[i][COL_MAX_LEN - 1] = '\0';
+        pinfo->cinfo->col_data[i] = pinfo->cinfo->col_buf[i];
+        break;
+
+    case COL_VSAN:
+        snprintf (pinfo->cinfo->col_buf[i], COL_MAX_LEN, "%d", pinfo->vsan);
+        pinfo->cinfo->col_buf[i][COL_MAX_LEN - 1] = '\0';
+        pinfo->cinfo->col_data[i] = pinfo->cinfo->col_buf[i];
+        break;
+        
     case NUM_COL_FMTS:	/* keep compiler happy - shouldn't get here */
       g_assert_not_reached();
       break;

Index: epan/column_info.h
===================================================================
RCS file: /cvsroot/ethereal/epan/column_info.h,v
retrieving revision 1.6
diff -u -r1.6 epan/column_info.h
--- epan/column_info.h	10 Dec 2002 01:17:21 -0000	1.6
+++ epan/column_info.h	21 Jan 2003 23:14:03 -0000
@@ -89,6 +89,9 @@
   COL_RXID,           /* Fibre Channel RXID */
   COL_IF_DIR,         /* FW-1 monitor interface/direction */
   COL_CIRCUIT_ID,     /* Circuit ID */
+  COL_SRCIDX,         /* Src port idx - Vegas specific */
+  COL_DSTIDX,         /* Dst port idx - Vegas specific */
+  COL_VSAN,           /* VSAN */
   NUM_COL_FMTS        /* Should always be last */
 };
 

Index: epan/packet.c
===================================================================
RCS file: /cvsroot/ethereal/epan/packet.c,v
retrieving revision 1.85
diff -u -r1.85 epan/packet.c
--- epan/packet.c	20 Jan 2003 05:42:37 -0000	1.85
+++ epan/packet.c	21 Jan 2003 23:14:20 -0000
@@ -289,6 +289,9 @@
         edt->pi.oxid = 0;
         edt->pi.rxid = 0;
         edt->pi.r_ctl = 0;
+        edt->pi.src_idx = 0;
+        edt->pi.dst_idx = 0;
+        edt->pi.vsan = 0;
 
 	TRY {
 		edt->tvb = tvb_new_real_data(pd, fd->cap_len, fd->pkt_len);

Index: epan/packet_info.h
===================================================================
RCS file: /cvsroot/ethereal/epan/packet_info.h,v
retrieving revision 1.28
diff -u -r1.28 epan/packet_info.h
--- epan/packet_info.h	6 Jan 2003 19:08:37 -0000	1.28
+++ epan/packet_info.h	21 Jan 2003 23:14:36 -0000
@@ -152,6 +152,9 @@
   guint16 rxid;                 /* channel conversations */
   guint8  r_ctl;                /* R_CTL field in Fibre Channel Protocol */
   guint8  pad;
+  guint16 src_idx;              /* Source port index (MDS-specific) */
+  guint16 dst_idx;              /* Dest port index (MDS-specific) */
+  guint16 vsan;                 /* Fibre channel/MDS-specific */
   void    *private_data;	/* pointer to data passed from one dissector to another */
   void    *decrypted_data;	/* pointer to description of decrypted payload structure */
 } packet_info;

Index: packet-fcip.c
===================================================================
RCS file: /cvsroot/ethereal/packet-fcip.c,v
retrieving revision 1.1
diff -u -r1.1 packet-fcip.c
--- packet-fcip.c	8 Dec 2002 02:32:17 -0000	1.1
+++ packet-fcip.c	21 Jan 2003 23:15:39 -0000
@@ -480,7 +480,7 @@
                     col_append_str(pinfo->cinfo, COL_INFO, "(Changed)");
             }
 
-            dissect_fcip_sf (tvb, fcip_tree, start);
+            dissect_fcip_sf (tvb, fcip_tree, offset+4);
         }
 
         bytes_remaining -= frame_len;
Index: packet-fcels.c
===================================================================
RCS file: /cvsroot/ethereal/packet-fcels.c,v
retrieving revision 1.2
diff -u -r1.2 packet-fcels.c
--- packet-fcels.c	10 Dec 2002 02:49:31 -0000	1.2
+++ packet-fcels.c	21 Jan 2003 23:15:48 -0000
@@ -264,12 +264,12 @@
     }
     
     if (flag & 0x0800) {
-        sprintf (&flagstr[stroff], "%sNormal B2B Credit Mgmt", punc);
+        sprintf (&flagstr[stroff], "%Alt B2B Credit Mgmt", punc);
         strcpy (punc, ", ");
         stroff += 24;
     }
     else {
-        sprintf (&flagstr[stroff], "%sAlt B2B Credit Mgmt", punc);
+        sprintf (&flagstr[stroff], "%sNormal B2B Credit Mgmt", punc);
         strcpy (punc, ", ");
         stroff += 21;
     }
