]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
Changes to common header files not directly applicable to open-vm-tools.
authorOliver Kurth <okurth@vmware.com>
Thu, 30 Nov 2017 23:38:04 +0000 (15:38 -0800)
committerOliver Kurth <okurth@vmware.com>
Thu, 30 Nov 2017 23:38:04 +0000 (15:38 -0800)
open-vm-tools/lib/include/vm_product_versions.h
open-vm-tools/modules/shared/vmxnet/eth_public.h

index 4a05eeb005251e1463c66f599bc376258338ef1d..fe8b6a0aee96198516ba930db62a614e5d36d5ef 100644 (file)
@@ -48,7 +48,7 @@
    #define PRODUCT_VERSION    1,1,5,PRODUCT_BUILD_NUMBER_NUMERIC
 #elif defined(VMX86_VPX)
    /* this should be kept in sync with the corresponding vpx branch. */
-   #define PRODUCT_VERSION    6,6,3,PRODUCT_BUILD_NUMBER_NUMERIC
+   #define PRODUCT_VERSION    6,6,4,PRODUCT_BUILD_NUMBER_NUMERIC
 #elif defined(VMX86_HORIZON_VIEW)
    #define PRODUCT_VERSION    0,0,0,PRODUCT_BUILD_NUMBER_NUMERIC
 // VMX86_DESKTOP must be last because it is the default and is always defined.
  */
 #define ESX_VERSION_MAJOR "6"
 #define ESX_VERSION_MINOR "6"
-#define ESX_VERSION_MAINT "3"
+#define ESX_VERSION_MAINT "4"
 #define ESX_VERSION ESX_VERSION_MAJOR "." ESX_VERSION_MINOR "." \
                     ESX_VERSION_MAINT
 #define ESX_VERSION_THIRD_PARTY ESX_VERSION_MAJOR ESX_VERSION_MINOR \
 #define SYSIMAGE_VERSION_EXT_STR \
    SYSIMAGE_VERSION "." PRODUCT_BUILD_NUMBER_NUMERIC_STRING
 
-#define VIM_VERSION "6.6.3"
+#define VIM_VERSION "6.6.4"
 /*
  *For smooth version bump up for quaterly releases, we need to have a fallback
  *mechanism to previous version in all those components which perform version
 6.0.0,\
 6.5.0"
 // Put VPX_VERSION first, because vpx/make/defs.mk doesn't check for suffix.
-#define VPX_VERSION "6.6.3"
+#define VPX_VERSION "6.6.4"
 #define VPX_VERSION_MAJOR "6"
 #define VPX_VERSION_MINOR "6"
-#define VPX_VERSION_MAINT "3"
+#define VPX_VERSION_MAINT "4"
 #define VPX_VERSION_THIRD_PARTY VPX_VERSION_MAJOR VPX_VERSION_MINOR \
                                 VPX_VERSION_MAINT
-#define VPX_VERSION_NUMERIC 6,6,3,PRODUCT_BUILD_NUMBER_NUMERIC
+#define VPX_VERSION_NUMERIC 6,6,4,PRODUCT_BUILD_NUMBER_NUMERIC
 
 // Last supported ESX version by VC.
 #define VPX_MIN_HOST_VERSION "6.0.0"
 
 #define MAX_SUPPORTED_VI_VERSION "6.6" //from ovfTool/src/supportedVersions.h
-#define VCDB_CURRENT_SCHEMA_VERSION           663 // from PitCADatabase.h
+#define VCDB_CURRENT_SCHEMA_VERSION           664 // from PitCADatabase.h
 
 #define VPX_RELEASE_UPDATE "0" /* 0 = Pre-release/GA, 1 = Update 1 */
 #define VPX_RELEASE_PATCH "0"  /* 0 = experimental */
 #define VPX_RELEASE VPX_RELEASE_UPDATE "." VPX_RELEASE_PATCH
 
 /* expected database version for current release */
-#define VPXD_VDB_DB_VERSION_ID            663
+#define VPXD_VDB_DB_VERSION_ID            664
 #define VPXD_VDB_DB_VERSION_VALUE         "VirtualCenter Database 6.6"
 
 // Virtual Appliance Patch Version Number
index 7abad64f3caab9dd51bb0ed272cc15629eee8f5e..197b553c34c16f263471b20ddd653d5f22cd16e3 100644 (file)
@@ -95,6 +95,7 @@ typedef enum {
    ETH_HEADER_TYPE_802_1PQ,
    ETH_HEADER_TYPE_802_3,
    ETH_HEADER_TYPE_802_1PQ_802_3,
+   ETH_HEADER_TYPE_NESTED_802_1PQ,
 } Eth_HdrType;
 
 // DIX type fields we care about
@@ -217,6 +218,10 @@ struct Eth_802_1pq {
    union {
       Eth_DIX      dix;       // DIX header follows
       Eth_802_3    e802_3;    // or 802.3 header follows 
+      struct {
+         Eth_802_1pq_Tag   tag;        // inner VLAN/QOS tag
+         Eth_DIX           dix;        // DIX header follows
+      } nested802_1pq;
    }; 
 }
 #include "vmware_pack_end.h"
@@ -312,6 +317,11 @@ extern Eth_Address netEthBroadcastAddr;
                                       sizeof(Eth_Address) + \
                                       sizeof(Eth_802_1pq_Tag) + \
                                       sizeof(Eth_802_3))
+#define ETH_HEADER_LEN_NESTED_802_1PQ  (sizeof(Eth_Address) + \
+                                        sizeof(Eth_Address) + \
+                                        sizeof(Eth_802_1pq_Tag) + \
+                                        sizeof(Eth_802_1pq_Tag) + \
+                                        sizeof(Eth_DIX))
 
 #define ETH_MIN_HEADER_LEN   (ETH_HEADER_LEN_DIX)
 #define ETH_MAX_HEADER_LEN   (ETH_HEADER_LEN_802_1PQ_802_3)
@@ -440,6 +450,7 @@ Eth_IsNullAddr(const Eth_Address addr)
  *
  *      ETH_HEADER_TYPE_DIX: typical 14 byte eth header
  *      ETH_HEADER_TYPE_802_1PQ: DIX+vlan tagging
+ *      ETH_HEADER_TYPE_NESTED_802_1PQ: DIX+vlan tagging+DIX+vlan tagging
  *      ETH_HEADER_TYPE_802_3: 802.3 eth header
  *      ETH_HEADER_TYPE_802_1PQ_802_3: 802.3 + vlan tag 
  *
@@ -492,6 +503,10 @@ Eth_HeaderType(const Eth_Header *eh)
           * vlan tagging with dix style type
           */
 
+         if (UNLIKELY(eh->e802_1pq.dix.typeNBO == ETH_TYPE_802_1PQ_NBO)) {
+            return ETH_HEADER_TYPE_NESTED_802_1PQ;
+         }
+
          return ETH_HEADER_TYPE_802_1PQ;
       }
 
@@ -537,37 +552,39 @@ Eth_EncapsulatedPktType(const Eth_Header *eh)
    Eth_HdrType type = Eth_HeaderType(eh);  
 
    switch (type) {
-      
-      case ETH_HEADER_TYPE_DIX :
-        return eh->dix.typeNBO;
+   case ETH_HEADER_TYPE_DIX :
+      return eh->dix.typeNBO;
 
-      case ETH_HEADER_TYPE_802_1PQ :
-        return eh->e802_1pq.dix.typeNBO;
+   case ETH_HEADER_TYPE_802_1PQ :
+      return eh->e802_1pq.dix.typeNBO;
 
-      case ETH_HEADER_TYPE_802_3 :
-         /*
-          * Documentation describes SNAP headers as having ONLY
-          * 0x03 as the control fields, not just the lower two bits
-          * This prevents the use of Eth_IsLLCControlUFormat.
-          */
-         if ((eh->e802_3.llc.dsap == 0xaa) &&
-              (eh->e802_3.llc.ssap == 0xaa) &&
-              (eh->e802_3.llc.control == ETH_LLC_CONTROL_UFRAME)) {
-                  return eh->e802_3.snap.snapType.typeNBO;
-         } else {
-            // LLC, no snap header, then no type
-            return ETH_TYPE_LLC;
-         }
+   case ETH_HEADER_TYPE_NESTED_802_1PQ:
+      return eh->e802_1pq.nested802_1pq.dix.typeNBO;
 
-      case ETH_HEADER_TYPE_802_1PQ_802_3 :
-         if ((eh->e802_1pq.e802_3.llc.dsap == 0xaa) &&
-              (eh->e802_1pq.e802_3.llc.ssap == 0xaa) &&
-              (eh->e802_1pq.e802_3.llc.control == ETH_LLC_CONTROL_UFRAME)) {
-                  return eh->e802_1pq.e802_3.snap.snapType.typeNBO;
-         } else {
-            // tagged LLC, no snap header, then no type
-            return ETH_TYPE_LLC;
-         }
+   case ETH_HEADER_TYPE_802_3 :
+      /*
+       * Documentation describes SNAP headers as having ONLY
+       * 0x03 as the control fields, not just the lower two bits
+       * This prevents the use of Eth_IsLLCControlUFormat.
+       */
+      if ((eh->e802_3.llc.dsap == 0xaa) &&
+           (eh->e802_3.llc.ssap == 0xaa) &&
+           (eh->e802_3.llc.control == ETH_LLC_CONTROL_UFRAME)) {
+               return eh->e802_3.snap.snapType.typeNBO;
+      } else {
+         // LLC, no snap header, then no type
+         return ETH_TYPE_LLC;
+      }
+
+   case ETH_HEADER_TYPE_802_1PQ_802_3 :
+      if ((eh->e802_1pq.e802_3.llc.dsap == 0xaa) &&
+           (eh->e802_1pq.e802_3.llc.ssap == 0xaa) &&
+           (eh->e802_1pq.e802_3.llc.control == ETH_LLC_CONTROL_UFRAME)) {
+               return eh->e802_1pq.e802_3.snap.snapType.typeNBO;
+      } else {
+         // tagged LLC, no snap header, then no type
+         return ETH_TYPE_LLC;
+      }
    }
 
    ASSERT(FALSE);
@@ -1081,18 +1098,20 @@ Eth_HeaderLength(const Eth_Header *eh)
    Eth_HdrType type = Eth_HeaderType(eh);  
 
    switch (type) {
+   case ETH_HEADER_TYPE_DIX :
+      return ETH_HEADER_LEN_DIX;
 
-      case ETH_HEADER_TYPE_DIX :
-        return ETH_HEADER_LEN_DIX;
+   case ETH_HEADER_TYPE_802_1PQ :
+      return ETH_HEADER_LEN_802_1PQ;
 
-      case ETH_HEADER_TYPE_802_1PQ :
-        return ETH_HEADER_LEN_802_1PQ;
+   case ETH_HEADER_TYPE_NESTED_802_1PQ :
+      return ETH_HEADER_LEN_NESTED_802_1PQ;
 
-      case ETH_HEADER_TYPE_802_3 :
-         return Eth_HeaderLength_802_3(eh);
+   case ETH_HEADER_TYPE_802_3 :
+      return Eth_HeaderLength_802_3(eh);
 
-      case ETH_HEADER_TYPE_802_1PQ_802_3 :
-         return Eth_HeaderLength_802_1PQ_802_3(eh);
+   case ETH_HEADER_TYPE_802_1PQ_802_3 :
+      return Eth_HeaderLength_802_1PQ_802_3(eh);
    }
    
    ASSERT(FALSE);
@@ -1198,17 +1217,25 @@ Eth_IsFrameHeaderComplete(const Eth_Header *eh,
    if (len >= ETH_HEADER_LEN_802_1PQ) {
       /*
        * Eth_HeaderType will correctly enumerate all types once
-       * at least ETH_HEADER_LEN_802_1PQ bytes are available
+       * at least ETH_HEADER_LEN_802_1PQ bytes are available except nested
+       * 802.1pq tag.
        */
       Eth_HdrType type = Eth_HeaderType(eh);
 
-      if (type == ETH_HEADER_TYPE_802_1PQ) {
+      switch (type) {
+      case ETH_HEADER_TYPE_802_1PQ:
          if (ehHdrLen != NULL) {
             *ehHdrLen = ETH_HEADER_LEN_802_1PQ;
          }
          return TRUE;
 
-      } else if (type == ETH_HEADER_TYPE_802_3) {
+      case ETH_HEADER_TYPE_NESTED_802_1PQ:
+         if (ehHdrLen != NULL) {
+            *ehHdrLen = ETH_HEADER_LEN_NESTED_802_1PQ;
+         }
+         return len >= ETH_HEADER_LEN_NESTED_802_1PQ;
+
+      case ETH_HEADER_TYPE_802_3:
          /*
           * Length could be shorter LLC or LLC+SNAP.
           * ETH_HEADER_LEN_802_2_LLC bytes are needed to disambiguate.
@@ -1217,13 +1244,17 @@ Eth_IsFrameHeaderComplete(const Eth_Header *eh,
          ASSERT(ETH_HEADER_LEN_802_1PQ > ETH_HEADER_LEN_802_2_LLC);
          ehLen = Eth_HeaderLength_802_3(eh);
          /* continue to common test */
-      } else if (type == ETH_HEADER_TYPE_802_1PQ_802_3) {
+         break;
+
+      case ETH_HEADER_TYPE_802_1PQ_802_3:
          if (len < ETH_HEADER_LEN_802_1PQ_LLC) {
             return FALSE;
          }
          ehLen = Eth_HeaderLength_802_1PQ_802_3(eh);
          /* continue to common test */
-      } else {
+         break;
+
+      default:
          /*
           * This else clause is unreachable, but if removed
           * compiler complains about ehLen possibly being