def build_ordered_classes(): """ Read in from files given on command line and update global state @fixme Should select versions to support from command line """ for version, protocol in loxi_globals.ir.items(): wire_version = version.wire_version # Populate global state version_name = of_g.of_version_wire2name[wire_version] for ofclass in protocol.classes: of_g.ordered_classes[wire_version].append(ofclass.name) legacy_members = [] pad_count = 0 for m in ofclass.members: if type(m) == OFPadMember: continue else: # HACK the C backend does not yet support of_oxm_t if m.oftype == 'of_oxm_t': m_type = 'of_oxm_header_t' # HACK the C backend does not yet support of_bsn_vport_t elif m.oftype == 'of_bsn_vport_t': m_type = 'of_bsn_vport_header_t' elif m.oftype.find("list(") == 0: (list_name, base_type) = loxi_utils.list_name_extract(m.oftype) m_type = list_name + "_t" else: enum = find(lambda e: e.name == m.oftype, protocol.enums) if enum and "wire_type" in enum.params: m_type = enum.params["wire_type"] else: m_type = m.oftype if m.offset is None: m_offset = -1 else: m_offset = m.offset legacy_members.append(dict(m_type=m_type, name=m.name, offset=m_offset)) versions[version_name]['classes'][ofclass.name] = legacy_members of_g.base_length[(ofclass.name, version.wire_version)] = ofclass.base_length if ofclass.is_fixed_length: of_g.is_fixed_length.add((ofclass.name, version.wire_version)) for enum in protocol.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)
def build_ordered_classes(): """ Read in from files given on command line and update global state @fixme Should select versions to support from command line """ for version, protocol in loxi_globals.ir.items(): wire_version = version.wire_version # Populate global state version_name = of_g.of_version_wire2name[wire_version] for ofclass in protocol.classes: of_g.ordered_classes[wire_version].append(ofclass.name) legacy_members = [] pad_count = 0 for m in ofclass.members: if type(m) == OFPadMember: continue else: if m.oftype.find("list(") == 0: (list_name, base_type) = loxi_utils.list_name_extract(m.oftype) m_type = list_name + "_t" else: enum = find(lambda e: e.name == m.oftype, protocol.enums) if enum and "wire_type" in enum.params: m_type = enum.params["wire_type"] else: m_type = m.oftype if m.offset is None: m_offset = -1 else: m_offset = m.offset legacy_members.append( dict(m_type=m_type, name=m.name, offset=m_offset)) versions[version_name]['classes'][ofclass.name] = legacy_members of_g.base_length[(ofclass.name, version.wire_version)] = ofclass.base_length if ofclass.is_fixed_length: of_g.is_fixed_length.add((ofclass.name, version.wire_version)) for enum in protocol.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)
def build_ordered_classes(): """ Read in from files given on command line and update global state @fixme Should select versions to support from command line """ for version, protocol in loxi_globals.ir.items(): wire_version = version.wire_version # Populate global state version_name = of_g.of_version_wire2name[wire_version] for ofclass in protocol.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_oxm_header_t' # HACK the C backend does not yet support of_bsn_vport_t elif m.oftype == 'of_bsn_vport_t': m_type = 'of_bsn_vport_header_t' else: enum = find(lambda e: e.name == m.oftype, protocol.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 protocol.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)
def build_ordered_classes(): """ Read in from files given on command line and update global state @fixme Should select versions to support from command line """ for version, protocol in loxi_globals.ir.items(): wire_version = version.wire_version # Populate global state version_name = of_g.of_version_wire2name[wire_version] for ofclass in protocol.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_oxm_header_t' # HACK the C backend does not yet support of_bsn_vport_t elif m.oftype == 'of_bsn_vport_t': m_type = 'of_bsn_vport_header_t' else: enum = find(lambda e: e.name == m.oftype, protocol.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 protocol.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)