| # 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 |