def read_input(): """ Read in from files given on command line and update global state @fixme Should select versions to support from command line """ filenames = sorted(glob.glob("%s/openflow_input/*" % root_dir)) for filename in filenames: log("Processing struct file: " + filename) ofinput = process_input_file(filename) # Populate global state for wire_version in ofinput.wire_versions: version_name = of_g.of_version_wire2name[wire_version] versions[version_name]['classes'].update( copy.deepcopy(ofinput.classes)) of_g.ordered_classes[wire_version].extend(ofinput.ordered_classes) for enum_name, members in ofinput.enums.items(): for member_name, value in members: identifiers.add_identifier( translation.loxi_name(member_name), member_name, enum_name, value, wire_version, of_g.identifiers, of_g.identifiers_by_group)
def read_input(): """ Read in from files given on command line and update global state @fixme Should select versions to support from command line """ ofinputs_by_version = collections.defaultdict(lambda: []) filenames = sorted(glob.glob("%s/openflow_input/*" % root_dir)) # Ignore emacs backup files filenames = [x for x in filenames if not x.endswith('~')] for filename in filenames: log("Processing struct file: " + filename) ofinput = process_input_file(filename) # 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: of_g.ordered_classes[wire_version].append(ofclass.name) legacy_members = [] pad_count = 0 for m in ofclass.members: if type(m) == OFPadMember: m_name = 'pad%d' % pad_count if m_name == 'pad0': m_name = 'pad' legacy_members.append(dict(m_type='uint8_t[%d]' % m.length, name=m_name)) pad_count += 1 else: # HACK the C backend does not yet support of_oxm_t if m.oftype == 'of_oxm_t': m_type = 'of_octets_t' else: enum = find(lambda e: e.name == m.oftype, ofinput.enums) if enum and "wire_type" in enum.params: m_type = enum.params["wire_type"] else: m_type = m.oftype legacy_members.append(dict(m_type=m_type, name=m.name)) versions[version_name]['classes'][ofclass.name] = legacy_members for enum in ofinput.enums: for entry in enum.entries: identifiers.add_identifier( translation.loxi_name(entry.name), entry.name, enum.name, entry.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) ofprotocol.classes.sort(key=lambda ofclass: ofclass.name) of_g.ir[wire_version] = ofprotocol
def read_input(): """ Read in from files given on command line and update global state @fixme Should select versions to support from command line """ filenames = sorted(glob.glob("%s/openflow_input/*" % root_dir)) for filename in filenames: log("Processing struct file: " + filename) ofinput = process_input_file(filename) # Populate global state for wire_version in ofinput.wire_versions: version_name = of_g.of_version_wire2name[wire_version] versions[version_name]['classes'].update(copy.deepcopy(ofinput.classes)) of_g.ordered_classes[wire_version].extend(ofinput.ordered_classes) for enum_name, members in ofinput.enums.items(): for member_name, value in members: identifiers.add_identifier( translation.loxi_name(member_name), member_name, enum_name, value, wire_version, of_g.identifiers, of_g.identifiers_by_group)