Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)