blob: d4cf27329eaaf871f98abb589fad96c707fb82da [file] [log] [blame]
# Copyright 2013, Big Switch Networks, Inc.
#
# LoxiGen is licensed under the Eclipse Public License, version 1.0 (EPL), with
# the following special exception:
#
# LOXI Exception
#
# As a special exception to the terms of the EPL, you may distribute libraries
# generated by LoxiGen (LoxiGen Libraries) under the terms of your choice, provided
# that copyright and licensing notices generated by LoxiGen are not altered or removed
# from the LoxiGen Libraries and the notice provided below is (i) included in
# the LoxiGen Libraries, if distributed in source code form and (ii) included in any
# documentation for the LoxiGen Libraries, if distributed in binary form.
#
# Notice: "Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler."
#
# You may not use this file except in compliance with the EPL or LOXI Exception. You may obtain
# a copy of the EPL at:
#
# http://www.eclipse.org/legal/epl-v10.html
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# EPL for the specific language governing permissions and limitations
# under the EPL.
import of_g
oxm_types = dict(
in_port = "of_port_no_t",
in_port_masked = "of_port_no_t",
in_phy_port = "of_port_no_t",
in_phy_port_masked = "of_port_no_t",
metadata = "uint64_t",
metadata_masked = "uint64_t",
eth_dst = "of_mac_addr_t",
eth_dst_masked = "of_mac_addr_t",
eth_src = "of_mac_addr_t",
eth_src_masked = "of_mac_addr_t",
eth_type = "uint16_t",
eth_type_masked = "uint16_t",
vlan_vid = "uint16_t",
vlan_vid_masked = "uint16_t",
vlan_pcp = "uint8_t",
vlan_pcp_masked = "uint8_t",
ip_dscp = "uint8_t",
ip_dscp_masked = "uint8_t",
ip_ecn = "uint8_t",
ip_ecn_masked = "uint8_t",
ip_proto = "uint8_t",
ip_proto_masked = "uint8_t",
ipv4_src = "uint32_t",
ipv4_src_masked = "uint32_t",
ipv4_dst = "uint32_t",
ipv4_dst_masked = "uint32_t",
tcp_src = "uint16_t",
tcp_src_masked = "uint16_t",
tcp_dst = "uint16_t",
tcp_dst_masked = "uint16_t",
udp_src = "uint16_t",
udp_src_masked = "uint16_t",
udp_dst = "uint16_t",
udp_dst_masked = "uint16_t",
sctp_src = "uint16_t",
sctp_src_masked = "uint16_t",
sctp_dst = "uint16_t",
sctp_dst_masked = "uint16_t",
icmpv4_type = "uint8_t",
icmpv4_type_masked = "uint8_t",
icmpv4_code = "uint8_t",
icmpv4_code_masked = "uint8_t",
arp_op = "uint16_t",
arp_op_masked = "uint16_t",
arp_spa = "uint32_t",
arp_spa_masked = "uint32_t",
arp_tpa = "uint32_t",
arp_tpa_masked = "uint32_t",
arp_sha = "of_mac_addr_t",
arp_sha_masked = "of_mac_addr_t",
arp_tha = "of_mac_addr_t",
arp_tha_masked = "of_mac_addr_t",
ipv6_src = "of_ipv6_t",
ipv6_src_masked = "of_ipv6_t",
ipv6_dst = "of_ipv6_t",
ipv6_dst_masked = "of_ipv6_t",
ipv6_flabel = "uint32_t",
ipv6_flabel_masked = "uint32_t",
icmpv6_type = "uint8_t",
icmpv6_type_masked = "uint8_t",
icmpv6_code = "uint8_t",
icmpv6_code_masked = "uint8_t",
ipv6_nd_target = "of_ipv6_t",
ipv6_nd_target_masked = "of_ipv6_t",
ipv6_nd_sll = "of_mac_addr_t",
ipv6_nd_sll_masked = "of_mac_addr_t",
ipv6_nd_tll = "of_mac_addr_t",
ipv6_nd_tll_masked = "of_mac_addr_t",
mpls_label = "uint32_t",
mpls_label_masked = "uint32_t",
mpls_tc = "uint8_t",
mpls_tc_masked = "uint8_t"
# FIXME Add 1.3 oxm elts
)
oxm_wire_type = dict(
in_port = (0 << 1),
in_port_masked = (0 << 1) + 1,
in_phy_port = (1 << 1),
in_phy_port_masked = (1 << 1) + 1,
metadata = (2 << 1),
metadata_masked = (2 << 1) + 1,
eth_dst = (3 << 1),
eth_dst_masked = (3 << 1) + 1,
eth_src = (4 << 1),
eth_src_masked = (4 << 1) + 1,
eth_type = (5 << 1),
eth_type_masked = (5 << 1) + 1,
vlan_vid = (6 << 1),
vlan_vid_masked = (6 << 1) + 1,
vlan_pcp = (7 << 1),
vlan_pcp_masked = (7 << 1) + 1,
ip_dscp = (8 << 1),
ip_dscp_masked = (8 << 1) + 1,
ip_ecn = (9 << 1),
ip_ecn_masked = (9 << 1) + 1,
ip_proto = (10 << 1),
ip_proto_masked = (10 << 1) + 1,
ipv4_src = (11 << 1),
ipv4_src_masked = (11 << 1) + 1,
ipv4_dst = (12 << 1),
ipv4_dst_masked = (12 << 1) + 1,
tcp_src = (13 << 1),
tcp_src_masked = (13 << 1) + 1,
tcp_dst = (14 << 1),
tcp_dst_masked = (14 << 1) + 1,
udp_src = (15 << 1),
udp_src_masked = (15 << 1) + 1,
udp_dst = (16 << 1),
udp_dst_masked = (16 << 1) + 1,
sctp_src = (17 << 1),
sctp_src_masked = (17 << 1) + 1,
sctp_dst = (18 << 1),
sctp_dst_masked = (18 << 1) + 1,
icmpv4_type = (19 << 1),
icmpv4_type_masked = (19 << 1) + 1,
icmpv4_code = (20 << 1),
icmpv4_code_masked = (20 << 1) + 1,
arp_op = (21 << 1),
arp_op_masked = (21 << 1) + 1,
arp_spa = (22 << 1),
arp_spa_masked = (22 << 1) + 1,
arp_tpa = (23 << 1),
arp_tpa_masked = (23 << 1) + 1,
arp_sha = (24 << 1),
arp_sha_masked = (24 << 1) + 1,
arp_tha = (25 << 1),
arp_tha_masked = (25 << 1) + 1,
ipv6_src = (26 << 1),
ipv6_src_masked = (26 << 1) + 1,
ipv6_dst = (27 << 1),
ipv6_dst_masked = (27 << 1) + 1,
ipv6_flabel = (28 << 1),
ipv6_flabel_masked = (28 << 1) + 1,
icmpv6_type = (29 << 1),
icmpv6_type_masked = (29 << 1) + 1,
icmpv6_code = (30 << 1),
icmpv6_code_masked = (30 << 1) + 1,
ipv6_nd_target = (31 << 1),
ipv6_nd_target_masked = (31 << 1) + 1,
ipv6_nd_sll = (32 << 1),
ipv6_nd_sll_masked = (32 << 1) + 1,
ipv6_nd_tll = (33 << 1),
ipv6_nd_tll_masked = (33 << 1) + 1,
mpls_label = (34 << 1),
mpls_label_masked = (34 << 1) + 1,
mpls_tc = (35 << 1),
mpls_tc_masked = (35 << 1) + 1
# FIXME Add 1.3 oxm elts
)
def add_oxm_classes_1_2(classes, version):
"""
Add the OXM classes to object passed. This is a dictionary
indexed by class name whose value is an array of member objects.
"""
# First the parent class:
if version not in [of_g.VERSION_1_2, of_g.VERSION_1_3]:
return
members = []
classes["of_oxm"] = []
of_g.ordered_classes[version].append("of_oxm")
members.append(dict(name="type_len", m_type="uint32_t"))
classes["of_oxm_header"] = members
of_g.ordered_classes[version].append("of_oxm_header")
for oxm in oxm_types:
members = []
# Assert oxm_types[oxm] in of_base_types
m_type = oxm_types[oxm]
if m_type in of_g.of_mixed_types:
m_type = of_g.of_mixed_types[m_type][version]
# m_name = "value_" + of_g.of_base_types[m_type]["short_name"]
members.append(dict(name="type_len", m_type="uint32_t"))
# members.append(dict(name=m_name, m_type=oxm_types[oxm]))
members.append(dict(name="value", m_type=oxm_types[oxm]))
if oxm.find("_masked") > 0:
members.append(dict(name="value_mask", m_type=oxm_types[oxm]))
name = "of_oxm_" + oxm
of_g.ordered_classes[version].append(name)
classes[name] = members
# /* Header for OXM experimenter match fields. */
# struct ofp_oxm_experimenter_header {
# uint32_t oxm_header; /* oxm_class = OFPXMC_EXPERIMENTER */
# uint32_t experimenter; /* Experimenter ID which takes the same
# form as in struct ofp_experimenter_header. */
# };
# enum ofp_vlan_id {
# OFPVID_PRESENT = 0x1000,
# OFPVID_NONE = 0x0000,
# };
# #define OFP_VLAN_NONE OFPVID_NONE