blob: 787c958b7dc7415043e4e874bd62226170655026 [file] [log] [blame]
Rich Laneca3da272013-05-05 09:07:33 -07001# Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
2# Copyright (c) 2011, 2012 Open Networking Foundation
3# Copyright (c) 2012, 2013 Big Switch Networks, Inc.
Dan Talaycof6202252013-07-02 01:00:29 -07004# See the file LICENSE.pyloxi which should have been included in the source distribution
Rich Laneca3da272013-05-05 09:07:33 -07005
Rich Lane7dcdf022013-12-11 14:45:27 -08006# Automatically generated by LOXI from template module.py
Rich Laneca3da272013-05-05 09:07:33 -07007# Do not modify
8
9import struct
Rich Lane7dcdf022013-12-11 14:45:27 -080010import loxi
Rich Laneca3da272013-05-05 09:07:33 -070011import const
Rich Lane7dcdf022013-12-11 14:45:27 -080012import common
13import action
14import instruction
15import oxm
16import action_id
17import instruction_id
18import meter_band
Rich Lane5454b682014-01-14 17:07:36 -080019import bsn_tlv
Rich Laneca3da272013-05-05 09:07:33 -070020import util
21import loxi.generic_util
Rich Laneca3da272013-05-05 09:07:33 -070022
Rich Lane7dcdf022013-12-11 14:45:27 -080023class instruction(loxi.OFObject):
24 subtypes = {}
Rich Laneca3da272013-05-05 09:07:33 -070025
Rich Lane95f7fc92014-01-27 17:08:16 -080026
27 def __init__(self, type=None):
28 if type != None:
29 self.type = type
30 else:
31 self.type = 0
32 return
33
34 def pack(self):
35 packed = []
36 packed.append(struct.pack("!H", self.type))
37 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
38 length = sum([len(x) for x in packed])
39 packed[1] = struct.pack("!H", length)
40 return ''.join(packed)
41
Rich Lane7dcdf022013-12-11 14:45:27 -080042 @staticmethod
43 def unpack(reader):
44 subtype, = reader.peek('!H', 0)
Rich Lane95f7fc92014-01-27 17:08:16 -080045 subclass = instruction.subtypes.get(subtype)
46 if subclass:
47 return subclass.unpack(reader)
48
49 obj = instruction()
50 obj.type = reader.read("!H")[0]
51 _len = reader.read("!H")[0]
52 orig_reader = reader
53 reader = orig_reader.slice(_len - (2 + 2))
54 return obj
55
56 def __eq__(self, other):
57 if type(self) != type(other): return False
58 if self.type != other.type: return False
59 return True
60
61 def pretty_print(self, q):
62 q.text("instruction {")
63 with q.group():
64 with q.indent(2):
65 q.breakable()
66 q.breakable()
67 q.text('}')
Rich Laneca3da272013-05-05 09:07:33 -070068
Rich Lane7dcdf022013-12-11 14:45:27 -080069
70class apply_actions(instruction):
Dan Talaycof6202252013-07-02 01:00:29 -070071 type = 4
Rich Laneca3da272013-05-05 09:07:33 -070072
73 def __init__(self, actions=None):
74 if actions != None:
75 self.actions = actions
76 else:
77 self.actions = []
78 return
79
80 def pack(self):
81 packed = []
82 packed.append(struct.pack("!H", self.type))
83 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
84 packed.append('\x00' * 4)
Rich Lane7dcdf022013-12-11 14:45:27 -080085 packed.append(loxi.generic_util.pack_list(self.actions))
Rich Laneca3da272013-05-05 09:07:33 -070086 length = sum([len(x) for x in packed])
87 packed[1] = struct.pack("!H", length)
88 return ''.join(packed)
89
90 @staticmethod
Rich Lane7dcdf022013-12-11 14:45:27 -080091 def unpack(reader):
Rich Laneca3da272013-05-05 09:07:33 -070092 obj = apply_actions()
Dan Talaycof6202252013-07-02 01:00:29 -070093 _type = reader.read("!H")[0]
94 assert(_type == 4)
95 _len = reader.read("!H")[0]
Rich Lane7dcdf022013-12-11 14:45:27 -080096 orig_reader = reader
97 reader = orig_reader.slice(_len - (2 + 2))
Rich Laneca3da272013-05-05 09:07:33 -070098 reader.skip(4)
Rich Lane7dcdf022013-12-11 14:45:27 -080099 obj.actions = loxi.generic_util.unpack_list(reader, action.action.unpack)
Rich Laneca3da272013-05-05 09:07:33 -0700100 return obj
101
102 def __eq__(self, other):
103 if type(self) != type(other): return False
104 if self.actions != other.actions: return False
105 return True
106
Rich Laneca3da272013-05-05 09:07:33 -0700107 def pretty_print(self, q):
108 q.text("apply_actions {")
109 with q.group():
110 with q.indent(2):
111 q.breakable()
112 q.text("actions = ");
113 q.pp(self.actions)
114 q.breakable()
115 q.text('}')
116
Rich Lane7dcdf022013-12-11 14:45:27 -0800117instruction.subtypes[4] = apply_actions
118
119class experimenter(instruction):
120 subtypes = {}
121
Rich Lane95f7fc92014-01-27 17:08:16 -0800122 type = 65535
123
124 def __init__(self, experimenter=None, data=None):
125 if experimenter != None:
126 self.experimenter = experimenter
127 else:
128 self.experimenter = 0
129 if data != None:
130 self.data = data
131 else:
132 self.data = ''
133 return
134
135 def pack(self):
136 packed = []
137 packed.append(struct.pack("!H", self.type))
138 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
139 packed.append(struct.pack("!L", self.experimenter))
140 packed.append(self.data)
141 length = sum([len(x) for x in packed])
142 packed[1] = struct.pack("!H", length)
143 return ''.join(packed)
144
Rich Lane7dcdf022013-12-11 14:45:27 -0800145 @staticmethod
146 def unpack(reader):
147 subtype, = reader.peek('!L', 4)
Rich Lane95f7fc92014-01-27 17:08:16 -0800148 subclass = experimenter.subtypes.get(subtype)
149 if subclass:
150 return subclass.unpack(reader)
151
152 obj = experimenter()
153 _type = reader.read("!H")[0]
154 assert(_type == 65535)
155 _len = reader.read("!H")[0]
156 orig_reader = reader
157 reader = orig_reader.slice(_len - (2 + 2))
158 obj.experimenter = reader.read("!L")[0]
159 obj.data = str(reader.read_all())
160 return obj
161
162 def __eq__(self, other):
163 if type(self) != type(other): return False
164 if self.experimenter != other.experimenter: return False
165 if self.data != other.data: return False
166 return True
167
168 def pretty_print(self, q):
169 q.text("experimenter {")
170 with q.group():
171 with q.indent(2):
172 q.breakable()
173 q.text("data = ");
174 q.pp(self.data)
175 q.breakable()
176 q.text('}')
Rich Lane7dcdf022013-12-11 14:45:27 -0800177
178instruction.subtypes[65535] = experimenter
179
180class bsn(experimenter):
181 subtypes = {}
182
Rich Lane95f7fc92014-01-27 17:08:16 -0800183 type = 65535
184 experimenter = 6035143
185
186 def __init__(self, subtype=None):
187 if subtype != None:
188 self.subtype = subtype
189 else:
190 self.subtype = 0
191 return
192
193 def pack(self):
194 packed = []
195 packed.append(struct.pack("!H", self.type))
196 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
197 packed.append(struct.pack("!L", self.experimenter))
198 packed.append(struct.pack("!L", self.subtype))
199 packed.append('\x00' * 4)
200 length = sum([len(x) for x in packed])
201 packed[1] = struct.pack("!H", length)
202 return ''.join(packed)
203
Rich Lane7dcdf022013-12-11 14:45:27 -0800204 @staticmethod
205 def unpack(reader):
206 subtype, = reader.peek('!L', 8)
Rich Lane95f7fc92014-01-27 17:08:16 -0800207 subclass = bsn.subtypes.get(subtype)
208 if subclass:
209 return subclass.unpack(reader)
210
211 obj = bsn()
212 _type = reader.read("!H")[0]
213 assert(_type == 65535)
214 _len = reader.read("!H")[0]
215 orig_reader = reader
216 reader = orig_reader.slice(_len - (2 + 2))
217 _experimenter = reader.read("!L")[0]
218 assert(_experimenter == 6035143)
219 obj.subtype = reader.read("!L")[0]
220 reader.skip(4)
221 return obj
222
223 def __eq__(self, other):
224 if type(self) != type(other): return False
225 if self.subtype != other.subtype: return False
226 return True
227
228 def pretty_print(self, q):
229 q.text("bsn {")
230 with q.group():
231 with q.indent(2):
232 q.breakable()
233 q.breakable()
234 q.text('}')
Rich Lane7dcdf022013-12-11 14:45:27 -0800235
236experimenter.subtypes[6035143] = bsn
237
Rich Lane5454b682014-01-14 17:07:36 -0800238class bsn_arp_offload(bsn):
239 type = 65535
240 experimenter = 6035143
241 subtype = 1
242
243 def __init__(self):
244 return
245
246 def pack(self):
247 packed = []
248 packed.append(struct.pack("!H", self.type))
249 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
250 packed.append(struct.pack("!L", self.experimenter))
251 packed.append(struct.pack("!L", self.subtype))
252 packed.append('\x00' * 4)
253 length = sum([len(x) for x in packed])
254 packed[1] = struct.pack("!H", length)
255 return ''.join(packed)
256
257 @staticmethod
258 def unpack(reader):
259 obj = bsn_arp_offload()
260 _type = reader.read("!H")[0]
261 assert(_type == 65535)
262 _len = reader.read("!H")[0]
263 orig_reader = reader
264 reader = orig_reader.slice(_len - (2 + 2))
265 _experimenter = reader.read("!L")[0]
266 assert(_experimenter == 6035143)
267 _subtype = reader.read("!L")[0]
268 assert(_subtype == 1)
269 reader.skip(4)
270 return obj
271
272 def __eq__(self, other):
273 if type(self) != type(other): return False
274 return True
275
276 def pretty_print(self, q):
277 q.text("bsn_arp_offload {")
278 with q.group():
279 with q.indent(2):
280 q.breakable()
281 q.breakable()
282 q.text('}')
283
284bsn.subtypes[1] = bsn_arp_offload
285
Rich Lane9ec3fca2014-02-26 16:22:56 -0800286class bsn_deny(bsn):
287 type = 65535
288 experimenter = 6035143
289 subtype = 5
290
291 def __init__(self):
292 return
293
294 def pack(self):
295 packed = []
296 packed.append(struct.pack("!H", self.type))
297 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
298 packed.append(struct.pack("!L", self.experimenter))
299 packed.append(struct.pack("!L", self.subtype))
300 packed.append('\x00' * 4)
301 length = sum([len(x) for x in packed])
302 packed[1] = struct.pack("!H", length)
303 return ''.join(packed)
304
305 @staticmethod
306 def unpack(reader):
307 obj = bsn_deny()
308 _type = reader.read("!H")[0]
309 assert(_type == 65535)
310 _len = reader.read("!H")[0]
311 orig_reader = reader
312 reader = orig_reader.slice(_len - (2 + 2))
313 _experimenter = reader.read("!L")[0]
314 assert(_experimenter == 6035143)
315 _subtype = reader.read("!L")[0]
316 assert(_subtype == 5)
317 reader.skip(4)
318 return obj
319
320 def __eq__(self, other):
321 if type(self) != type(other): return False
322 return True
323
324 def pretty_print(self, q):
325 q.text("bsn_deny {")
326 with q.group():
327 with q.indent(2):
328 q.breakable()
329 q.breakable()
330 q.text('}')
331
332bsn.subtypes[5] = bsn_deny
333
Rich Lane1b75abf2014-02-05 11:23:20 -0800334class bsn_dhcp_offload(bsn):
335 type = 65535
336 experimenter = 6035143
337 subtype = 2
338
339 def __init__(self):
340 return
341
342 def pack(self):
343 packed = []
344 packed.append(struct.pack("!H", self.type))
345 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
346 packed.append(struct.pack("!L", self.experimenter))
347 packed.append(struct.pack("!L", self.subtype))
348 packed.append('\x00' * 4)
349 length = sum([len(x) for x in packed])
350 packed[1] = struct.pack("!H", length)
351 return ''.join(packed)
352
353 @staticmethod
354 def unpack(reader):
355 obj = bsn_dhcp_offload()
356 _type = reader.read("!H")[0]
357 assert(_type == 65535)
358 _len = reader.read("!H")[0]
359 orig_reader = reader
360 reader = orig_reader.slice(_len - (2 + 2))
361 _experimenter = reader.read("!L")[0]
362 assert(_experimenter == 6035143)
363 _subtype = reader.read("!L")[0]
364 assert(_subtype == 2)
365 reader.skip(4)
366 return obj
367
368 def __eq__(self, other):
369 if type(self) != type(other): return False
370 return True
371
372 def pretty_print(self, q):
373 q.text("bsn_dhcp_offload {")
374 with q.group():
375 with q.indent(2):
376 q.breakable()
377 q.breakable()
378 q.text('}')
379
380bsn.subtypes[2] = bsn_dhcp_offload
381
Rich Lane9ec3fca2014-02-26 16:22:56 -0800382class bsn_disable_split_horizon_check(bsn):
383 type = 65535
384 experimenter = 6035143
385 subtype = 3
386
387 def __init__(self):
388 return
389
390 def pack(self):
391 packed = []
392 packed.append(struct.pack("!H", self.type))
393 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
394 packed.append(struct.pack("!L", self.experimenter))
395 packed.append(struct.pack("!L", self.subtype))
396 packed.append('\x00' * 4)
397 length = sum([len(x) for x in packed])
398 packed[1] = struct.pack("!H", length)
399 return ''.join(packed)
400
401 @staticmethod
402 def unpack(reader):
403 obj = bsn_disable_split_horizon_check()
404 _type = reader.read("!H")[0]
405 assert(_type == 65535)
406 _len = reader.read("!H")[0]
407 orig_reader = reader
408 reader = orig_reader.slice(_len - (2 + 2))
409 _experimenter = reader.read("!L")[0]
410 assert(_experimenter == 6035143)
411 _subtype = reader.read("!L")[0]
412 assert(_subtype == 3)
413 reader.skip(4)
414 return obj
415
416 def __eq__(self, other):
417 if type(self) != type(other): return False
418 return True
419
420 def pretty_print(self, q):
421 q.text("bsn_disable_split_horizon_check {")
422 with q.group():
423 with q.indent(2):
424 q.breakable()
425 q.breakable()
426 q.text('}')
427
428bsn.subtypes[3] = bsn_disable_split_horizon_check
429
Rich Lane7dcdf022013-12-11 14:45:27 -0800430class bsn_disable_src_mac_check(bsn):
Rich Lane7b0f2012013-11-22 14:15:26 -0800431 type = 65535
432 experimenter = 6035143
433 subtype = 0
434
435 def __init__(self):
436 return
437
438 def pack(self):
439 packed = []
440 packed.append(struct.pack("!H", self.type))
441 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
442 packed.append(struct.pack("!L", self.experimenter))
443 packed.append(struct.pack("!L", self.subtype))
444 packed.append('\x00' * 4)
445 length = sum([len(x) for x in packed])
446 packed[1] = struct.pack("!H", length)
447 return ''.join(packed)
448
449 @staticmethod
Rich Lane7dcdf022013-12-11 14:45:27 -0800450 def unpack(reader):
Rich Lane7b0f2012013-11-22 14:15:26 -0800451 obj = bsn_disable_src_mac_check()
Rich Lane7b0f2012013-11-22 14:15:26 -0800452 _type = reader.read("!H")[0]
453 assert(_type == 65535)
454 _len = reader.read("!H")[0]
Rich Lane7dcdf022013-12-11 14:45:27 -0800455 orig_reader = reader
456 reader = orig_reader.slice(_len - (2 + 2))
Rich Lane7b0f2012013-11-22 14:15:26 -0800457 _experimenter = reader.read("!L")[0]
458 assert(_experimenter == 6035143)
459 _subtype = reader.read("!L")[0]
460 assert(_subtype == 0)
461 reader.skip(4)
462 return obj
463
464 def __eq__(self, other):
465 if type(self) != type(other): return False
466 return True
467
Rich Lane7b0f2012013-11-22 14:15:26 -0800468 def pretty_print(self, q):
469 q.text("bsn_disable_src_mac_check {")
470 with q.group():
471 with q.indent(2):
472 q.breakable()
473 q.breakable()
474 q.text('}')
475
Rich Lane7dcdf022013-12-11 14:45:27 -0800476bsn.subtypes[0] = bsn_disable_src_mac_check
477
Harshmeet Singhc0378a92014-07-22 17:09:36 -0700478class bsn_disable_vlan_counters(bsn):
479 type = 65535
480 experimenter = 6035143
481 subtype = 9
482
483 def __init__(self):
484 return
485
486 def pack(self):
487 packed = []
488 packed.append(struct.pack("!H", self.type))
489 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
490 packed.append(struct.pack("!L", self.experimenter))
491 packed.append(struct.pack("!L", self.subtype))
492 packed.append('\x00' * 4)
493 length = sum([len(x) for x in packed])
494 packed[1] = struct.pack("!H", length)
495 return ''.join(packed)
496
497 @staticmethod
498 def unpack(reader):
499 obj = bsn_disable_vlan_counters()
500 _type = reader.read("!H")[0]
501 assert(_type == 65535)
502 _len = reader.read("!H")[0]
503 orig_reader = reader
504 reader = orig_reader.slice(_len - (2 + 2))
505 _experimenter = reader.read("!L")[0]
506 assert(_experimenter == 6035143)
507 _subtype = reader.read("!L")[0]
508 assert(_subtype == 9)
509 reader.skip(4)
510 return obj
511
512 def __eq__(self, other):
513 if type(self) != type(other): return False
514 return True
515
516 def pretty_print(self, q):
517 q.text("bsn_disable_vlan_counters {")
518 with q.group():
519 with q.indent(2):
520 q.breakable()
521 q.breakable()
522 q.text('}')
523
524bsn.subtypes[9] = bsn_disable_vlan_counters
525
Rich Lanef50b7c32014-03-20 11:38:02 -0700526class bsn_packet_of_death(bsn):
527 type = 65535
528 experimenter = 6035143
529 subtype = 6
530
531 def __init__(self):
532 return
533
534 def pack(self):
535 packed = []
536 packed.append(struct.pack("!H", self.type))
537 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
538 packed.append(struct.pack("!L", self.experimenter))
539 packed.append(struct.pack("!L", self.subtype))
540 packed.append('\x00' * 4)
541 length = sum([len(x) for x in packed])
542 packed[1] = struct.pack("!H", length)
543 return ''.join(packed)
544
545 @staticmethod
546 def unpack(reader):
547 obj = bsn_packet_of_death()
548 _type = reader.read("!H")[0]
549 assert(_type == 65535)
550 _len = reader.read("!H")[0]
551 orig_reader = reader
552 reader = orig_reader.slice(_len - (2 + 2))
553 _experimenter = reader.read("!L")[0]
554 assert(_experimenter == 6035143)
555 _subtype = reader.read("!L")[0]
556 assert(_subtype == 6)
557 reader.skip(4)
558 return obj
559
560 def __eq__(self, other):
561 if type(self) != type(other): return False
562 return True
563
564 def pretty_print(self, q):
565 q.text("bsn_packet_of_death {")
566 with q.group():
567 with q.indent(2):
568 q.breakable()
569 q.breakable()
570 q.text('}')
571
572bsn.subtypes[6] = bsn_packet_of_death
573
Rich Lane9ec3fca2014-02-26 16:22:56 -0800574class bsn_permit(bsn):
575 type = 65535
576 experimenter = 6035143
577 subtype = 4
578
579 def __init__(self):
580 return
581
582 def pack(self):
583 packed = []
584 packed.append(struct.pack("!H", self.type))
585 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
586 packed.append(struct.pack("!L", self.experimenter))
587 packed.append(struct.pack("!L", self.subtype))
588 packed.append('\x00' * 4)
589 length = sum([len(x) for x in packed])
590 packed[1] = struct.pack("!H", length)
591 return ''.join(packed)
592
593 @staticmethod
594 def unpack(reader):
595 obj = bsn_permit()
596 _type = reader.read("!H")[0]
597 assert(_type == 65535)
598 _len = reader.read("!H")[0]
599 orig_reader = reader
600 reader = orig_reader.slice(_len - (2 + 2))
601 _experimenter = reader.read("!L")[0]
602 assert(_experimenter == 6035143)
603 _subtype = reader.read("!L")[0]
604 assert(_subtype == 4)
605 reader.skip(4)
606 return obj
607
608 def __eq__(self, other):
609 if type(self) != type(other): return False
610 return True
611
612 def pretty_print(self, q):
613 q.text("bsn_permit {")
614 with q.group():
615 with q.indent(2):
616 q.breakable()
617 q.breakable()
618 q.text('}')
619
620bsn.subtypes[4] = bsn_permit
621
Rich Lane78d9bcb2014-05-12 13:27:44 -0700622class bsn_prioritize_pdus(bsn):
623 type = 65535
624 experimenter = 6035143
625 subtype = 7
626
627 def __init__(self):
628 return
629
630 def pack(self):
631 packed = []
632 packed.append(struct.pack("!H", self.type))
633 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
634 packed.append(struct.pack("!L", self.experimenter))
635 packed.append(struct.pack("!L", self.subtype))
636 packed.append('\x00' * 4)
637 length = sum([len(x) for x in packed])
638 packed[1] = struct.pack("!H", length)
639 return ''.join(packed)
640
641 @staticmethod
642 def unpack(reader):
643 obj = bsn_prioritize_pdus()
644 _type = reader.read("!H")[0]
645 assert(_type == 65535)
646 _len = reader.read("!H")[0]
647 orig_reader = reader
648 reader = orig_reader.slice(_len - (2 + 2))
649 _experimenter = reader.read("!L")[0]
650 assert(_experimenter == 6035143)
651 _subtype = reader.read("!L")[0]
652 assert(_subtype == 7)
653 reader.skip(4)
654 return obj
655
656 def __eq__(self, other):
657 if type(self) != type(other): return False
658 return True
659
660 def pretty_print(self, q):
661 q.text("bsn_prioritize_pdus {")
662 with q.group():
663 with q.indent(2):
664 q.breakable()
665 q.breakable()
666 q.text('}')
667
668bsn.subtypes[7] = bsn_prioritize_pdus
669
Rich Lane5587ab12014-06-30 11:19:09 -0700670class bsn_require_vlan_xlate(bsn):
671 type = 65535
672 experimenter = 6035143
673 subtype = 8
674
675 def __init__(self):
676 return
677
678 def pack(self):
679 packed = []
680 packed.append(struct.pack("!H", self.type))
681 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
682 packed.append(struct.pack("!L", self.experimenter))
683 packed.append(struct.pack("!L", self.subtype))
684 packed.append('\x00' * 4)
685 length = sum([len(x) for x in packed])
686 packed[1] = struct.pack("!H", length)
687 return ''.join(packed)
688
689 @staticmethod
690 def unpack(reader):
691 obj = bsn_require_vlan_xlate()
692 _type = reader.read("!H")[0]
693 assert(_type == 65535)
694 _len = reader.read("!H")[0]
695 orig_reader = reader
696 reader = orig_reader.slice(_len - (2 + 2))
697 _experimenter = reader.read("!L")[0]
698 assert(_experimenter == 6035143)
699 _subtype = reader.read("!L")[0]
700 assert(_subtype == 8)
701 reader.skip(4)
702 return obj
703
704 def __eq__(self, other):
705 if type(self) != type(other): return False
706 return True
707
708 def pretty_print(self, q):
709 q.text("bsn_require_vlan_xlate {")
710 with q.group():
711 with q.indent(2):
712 q.breakable()
713 q.breakable()
714 q.text('}')
715
716bsn.subtypes[8] = bsn_require_vlan_xlate
717
Rich Lanef9530c42014-09-15 09:59:43 -0700718class bsn_span_destination(bsn):
719 type = 65535
720 experimenter = 6035143
721 subtype = 10
722
723 def __init__(self):
724 return
725
726 def pack(self):
727 packed = []
728 packed.append(struct.pack("!H", self.type))
729 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
730 packed.append(struct.pack("!L", self.experimenter))
731 packed.append(struct.pack("!L", self.subtype))
732 packed.append('\x00' * 4)
733 length = sum([len(x) for x in packed])
734 packed[1] = struct.pack("!H", length)
735 return ''.join(packed)
736
737 @staticmethod
738 def unpack(reader):
739 obj = bsn_span_destination()
740 _type = reader.read("!H")[0]
741 assert(_type == 65535)
742 _len = reader.read("!H")[0]
743 orig_reader = reader
744 reader = orig_reader.slice(_len - (2 + 2))
745 _experimenter = reader.read("!L")[0]
746 assert(_experimenter == 6035143)
747 _subtype = reader.read("!L")[0]
748 assert(_subtype == 10)
749 reader.skip(4)
750 return obj
751
752 def __eq__(self, other):
753 if type(self) != type(other): return False
754 return True
755
756 def pretty_print(self, q):
757 q.text("bsn_span_destination {")
758 with q.group():
759 with q.indent(2):
760 q.breakable()
761 q.breakable()
762 q.text('}')
763
764bsn.subtypes[10] = bsn_span_destination
765
Rich Lane7dcdf022013-12-11 14:45:27 -0800766class clear_actions(instruction):
Dan Talaycof6202252013-07-02 01:00:29 -0700767 type = 5
Rich Laneca3da272013-05-05 09:07:33 -0700768
769 def __init__(self):
770 return
771
772 def pack(self):
773 packed = []
774 packed.append(struct.pack("!H", self.type))
775 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
776 packed.append('\x00' * 4)
777 length = sum([len(x) for x in packed])
778 packed[1] = struct.pack("!H", length)
779 return ''.join(packed)
780
781 @staticmethod
Rich Lane7dcdf022013-12-11 14:45:27 -0800782 def unpack(reader):
Rich Laneca3da272013-05-05 09:07:33 -0700783 obj = clear_actions()
Dan Talaycof6202252013-07-02 01:00:29 -0700784 _type = reader.read("!H")[0]
785 assert(_type == 5)
786 _len = reader.read("!H")[0]
Rich Lane7dcdf022013-12-11 14:45:27 -0800787 orig_reader = reader
788 reader = orig_reader.slice(_len - (2 + 2))
Rich Laneca3da272013-05-05 09:07:33 -0700789 reader.skip(4)
790 return obj
791
792 def __eq__(self, other):
793 if type(self) != type(other): return False
794 return True
795
Rich Laneca3da272013-05-05 09:07:33 -0700796 def pretty_print(self, q):
797 q.text("clear_actions {")
798 with q.group():
799 with q.indent(2):
800 q.breakable()
801 q.breakable()
802 q.text('}')
803
Rich Lane7dcdf022013-12-11 14:45:27 -0800804instruction.subtypes[5] = clear_actions
805
806class goto_table(instruction):
Dan Talaycof6202252013-07-02 01:00:29 -0700807 type = 1
Rich Laneca3da272013-05-05 09:07:33 -0700808
809 def __init__(self, table_id=None):
810 if table_id != None:
811 self.table_id = table_id
812 else:
813 self.table_id = 0
814 return
815
816 def pack(self):
817 packed = []
818 packed.append(struct.pack("!H", self.type))
819 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
820 packed.append(struct.pack("!B", self.table_id))
821 packed.append('\x00' * 3)
822 length = sum([len(x) for x in packed])
823 packed[1] = struct.pack("!H", length)
824 return ''.join(packed)
825
826 @staticmethod
Rich Lane7dcdf022013-12-11 14:45:27 -0800827 def unpack(reader):
Rich Laneca3da272013-05-05 09:07:33 -0700828 obj = goto_table()
Dan Talaycof6202252013-07-02 01:00:29 -0700829 _type = reader.read("!H")[0]
830 assert(_type == 1)
831 _len = reader.read("!H")[0]
Rich Lane7dcdf022013-12-11 14:45:27 -0800832 orig_reader = reader
833 reader = orig_reader.slice(_len - (2 + 2))
Dan Talaycof6202252013-07-02 01:00:29 -0700834 obj.table_id = reader.read("!B")[0]
Rich Laneca3da272013-05-05 09:07:33 -0700835 reader.skip(3)
836 return obj
837
838 def __eq__(self, other):
839 if type(self) != type(other): return False
840 if self.table_id != other.table_id: return False
841 return True
842
Rich Laneca3da272013-05-05 09:07:33 -0700843 def pretty_print(self, q):
844 q.text("goto_table {")
845 with q.group():
846 with q.indent(2):
847 q.breakable()
848 q.text("table_id = ");
849 q.text("%#x" % self.table_id)
850 q.breakable()
851 q.text('}')
852
Rich Lane7dcdf022013-12-11 14:45:27 -0800853instruction.subtypes[1] = goto_table
854
855class meter(instruction):
Dan Talaycof6202252013-07-02 01:00:29 -0700856 type = 6
Rich Laneca3da272013-05-05 09:07:33 -0700857
858 def __init__(self, meter_id=None):
859 if meter_id != None:
860 self.meter_id = meter_id
861 else:
862 self.meter_id = 0
863 return
864
865 def pack(self):
866 packed = []
867 packed.append(struct.pack("!H", self.type))
868 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
869 packed.append(struct.pack("!L", self.meter_id))
870 length = sum([len(x) for x in packed])
871 packed[1] = struct.pack("!H", length)
872 return ''.join(packed)
873
874 @staticmethod
Rich Lane7dcdf022013-12-11 14:45:27 -0800875 def unpack(reader):
Rich Laneca3da272013-05-05 09:07:33 -0700876 obj = meter()
Dan Talaycof6202252013-07-02 01:00:29 -0700877 _type = reader.read("!H")[0]
878 assert(_type == 6)
879 _len = reader.read("!H")[0]
Rich Lane7dcdf022013-12-11 14:45:27 -0800880 orig_reader = reader
881 reader = orig_reader.slice(_len - (2 + 2))
Dan Talaycof6202252013-07-02 01:00:29 -0700882 obj.meter_id = reader.read("!L")[0]
Rich Laneca3da272013-05-05 09:07:33 -0700883 return obj
884
885 def __eq__(self, other):
886 if type(self) != type(other): return False
887 if self.meter_id != other.meter_id: return False
888 return True
889
Rich Laneca3da272013-05-05 09:07:33 -0700890 def pretty_print(self, q):
891 q.text("meter {")
892 with q.group():
893 with q.indent(2):
894 q.breakable()
895 q.text("meter_id = ");
896 q.text("%#x" % self.meter_id)
897 q.breakable()
898 q.text('}')
899
Rich Lane7dcdf022013-12-11 14:45:27 -0800900instruction.subtypes[6] = meter
901
902class write_actions(instruction):
Dan Talaycof6202252013-07-02 01:00:29 -0700903 type = 3
Rich Laneca3da272013-05-05 09:07:33 -0700904
905 def __init__(self, actions=None):
906 if actions != None:
907 self.actions = actions
908 else:
909 self.actions = []
910 return
911
912 def pack(self):
913 packed = []
914 packed.append(struct.pack("!H", self.type))
915 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
916 packed.append('\x00' * 4)
Rich Lane7dcdf022013-12-11 14:45:27 -0800917 packed.append(loxi.generic_util.pack_list(self.actions))
Rich Laneca3da272013-05-05 09:07:33 -0700918 length = sum([len(x) for x in packed])
919 packed[1] = struct.pack("!H", length)
920 return ''.join(packed)
921
922 @staticmethod
Rich Lane7dcdf022013-12-11 14:45:27 -0800923 def unpack(reader):
Rich Laneca3da272013-05-05 09:07:33 -0700924 obj = write_actions()
Dan Talaycof6202252013-07-02 01:00:29 -0700925 _type = reader.read("!H")[0]
926 assert(_type == 3)
927 _len = reader.read("!H")[0]
Rich Lane7dcdf022013-12-11 14:45:27 -0800928 orig_reader = reader
929 reader = orig_reader.slice(_len - (2 + 2))
Rich Laneca3da272013-05-05 09:07:33 -0700930 reader.skip(4)
Rich Lane7dcdf022013-12-11 14:45:27 -0800931 obj.actions = loxi.generic_util.unpack_list(reader, action.action.unpack)
Rich Laneca3da272013-05-05 09:07:33 -0700932 return obj
933
934 def __eq__(self, other):
935 if type(self) != type(other): return False
936 if self.actions != other.actions: return False
937 return True
938
Rich Laneca3da272013-05-05 09:07:33 -0700939 def pretty_print(self, q):
940 q.text("write_actions {")
941 with q.group():
942 with q.indent(2):
943 q.breakable()
944 q.text("actions = ");
945 q.pp(self.actions)
946 q.breakable()
947 q.text('}')
948
Rich Lane7dcdf022013-12-11 14:45:27 -0800949instruction.subtypes[3] = write_actions
950
951class write_metadata(instruction):
Dan Talaycof6202252013-07-02 01:00:29 -0700952 type = 2
Rich Laneca3da272013-05-05 09:07:33 -0700953
954 def __init__(self, metadata=None, metadata_mask=None):
955 if metadata != None:
956 self.metadata = metadata
957 else:
958 self.metadata = 0
959 if metadata_mask != None:
960 self.metadata_mask = metadata_mask
961 else:
962 self.metadata_mask = 0
963 return
964
965 def pack(self):
966 packed = []
967 packed.append(struct.pack("!H", self.type))
968 packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
969 packed.append('\x00' * 4)
970 packed.append(struct.pack("!Q", self.metadata))
971 packed.append(struct.pack("!Q", self.metadata_mask))
972 length = sum([len(x) for x in packed])
973 packed[1] = struct.pack("!H", length)
974 return ''.join(packed)
975
976 @staticmethod
Rich Lane7dcdf022013-12-11 14:45:27 -0800977 def unpack(reader):
Rich Laneca3da272013-05-05 09:07:33 -0700978 obj = write_metadata()
Dan Talaycof6202252013-07-02 01:00:29 -0700979 _type = reader.read("!H")[0]
980 assert(_type == 2)
981 _len = reader.read("!H")[0]
Rich Lane7dcdf022013-12-11 14:45:27 -0800982 orig_reader = reader
983 reader = orig_reader.slice(_len - (2 + 2))
Rich Laneca3da272013-05-05 09:07:33 -0700984 reader.skip(4)
Dan Talaycof6202252013-07-02 01:00:29 -0700985 obj.metadata = reader.read("!Q")[0]
986 obj.metadata_mask = reader.read("!Q")[0]
Rich Laneca3da272013-05-05 09:07:33 -0700987 return obj
988
989 def __eq__(self, other):
990 if type(self) != type(other): return False
991 if self.metadata != other.metadata: return False
992 if self.metadata_mask != other.metadata_mask: return False
993 return True
994
Rich Laneca3da272013-05-05 09:07:33 -0700995 def pretty_print(self, q):
996 q.text("write_metadata {")
997 with q.group():
998 with q.indent(2):
999 q.breakable()
1000 q.text("metadata = ");
1001 q.text("%#x" % self.metadata)
1002 q.text(","); q.breakable()
1003 q.text("metadata_mask = ");
1004 q.text("%#x" % self.metadata_mask)
1005 q.breakable()
1006 q.text('}')
1007
Rich Lane7dcdf022013-12-11 14:45:27 -08001008instruction.subtypes[2] = write_metadata
Rich Laneca3da272013-05-05 09:07:33 -07001009
Rich Lane7b0f2012013-11-22 14:15:26 -08001010