frontend: add support for discrimiator fields
In an abstract base class (e.g., of_action), the dicriminator field
represents the field that distinguishes between different type of
subclasses. It is marked in the base class with a '== ?', as in
uint32_t type == ?
Each class may only define at most one discriminator field.
diff --git a/loxi_ir.py b/loxi_ir.py
index 9e266eb..fefe770 100644
--- a/loxi_ir.py
+++ b/loxi_ir.py
@@ -36,6 +36,7 @@
'OFClass',
'OFDataMember',
'OFTypeMember',
+ 'OFDiscriminatorMember',
'OFLengthMember',
'OFFieldLengthMember',
'OFPadMember',
@@ -72,11 +73,11 @@
The members are in the same order as on the wire.
@param name
+@param superclass name of the super class
@param members List of *Member objects
-@param super_class name of the super class
@param params optional dictionary of parameters
"""
-class OFClass(namedtuple('OFClass', ['name', 'members', 'superclass', 'params'])):
+class OFClass(namedtuple('OFClass', ['name', 'superclass', 'members', 'virtual', 'params'])):
def member_by_name(self, name):
return find(self.members, lambda m: hasattr(m, "name") and m.name == name)
@@ -91,6 +92,16 @@
OFDataMember = namedtuple('OFDataMember', ['name', 'oftype'])
"""
+Field that declares that this is an abstract super-class and
+that the sub classes will be discriminated based on this field.
+E.g., 'type' is the discriminator member of the abstract superclass
+of_action.
+
+@param name
+"""
+OFDiscriminatorMember = namedtuple('OFDiscrminatorMember', ['name', 'oftype'])
+
+"""
Field used to determine the type of an OpenFlow object
@param name