blob: 5a28818c6997993580e18a7d3a3603cfa1f45f70 [file] [log] [blame]
"""This module generate Python code for OpenFlow structs.
(C) Copyright Stanford University
Date December 2009
Created by ykk
"""
import cpythonize
from config import *
class rules(cpythonize.rules):
"""Class that specify rules for pythonization of OpenFlow messages
(C) Copyright Stanford University
Date December 2009
Created by ykk
"""
def __init__(self, ofmsg):
"""Initialize rules
"""
cpythonize.rules.__init__(self)
##Reference to ofmsg
self.__ofmsg = ofmsg
##Default values for members
self.default_values[('ofp_header','version')] = self.__ofmsg.get_value('OFP_VERSION')
self.default_values[('ofp_switch_config',\
'miss_send_len')] = self.__ofmsg.get_value('OFP_DEFAULT_MISS_SEND_LEN')
for x in ['ofp_flow_mod','ofp_flow_expired','ofp_flow_stats']:
self.default_values[(x,'priority')] = self.__ofmsg.get_value('OFP_DEFAULT_PRIORITY')
#Default values for struct
self.default_values[('ofp_packet_out','buffer_id')] = 0xffffffff
self.struct_default[('ofp_flow_mod',
'header')] = ".type = OFPT_FLOW_MOD"
# 'header')] = ".type = "+str(self.__ofmsg.get_value('OFPT_FLOW_MOD'))
##Macros to exclude
self.excluded_macros = ['OFP_ASSERT(EXPR)','OFP_ASSERT(_EXPR)','OFP_ASSERT',
'icmp_type','icmp_code','OFP_PACKED',
'OPENFLOW_OPENFLOW_H']
##Enforce mapping
if GEN_ENUM_VALUES_LIST:
self.enforced_maps['ofp_header'] = [ ('type','ofp_type_values') ]
elif GEN_ENUM_DICTIONARY:
self.enforced_maps['ofp_header'] = \
[ ('type','ofp_type_map.keys()') ]
class pythonizer(cpythonize.pythonizer):
"""Class that pythonize C structures of OpenFlow messages
(C) Copyright Stanford University
Date December 2009
Created by ykk
"""
def __init__(self, ofmsg):
"""Initialize
"""
ofrules = rules(ofmsg)
cpythonize.pythonizer.__init__(self, ofmsg, ofrules)
##Reference to OpenFlow message class
self.__ofmsg = ofmsg