meta-flow: Correctly set destination MAC in mf_set_flow_value().
[sliver-openvswitch.git] / build-aux / check-structs
index 545c80a..0849fcf 100755 (executable)
@@ -1,5 +1,6 @@
 #! /usr/bin/python
 
+import os.path
 import sys
 import re
 
@@ -13,6 +14,10 @@ types['uint8_t'] = {"size": 1, "alignment": 1}
 types['uint16_t'] = {"size": 2, "alignment": 2}
 types['uint32_t'] = {"size": 4, "alignment": 4}
 types['uint64_t'] = {"size": 8, "alignment": 8}
+types['ovs_be16'] = {"size": 2, "alignment": 2}
+types['ovs_be32'] = {"size": 4, "alignment": 4}
+types['ovs_be64'] = {"size": 8, "alignment": 8}
+types['ovs_32aligned_be64'] = {"size": 8, "alignment": 4}
 
 token = None
 line = ""
@@ -182,6 +187,7 @@ def parseStruct():
             warn("%s needs %d bytes of tail padding" % (structName, shortage))
         size += shortage
     types[structName] = {"size": size, "alignment": alignment}
+    return structName
 
 def checkStructs():
     if len(sys.argv) < 2:
@@ -190,10 +196,7 @@ def checkStructs():
         sys.exit(1)
 
     if '--help' in sys.argv:
-        argv0 = sys.argv[0]
-        slash = argv0.rfind('/')
-        if slash:
-            argv0 = argv0[slash + 1:]
+        argv0 = os.path.basename(sys.argv[0])
         print '''\
 %(argv0)s, for checking struct and struct member alignment
 usage: %(argv0)s HEADER [HEADER]...
@@ -221,6 +224,7 @@ header files without extensions.''' % {"argv0": argv0}
         global lineNumber
         inputFile = open(fileName)
         lineNumber = 0
+        lastStruct = None
         while getToken():
             if token in ("#ifdef", "#ifndef", "#include",
                          "#endif", "#elif", "#else"):
@@ -241,12 +245,15 @@ header files without extensions.''' % {"argv0": argv0}
                 while token != ';':
                     getToken()
             elif token in ('struct', 'union'):
-                parseStruct()
+                lastStruct = parseStruct()
             elif match('OFP_ASSERT') or match('BOOST_STATIC_ASSERT'):
                 forceMatch('(')
                 forceMatch('sizeof')
                 forceMatch('(')
                 typeName = parseTypeName()
+                if typeName != lastStruct:
+                    warn("checking size of %s but %s was most recently defined"
+                         % (typeName, lastStruct))
                 forceMatch(')')
                 forceMatch('=')
                 forceMatch('=')