3 Check the sanity of field definitions in Wireshark.
8 from optparse import OptionParser
10 sys.exit("Need python 2.3.")
15 sys.exit("Need to run on Unix.")
21 """Data for a protocol."""
22 def __init__(self, line):
23 data = line.split("\t")
30 """Data for a field."""
31 def __init__(self, line):
32 data = line.split("\t")
41 self.bitmask = int(data[7])
45 def gather_data(tethereal):
46 """Calls tethereal and gathers data."""
47 cmd = "%s -G fields3" % (tethereal,)
48 (status, output) = commands.getstatusoutput(cmd)
51 sys.exit("Failed: " + cmd)
53 lines = output.split("\n")
54 protos = [Proto(x) for x in lines if x[0] == "P"]
55 fields = [Field(x) for x in lines if x[0] == "F"]
60 def check_fields(fields):
61 """Looks for problems in field definitions."""
64 if field.bitmask != 0:
65 if field.ftype.find("FT_UINT") != 0 and \
66 field.ftype.find("FT_INT") != 0 and \
67 field.ftype != "FT_BOOLEAN":
68 print "%s has a bitmask 0x%x but is type %s" % \
69 (field.abbrev, field.bitmask, field.ftype)
75 protos, fields = gather_data(tethereal)
80 sys.exit("%d errors found" % (errors,))
85 """Parse the command-line."""
86 usage = "%prog tethereal"
87 parser = OptionParser(usage=usage)
89 (options, args) = parser.parse_args()
92 parser.error("Need location of tethereal.")
96 if __name__ == "__main__":