expose new intermediate representation at of_g.ir
diff --git a/loxigen.py b/loxigen.py
index 79e6da8..9d94e68 100755
--- a/loxigen.py
+++ b/loxigen.py
@@ -76,6 +76,7 @@
import os
import glob
import copy
+import collections
import of_g
import loxi_front_end.oxm as oxm
import loxi_front_end.type_maps as type_maps
@@ -415,6 +416,7 @@
@fixme Should select versions to support from command line
"""
+ ofinputs_by_version = collections.defaultdict(lambda: [])
filenames = sorted(glob.glob("%s/openflow_input/*" % root_dir))
for filename in filenames:
@@ -423,6 +425,7 @@
# Populate global state
for wire_version in ofinput.wire_versions:
+ ofinputs_by_version[wire_version].append(ofinput)
version_name = of_g.of_version_wire2name[wire_version]
for ofclass in ofinput.classes:
@@ -447,6 +450,13 @@
name, enum.name, value, wire_version,
of_g.identifiers, of_g.identifiers_by_group)
+ for wire_version, ofinputs in ofinputs_by_version.items():
+ ofprotocol = OFProtocol(wire_version=wire_version, classes=[], enums=[])
+ for ofinput in ofinputs:
+ ofprotocol.classes.extend(ofinput.classes)
+ ofprotocol.enums.extend(ofinput.enums)
+ of_g.ir[wire_version] = ofprotocol
+
def add_extra_classes():
"""
Add classes that are generated by Python code instead of from the
diff --git a/of_g.py b/of_g.py
index 9f44a2b..db6bc65 100644
--- a/of_g.py
+++ b/of_g.py
@@ -343,6 +343,11 @@
uint64_t metadata[(OF_OBJECT_METADATA_BYTES + 7) / 8];
"""
+# LOXI intermediate representation
+# This is a hash from wire versions to OFProtocol objects.
+# See loxi_ir.py
+
+ir = {}
##
# LOXI identifiers