Merge branch 'master' of github.com:floodlight/loxigen
Conflicts:
java_gen/java_model.py
diff --git a/java_gen/java_model.py b/java_gen/java_model.py
index 65dac74..19ca090 100644
--- a/java_gen/java_model.py
+++ b/java_gen/java_model.py
@@ -51,7 +51,8 @@
enum_entry_blacklist = defaultdict(lambda: set(), OFFlowWildcards=set([ "NW_DST_BITS", "NW_SRC_BITS", "NW_SRC_SHIFT", "NW_DST_SHIFT" ]))
# OFUint structs are there for god-knows what in loci. We certainly don't need them.
interface_blacklist = set( ("OFUint8", "OFUint32",))
- write_blacklist = defaultdict(lambda: set(), OFOxm=set(('typeLen',)), OFAction=set(('type',)), OFInstruction=set(('type',)), OFFlowMod=set(('command', )))
+ read_blacklist = defaultdict(lambda: set(), OFExperimenter=set(('data','subtype')), OFActionExperimenter=set(('data',)))
+ write_blacklist = defaultdict(lambda: set(), OFOxm=set(('typeLen',)), OFAction=set(('type',)), OFInstruction=set(('type',)), OFFlowMod=set(('command', )), OFExperimenter=set(('data','subtype')), OFActionExperimenter=set(('data',)))
virtual_interfaces = set(['OFOxm', 'OFInstruction', 'OFFlowMod', 'OFBsnVport' ])
OxmMapEntry = namedtuple("OxmMapEntry", ["type_name", "value", "masked" ])
@@ -331,6 +332,24 @@
else:
self.parent_interface = None
+ @property
+ @memoize
+ def all_parent_interfaces(self):
+ return [ "OFObject" ] + \
+ ([ self.parent_interface ] if self.parent_interface else [] )+ \
+ self.additional_parent_interfaces
+ @property
+ @memoize
+ def additional_parent_interfaces(self):
+ if loxi_utils.class_is_message(self.c_name) and not self.is_virtual:
+ m = re.match(r'(.*)Request$', self.name)
+ if m:
+ reply_name = m.group(1) + "Reply"
+ if model.interface_by_name(reply_name):
+ return ["OFRequest<%s>" % reply_name ]
+ return []
+
+
def is_instance_of(self, other_class):
if self == other_class:
return True
@@ -372,10 +391,12 @@
return ("", "OFStatsReply", None)
elif re.match(r'OFFlow(Add|Modify(Strict)?|Delete(Strict)?)$', self.name):
return ("", "OFFlowMod", None)
- elif loxi_utils.class_is_message(self.c_name) and re.match(r'OFBsn.+$', self.name):
+ elif loxi_utils.class_is_message(self.c_name) and re.match(r'OFBsn.+$', self.name) and self.name != "OFBsnHeader":
return ("", "OFBsnHeader", None)
- elif loxi_utils.class_is_message(self.c_name) and re.match(r'OFNicira.+$', self.name):
+ elif loxi_utils.class_is_message(self.c_name) and re.match(r'OFNicira.+$', self.name) and self.name != "OFNiciraHeader":
return ("", "OFNiciraHeader", None)
+ elif self.name == "OFBsnHeader" or self.name =="OFNiciraHeader":
+ return ("", "OFExperimenter", None)
elif re.match(r'OFMatch.*', self.name):
return ("", "Match", None)
elif loxi_utils.class_is_message(self.c_name):
@@ -385,6 +406,8 @@
return ("action", "OFActionBsn", None)
elif re.match(r'OFActionNicira.+', self.name):
return ("action", "OFActionNicira", None)
+ elif self.name == "OFActionBsn" or self.name == "OFActionNicira":
+ return ("action", "OFActionExperimenter", None)
else:
return ("action", "OFAction", None)
elif re.match(r'OFBsnVport.+$', self.name):
@@ -435,7 +458,7 @@
if of_member.name not in member_map:
member_map[of_member.name] = JavaMember.for_of_member(self, of_member)
- return tuple(member_map.values())
+ return tuple(m for m in member_map.values() if m.name not in model.read_blacklist[self.name])
@property
def virtual_members(self):
diff --git a/java_gen/templates/of_interface.java b/java_gen/templates/of_interface.java
index 8ddaba3..8c9bf25 100644
--- a/java_gen/templates/of_interface.java
+++ b/java_gen/templates/of_interface.java
@@ -36,7 +36,7 @@
//:: include("_imports.java", msg=msg)
-public interface ${msg.name}${ "<%s>" % msg.type_annotation if msg.type_annotation else ""} extends OFObject${", %s" % msg.parent_interface if msg.parent_interface else ""}{
+public interface ${msg.name}${ "<%s>" % msg.type_annotation if msg.type_annotation else ""} extends ${", ".join(msg.all_parent_interfaces)} {
//:: for prop in msg.members:
${prop.java_type.public_type} ${prop.getter_name}()${ "" if prop.is_universal else " throws UnsupportedOperationException"};
//:: #endfor
diff --git a/java_gen/templates/of_virtual_class.java b/java_gen/templates/of_virtual_class.java
index 6237b8c..86587f0 100644
--- a/java_gen/templates/of_virtual_class.java
+++ b/java_gen/templates/of_virtual_class.java
@@ -70,7 +70,7 @@
//:: elif prop.is_fixed_value:
// fixed value property ${prop.name} == ${prop.value}
${prop.java_type.priv_type} ${prop.name} = ${prop.java_type.read_op(version, pub_type=False)};
- if(${prop.name} != ${prop.value})
+ if(${prop.name} != ${prop.priv_value})
throw new OFParseError("Wrong ${prop.name}: Expected=${prop.enum_value}(${prop.value}), got="+${prop.name});
//:: elif prop.is_length_value:
${prop.java_type.public_type} ${prop.name} = ${prop.java_type.read_op(version, pub_type=True)};