| #!/usr/bin/env python2.5 |
| """This script reads struct from OpenFlow header file and output query |
| |
| (C) Copyright Stanford University |
| Author ykk |
| Date October 2009 |
| """ |
| import sys |
| import getopt |
| import openflow |
| |
| def usage(): |
| """Display usage |
| """ |
| print "Usage "+sys.argv[0]+" <options> struct_name\n"+\ |
| "Options:\n"+\ |
| "-h/--help\n\tPrint this usage guide\n"+\ |
| "-c/--cstruct\n\tPrint C struct\n"+\ |
| "-n/--name\n\tPrint names of struct\n"+\ |
| "-s/--size\n\tPrint size of struct\n"+\ |
| "" |
| |
| #Parse options and arguments |
| try: |
| opts, args = getopt.getopt(sys.argv[1:], "hcsn", |
| ["help","cstruct","size","names"]) |
| except getopt.GetoptError: |
| usage() |
| sys.exit(2) |
| |
| #Check there is only struct name |
| if not (len(args) == 1): |
| usage() |
| sys.exit(2) |
| |
| #Parse options |
| ##Print C struct |
| printc = False |
| ##Print names |
| printname = False |
| ##Print size |
| printsize = False |
| for opt,arg in opts: |
| if (opt in ("-h","--help")): |
| usage() |
| sys.exit(0) |
| elif (opt in ("-s","--size")): |
| printsize = True |
| elif (opt in ("-c","--cstruct")): |
| printc = True |
| elif (opt in ("-n","--names")): |
| printname = True |
| else: |
| assert (False,"Unhandled option :"+opt) |
| |
| pyopenflow = openflow.messages() |
| cstruct = pyopenflow.structs[args[0].strip()] |
| pattern = pyopenflow.get_pattern(cstruct) |
| |
| #Print C struct |
| if (printc): |
| print cstruct |
| |
| #Print pattern |
| print "Python pattern = "+str(pattern) |
| |
| #Print name |
| if (printname): |
| print cstruct.get_names() |
| |
| #Print size |
| if (printsize): |
| print "Size = "+str(pyopenflow.get_size(pattern)) |
| |