blob: 6137a57dc3c82f60f115d5e9eae7715a41936045 [file] [log] [blame]
Dan Talaycoc0e802e2013-05-18 23:52:39 -07001// Copyright 2013, Big Switch Networks, Inc.
2//
Dan Talaycof76f7112013-05-19 23:32:12 -07003// LoxiGen is licensed under the Eclipse Public License,
Dan Talaycoba506722013-05-21 14:33:33 -07004// version 1.0 (EPL), with the following special exception:
Dan Talaycoc0e802e2013-05-18 23:52:39 -07005//
6// LOXI Exception
7//
Dan Talaycof76f7112013-05-19 23:32:12 -07008// As a special exception to the terms of the EPL, you may
9// distribute libraries generated by LoxiGen (LoxiGen Libraries)
10// under the terms of your choice, provided that copyright and
11// licensing notices generated by LoxiGen are not altered or removed
12// from the LoxiGen Libraries and the notice provided below is (i)
13// included in the LoxiGen Libraries, if distributed in source code
14// form and (ii) included in any documentation for the LoxiGen
15// Libraries, if distributed in binary form.
Dan Talaycoc0e802e2013-05-18 23:52:39 -070016//
Dan Talaycof76f7112013-05-19 23:32:12 -070017// Notice: "Copyright 2013, Big Switch Networks, Inc.
18// This library was generated by the LoxiGen Compiler."
Dan Talaycoc0e802e2013-05-18 23:52:39 -070019//
Dan Talaycof76f7112013-05-19 23:32:12 -070020// You may not use this file except in compliance with the EPL or
21// LOXI Exception. You may obtain a copy of the EPL at:
Dan Talaycoc0e802e2013-05-18 23:52:39 -070022//
23// http://www.eclipse.org/legal/epl-v10.html
24//
Dan Talaycof76f7112013-05-19 23:32:12 -070025// Unless required by applicable law or agreed to in writing,
26// software distributed under the License is distributed on an "AS
27// IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
28// express or implied. See the EPL for the specific language
29// governing permissions and limitations under the EPL.
Dan Talaycoc0e802e2013-05-18 23:52:39 -070030
31#version any
32
Kiran Poola8ecd3f12013-07-09 17:58:12 -070033enum ofp_bsn_vport_status {
Kiran Poola747339a2013-07-09 17:45:22 -070034 OF_BSN_VPORT_STATUS_OK = 0,
35 OF_BSN_VPORT_STATUS_FAILED = 1,
36};
37
Dan Talayco78654ff2013-05-24 11:41:55 -070038// When the ingress or egress VID has this value, no outer tag should be used.
39// In this case, the corresponding TPID is ignored.
40
Andreas Wundsam4ee51462013-07-30 11:00:37 -070041enum ofp_bsn_vport_q_in_q_untagged(wire_type=uint16_t, complete=False) {
Dan Talayco78654ff2013-05-24 11:41:55 -070042 OF_BSN_VPORT_Q_IN_Q_UNTAGGED = 0xffff,
43};
44
Wilson Ng8c9d9572014-04-15 16:27:53 -070045enum ofp_bsn_vport_l2gre_flags(wire_type=uint32_t, bitmask=True) {
46 OF_BSN_VPORT_L2GRE_LOCAL_MAC_IS_VALID = 0x1,
Wilson Ngd6181882014-04-14 16:28:35 -070047
Wilson Ng8c9d9572014-04-15 16:27:53 -070048 /* DSCP flags are mutually exclusive */
49 OF_BSN_VPORT_L2GRE_DSCP_ASSIGN = 0x2,
50 OF_BSN_VPORT_L2GRE_DSCP_COPY = 0x4,
Wilson Ng8afae4c2014-06-16 14:37:35 -070051
52 OF_BSN_VPORT_L2GRE_LOOPBACK_IS_VALID = 0x8,
Wilson Ng5902bbf2014-07-31 13:30:49 -070053
54 OF_BSN_VPORT_L2GRE_RATE_LIMIT_IS_VALID = 0x10,
Wilson Ngd6181882014-04-14 16:28:35 -070055};
56
Dan Talaycoc0e802e2013-05-18 23:52:39 -070057// BSN Virtual port object header
58// FIXME For now, inheritance is not exercised. See below.
Rich Laned0714672013-05-29 14:22:35 -070059struct of_bsn_vport {
Andreas Wundsam70411bf2013-08-02 22:26:38 -070060 uint16_t type == ?; /* Discriminate virtual port type */
Dan Talaycoc0e802e2013-05-18 23:52:39 -070061 uint16_t length; /* Length in bytes of this structure with this header */
62 /* Remainder of data is specific to the port type */
63};
64
65
Dan Talaycoc0e802e2013-05-18 23:52:39 -070066// Q-in-Q virtual port specification
67
Rich Lanee9c37db2013-06-21 18:30:24 -070068struct of_bsn_vport_q_in_q : of_bsn_vport {
Rich Laned0714672013-05-29 14:22:35 -070069 uint16_t type == 0;
Wilson Ngd6181882014-04-14 16:28:35 -070070 uint16_t length;
Dan Talaycoc0e802e2013-05-18 23:52:39 -070071 uint32_t port_no; /* OF port number of parent; usually phys port */
72 uint16_t ingress_tpid;
73 uint16_t ingress_vlan_id;
74 uint16_t egress_tpid;
75 uint16_t egress_vlan_id;
Kiran Poola4d83d652013-09-20 13:28:31 -070076 of_port_name_t if_name; /* Name to use in create operation */
Dan Talaycoc0e802e2013-05-18 23:52:39 -070077};
78
Wilson Ngd6181882014-04-14 16:28:35 -070079
80// L2GRE tunnel virtual port specification
81
82struct of_bsn_vport_l2gre : of_bsn_vport {
83 uint16_t type == 1;
84 uint16_t length;
Wilson Ng8c9d9572014-04-15 16:27:53 -070085 enum ofp_bsn_vport_l2gre_flags flags;
Wilson Ng28fc85b2014-06-10 18:18:39 -070086 of_port_no_t port_no; /* OF port number of parent */
87 of_port_no_t loopback_port_no; /* OF port number of loopback */
88 of_mac_addr_t local_mac; /* Local MAC */
89 of_mac_addr_t nh_mac; /* Next Hop MAC */
90 of_ipv4_t src_ip; /* Source IP */
91 of_ipv4_t dst_ip; /* Destination IP */
Wilson Ngd6181882014-04-14 16:28:35 -070092 uint8_t dscp;
93 uint8_t ttl;
Wilson Ng8c9d9572014-04-15 16:27:53 -070094 pad(2);
Wilson Ng28fc85b2014-06-10 18:18:39 -070095 uint32_t vpn; /* VPN ID (for GRE Key) */
Wilson Ng5902bbf2014-07-31 13:30:49 -070096 uint32_t rate_limit; /* Rate limit in Kbps */
Wilson Ng28fc85b2014-06-10 18:18:39 -070097 of_port_name_t if_name; /* Virtual Interface Name */
Wilson Ngd6181882014-04-14 16:28:35 -070098};
99
100
Dan Talaycoc0e802e2013-05-18 23:52:39 -0700101// Request from controller to switch to create vport
Rich Lanee9c37db2013-06-21 18:30:24 -0700102struct of_bsn_virtual_port_create_request : of_bsn_header {
Dan Talaycoc0e802e2013-05-18 23:52:39 -0700103 uint8_t version;
Rich Laned0714672013-05-29 14:22:35 -0700104 uint8_t type == 4;
Dan Talaycoc0e802e2013-05-18 23:52:39 -0700105 uint16_t length;
106 uint32_t xid;
Rich Laned0714672013-05-29 14:22:35 -0700107 uint32_t experimenter == 0x5c16c7;
108 uint32_t subtype == 15;
Wilson Nga5706e62014-04-09 04:11:20 -0700109 of_bsn_vport_t vport; // Description of vport to create
Dan Talaycoc0e802e2013-05-18 23:52:39 -0700110 // Additional data follows depending on header type
111};
112
113// Reply from switch to controller indicating port number created
114// vport_no must be 16 bits to be compatible with 1.0
Rich Lanee9c37db2013-06-21 18:30:24 -0700115struct of_bsn_virtual_port_create_reply : of_bsn_header {
Dan Talaycoc0e802e2013-05-18 23:52:39 -0700116 uint8_t version;
Rich Laned0714672013-05-29 14:22:35 -0700117 uint8_t type == 4;
Dan Talaycoc0e802e2013-05-18 23:52:39 -0700118 uint16_t length;
119 uint32_t xid; // Must match create_request
Rich Laned0714672013-05-29 14:22:35 -0700120 uint32_t experimenter == 0x5c16c7;
121 uint32_t subtype == 16;
Dan Talaycob392f6b2013-06-12 10:48:17 -0700122 uint32_t status; // 0 means success
Dan Talaycoc0e802e2013-05-18 23:52:39 -0700123 uint32_t vport_no; // The OF port number created. 16-bits for OF 1.0
124};
125
126// Request from controller to switch to remove a vport
Rich Lanee9c37db2013-06-21 18:30:24 -0700127struct of_bsn_virtual_port_remove_request : of_bsn_header {
Dan Talaycoc0e802e2013-05-18 23:52:39 -0700128 uint8_t version;
Rich Laned0714672013-05-29 14:22:35 -0700129 uint8_t type == 4;
Dan Talaycoc0e802e2013-05-18 23:52:39 -0700130 uint16_t length;
131 uint32_t xid;
Rich Laned0714672013-05-29 14:22:35 -0700132 uint32_t experimenter == 0x5c16c7;
133 uint32_t subtype == 17;
Dan Talaycoc0e802e2013-05-18 23:52:39 -0700134 uint32_t vport_no; // The OF port number to be removed
135};
Dan Talaycob392f6b2013-06-12 10:48:17 -0700136
137// Request from controller to switch to remove a vport
Rich Lanee9c37db2013-06-21 18:30:24 -0700138struct of_bsn_virtual_port_remove_reply : of_bsn_header {
Dan Talaycob392f6b2013-06-12 10:48:17 -0700139 uint8_t version;
140 uint8_t type == 4;
141 uint16_t length;
142 uint32_t xid; // Must match request xid
143 uint32_t experimenter == 0x5c16c7;
144 uint32_t subtype == 26;
145 uint32_t status; // 0 means success
146};