backing up
[vsorcdistro/.git] / ryu / build / lib.linux-armv7l-2.7 / ryu / tests / unit / ofproto / test_ofproto_v12.py
1 # Copyright (C) 2012 Nippon Telegraph and Telephone Corporation.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #    http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
12 # implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15
16 # vim: tabstop=4 shiftwidth=4 softtabstop=4
17
18 import unittest
19 import logging
20 from nose.tools import eq_
21 from ryu.ofproto.ofproto_v1_2 import *
22
23
24 LOG = logging.getLogger('test_ofproto_v12')
25
26
27 class TestOfprot12(unittest.TestCase):
28     """ Test case for ofproto_v1_2
29     """
30
31     def test_struct_ofp_header(self):
32         eq_(OFP_HEADER_PACK_STR, '!BBHI')
33         eq_(OFP_HEADER_SIZE, 8)
34
35     def test_enum_ofp_type(self):
36         eq_(OFPT_HELLO, 0)
37         eq_(OFPT_ERROR, 1)
38         eq_(OFPT_ECHO_REQUEST, 2)
39         eq_(OFPT_ECHO_REPLY, 3)
40         eq_(OFPT_EXPERIMENTER, 4)
41         eq_(OFPT_FEATURES_REQUEST, 5)
42         eq_(OFPT_FEATURES_REPLY, 6)
43         eq_(OFPT_GET_CONFIG_REQUEST, 7)
44         eq_(OFPT_GET_CONFIG_REPLY, 8)
45         eq_(OFPT_SET_CONFIG, 9)
46         eq_(OFPT_PACKET_IN, 10)
47         eq_(OFPT_FLOW_REMOVED, 11)
48         eq_(OFPT_PORT_STATUS, 12)
49         eq_(OFPT_PACKET_OUT, 13)
50         eq_(OFPT_FLOW_MOD, 14)
51         eq_(OFPT_GROUP_MOD, 15)
52         eq_(OFPT_PORT_MOD, 16)
53         eq_(OFPT_TABLE_MOD, 17)
54         eq_(OFPT_STATS_REQUEST, 18)
55         eq_(OFPT_STATS_REPLY, 19)
56         eq_(OFPT_BARRIER_REQUEST, 20)
57         eq_(OFPT_BARRIER_REPLY, 21)
58         eq_(OFPT_QUEUE_GET_CONFIG_REQUEST, 22)
59         eq_(OFPT_QUEUE_GET_CONFIG_REPLY, 23)
60         eq_(OFPT_ROLE_REQUEST, 24)
61         eq_(OFPT_ROLE_REPLY, 25)
62
63     def test_struct_ofp_port(self):
64         eq_(OFP_PORT_PACK_STR, '!I4x6s2x16sIIIIIIII')
65         eq_(OFP_PORT_SIZE, 64)
66
67     def test_enum_ofp_port_config(self):
68         eq_(OFPPC_PORT_DOWN, 1 << 0)
69         eq_(OFPPC_NO_RECV, 1 << 2)
70         eq_(OFPPC_NO_FWD, 1 << 5)
71         eq_(OFPPC_NO_PACKET_IN, 1 << 6)
72
73     def test_enum_ofp_port_state(self):
74         eq_(OFPPS_LINK_DOWN, 1 << 0)
75         eq_(OFPPS_BLOCKED, 1 << 1)
76         eq_(OFPPS_LIVE, 1 << 2)
77
78     def test_enum_ofp_port_no(self):
79         eq_(OFPP_MAX, 0xffffff00)
80         eq_(OFPP_IN_PORT, 0xfffffff8)
81         eq_(OFPP_TABLE, 0xfffffff9)
82         eq_(OFPP_NORMAL, 0xfffffffa)
83         eq_(OFPP_FLOOD, 0xfffffffb)
84         eq_(OFPP_ALL, 0xfffffffc)
85         eq_(OFPP_CONTROLLER, 0xfffffffd)
86         eq_(OFPP_LOCAL, 0xfffffffe)
87         eq_(OFPP_ANY, 0xffffffff)
88         eq_(OFPQ_ALL, 0xffffffff)
89
90     def test_enum_ofp_port_features(self):
91         eq_(OFPPF_10MB_HD, 1 << 0)
92         eq_(OFPPF_10MB_FD, 1 << 1)
93         eq_(OFPPF_100MB_HD, 1 << 2)
94         eq_(OFPPF_100MB_FD, 1 << 3)
95         eq_(OFPPF_1GB_HD, 1 << 4)
96         eq_(OFPPF_1GB_FD, 1 << 5)
97         eq_(OFPPF_10GB_FD, 1 << 6)
98         eq_(OFPPF_40GB_FD, 1 << 7)
99         eq_(OFPPF_100GB_FD, 1 << 8)
100         eq_(OFPPF_1TB_FD, 1 << 9)
101         eq_(OFPPF_OTHER, 1 << 10)
102         eq_(OFPPF_COPPER, 1 << 11)
103         eq_(OFPPF_FIBER, 1 << 12)
104         eq_(OFPPF_AUTONEG, 1 << 13)
105         eq_(OFPPF_PAUSE, 1 << 14)
106         eq_(OFPPF_PAUSE_ASYM, 1 << 15)
107
108     def test_struct_ofp_packet_queue(self):
109         eq_(OFP_PACKET_QUEUE_PACK_STR, '!IIH6x')
110         eq_(OFP_PACKET_QUEUE_SIZE, 16)
111
112     def test_enum_ofp_queue_properties(self):
113         eq_(OFPQT_MIN_RATE, 1)
114         eq_(OFPQT_MAX_RATE, 2)
115         eq_(OFPQT_EXPERIMENTER, 0xffff)
116
117     def test_struct_ofp_queue_prop_header(self):
118         eq_(OFP_QUEUE_PROP_HEADER_PACK_STR, '!HH4x')
119         eq_(OFP_QUEUE_PROP_HEADER_SIZE, 8)
120
121     def test_struct_ofp_queue_prop_min_rate(self):
122         eq_(OFP_QUEUE_PROP_MIN_RATE_PACK_STR, '!H6x')
123         eq_(OFP_QUEUE_PROP_MIN_RATE_SIZE, 16)
124
125     def test_struct_ofp_queue_prop_max_rate(self):
126         eq_(OFP_QUEUE_PROP_MAX_RATE_PACK_STR, '!H6x')
127         eq_(OFP_QUEUE_PROP_MAX_RATE_SIZE, 16)
128
129     def test_struct_ofp_queue_prop_experimenter(self):
130         eq_(OFP_QUEUE_PROP_EXPERIMENTER_PACK_STR, '!I4x')
131         eq_(OFP_QUEUE_PROP_EXPERIMENTER_SIZE, 16)
132
133     def test_struct_ofp_match(self):
134         eq_(OFP_MATCH_PACK_STR, '!HHBBBB')
135         eq_(OFP_MATCH_SIZE, 8)
136
137     def test_enum_ofp_match_type(self):
138         eq_(OFPMT_STANDARD, 0)
139         eq_(OFPMT_OXM, 1)
140
141     def test_enum_ofp_oxm_class(self):
142         eq_(OFPXMC_NXM_0, 0x0000)
143         eq_(OFPXMC_NXM_1, 0x0001)
144         eq_(OFPXMC_OPENFLOW_BASIC, 0x8000)
145         eq_(OFPXMC_EXPERIMENTER, 0xFFFF)
146
147     def test_enmu_oxm_ofb_match_fields(self):
148         eq_(OFPXMT_OFB_IN_PORT, 0)
149         eq_(OFPXMT_OFB_IN_PHY_PORT, 1)
150         eq_(OFPXMT_OFB_METADATA, 2)
151         eq_(OFPXMT_OFB_ETH_DST, 3)
152         eq_(OFPXMT_OFB_ETH_SRC, 4)
153         eq_(OFPXMT_OFB_ETH_TYPE, 5)
154         eq_(OFPXMT_OFB_VLAN_VID, 6)
155         eq_(OFPXMT_OFB_VLAN_PCP, 7)
156         eq_(OFPXMT_OFB_IP_DSCP, 8)
157         eq_(OFPXMT_OFB_IP_ECN, 9)
158         eq_(OFPXMT_OFB_IP_PROTO, 10)
159         eq_(OFPXMT_OFB_IPV4_SRC, 11)
160         eq_(OFPXMT_OFB_IPV4_DST, 12)
161         eq_(OFPXMT_OFB_TCP_SRC, 13)
162         eq_(OFPXMT_OFB_TCP_DST, 14)
163         eq_(OFPXMT_OFB_UDP_SRC, 15)
164         eq_(OFPXMT_OFB_UDP_DST, 16)
165         eq_(OFPXMT_OFB_SCTP_SRC, 17)
166         eq_(OFPXMT_OFB_SCTP_DST, 18)
167         eq_(OFPXMT_OFB_ICMPV4_TYPE, 19)
168         eq_(OFPXMT_OFB_ICMPV4_CODE, 20)
169         eq_(OFPXMT_OFB_ARP_OP, 21)
170         eq_(OFPXMT_OFB_ARP_SPA, 22)
171         eq_(OFPXMT_OFB_ARP_TPA, 23)
172         eq_(OFPXMT_OFB_ARP_SHA, 24)
173         eq_(OFPXMT_OFB_ARP_THA, 25)
174         eq_(OFPXMT_OFB_IPV6_SRC, 26)
175         eq_(OFPXMT_OFB_IPV6_DST, 27)
176         eq_(OFPXMT_OFB_IPV6_FLABEL, 28)
177         eq_(OFPXMT_OFB_ICMPV6_TYPE, 29)
178         eq_(OFPXMT_OFB_ICMPV6_CODE, 30)
179         eq_(OFPXMT_OFB_IPV6_ND_TARGET, 31)
180         eq_(OFPXMT_OFB_IPV6_ND_SLL, 32)
181         eq_(OFPXMT_OFB_IPV6_ND_TLL, 33)
182         eq_(OFPXMT_OFB_MPLS_LABEL, 34)
183         eq_(OFPXMT_OFB_MPLS_TC, 35)
184
185     def test_enum_ofp_vlan_id(self):
186         eq_(OFPVID_PRESENT, 0x1000)
187         eq_(OFPVID_NONE, 0x0000)
188
189     def test_struct_ofp_oxm_experimenter_header(self):
190         eq_(OFP_OXM_EXPERIMENTER_HEADER_PACK_STR, '!II')
191         eq_(OFP_OXM_EXPERIMENTER_HEADER_SIZE, 8)
192
193     def test_enum_ofp_instruction_type(self):
194         eq_(OFPIT_GOTO_TABLE, 1)
195         eq_(OFPIT_WRITE_METADATA, 2)
196         eq_(OFPIT_WRITE_ACTIONS, 3)
197         eq_(OFPIT_APPLY_ACTIONS, 4)
198         eq_(OFPIT_CLEAR_ACTIONS, 5)
199         eq_(OFPIT_EXPERIMENTER, 0xFFFF)
200
201     def test_struct_ofp_instruction_goto_table(self):
202         eq_(OFP_INSTRUCTION_GOTO_TABLE_PACK_STR, '!HHB3x')
203         eq_(OFP_INSTRUCTION_GOTO_TABLE_SIZE, 8)
204
205     def test_struct_ofp_instruction_write_metadata(self):
206         eq_(OFP_INSTRUCTION_WRITE_METADATA_PACK_STR, '!HH4xQQ')
207         eq_(OFP_INSTRUCTION_WRITE_METADATA_SIZE, 24)
208
209     def test_struct_ofp_instaruction_actions(self):
210         eq_(OFP_INSTRUCTION_ACTIONS_PACK_STR, '!HH4x')
211         eq_(OFP_INSTRUCTION_ACTIONS_SIZE, 8)
212
213     def test_enum_ofp_action_type(self):
214         eq_(OFPAT_OUTPUT, 0)
215         eq_(OFPAT_COPY_TTL_OUT, 11)
216         eq_(OFPAT_COPY_TTL_IN, 12)
217         eq_(OFPAT_SET_MPLS_TTL, 15)
218         eq_(OFPAT_DEC_MPLS_TTL, 16)
219         eq_(OFPAT_PUSH_VLAN, 17)
220         eq_(OFPAT_POP_VLAN, 18)
221         eq_(OFPAT_PUSH_MPLS, 19)
222         eq_(OFPAT_POP_MPLS, 20)
223         eq_(OFPAT_SET_QUEUE, 21)
224         eq_(OFPAT_GROUP, 22)
225         eq_(OFPAT_SET_NW_TTL, 23)
226         eq_(OFPAT_DEC_NW_TTL, 24)
227         eq_(OFPAT_SET_FIELD, 25)
228         eq_(OFPAT_EXPERIMENTER, 0xffff)
229
230     def test_struct_ofp_action_header(self):
231         eq_(OFP_ACTION_HEADER_PACK_STR, '!HH4x')
232         eq_(OFP_ACTION_HEADER_SIZE, 8)
233
234     def test_struct_ofp_action_output(self):
235         eq_(OFP_ACTION_OUTPUT_PACK_STR, '!HHIH6x')
236         eq_(OFP_ACTION_OUTPUT_SIZE, 16)
237
238     def test_enum_ofp_controller_max_len(self):
239         eq_(OFPCML_MAX, 0xffe5)
240         eq_(OFPCML_NO_BUFFER, 0xffff)
241
242     def test_struct_ofp_action_group(self):
243         eq_(OFP_ACTION_GROUP_PACK_STR, '!HHI')
244         eq_(OFP_ACTION_GROUP_SIZE, 8)
245
246     def test_struct_ofp_action_set_queue(self):
247         eq_(OFP_ACTION_SET_QUEUE_PACK_STR, '!HHI')
248         eq_(OFP_ACTION_SET_QUEUE_SIZE, 8)
249
250     def test_struct_ofp_aciton_mpls_ttl(self):
251         eq_(OFP_ACTION_MPLS_TTL_PACK_STR, '!HHB3x')
252         eq_(OFP_ACTION_MPLS_TTL_SIZE, 8)
253
254     def test_struct_ofp_action_nw_ttl(self):
255         eq_(OFP_ACTION_NW_TTL_PACK_STR, '!HHB3x')
256         eq_(OFP_ACTION_NW_TTL_SIZE, 8)
257
258     def test_struct_ofp_action_push(self):
259         eq_(OFP_ACTION_PUSH_PACK_STR, '!HHH2x')
260         eq_(OFP_ACTION_PUSH_SIZE, 8)
261
262     def test_struct_ofp_action_pop_mpls(self):
263         eq_(OFP_ACTION_POP_MPLS_PACK_STR, '!HHH2x')
264         eq_(OFP_ACTION_POP_MPLS_SIZE, 8)
265
266     def test_struct_ofp_action_set_field(self):
267         eq_(OFP_ACTION_SET_FIELD_PACK_STR, '!HH4B')
268         eq_(OFP_ACTION_SET_FIELD_SIZE, 8)
269
270     def test_struct_ofp_action_experimenter_header(self):
271         eq_(OFP_ACTION_EXPERIMENTER_HEADER_PACK_STR, '!HHI')
272         eq_(OFP_ACTION_EXPERIMENTER_HEADER_SIZE, 8)
273
274     def test_struct_ofp_switch_feature(self):
275         eq_(OFP_SWITCH_FEATURES_PACK_STR, '!QIB3xII')
276         eq_(OFP_SWITCH_FEATURES_SIZE, 32)
277
278     def test_enum_ofp_capabilities(self):
279         eq_(OFPC_FLOW_STATS, 1 << 0)
280         eq_(OFPC_TABLE_STATS, 1 << 1)
281         eq_(OFPC_PORT_STATS, 1 << 2)
282         eq_(OFPC_GROUP_STATS, 1 << 3)
283         eq_(OFPC_IP_REASM, 1 << 5)
284         eq_(OFPC_QUEUE_STATS, 1 << 6)
285         eq_(OFPC_PORT_BLOCKED, 1 << 8)
286
287     def test_struct_ofp_switch_config(self):
288         eq_(OFP_SWITCH_CONFIG_PACK_STR, '!HH')
289         eq_(OFP_SWITCH_CONFIG_SIZE, 12)
290
291     def test_enum_ofp_config_flags(self):
292         eq_(OFPC_FRAG_NORMAL, 0)
293         eq_(OFPC_FRAG_DROP, 1 << 0)
294         eq_(OFPC_FRAG_REASM, 1 << 1)
295         eq_(OFPC_FRAG_MASK, 3)
296         eq_(OFPC_INVALID_TTL_TO_CONTROLLER, 1 << 2)
297
298     def test_enum_ofp_table(self):
299         eq_(OFPTT_MAX, 0xfe)
300         eq_(OFPTT_ALL, 0xff)
301
302     def test_struct_ofp_table_mod(self):
303         eq_(OFP_TABLE_MOD_PACK_STR, '!B3xI')
304         eq_(OFP_TABLE_MOD_SIZE, 16)
305
306     def test_enum_ofp_table_config(self):
307         eq_(OFPTC_TABLE_MISS_CONTROLLER, 0)
308         eq_(OFPTC_TABLE_MISS_CONTINUE, 1 << 0)
309         eq_(OFPTC_TABLE_MISS_DROP, 1 << 1)
310         eq_(OFPTC_TABLE_MISS_MASK, 3)
311
312     def test_struct_ofp_flow_mod(self):
313         eq_(OFP_FLOW_MOD_PACK_STR, '!QQBBHHHIIIH2xHHBBBB')
314         eq_(OFP_FLOW_MOD_SIZE, 56)
315
316     def test_enum_ofp_flow_mod_command(self):
317         eq_(OFPFC_ADD, 0)
318         eq_(OFPFC_MODIFY, 1)
319         eq_(OFPFC_MODIFY_STRICT, 2)
320         eq_(OFPFC_DELETE, 3)
321         eq_(OFPFC_DELETE_STRICT, 4)
322
323     def test_enum_ofp_flow_mod_flags(self):
324         eq_(OFPFF_SEND_FLOW_REM, 1 << 0)
325         eq_(OFPFF_CHECK_OVERLAP, 1 << 1)
326         eq_(OFPFF_RESET_COUNTS, 1 << 2)
327
328     def test_struct_ofp_group_mod(self):
329         eq_(OFP_GROUP_MOD_PACK_STR, '!HBxI')
330         eq_(OFP_GROUP_MOD_SIZE, 16)
331
332     # same to OFPP_*
333     def test_enum_ofp_group(self):
334         eq_(OFPG_MAX, 0xffffff00)
335         eq_(OFPG_ALL, 0xfffffffc)
336         eq_(OFPG_ANY, 0xffffffff)
337
338     def test_enum_ofp_group_mod_command(self):
339         eq_(OFPGC_ADD, 0)
340         eq_(OFPGC_MODIFY, 1)
341         eq_(OFPGC_DELETE, 2)
342
343     def test_enum_ofp_group_type(self):
344         eq_(OFPGT_ALL, 0)
345         eq_(OFPGT_SELECT, 1)
346         eq_(OFPGT_INDIRECT, 2)
347         eq_(OFPGT_FF, 3)
348
349     def test_struct_ofp_bucket(self):
350         eq_(OFP_BUCKET_PACK_STR, '!HHII4x')
351         eq_(OFP_BUCKET_SIZE, 16)
352
353     def test_struct_ofp_port_mod(self):
354         eq_(OFP_PORT_MOD_PACK_STR, '!I4x6s2xIII4x')
355         eq_(OFP_PORT_MOD_SIZE, 40)
356
357     def test_sturct_ofp_stats_request(self):
358         eq_(OFP_STATS_REQUEST_PACK_STR, '!HH4x')
359         eq_(OFP_STATS_REQUEST_SIZE, 16)
360
361     # OFPSF_REQ_* flags (none yet defined).
362     # The only value defined for flags in a reply is whether more
363     # replies will follow this one - this has the value 0x0001.
364     def test_enum_ofp_stats_reply_flags(self):
365         eq_(OFPSF_REPLY_MORE, 0x0001)
366
367     def test_struct_ofp_stats_reply(self):
368         eq_(OFP_STATS_REPLY_PACK_STR, '!HH4x')
369         eq_(OFP_STATS_REPLY_SIZE, 16)
370
371     def test_enum_ofp_stats_types(self):
372         eq_(OFPST_DESC, 0)
373         eq_(OFPST_FLOW, 1)
374         eq_(OFPST_AGGREGATE, 2)
375         eq_(OFPST_TABLE, 3)
376         eq_(OFPST_PORT, 4)
377         eq_(OFPST_QUEUE, 5)
378         eq_(OFPST_GROUP, 6)
379         eq_(OFPST_GROUP_DESC, 7)
380         eq_(OFPST_GROUP_FEATURES, 8)
381         eq_(OFPST_EXPERIMENTER, 0xffff)
382
383     def test_struct_ofp_desc_stats(self):
384         eq_(OFP_DESC_STATS_PACK_STR, '!256s256s256s32s256s')
385         eq_(OFP_DESC_STATS_SIZE, 1056)
386
387     def test_struct_ofp_flow_stats_request(self):
388         eq_(OFP_FLOW_STATS_REQUEST_PACK_STR, '!B3xII4xQQ')
389         eq_(OFP_FLOW_STATS_REQUEST_SIZE, 40)
390
391     def test_struct_ofp_flow_stats(self):
392         eq_(OFP_FLOW_STATS_PACK_STR, '!HBxIIHHH6xQQQ')
393         eq_(OFP_FLOW_STATS_SIZE, 56)
394
395     def test_struct_ofp_aggregate_stats_request(self):
396         eq_(OFP_AGGREGATE_STATS_REQUEST_PACK_STR, '!B3xII4xQQ')
397         eq_(OFP_AGGREGATE_STATS_REQUEST_SIZE, 40)
398
399     def test_struct_ofp_aggregate_stats_reply(self):
400         eq_(OFP_AGGREGATE_STATS_REPLY_PACK_STR, '!QQI4x')
401         eq_(OFP_AGGREGATE_STATS_REPLY_SIZE, 24)
402
403     def test_sturct_ofp_table_stats(self):
404         eq_(OFP_TABLE_STATS_PACK_STR, '!B7x32sQQIIQQQQIIIIQQ')
405         eq_(OFP_TABLE_STATS_SIZE, 128)
406
407     def test_struct_ofp_port_stats_request(self):
408         eq_(OFP_PORT_STATS_REQUEST_PACK_STR, '!I4x')
409         eq_(OFP_PORT_STATS_REQUEST_SIZE, 8)
410
411     def test_struct_ofp_port_stats(self):
412         eq_(OFP_PORT_STATS_PACK_STR, '!I4xQQQQQQQQQQQQ')
413         eq_(OFP_PORT_STATS_SIZE, 104)
414
415     def test_struct_ofp_queue_stats_request(self):
416         eq_(OFP_QUEUE_STATS_REQUEST_PACK_STR, '!II')
417         eq_(OFP_QUEUE_STATS_REQUEST_SIZE, 8)
418
419     def test_struct_ofp_queue_stats(self):
420         eq_(OFP_QUEUE_STATS_PACK_STR, '!IIQQQ')
421         eq_(OFP_QUEUE_STATS_SIZE, 32)
422
423     def test_struct_ofp_group_stats_request(self):
424         eq_(OFP_GROUP_STATS_REQUEST_PACK_STR, '!I4x')
425         eq_(OFP_GROUP_STATS_REQUEST_SIZE, 8)
426
427     def test_struct_ofp_group_stats(self):
428         eq_(OFP_GROUP_STATS_PACK_STR, '!H2xII4xQQ')
429         eq_(OFP_GROUP_STATS_SIZE, 32)
430
431     def test_struct_ofp_bucket_counter(self):
432         eq_(OFP_BUCKET_COUNTER_PACK_STR, '!QQ')
433         eq_(OFP_BUCKET_COUNTER_SIZE, 16)
434
435     def test_struct_ofp_group_desc_stats(self):
436         eq_(OFP_GROUP_DESC_STATS_PACK_STR, '!HBxI')
437         eq_(OFP_GROUP_DESC_STATS_SIZE, 8)
438
439     def test_struct_ofp_group_features_stats(self):
440         eq_(OFP_GROUP_FEATURES_STATS_PACK_STR, '!II4I4I')
441         eq_(OFP_GROUP_FEATURES_STATS_SIZE, 40)
442
443     def test_enmu_ofp_group_capabilities(self):
444         eq_(OFPGFC_SELECT_WEIGHT, 1 << 0)
445         eq_(OFPGFC_SELECT_LIVENESS, 1 << 1)
446         eq_(OFPGFC_CHAINING, 1 << 2)
447         eq_(OFPGFC_CHAINING_CHECKS, 1 << 3)
448
449     def test_struct_ofp_experimenter_stats_header(self):
450         eq_(OFP_EXPERIMENTER_STATS_HEADER_PACK_STR, '!II')
451         eq_(OFP_EXPERIMENTER_STATS_HEADER_SIZE, 8)
452
453     def test_struct_opf_queue_get_config_request(self):
454         eq_(OFP_QUEUE_GET_CONFIG_REQUEST_PACK_STR, '!I4x')
455         eq_(OFP_QUEUE_GET_CONFIG_REQUEST_SIZE, 16)
456
457     def test_struct_ofp_queue_get_config_reply(self):
458         eq_(OFP_QUEUE_GET_CONFIG_REPLY_PACK_STR, '!I4x')
459         eq_(OFP_QUEUE_GET_CONFIG_REPLY_SIZE, 16)
460
461     def test_struct_ofp_packet_out(self):
462         eq_(OFP_PACKET_OUT_PACK_STR, '!IIH6x')
463         eq_(OFP_PACKET_OUT_SIZE, 24)
464
465     def test_struct_ofp_role_request(self):
466         eq_(OFP_ROLE_REQUEST_PACK_STR, '!I4xQ')
467         eq_(OFP_ROLE_REQUEST_SIZE, 24)
468
469     def test_enum_ofp_controller_role(self):
470         eq_(OFPCR_ROLE_NOCHANGE, 0)
471         eq_(OFPCR_ROLE_EQUAL, 1)
472         eq_(OFPCR_ROLE_MASTER, 2)
473         eq_(OFPCR_ROLE_SLAVE, 3)
474
475     def test_struct_ofp_packet_in(self):
476         eq_(OFP_PACKET_IN_PACK_STR, '!IHBB')
477         eq_(OFP_PACKET_IN_SIZE, 24)
478
479     def test_enum_ofp_packet_in_reason(self):
480         eq_(OFPR_NO_MATCH, 0)
481         eq_(OFPR_ACTION, 1)
482         eq_(OFPR_INVALID_TTL, 2)
483
484     def test_struct_ofp_flow_removed(self):
485         eq_(OFP_FLOW_REMOVED_PACK_STR, '!QHBBIIHHQQHHBBBB')
486         eq_(OFP_FLOW_REMOVED_PACK_STR0, '!QHBBIIHHQQ')
487         eq_(OFP_FLOW_REMOVED_SIZE, 56)
488
489     def test_enum_ofp_flow_removed_reason(self):
490         eq_(OFPRR_IDLE_TIMEOUT, 0)
491         eq_(OFPRR_HARD_TIMEOUT, 1)
492         eq_(OFPRR_DELETE, 2)
493         eq_(OFPRR_GROUP_DELETE, 3)
494
495     def test_struct_ofp_port_status(self):
496         eq_(OFP_PORT_STATUS_PACK_STR, '!B7xI4x6s2x16sIIIIIIII')
497         eq_(OFP_PORT_STATUS_DESC_OFFSET, 16)
498         eq_(OFP_PORT_STATUS_SIZE, 80)
499
500     def test_enum_ofp_port_reason(self):
501         eq_(OFPPR_ADD, 0)
502         eq_(OFPPR_DELETE, 1)
503         eq_(OFPPR_MODIFY, 2)
504
505     def test_struct_ofp_error_msg(self):
506         eq_(OFP_ERROR_MSG_PACK_STR, '!HH')
507         eq_(OFP_ERROR_MSG_SIZE, 12)
508
509     def test_enum_ofp_error_type(self):
510         eq_(OFPET_HELLO_FAILED, 0)
511         eq_(OFPET_BAD_REQUEST, 1)
512         eq_(OFPET_BAD_ACTION, 2)
513         eq_(OFPET_BAD_INSTRUCTION, 3)
514         eq_(OFPET_BAD_MATCH, 4)
515         eq_(OFPET_FLOW_MOD_FAILED, 5)
516         eq_(OFPET_GROUP_MOD_FAILED, 6)
517         eq_(OFPET_PORT_MOD_FAILED, 7)
518         eq_(OFPET_TABLE_MOD_FAILED, 8)
519         eq_(OFPET_QUEUE_OP_FAILED, 9)
520         eq_(OFPET_SWITCH_CONFIG_FAILED, 10)
521         eq_(OFPET_ROLE_REQUEST_FAILED, 11)
522         eq_(OFPET_EXPERIMENTER, 0xffff)
523
524     def test_enum_ofp_hello_failed_code(self):
525         eq_(OFPHFC_INCOMPATIBLE, 0)
526         eq_(OFPHFC_EPERM, 1)
527
528     def test_enum_ofp_bad_request_code(self):
529         eq_(OFPBRC_BAD_VERSION, 0)
530         eq_(OFPBRC_BAD_TYPE, 1)
531         eq_(OFPBRC_BAD_STAT, 2)
532         eq_(OFPBRC_BAD_EXPERIMENTER, 3)
533         eq_(OFPBRC_BAD_EXP_TYPE, 4)
534         eq_(OFPBRC_EPERM, 5)
535         eq_(OFPBRC_BAD_LEN, 6)
536         eq_(OFPBRC_BUFFER_EMPTY, 7)
537         eq_(OFPBRC_BUFFER_UNKNOWN, 8)
538         eq_(OFPBRC_BAD_TABLE_ID, 9)
539         eq_(OFPBRC_IS_SLAVE, 10)
540         eq_(OFPBRC_BAD_PORT, 11)
541         eq_(OFPBRC_BAD_PACKET, 12)
542
543     def test_enum_ofp_bad_action_code(self):
544         eq_(OFPBAC_BAD_TYPE, 0)
545         eq_(OFPBAC_BAD_LEN, 1)
546         eq_(OFPBAC_BAD_EXPERIMENTER, 2)
547         eq_(OFPBAC_BAD_EXP_TYPE, 3)
548         eq_(OFPBAC_BAD_OUT_PORT, 4)
549         eq_(OFPBAC_BAD_ARGUMENT, 5)
550         eq_(OFPBAC_EPERM, 6)
551         eq_(OFPBAC_TOO_MANY, 7)
552         eq_(OFPBAC_BAD_QUEUE, 8)
553         eq_(OFPBAC_BAD_OUT_GROUP, 9)
554         eq_(OFPBAC_MATCH_INCONSISTENT, 10)
555         eq_(OFPBAC_UNSUPPORTED_ORDER, 11)
556         eq_(OFPBAC_BAD_TAG, 12)
557         eq_(OFPBAC_BAD_SET_TYPE, 13)
558         eq_(OFPBAC_BAD_SET_LEN, 14)
559         eq_(OFPBAC_BAD_SET_ARGUMENT, 15)
560
561     def test_enum_ofp_bad_instruction_code(self):
562         eq_(OFPBIC_UNKNOWN_INST, 0)
563         eq_(OFPBIC_UNSUP_INST, 1)
564         eq_(OFPBIC_BAD_TABLE_ID, 2)
565         eq_(OFPBIC_UNSUP_METADATA, 3)
566         eq_(OFPBIC_UNSUP_METADATA_MASK, 4)
567         eq_(OFPBIC_BAD_EXPERIMENTER, 5)
568         eq_(OFPBIC_BAD_EXP_TYPE, 6)
569         eq_(OFPBIC_BAD_LEN, 7)
570         eq_(OFPBIC_EPERM, 8)
571
572     def test_enum_ofp_bad_match_code(self):
573         eq_(OFPBMC_BAD_TYPE, 0)
574         eq_(OFPBMC_BAD_LEN, 1)
575         eq_(OFPBMC_BAD_TAG, 2)
576         eq_(OFPBMC_BAD_DL_ADDR_MASK, 3)
577         eq_(OFPBMC_BAD_NW_ADDR_MASK, 4)
578         eq_(OFPBMC_BAD_WILDCARDS, 5)
579         eq_(OFPBMC_BAD_FIELD, 6)
580         eq_(OFPBMC_BAD_VALUE, 7)
581         eq_(OFPBMC_BAD_MASK, 8)
582         eq_(OFPBMC_BAD_PREREQ, 9)
583         eq_(OFPBMC_DUP_FIELD, 10)
584         eq_(OFPBMC_EPERM, 11)
585
586     def test_enum_ofp_flow_mod_failed_code(self):
587         eq_(OFPFMFC_UNKNOWN, 0)
588         eq_(OFPFMFC_TABLE_FULL, 1)
589         eq_(OFPFMFC_BAD_TABLE_ID, 2)
590         eq_(OFPFMFC_OVERLAP, 3)
591         eq_(OFPFMFC_EPERM, 4)
592         eq_(OFPFMFC_BAD_TIMEOUT, 5)
593         eq_(OFPFMFC_BAD_COMMAND, 6)
594         eq_(OFPFMFC_BAD_FLAGS, 7)
595
596     def test_enum_ofp_group_mod_failed_code(self):
597         eq_(OFPGMFC_GROUP_EXISTS, 0)
598         eq_(OFPGMFC_INVALID_GROUP, 1)
599         eq_(OFPGMFC_WEIGHT_UNSUPPORTED, 2)
600         eq_(OFPGMFC_OUT_OF_GROUPS, 3)
601         eq_(OFPGMFC_OUT_OF_BUCKETS, 4)
602         eq_(OFPGMFC_CHAINING_UNSUPPORTED, 5)
603         eq_(OFPGMFC_WATCH_UNSUPPORTED, 6)
604         eq_(OFPGMFC_LOOP, 7)
605         eq_(OFPGMFC_UNKNOWN_GROUP, 8)
606         eq_(OFPGMFC_CHAINED_GROUP, 9)
607         eq_(OFPGMFC_BAD_TYPE, 10)
608         eq_(OFPGMFC_BAD_COMMAND, 11)
609         eq_(OFPGMFC_BAD_BUCKET, 12)
610         eq_(OFPGMFC_BAD_WATCH, 13)
611         eq_(OFPGMFC_EPERM, 14)
612
613     def test_enum_ofp_port_mod_failed_code(self):
614         eq_(OFPPMFC_BAD_PORT, 0)
615         eq_(OFPPMFC_BAD_HW_ADDR, 1)
616         eq_(OFPPMFC_BAD_CONFIG, 2)
617         eq_(OFPPMFC_BAD_ADVERTISE, 3)
618         eq_(OFPPMFC_EPERM, 4)
619
620     def test_enum_ofp_table_mod_failed_code(self):
621         eq_(OFPTMFC_BAD_TABLE, 0)
622         eq_(OFPTMFC_BAD_CONFIG, 1)
623         eq_(OFPTMFC_EPERM, 2)
624
625     def test_enum_ofp_queue_op_failed_code(self):
626         eq_(OFPQOFC_BAD_PORT, 0)
627         eq_(OFPQOFC_BAD_QUEUE, 1)
628         eq_(OFPQOFC_EPERM, 2)
629
630     def test_enum_ofp_switch_config_failed_code(self):
631         eq_(OFPSCFC_BAD_FLAGS, 0)
632         eq_(OFPSCFC_BAD_LEN, 1)
633         eq_(OFPSCFC_EPERM, 2)
634
635     def test_enum_ofp_role_request_failed_code(self):
636         eq_(OFPRRFC_STALE, 0)
637         eq_(OFPRRFC_UNSUP, 1)
638         eq_(OFPRRFC_BAD_ROLE, 2)
639
640     def test_struct_ofp_error_experimenter_msg(self):
641         eq_(OFP_ERROR_EXPERIMENTER_MSG_PACK_STR, '!HHI')
642         eq_(OFP_ERROR_EXPERIMENTER_MSG_SIZE, 16)
643
644     def test_struct_ofp_experimenter_header(self):
645         eq_(OFP_EXPERIMENTER_HEADER_PACK_STR, '!II')
646         eq_(OFP_EXPERIMENTER_HEADER_SIZE, 16)
647
648     # OXM is interpreted as a 32-bit word in network byte order.
649     # - oxm_class   17-bit to 32-bit (OFPXMC_*).
650     # - oxm_field   10-bit to 16-bit (OFPXMT_OFB_*).
651     # - oxm_hasmask  9-bit           (Set if OXM include a bitmask).
652     # - oxm_length   1-bit to 8-bit  (Lenght of OXM payload).
653     def _test_OXM(self, value, class_, field, hasmask, length):
654         virfy = (class_ << 16) | (field << 9) | (hasmask << 8) | length
655         eq_(value >> 32, 0)
656         eq_(value, virfy)
657
658     def _test_OXM_basic(self, value, field, hasmask, length):
659         self._test_OXM(value, OFPXMC_OPENFLOW_BASIC, field, hasmask, length)
660
661     def test_OXM_basic(self):
662         self._test_OXM_basic(OXM_OF_IN_PORT, OFPXMT_OFB_IN_PORT, 0, 4)
663         self._test_OXM_basic(OXM_OF_IN_PHY_PORT, OFPXMT_OFB_IN_PHY_PORT, 0, 4)
664         self._test_OXM_basic(OXM_OF_METADATA, OFPXMT_OFB_METADATA, 0, 8)
665         self._test_OXM_basic(OXM_OF_METADATA_W, OFPXMT_OFB_METADATA, 1, 16)
666         self._test_OXM_basic(OXM_OF_ETH_DST, OFPXMT_OFB_ETH_DST, 0, 6)
667         self._test_OXM_basic(OXM_OF_ETH_DST_W, OFPXMT_OFB_ETH_DST, 1, 12)
668         self._test_OXM_basic(OXM_OF_ETH_SRC, OFPXMT_OFB_ETH_SRC, 0, 6)
669         self._test_OXM_basic(OXM_OF_ETH_SRC_W, OFPXMT_OFB_ETH_SRC, 1, 12)
670         self._test_OXM_basic(OXM_OF_ETH_TYPE, OFPXMT_OFB_ETH_TYPE, 0, 2)
671         self._test_OXM_basic(OXM_OF_VLAN_VID, OFPXMT_OFB_VLAN_VID, 0, 2)
672         self._test_OXM_basic(OXM_OF_VLAN_VID_W, OFPXMT_OFB_VLAN_VID, 1, 4)
673         self._test_OXM_basic(OXM_OF_VLAN_PCP, OFPXMT_OFB_VLAN_PCP, 0, 1)
674         self._test_OXM_basic(OXM_OF_IP_DSCP, OFPXMT_OFB_IP_DSCP, 0, 1)
675         self._test_OXM_basic(OXM_OF_IP_ECN, OFPXMT_OFB_IP_ECN, 0, 1)
676         self._test_OXM_basic(OXM_OF_IP_PROTO, OFPXMT_OFB_IP_PROTO, 0, 1)
677         self._test_OXM_basic(OXM_OF_IPV4_SRC, OFPXMT_OFB_IPV4_SRC, 0, 4)
678         self._test_OXM_basic(OXM_OF_IPV4_SRC_W, OFPXMT_OFB_IPV4_SRC, 1, 8)
679         self._test_OXM_basic(OXM_OF_IPV4_DST, OFPXMT_OFB_IPV4_DST, 0, 4)
680         self._test_OXM_basic(OXM_OF_IPV4_DST_W, OFPXMT_OFB_IPV4_DST, 1, 8)
681         self._test_OXM_basic(OXM_OF_TCP_SRC, OFPXMT_OFB_TCP_SRC, 0, 2)
682         self._test_OXM_basic(OXM_OF_TCP_DST, OFPXMT_OFB_TCP_DST, 0, 2)
683         self._test_OXM_basic(OXM_OF_UDP_SRC, OFPXMT_OFB_UDP_SRC, 0, 2)
684         self._test_OXM_basic(OXM_OF_UDP_DST, OFPXMT_OFB_UDP_DST, 0, 2)
685         self._test_OXM_basic(OXM_OF_SCTP_SRC, OFPXMT_OFB_SCTP_SRC, 0, 2)
686         self._test_OXM_basic(OXM_OF_SCTP_DST, OFPXMT_OFB_SCTP_DST, 0, 2)
687         self._test_OXM_basic(OXM_OF_ICMPV4_TYPE, OFPXMT_OFB_ICMPV4_TYPE, 0, 1)
688         self._test_OXM_basic(OXM_OF_ICMPV4_CODE, OFPXMT_OFB_ICMPV4_CODE, 0, 1)
689         self._test_OXM_basic(OXM_OF_ARP_OP, OFPXMT_OFB_ARP_OP, 0, 2)
690         self._test_OXM_basic(OXM_OF_ARP_SPA, OFPXMT_OFB_ARP_SPA, 0, 4)
691         self._test_OXM_basic(OXM_OF_ARP_SPA_W, OFPXMT_OFB_ARP_SPA, 1, 8)
692         self._test_OXM_basic(OXM_OF_ARP_TPA, OFPXMT_OFB_ARP_TPA, 0, 4)
693         self._test_OXM_basic(OXM_OF_ARP_TPA_W, OFPXMT_OFB_ARP_TPA, 1, 8)
694         self._test_OXM_basic(OXM_OF_ARP_SHA, OFPXMT_OFB_ARP_SHA, 0, 6)
695         self._test_OXM_basic(OXM_OF_ARP_SHA_W, OFPXMT_OFB_ARP_SHA, 1, 12)
696         self._test_OXM_basic(OXM_OF_ARP_THA, OFPXMT_OFB_ARP_THA, 0, 6)
697         self._test_OXM_basic(OXM_OF_ARP_THA_W, OFPXMT_OFB_ARP_THA, 1, 12)
698         self._test_OXM_basic(OXM_OF_IPV6_SRC, OFPXMT_OFB_IPV6_SRC, 0, 16)
699         self._test_OXM_basic(OXM_OF_IPV6_SRC_W, OFPXMT_OFB_IPV6_SRC, 1, 32)
700         self._test_OXM_basic(OXM_OF_IPV6_DST, OFPXMT_OFB_IPV6_DST, 0, 16)
701         self._test_OXM_basic(OXM_OF_IPV6_DST_W, OFPXMT_OFB_IPV6_DST, 1, 32)
702         self._test_OXM_basic(OXM_OF_IPV6_FLABEL, OFPXMT_OFB_IPV6_FLABEL, 0, 4)
703         self._test_OXM_basic(OXM_OF_IPV6_FLABEL_W,
704                              OFPXMT_OFB_IPV6_FLABEL, 1, 8)
705         self._test_OXM_basic(OXM_OF_ICMPV6_TYPE, OFPXMT_OFB_ICMPV6_TYPE, 0, 1)
706         self._test_OXM_basic(OXM_OF_ICMPV6_CODE, OFPXMT_OFB_ICMPV6_CODE, 0, 1)
707         self._test_OXM_basic(OXM_OF_IPV6_ND_TARGET,
708                              OFPXMT_OFB_IPV6_ND_TARGET, 0, 16)
709         self._test_OXM_basic(OXM_OF_IPV6_ND_SLL, OFPXMT_OFB_IPV6_ND_SLL, 0, 6)
710         self._test_OXM_basic(OXM_OF_IPV6_ND_TLL, OFPXMT_OFB_IPV6_ND_TLL, 0, 6)
711         self._test_OXM_basic(OXM_OF_MPLS_LABEL, OFPXMT_OFB_MPLS_LABEL, 0, 4)
712         self._test_OXM_basic(OXM_OF_MPLS_TC, OFPXMT_OFB_MPLS_TC, 0, 1)
713
714     def test_define_constants(self):
715         eq_(OFP_VERSION, 0x03)
716         eq_(OFP_TCP_PORT, 6633)
717         eq_(MAX_XID, 0xffffffff)