~ubuntu-branches/ubuntu/wily/openvswitch/wily

« back to all changes in this revision

Viewing changes to include/openflow/openflow-1.2.h

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2015-08-10 11:35:15 UTC
  • mfrom: (1.1.30)
  • Revision ID: package-import@ubuntu.com-20150810113515-575vj06oq29emxsn
Tags: 2.4.0~git20150810.97bab95-0ubuntu1
* New upstream snapshot from 2.4 branch:
  - d/*: Align any relevant packaging changes with upstream.
* d/*: wrap-and-sort.
* d/openvswitch-{common,vswitch}.install: Correct install location for
  bash completion files.
* d/tests/openflow.py: Explicitly use ovs-testcontroller as provided
  by 2.4.0 release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
53
53
#ifndef OPENFLOW_12_H
54
54
#define OPENFLOW_12_H 1
55
55
 
56
 
#include "openflow/openflow-1.1.h"
 
56
#include <openflow/openflow-1.1.h>
57
57
 
58
58
/* Error type for experimenter error messages. */
59
59
#define OFPET12_EXPERIMENTER 0xffff
60
60
 
61
 
/*
62
 
 * OXM Class IDs.
63
 
 * The high order bit differentiate reserved classes from member classes.
64
 
 * Classes 0x0000 to 0x7FFF are member classes, allocated by ONF.
65
 
 * Classes 0x8000 to 0xFFFE are reserved classes, reserved for standardisation.
66
 
 */
67
 
enum ofp12_oxm_class {
68
 
    OFPXMC12_NXM_0          = 0x0000, /* Backward compatibility with NXM */
69
 
    OFPXMC12_NXM_1          = 0x0001, /* Backward compatibility with NXM */
70
 
    OFPXMC12_OPENFLOW_BASIC = 0x8000, /* Basic class for OpenFlow */
71
 
    OFPXMC12_EXPERIMENTER   = 0xffff, /* Experimenter class */
72
 
};
73
 
 
74
 
/* OXM Flow match field types for OpenFlow basic class. */
75
 
enum oxm12_ofb_match_fields {
76
 
    OFPXMT12_OFB_IN_PORT,        /* Switch input port. */
77
 
    OFPXMT12_OFB_IN_PHY_PORT,    /* Switch physical input port. */
78
 
    OFPXMT12_OFB_METADATA,       /* Metadata passed between tables. */
79
 
    OFPXMT12_OFB_ETH_DST,        /* Ethernet destination address. */
80
 
    OFPXMT12_OFB_ETH_SRC,        /* Ethernet source address. */
81
 
    OFPXMT12_OFB_ETH_TYPE,       /* Ethernet frame type. */
82
 
    OFPXMT12_OFB_VLAN_VID,       /* VLAN id. */
83
 
    OFPXMT12_OFB_VLAN_PCP,       /* VLAN priority. */
84
 
    OFPXMT12_OFB_IP_DSCP,        /* IP DSCP (6 bits in ToS field). */
85
 
    OFPXMT12_OFB_IP_ECN,         /* IP ECN (2 bits in ToS field). */
86
 
    OFPXMT12_OFB_IP_PROTO,       /* IP protocol. */
87
 
    OFPXMT12_OFB_IPV4_SRC,       /* IPv4 source address. */
88
 
    OFPXMT12_OFB_IPV4_DST,       /* IPv4 destination address. */
89
 
    OFPXMT12_OFB_TCP_SRC,        /* TCP source port. */
90
 
    OFPXMT12_OFB_TCP_DST,        /* TCP destination port. */
91
 
    OFPXMT12_OFB_UDP_SRC,        /* UDP source port. */
92
 
    OFPXMT12_OFB_UDP_DST,        /* UDP destination port. */
93
 
    OFPXMT12_OFB_SCTP_SRC,       /* SCTP source port. */
94
 
    OFPXMT12_OFB_SCTP_DST,       /* SCTP destination port. */
95
 
    OFPXMT12_OFB_ICMPV4_TYPE,    /* ICMP type. */
96
 
    OFPXMT12_OFB_ICMPV4_CODE,    /* ICMP code. */
97
 
    OFPXMT12_OFB_ARP_OP,         /* ARP opcode. */
98
 
    OFPXMT12_OFB_ARP_SPA,        /* ARP source IPv4 address. */
99
 
    OFPXMT12_OFB_ARP_TPA,        /* ARP target IPv4 address. */
100
 
    OFPXMT12_OFB_ARP_SHA,        /* ARP source hardware address. */
101
 
    OFPXMT12_OFB_ARP_THA,        /* ARP target hardware address. */
102
 
    OFPXMT12_OFB_IPV6_SRC,       /* IPv6 source address. */
103
 
    OFPXMT12_OFB_IPV6_DST,       /* IPv6 destination address. */
104
 
    OFPXMT12_OFB_IPV6_FLABEL,    /* IPv6 Flow Label */
105
 
    OFPXMT12_OFB_ICMPV6_TYPE,    /* ICMPv6 type. */
106
 
    OFPXMT12_OFB_ICMPV6_CODE,    /* ICMPv6 code. */
107
 
    OFPXMT12_OFB_IPV6_ND_TARGET, /* Target address for ND. */
108
 
    OFPXMT12_OFB_IPV6_ND_SLL,    /* Source link-layer for ND. */
109
 
    OFPXMT12_OFB_IPV6_ND_TLL,    /* Target link-layer for ND. */
110
 
    OFPXMT12_OFB_MPLS_LABEL,     /* MPLS label. */
111
 
    OFPXMT12_OFB_MPLS_TC,        /* MPLS TC. */
112
 
#define OFPXMT12_MASK ((1ULL << (OFPXMT12_OFB_MPLS_TC + 1)) - 1)
113
 
 
114
 
    /* Following added in OpenFlow 1.3 */
115
 
    OFPXMT13_OFB_MPLS_BOS,       /* MPLS BoS bit. */
116
 
    OFPXMT13_OFB_PBB_ISID,       /* PBB I-SID. */
117
 
    OFPXMT13_OFB_TUNNEL_ID,      /* Logical Port Metadata */
118
 
    OFPXMT13_OFB_IPV6_EXTHDR,    /* IPv6 Extension Header pseudo-field */
119
 
#define OFPXMT13_MASK ((1ULL << (OFPXMT13_OFB_IPV6_EXTHDR + 1)) - 1)
120
 
 
121
 
    /* Following added in OpenFlow 1.4. */
122
 
    OFPXMT14_OFB_PBB_UCA = 41,  /* PBB UCA header field. */
123
 
#define OFPXMT14_MASK (1ULL << OFPXMT14_OFB_PBB_UCA)
124
 
 
125
 
    /* Following added in OpenFlow 1.5. */
126
 
    OFPXMT15_OFB_TCP_FLAGS = 42,  /* TCP flags. */
127
 
#define OFPXMT15_MASK (1ULL << OFPXMT15_OFB_TCP_FLAGS)
128
 
 };
129
 
 
130
 
/* OXM implementation makes use of NXM as they are the same format
131
 
 * with different field definitions
132
 
 */
133
 
 
134
 
#define OXM_HEADER(FIELD, LENGTH) \
135
 
    NXM_HEADER(OFPXMC12_OPENFLOW_BASIC, FIELD, LENGTH)
136
 
#define OXM_HEADER_W(FIELD, LENGTH) \
137
 
    NXM_HEADER_W(OFPXMC12_OPENFLOW_BASIC, FIELD, LENGTH)
138
 
 
139
 
#define IS_OXM_HEADER(header) (NXM_VENDOR(header) == OFPXMC12_OPENFLOW_BASIC)
140
 
 
141
 
#define OXM_OF_IN_PORT        OXM_HEADER   (OFPXMT12_OFB_IN_PORT, 4)
142
 
#define OXM_OF_IN_PHY_PORT    OXM_HEADER   (OFPXMT12_OFB_IN_PHY_PORT, 4)
143
 
#define OXM_OF_METADATA       OXM_HEADER   (OFPXMT12_OFB_METADATA, 8)
144
 
#define OXM_OF_ETH_DST        OXM_HEADER   (OFPXMT12_OFB_ETH_DST, 6)
145
 
#define OXM_OF_ETH_DST_W      OXM_HEADER_W (OFPXMT12_OFB_ETH_DST, 6)
146
 
#define OXM_OF_ETH_SRC        OXM_HEADER   (OFPXMT12_OFB_ETH_SRC, 6)
147
 
#define OXM_OF_ETH_SRC_W      OXM_HEADER_W (OFPXMT12_OFB_ETH_SRC, 6)
148
 
#define OXM_OF_ETH_TYPE       OXM_HEADER   (OFPXMT12_OFB_ETH_TYPE, 2)
149
 
#define OXM_OF_VLAN_VID       OXM_HEADER   (OFPXMT12_OFB_VLAN_VID, 2)
150
 
#define OXM_OF_VLAN_VID_W     OXM_HEADER_W (OFPXMT12_OFB_VLAN_VID, 2)
151
 
#define OXM_OF_VLAN_PCP       OXM_HEADER   (OFPXMT12_OFB_VLAN_PCP, 1)
152
 
#define OXM_OF_IP_DSCP        OXM_HEADER   (OFPXMT12_OFB_IP_DSCP, 1)
153
 
#define OXM_OF_IP_ECN         OXM_HEADER   (OFPXMT12_OFB_IP_ECN, 1)
154
 
#define OXM_OF_IP_PROTO       OXM_HEADER   (OFPXMT12_OFB_IP_PROTO, 1)
155
 
#define OXM_OF_IPV4_SRC       OXM_HEADER   (OFPXMT12_OFB_IPV4_SRC, 4)
156
 
#define OXM_OF_IPV4_SRC_W     OXM_HEADER_W (OFPXMT12_OFB_IPV4_SRC, 4)
157
 
#define OXM_OF_IPV4_DST       OXM_HEADER   (OFPXMT12_OFB_IPV4_DST, 4)
158
 
#define OXM_OF_IPV4_DST_W     OXM_HEADER_W (OFPXMT12_OFB_IPV4_DST, 4)
159
 
#define OXM_OF_TCP_SRC        OXM_HEADER   (OFPXMT12_OFB_TCP_SRC, 2)
160
 
#define OXM_OF_TCP_DST        OXM_HEADER   (OFPXMT12_OFB_TCP_DST, 2)
161
 
#define OXM_OF_UDP_SRC        OXM_HEADER   (OFPXMT12_OFB_UDP_SRC, 2)
162
 
#define OXM_OF_UDP_DST        OXM_HEADER   (OFPXMT12_OFB_UDP_DST, 2)
163
 
#define OXM_OF_SCTP_SRC       OXM_HEADER   (OFPXMT12_OFB_SCTP_SRC, 2)
164
 
#define OXM_OF_SCTP_DST       OXM_HEADER   (OFPXMT12_OFB_SCTP_DST, 2)
165
 
#define OXM_OF_ICMPV4_TYPE    OXM_HEADER   (OFPXMT12_OFB_ICMPV4_TYPE, 1)
166
 
#define OXM_OF_ICMPV4_CODE    OXM_HEADER   (OFPXMT12_OFB_ICMPV4_CODE, 1)
167
 
#define OXM_OF_ARP_OP         OXM_HEADER   (OFPXMT12_OFB_ARP_OP, 2)
168
 
#define OXM_OF_ARP_SPA        OXM_HEADER   (OFPXMT12_OFB_ARP_SPA, 4)
169
 
#define OXM_OF_ARP_SPA_W      OXM_HEADER_W (OFPXMT12_OFB_ARP_SPA, 4)
170
 
#define OXM_OF_ARP_TPA        OXM_HEADER   (OFPXMT12_OFB_ARP_TPA, 4)
171
 
#define OXM_OF_ARP_TPA_W      OXM_HEADER_W (OFPXMT12_OFB_ARP_TPA, 4)
172
 
#define OXM_OF_ARP_SHA        OXM_HEADER   (OFPXMT12_OFB_ARP_SHA, 6)
173
 
#define OXM_OF_ARP_SHA_W      OXM_HEADER_W (OFPXMT12_OFB_ARP_SHA, 6)
174
 
#define OXM_OF_ARP_THA        OXM_HEADER   (OFPXMT12_OFB_ARP_THA, 6)
175
 
#define OXM_OF_ARP_THA_W      OXM_HEADER_W (OFPXMT12_OFB_ARP_THA, 6)
176
 
#define OXM_OF_IPV6_SRC       OXM_HEADER   (OFPXMT12_OFB_IPV6_SRC, 16)
177
 
#define OXM_OF_IPV6_SRC_W     OXM_HEADER_W (OFPXMT12_OFB_IPV6_SRC, 16)
178
 
#define OXM_OF_IPV6_DST       OXM_HEADER   (OFPXMT12_OFB_IPV6_DST, 16)
179
 
#define OXM_OF_IPV6_DST_W     OXM_HEADER_W (OFPXMT12_OFB_IPV6_DST, 16)
180
 
#define OXM_OF_IPV6_FLABEL    OXM_HEADER   (OFPXMT12_OFB_IPV6_FLABEL, 4)
181
 
#define OXM_OF_IPV6_FLABEL_W  OXM_HEADER_W (OFPXMT12_OFB_IPV6_FLABEL, 4)
182
 
#define OXM_OF_ICMPV6_TYPE    OXM_HEADER   (OFPXMT12_OFB_ICMPV6_TYPE, 1)
183
 
#define OXM_OF_ICMPV6_CODE    OXM_HEADER   (OFPXMT12_OFB_ICMPV6_CODE, 1)
184
 
#define OXM_OF_IPV6_ND_TARGET OXM_HEADER   (OFPXMT12_OFB_IPV6_ND_TARGET, 16)
185
 
#define OXM_OF_IPV6_ND_SLL    OXM_HEADER   (OFPXMT12_OFB_IPV6_ND_SLL, 6)
186
 
#define OXM_OF_IPV6_ND_TLL    OXM_HEADER   (OFPXMT12_OFB_IPV6_ND_TLL, 6)
187
 
#define OXM_OF_MPLS_LABEL     OXM_HEADER   (OFPXMT12_OFB_MPLS_LABEL, 4)
188
 
#define OXM_OF_MPLS_TC        OXM_HEADER   (OFPXMT12_OFB_MPLS_TC, 1)
189
 
#define OXM_OF_MPLS_BOS       OXM_HEADER   (OFPXMT13_OFB_MPLS_BOS, 1)
190
 
#define OXM_OF_PBB_ISID       OXM_HEADER   (OFPXMT12_OFB_PBB_ISID, 3)
191
 
#define OXM_OF_PBB_ISID_W     OXM_HEADER_W (OFPXMT12_OFB_PBB_ISID, 3)
192
 
#define OXM_OF_TUNNEL_ID      OXM_HEADER   (OFPXMT13_OFB_TUNNEL_ID, 8)
193
 
#define OXM_OF_TUNNEL_ID_W    OXM_HEADER_W (OFPXMT13_OFB_TUNNEL_ID, 8)
194
 
#define OXM_OF_IPV6_EXTHDR    OXM_HEADER   (OFPXMT13_OFB_IPV6_EXTHDR, 2)
195
 
#define OXM_OF_IPV6_EXTHDR_W  OXM_HEADER_W (OFPXMT13_OFB_IPV6_EXTHDR, 2)
196
 
#define OXM_OF_PBB_UCA        OXM_HEADER   (OFPXMT14_OFB_PBB_UCA, 1)
197
 
#define OXM_OF_TCP_FLAGS      OXM_HEADER   (OFPXMT15_OFB_TCP_FLAGS, 2)
198
 
#define OXM_OF_TCP_FLAGS_W    OXM_HEADER_W (OFPXMT15_OFB_TCP_FLAGS, 2)
199
 
 
200
61
/* The VLAN id is 12-bits, so we can use the entire 16 bits to indicate
201
62
 * special conditions.
202
63
 */
226
87
};
227
88
OFP_ASSERT(sizeof(struct ofp12_oxm_experimenter_header) == 8);
228
89
 
229
 
enum ofp12_action_type {
230
 
    OFPAT12_SET_FIELD = 25,     /* Set a header field using OXM TLV format. */
231
 
};
232
 
 
233
90
enum ofp12_controller_max_len {
234
91
    OFPCML12_MAX       = 0xffe5, /* maximum max_len value which can be used
235
92
                                  * to request a specific byte length. */
238
95
                                  * sent to the controller. */
239
96
};
240
97
 
241
 
/* Action structure for OFPAT12_SET_FIELD. */
242
 
struct ofp12_action_set_field {
243
 
    ovs_be16 type;                  /* OFPAT12_SET_FIELD. */
244
 
    ovs_be16 len;                   /* Length is padded to 64 bits. */
245
 
    ovs_be32 dst;                   /* OXM TLV header */
246
 
    /* Followed by:
247
 
     * - Exactly ((oxm_len + 4) + 7)/8*8 - (oxm_len + 4) (between 0 and 7)
248
 
     *   bytes of all-zero bytes
249
 
     */
250
 
};
251
 
OFP_ASSERT(sizeof(struct ofp12_action_set_field) == 8);
252
 
 
253
98
/* OpenFlow 1.2 specific flags
254
99
 * (struct ofp12_flow_mod, member flags). */
255
100
enum ofp12_flow_mod_flags {
302
147
};
303
148
OFP_ASSERT(sizeof(struct ofp12_table_stats) == 128);
304
149
 
 
150
/* Number of types of groups supported by ofp12_group_features_stats. */
 
151
#define OFPGT12_N_TYPES 4
 
152
 
305
153
/* Body of reply to OFPST12_GROUP_FEATURES request. Group features. */
306
154
struct ofp12_group_features_stats {
307
155
    ovs_be32  types;           /* Bitmap of OFPGT11_* values supported. */
308
156
    ovs_be32  capabilities;    /* Bitmap of OFPGFC12_* capability supported. */
309
 
    ovs_be32  max_groups[4];   /* Maximum number of groups for each type. */
310
 
    ovs_be32  actions[4];      /* Bitmaps of OFPAT_* that are supported. */
 
157
 
 
158
    /* Each element in the following arrays corresponds to the group type with
 
159
     * the same number, e.g. max_groups[0] is the maximum number of OFPGT11_ALL
 
160
     * groups, actions[2] is the actions supported by OFPGT11_INDIRECT
 
161
     * groups. */
 
162
    ovs_be32  max_groups[OFPGT12_N_TYPES]; /* Max number of groups. */
 
163
    ovs_be32  actions[OFPGT12_N_TYPES];    /* Bitmaps of supported OFPAT_*. */
311
164
};
312
165
OFP_ASSERT(sizeof(struct ofp12_group_features_stats) == 40);
313
166