blob: 83850f52c8e7b272e6f1477a38f09405f3ecaafa [file] [log] [blame]
#!/usr/bin/python
#
# This python script generates error subclasses
#
import re
import sys
sys.path.append("../../src/python/oftest")
from cstruct import *
from class_maps import class_to_members_map
print """
# Python OpenFlow error wrapper classes
from cstruct import *
"""
################################################################
#
# Error message subclasses
#
################################################################
# Template for error subclasses
template = """
class --TYPE--_error_msg(ofp_error_msg):
\"""
Wrapper class for --TYPE-- error message class
Data members inherited from ofp_error_msg:
@arg type
@arg code
@arg data: Binary string following message members
\"""
def __init__(self):
ofp_error_msg.__init__(self)
self.header = ofp_header()
self.header.type = OFPT_ERROR
self.type = --ERROR_NAME--
self.data = ""
def pack(self, assertstruct=True):
self.header.length = self.__len__()
packed = self.header.pack()
packed += ofp_error_msg.pack(self)
packed += self.data
return packed
def unpack(self, binary_string):
binary_string = self.header.unpack(binary_string)
binary_string = ofp_error_msg.unpack(self, binary_string)
self.data = binary_string
return ""
def __len__(self):
return OFP_HEADER_BYTES + OFP_ERROR_MSG_BYTES + len(self.data)
def show(self, prefix=''):
outstr = prefix + "--TYPE--_error_msg\\m"
outstr += self.header.show(prefix + ' ')
outstr += ofp_error_msg.show(self, prefix + ' ')
outstr += prefix + "data is of length " + str(len(self.data)) + '\\n'
##@todo Consider trying to parse the string
return outstr
def __eq__(self, other):
if type(self) != type(other): return False
return (self.header == other.header and
ofp_error_msg.__eq__(self, other) and
self.data == other.data)
def __ne__(self, other): return not self.__eq__(other)
"""
error_types = [
'hello_failed',
'bad_request',
'bad_action',
'flow_mod_failed',
'port_mod_failed',
'queue_op_failed']
for t in error_types:
error_name = "OFPET_" + t.upper()
to_print = re.sub('--TYPE--', t, template)
to_print = re.sub('--ERROR_NAME--', error_name, to_print)
print to_print