blob: 638f965cb16da0d9be28483b222a3cee86ffc990 [file] [log] [blame]
Matt Jeanneretf1e9c5d2019-02-08 07:41:29 -05001# Copyright 2017-present Open Networking Foundation
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 implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14##--------------------------------------------------------------------------#
15# Copyright (C) 2015 - 2016 by Tibit Communications, Inc. #
16# All rights reserved. #
17# #
18# _______ ____ _ ______ #
19# /_ __(_) __ )(_)_ __/ #
20# / / / / __ / / / / #
21# / / / / /_/ / / / / #
22# /_/ /_/_____/_/ /_/ #
23# #
24#--------------------------------------------------------------------------#
25
26from scapy.packet import Packet
27from scapy.fields import ByteEnumField, XShortField, XByteField, MACField, \
28 ByteField, BitEnumField, BitField, ShortField
29from scapy.fields import XLongField, StrField, StrFixedLenField, XIntField, \
30 FieldLenField, StrLenField, IntField, ShortEnumField
31
32# This library strives to be an implementation of the following standard:
33
34# DPoE-SP-OAMv1.0-IO8-140807 - DPoE OAM Extensions Specifications
35
36# This library may be used with PON devices for
37# configuration and provisioning.
38
39## Note on Deviations:
40
41## Tibit endeavors to use DPoE OAM for not only communicating with DpOE ONUs,
42## but also to communicate with the Tibit OLT Microplug. In places where this
43## document deviates from the DPoE standard for ONUs, Tibit has added a comment
44## __TIBIT_OLT_OAM__
45
46TIBIT_VERSION_NUMBER = '1.1.4'
47
48TLV_dictionary = {
49 0x00: "End EOAMPDU",
50 }
51
52SlowProtocolsSubtypeEnum = {0x03: "OAM"}
53
54### OAM Branch Enumerations
55OamBranchEnum = {
56 0x00: "End",
57 0x06: "Clause 30 Object",
58 0x07: "Clause 30 Attr",
59 0x09: "Clause 30 Action",
60 0xB7: "Tibit Attr",
61 0xB9: "Tibit Action",
62 0xC7: "DPoG Attr",
63 0xC9: "DPoG Action",
64 0xD6: "DPoE Object",
65 0xD7: "DPoE Attr",
66 0xD9: "DPoE Action",
67 }
68
69OamBranches = {v: k for k, v in OamBranchEnum.iteritems()}
70
71
72### Multicast Action Flags
73MulticastActionFlagsEnum = {
74 0x02: "Deregister",
75 0x03: "Register"
76 }
77
78### Table 17 - DPoE Opcodes
79DPoEOpcodeEnum = {
80 0x01: "Get Request",
81 0x02: "Get Response",
82 0x03: "Set Request",
83 0x04: "Set Response",
84 0x05: "Dynamic IP Multicast Control",
85 0x06: "Multicast Register",
86 0x07: "Multicast Register Response",
87 0x09: "File Transfer",
88 }
89
90DPoEOpcodes = {v: k for k, v in DPoEOpcodeEnum.iteritems()}
91
92
93### Table 20 - DPoE Variable Response Codes
94DPoEVariableResponseEnum = {
95 0x80: "No Error",
96 0x81: "Too Long",
97 0x86: "Bad Parameters",
98 0x87: "No Resources",
99 0x88: "System Busy",
100 0xa0: "Undetermined Error",
101 0xa1: "Unsupported",
102 0xa2: "May Be Corrupted",
103 0xa3: "Hardware Failure",
104 0xa4: "Overflow",
105 }
106
107DPoEVariableResponseCodes = {v: k for k, v in DPoEVariableResponseEnum.iteritems()}
108
109
110### Table 14 - DPoE Event Codes
111DPoEEventCodeEnum = {
112 0x11: "Loss of Signal",
113 0x12: "Key Exchange Failure",
114 0x21: "Port Disabled",
115 0x41: "Power Failure",
116 0x81: "Statistics Alarm",
117 0x82: "D-ONU Busy",
118 0x83: "MAC Table Overflow",
119 0x84: "PON Interface Switch",
120 }
121
122DPoEEventCodes = {v: k for k, v in DPoEEventCodeEnum.iteritems()}
123
124
125class SlowProtocolsSubtype(Packet):
126 """ Slow Protocols subtype"""
127 name = "Slow Protocols subtype"
128 fields_desc = [ByteEnumField("subtype", 0x03, SlowProtocolsSubtypeEnum)]
129
130class FlagsBytes(Packet):
131 """ Two Bytes Reserved for 802.3 Flags"""
132 name = "FlagsBytes"
133 fields_desc = [XShortField("flags", 0x0050)]
134
135class OAMPDU(Packet):
136 """ OAMPDU code: Organization Specific"""
137 name = "OAMPDU code: Organization Specific"
138 fields_desc = [XByteField("opcode", 0xfe)]
139
140class CablelabsOUI(Packet):
141 """ Organizationally Unique Identifier (Cablelabs)"""
142 name = "Organizationally Unique Identifier (Cablelabs)"
143 fields_desc = [XByteField("oui0", 0x00),
144 XByteField("oui1", 0x10),
145 XByteField("oui2", 0x00)]
146
147class BroadcomOUI(Packet):
148 """ Organizationally Unique Identifier (Broadcom)"""
149 name = "Organizationally Unique Identifier (Broadcom)"
150 fields_desc = [XByteField("oui0", 0x00),
151 XByteField("oui1", 0x0D),
152 XByteField("oui2", 0xB6)]
153
154class TibitOUI(Packet):
155 """ Organizationally Unique Identifier (Tibit)"""
156 name = "Organizationally Unique Identifier (Tibit)"
157 fields_desc = [XByteField("oui0", 0x2A),
158 XByteField("oui1", 0xEA),
159 XByteField("oui2", 0x15)]
160
161class ItuOUI(Packet):
162 """ Organizationally Unique Identifier (Tibit)"""
163 name = "Organizationally Unique Identifier (ITU)"
164 fields_desc = [XByteField("oui0", 0x00),
165 XByteField("oui1", 0x19),
166 XByteField("oui2", 0xA7)]
167
168class DPoEOpcode_GetRequest(Packet):
169 """ DPoE Opcode"""
170 name = "DPoE Opcode"
171 fields_desc = [ByteEnumField("opcode", 0x01, DPoEOpcodeEnum)]
172
173class DPoEOpcode_SetRequest(Packet):
174 """ DPoE Opcode"""
175 name = "DPoE Opcode"
176 fields_desc = [ByteEnumField("opcode", 0x03, DPoEOpcodeEnum)]
177
178class DPoEOpcode_MulticastRegister(Packet):
179 """ DPoE Opcode"""
180 name = "DPoE Opcode"
181 fields_desc = [ByteEnumField("opcode", 0x06, DPoEOpcodeEnum)]
182
183class DPoEOpcode_MulticastRegisterResponse(Packet):
184 """ DPoE Opcode"""
185 name = "DPoE Opcode"
186 fields_desc = [ByteEnumField("opcode", 0x07, DPoEOpcodeEnum)]
187
188class DPoEOpcode_FileTransfer(Packet):
189 """ DPoE Opcode"""
190 name = "DPoE Opcode"
191 fields_desc = [ByteEnumField("opcode", 0x09, DPoEOpcodeEnum)]
192
193class MulticastRegisterSetSumitomo01(Packet):
194 """ Multicast Register: Multicast Register Set Sumitomo 01 """
195 name = "Multicast Register: Multicast Register Set Sumitomo 01"
196 fields_desc = [ByteEnumField("ActionFlags", 0x02, MulticastActionFlagsEnum),
197 XShortField("MulticastLink", 0xfffe),
198 XShortField("UnicastLink", 0x43dc),
199 ]
200
201class MulticastRegisterSetSumitomo02(Packet):
202 """ Multicast Register: Multicast Register Set Sumitomo 02 """
203 name = "Multicast Register: Multicast Register Set Sumitomo 02"
204 fields_desc = [ByteEnumField("ActionFlags", 0x03, MulticastActionFlagsEnum),
205 XShortField("MulticastLink", 0x43dd),
206 XShortField("UnicastLink", 0x43dc),
207 ]
208
209class MulticastRegisterSet(Packet):
210 """ Multicast Register: Multicast Register Set """
211 name = "Multicast Register: Multicast Register Set"
212 fields_desc = [ByteEnumField("ActionFlags", 0x03, MulticastActionFlagsEnum),
213 XShortField("MulticastLink", 0x0000),
214 XShortField("UnicastLink", 0x0000),
215 ]
216
217####
218#### OAM Context OBJECTS
219####
220
221### Object Context Enumerations
222ObjectContextEnum = {
223 0x0000: "Device",
224 0x0001: "PON Port",
225 0x0002: "Unicast Logical Link",
226 0x0003: "Enet Port",
227 0x0004: "Queue",
228 0x0005: "SOAM MEP",
229 0x0006: "Multicast Link",
230 0x0007: "T-CONT",
231# __TIBIT_OLT_OAM__: Defined by Tibit
232 0x0009: "ONU",
233 0x000A: "OLT Unicast Link",
234 0x000B: "GPIO",
235 }
236
237ObjectContexts = {v: k for k, v in ObjectContextEnum.iteritems()}
238
239
240class DONUObject(Packet):
241 """ Object Context: D-ONU Object """
242 name = "Object Context: D-ONU Object"
243 fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
244 ShortEnumField("leaf", 0x0000, ObjectContextEnum),
245 XByteField("length", 1),
246 XByteField("number", 0)
247 ]
248
249# __TIBIT_OLT_OAM__: Defined by Tibit
250class DOLTObject(Packet):
251 """ Object Context: D-OLT Object """
252 name = "Object Context: D-OLT Object"
253 fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
254 ShortEnumField("leaf", 0x0000, ObjectContextEnum),
255 XByteField("length", 1),
256 XByteField("number", 0)
257 ]
258
259class NetworkPortObject(Packet):
260 """ Object Context: Network Port Object """
261 name = "Object Context: Network Port Object"
262 fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
263 ShortEnumField("leaf", 0x0001, ObjectContextEnum),
264 XByteField("length", 1),
265 XByteField("number", 0)
266 ]
267
268# __TIBIT_OLT_OAM__: Defined by Tibit
269class PonPortObject(Packet):
270 """ Object Context: PON Port Object """
271 name = "Object Context: PON Port Object"
272 fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
273 ShortEnumField("leaf", 0x0001, ObjectContextEnum),
274 XByteField("length", 1),
275 XByteField("number", 0)
276 ]
277
278class UnicastLogicalLink(Packet):
279 """ Object Context: Unicast Logical Link """
280 name = "Object Context: Unicast Logical Link"
281 fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
282 ShortEnumField("leaf", 0x0002, ObjectContextEnum),
283 XByteField("length", 1),
284 XByteField("number", 0)
285 ]
286
287# __TIBIT_OLT_OAM__: Defined by Tibit
288class OLTUnicastLogicalLink(Packet):
289 """ Object Context: OLT Unicast Logical Link """
290 name = "Object Context: OLT Unicast Logical Link"
291 fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
292 ShortEnumField("leaf", 0x000A, ObjectContextEnum),
293 XByteField("length", 10),
294 XByteField("pon", 0),
295 StrField("unicastvssn", "TBIT"),
296 XIntField("unicastlink", 0x00000000),
297 XByteField("pad", 0),
298 ]
299
300class OLTEPONUnicastLogicalLink(Packet):
301 """ Object Context: OLT Unicast Logical Link """
302 name = "Object Context: OLT Unicast Logical Link"
303 fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
304 ShortEnumField("leaf", 0x000A, ObjectContextEnum),
305 XByteField("length", 10),
306 XByteField("pon", 0),
307 XIntField("unicastvssn", 0x00000000),
308 XIntField("unicastlink", 0x00000000),
309 XByteField("pad", 0),
310 ]
311
312
313# __TIBIT_OLT_OAM__: Defined by Tibit
314class NetworkToNetworkPortObject(Packet):
315 """ Object Context: Network-to-Network (NNI) Port Object """
316 name = "Object Context: Network-to-Network (NNI) Port Object"
317 fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
318 ShortEnumField("leaf", 0x0003, ObjectContextEnum),
319 XByteField("length", 1),
320 XByteField("number", 0)
321 ]
322
323class UserPortObject(Packet):
324 """ Object Context: User Port Object """
325 name = "Object Context: User Port Object"
326 fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
327 ShortEnumField("leaf", 0x0003, ObjectContextEnum),
328 XByteField("length", 1),
329 XByteField("number", 0)
330 ]
331
332class QueueObject(Packet):
333 """ Object Context: Queue Object """
334 name = "Object Context: Queue Object"
335 fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
336 ShortEnumField("leaf", 0x0004, ObjectContextEnum),
337 XByteField("length", 2),
338 XByteField("instance", 0),
339 XByteField("number", 0)
340 ]
341
342class ONUObject(Packet):
343 """ Object Context: ONU Object """
344 name = "Object Context: ONU Object"
345 fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
346 ShortEnumField("leaf", 0x0009, ObjectContextEnum),
347 XByteField("length", 6),
348 MACField("mac", "54:42:e2:22:11:00")
349 ]
350
351class GpioObject(Packet):
352 """ Object Context: GPIO Object """
353 name = "Object Context: GPIO Object"
354 fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
355 ShortEnumField("leaf", 0x000B, ObjectContextEnum),
356 XByteField("length", 1),
357 XByteField("condition", 1)
358 ]
359
360####
361#### 0x09 - BRANCH ATTRIBUTES
362####
363class PhyAdminControl(Packet):
364 """ Variable Descriptor: Phy Admin Control """
365 name = "Phy Admin Control"
366 fields_desc = [ByteEnumField("branch", 0x09, OamBranchEnum),
367 XShortField("leaf", 0x0005),
368 ]
369
370class PhyAdminControlEnableSet(Packet):
371 """ Variable Descriptor: Phy Admin Control Enable """
372 name = "Phy Admin Control Enable"
373 fields_desc = [ByteEnumField("branch", 0x09, OamBranchEnum),
374 XShortField("leaf", 0x0005),
375 XByteField("length", 1),
376 XByteField("value", 2)
377 ]
378
379class PhyAdminControlDisableSet(Packet):
380 """ Variable Descriptor: Phy Admin Control Disable """
381 name = "Phy Admin Control Disable"
382 fields_desc = [ByteEnumField("branch", 0x09, OamBranchEnum),
383 XShortField("leaf", 0x0005),
384 XByteField("length", 1),
385 XByteField("value", 1)
386 ]
387
388####
389#### 0xd7 - BRANCH ATTRIBUTES
390####
391class DeviceId(Packet):
392 """ Variable Descriptor: Device ID """
393 name = "Device ID"
394 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
395 XShortField("leaf", 0x0002)]
396
397class FirmwareInfo(Packet):
398 """ Variable Descriptor: Firmware Info """
399 name = "Firmware Info"
400 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
401 XShortField("leaf", 0x0003)]
402
403class ChipsetInfo(Packet):
404 """ Variable Descriptor: Chipset Info """
405 name = "Chipset Info"
406 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
407 XShortField("leaf", 0x0004)]
408
409class DateOfManufacture(Packet):
410 """ Variable Descriptor: Date of Manufacture """
411 name = "Date of Manufacture"
412 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
413 XShortField("leaf", 0x0005)]
414
415class ManufacturerInfo(Packet):
416 """ Variable Descriptor: ManufacturerInfo """
417 name = "ManufacturerInfo"
418 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
419 XShortField("leaf", 0x0006)]
420
421class MaxLogicalLinks(Packet):
422 """ Variable Descriptor: Max Logical Links """
423 name = "Max Logical Links"
424 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
425 XShortField("leaf", 0x0007)]
426
427class NumberOfNetworkPorts(Packet):
428 """ Variable Descriptor: Number of Network Ports """
429 name = "Number of Network Ports"
430 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
431 XShortField("leaf", 0x0008)]
432
433class NumberOfS1Interfaces(Packet):
434 """ Variable Descriptor: Number of S1 Interfaces """
435 name = "Number of S1 Interfaces"
436 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
437 XShortField("leaf", 0x0009)]
438
439class DONUPacketBuffer(Packet):
440 """ Variable Descriptor: D-ONU Packet Buffer """
441 name = "D-ONU Packet Buffer"
442 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
443 XShortField("leaf", 0x000a)]
444
445class ReportThresholds(Packet):
446 """ Variable Descriptor: Report Thresholds """
447 name = "Report Thresholds"
448 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
449 XShortField("leaf", 0x000b),
450 ]
451
452DFLT_NUM_QUEUE_SETS = 4
453DFLT_NUM_REPORT_VALS = 1
454
455class ReportThresholdsSet(Packet):
456 """ Variable Descriptor: Report Thresholds Set """
457 name = "Report Thresholds Set"
458 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
459 XShortField("leaf", 0x000b),
460 XByteField("length", 0x0a),
461 XByteField("num_queue_sets", 4),
462 XByteField("values", 1),
463 XShortField("threshold0", 0x800),
464 XShortField("threshold1", 0x1000),
465 XShortField("threshold2", 0x1800),
466 XShortField("threshold3", 0x2000),
467 ]
468
469class UnicastLogicalLinkReportThresholdsSet(Packet):
470 """ Variable Descriptor: Report Thresholds Unicast Logical Link Set"""
471 name = "Report Thresholds Unicast Logical Link Set"
472 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
473 XShortField("leaf", 0x000b),
474 XByteField("length", 0x0a),
475 XByteField("num_queue_sets", 4),
476 XByteField("values", 1),
477 XShortField("threshold0", 0x2800),
478 XShortField("threshold1", 0x5000),
479 XShortField("threshold2", 0x7800),
480 XShortField("threshold3", 0xa000),
481 ]
482
483class LogicalLinkForwarding(Packet):
484 """ Variable Descriptor: Logical Link Forwarding """
485 name = "Logical Link Forwarding"
486 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
487 XShortField("leaf", 0x000c),
488 ]
489
490class OamFrameRate(Packet):
491 """ Variable Descriptor: OAM Frame Rate """
492 name = "OAM Frame Rate"
493 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
494 XShortField("leaf", 0x000d),
495 ]
496
497class OamFrameRateSet(Packet):
498 """ Variable Descriptor: OAM Frame Rate """
499 name = "OAM Frame Rate"
500 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
501 XShortField("leaf", 0x000d),
502 XByteField("length", 2),
503 XByteField("max", 12),
504 XByteField("min", 10),
505 ]
506
507class OnuManufacturerOrganizationName(Packet):
508 """ Variable Descriptor: ONU Manufacturer Organization Name """
509 name = "ONU Manufacturer Organization Name"
510 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
511 XShortField("leaf", 0x000e),
512 ]
513
514class FirmwareMfgTimeVaryingControls(Packet):
515 """ Variable Descriptor: Firmware Mfg Time Varying Controls """
516 name = "Firmware Mfg Time Varying Controls"
517 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
518 XShortField("leaf", 0x000f),
519 ]
520
521class VendorName(Packet):
522 """ Variable Descriptor: Vendor Name """
523 name = "Vendor Name"
524 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
525 XShortField("leaf", 0x0011),
526 ]
527
528class ModelNumber(Packet):
529 """ Variable Descriptor: Model Number """
530 name = "Model Number"
531 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
532 XShortField("leaf", 0x0012),
533 ]
534
535class HardwareVersion(Packet):
536 """ Variable Descriptor: Hardware Version """
537 name = "Hardware Version"
538 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
539 XShortField("leaf", 0x0013),
540 ]
541
542class EponMode(Packet):
543 """ Variable Descriptor: EPON Mode """
544 name = "EPON Mode"
545 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
546 XShortField("leaf", 0x0014),
547 ]
548
549class DynamicAddressAgeLimit(Packet):
550 """ Variable Descriptor: Dynamic Address Age Limit """
551 name = "Dynamic Address Age Limit"
552 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
553 XShortField("leaf", 0x0102),
554 ]
555
556class DynamicAddressAgeLimitSet(Packet):
557 """ Variable Descriptor: Dynamic Address Age Limit Set """
558 name = "Dynamic Address Age Limit Set"
559 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
560 XShortField("leaf", 0x0102),
561 XByteField("length", 2),
562 XShortField("value", 0x0000),
563 ]
564
565class DynamicMacTable(Packet):
566 """ Variable Descriptor: Dynamic MAC Table """
567 name = "Dynamic MAC Table"
568 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
569 XShortField("leaf", 0x0103),
570 ]
571
572class StaticMacTable(Packet):
573 """ Variable Descriptor: Static MAC Table """
574 name = "Static MAC Table"
575 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
576 XShortField("leaf", 0x0104),
577 ]
578
579class SourceAddressAdmissionControl(Packet):
580 """ Variable Descriptor: Source Address Admission Control """
581 name = "Source Address Admission Control"
582 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
583 XShortField("leaf", 0x0106),
584 ]
585
586class SourceAddressAdmissionControlSet(Packet):
587 """ Variable Descriptor: Source Address Admission Control Set """
588 name = "Source Address Admission Control Set"
589 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
590 XShortField("leaf", 0x0106),
591 XByteField("length", 1),
592 XByteField("value", 1),
593 ]
594
595class MacLearningMinGuarantee(Packet):
596 """ Variable Descriptor: MAC Learning MIN Guarantee """
597 name = "MAC Learning MIN Guarantee"
598 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
599 XShortField("leaf", 0x0107),
600 ]
601
602class MacLearningMinGuaranteeSet(Packet):
603 """ Variable Descriptor: MAC Learning MIN Guarantee Set """
604 name = "MAC Learning MIN Guarantee Set"
605 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
606 XShortField("leaf", 0x0107),
607 XByteField("length", 2),
608 XShortField("value", 0),
609 ]
610
611class MacLearningMaxAllowed(Packet):
612 """ Variable Descriptor: MAC Learning MAX Allowed """
613 name = "MAC Learning MAX Allowed"
614 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
615 XShortField("leaf", 0x0108),
616 ]
617
618class MacLearningMaxAllowedSet(Packet):
619 """ Variable Descriptor: MAC Learning MAX Allowed Set """
620 name = "MAC Learning MAX Allowed Set"
621 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
622 XShortField("leaf", 0x0108),
623 XByteField("length", 2),
624 XShortField("value", 0x0010),
625 ]
626
627class MacLearningAggregateLimit(Packet):
628 """ Variable Descriptor: MAC Learning Aggregate Limit """
629 name = "MAC Learning Aggregate Limit"
630 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
631 XShortField("leaf", 0x0109),
632 ]
633
634class MacLearningAggregateLimitSet(Packet):
635 """ Variable Descriptor: MAC Learning Aggregate Limit Set """
636 name = "MAC Learning Aggregate Limit Set"
637 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
638 XShortField("leaf", 0x0109),
639 XByteField("length", 2),
640 XShortField("value", 0x0040),
641 ]
642
643class FloodUnknown(Packet):
644 """ Variable Descriptor: Flood Unknown """
645 name = "Flood Unknown"
646 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
647 XShortField("leaf", 0x010b),
648 ]
649
650class FloodUnknownSet(Packet):
651 """ Variable Descriptor: Flood Unknown Set """
652 name = "Flood Unknown Set"
653 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
654 XShortField("leaf", 0x010b),
655 XByteField("length", 1),
656 XByteField("value", 1),
657 ]
658
659class LocalSwitching(Packet):
660 """ Variable Descriptor: Local Switching """
661 name = "Local Switching"
662 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
663 XShortField("leaf", 0x010c),
664 ]
665
666class LocalSwitchingSet(Packet):
667 """ Variable Descriptor: Local Switching Set """
668 name = "Local Switching Set"
669 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
670 XShortField("leaf", 0x010c),
671 XByteField("length", 1),
672 XByteField("value", 0),
673 ]
674
675class LLIDQueueConfiguration(Packet):
676 """ Variable Descriptor: LLID Queue Configuration """
677 name = "LLID Queue Configuration"
678 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
679 XShortField("leaf", 0x010d),
680 ]
681
682DFLT_NUM_ONU_LLIDS = 1
683DFLT_NUM_LLID_QUEUES = 1
684DFLT_NUM_UNI_PORTS = 1
685DFLT_NUM_PORT_QUEUES = 1
686DFLT_LLID_QUEUE_SIZE = 0xA0
687
688class LLIDQueueConfigurationSet(Packet):
689 """ Variable Descriptor: LLID Queue Configuration """
690 name = "LLID Queue Configuration"
691
692 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
693 XShortField("leaf", 0x010d),
694 XByteField("length", 6),
695 XByteField("numLLID", DFLT_NUM_ONU_LLIDS),
696 XByteField("LLID0-numq", DFLT_NUM_LLID_QUEUES),
697 XByteField("l0Q0-size", DFLT_LLID_QUEUE_SIZE),
698 XByteField("numPort", DFLT_NUM_UNI_PORTS),
699 XByteField("Port0-numq", DFLT_NUM_PORT_QUEUES),
700 XByteField("p0Q0-size", DFLT_LLID_QUEUE_SIZE),
701 ]
702
703
704
705class LLIDQueueConfiguration16Set(Packet):
706 """ Variable Descriptor: LLID Queue Configuration """
707 name = "LLID Queue Configuration"
708
709 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
710 XShortField("leaf", 0x010d),
711 XByteField("length", 36),
712 XByteField("numLLID", 16),
713 XByteField("LLID0-numq", 1),
714 XByteField("l0Q0-size", 32),
715 XByteField("LLID1-numq", 1),
716 XByteField("l1Q0-size", 32),
717 XByteField("LLID2-numq", 1),
718 XByteField("l2Q0-size", 32),
719 XByteField("LLID3-numq", 1),
720 XByteField("l3Q0-size", 32),
721 XByteField("LLID4-numq", 1),
722 XByteField("l4Q0-size", 32),
723 XByteField("LLID5-numq", 1),
724 XByteField("l5Q0-size", 32),
725 XByteField("LLID6-numq", 1),
726 XByteField("l6Q0-size", 32),
727 XByteField("LLID7-numq", 1),
728 XByteField("l7Q0-size", 32),
729 XByteField("LLID8-numq", 1),
730 XByteField("l8Q0-size", 32),
731 XByteField("LLID9-numq", 1),
732 XByteField("l9Q0-size", 32),
733 XByteField("LLID10-numq", 1),
734 XByteField("l10Q0-size", 32),
735 XByteField("LLID11-numq", 1),
736 XByteField("l11Q0-size", 32),
737 XByteField("LLID12-numq", 1),
738 XByteField("l12Q0-size", 32),
739 XByteField("LLID13-numq", 1),
740 XByteField("l13Q0-size", 32),
741 XByteField("LLID14-numq", 1),
742 XByteField("l14Q0-size", 32),
743 XByteField("LLID15-numq", 1),
744 XByteField("l15Q0-size", 16),
745 XByteField("numPort", DFLT_NUM_UNI_PORTS),
746 XByteField("Port0-numq", DFLT_NUM_PORT_QUEUES),
747 XByteField("p0Q0-size", DFLT_LLID_QUEUE_SIZE),
748 ]
749
750
751
752class LLIDQueueConfigurationSetData(Packet):
753 """ Variable Descriptor: LLID Queue Configuration """
754 name = "LLID Queue Configuration"
755 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
756 XShortField("leaf", 0x010d),
757 FieldLenField("length", None, length_of="data", fmt="B"),
758 StrLenField("data", "", length_from=lambda x:x.length),
759 ]
760
761
762class FirmwareFilename(Packet):
763 """ Variable Descriptor: Firmware Filename """
764 name = "Firmware Filename"
765 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
766 XShortField("leaf", 0x010e),
767 ]
768
769
770####
771#### 0xD9 - MAC Table Operations - Dynamic and Static
772####
773
774class ClearDynamicMacTable(Packet):
775 """ Variable Descriptor: Clear Dynamic MAC Table """
776 name = "Clear Dynamic MAC Table"
777 fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
778 XShortField("leaf", 0x0101),
779 ]
780
781class AddDynamicMacAddress(Packet):
782 """ Variable Descriptor: Add Dynamic MAC Address """
783 name = "Add Dynamic MAC Address"
784 fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
785 XShortField("leaf", 0x0102),
786 ]
787
788class DeleteDynamicMacAddress(Packet):
789 """ Variable Descriptor: Delete Dynamic MAC Address """
790 name = "Delete Dynamic MAC Address"
791 fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
792 XShortField("leaf", 0x0103),
793 ]
794
795class ClearStaticMacTable(Packet):
796 """ Variable Descriptor: Clear Static MAC Table """
797 name = "Clear Static MAC Table"
798 fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
799 XShortField("leaf", 0x0104),
800 ]
801
802class AddStaticMacAddress(Packet):
803 """ Variable Descriptor: Add Static MAC Address """
804 name = "Add Static MAC Address"
805 fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
806 XShortField("leaf", 0x0105),
807 ByteField("length", 6),
808 MACField("mac", "01:00:5e:00:00:00"),
809 ]
810
811class DeleteStaticMacAddress(Packet):
812 """ Variable Descriptor: Delete Static MAC Address """
813 name = "Delete Static MAC Address"
814 fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
815 XShortField("leaf", 0x0106),
816 ByteField("length", 6),
817 MACField("mac", "01:00:5e:00:00:00"),
818 ]
819
820####
821#### 0xd7 - STATISTICS
822####
823
824class RxFramesGreen(Packet):
825 """ Variable Descriptor: RxFramesGreen """
826 name = "RxFramesGreen"
827 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
828 XShortField("leaf", 0x0201),
829 ]
830
831class TxFramesGreen(Packet):
832 """ Variable Descriptor: TxFramesGreen """
833 name = "TxFramesGreen"
834 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
835 XShortField("leaf", 0x0202),
836 ]
837
838class RxFrame_64(Packet):
839 """ Variable Descriptor: RxFrame_64 """
840 name = "RxFrame_64"
841 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
842 XShortField("leaf", 0x0204),
843 ]
844
845class RxFrame_65_127(Packet):
846 """ Variable Descriptor: RxFrame_65_127 """
847 name = "RxFrame_65_127"
848 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
849 XShortField("leaf", 0x0205),
850 ]
851
852class RxFrame_128_255(Packet):
853 """ Variable Descriptor: RxFrame_128_255 """
854 name = "RxFrame_128_255"
855 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
856 XShortField("leaf", 0x0206),
857 ]
858
859class RxFrame_256_511(Packet):
860 """ Variable Descriptor: RxFrame_256_511 """
861 name = "RxFrame_256_511"
862 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
863 XShortField("leaf", 0x0207),
864 ]
865
866class RxFrame_512_1023(Packet):
867 """ Variable Descriptor: RxFrame_512_1023 """
868 name = "RxFrame_512_1023"
869 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
870 XShortField("leaf", 0x0208),
871 ]
872
873class RxFrame_1024_1518(Packet):
874 """ Variable Descriptor: RxFrame_1024_1518 """
875 name = "RxFrame_1024_1518"
876 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
877 XShortField("leaf", 0x0209),
878 ]
879
880class RxFrame_1519Plus(Packet):
881 """ Variable Descriptor: RxFrame_1024_1518 """
882 name = "RxFrame_1519_Plus"
883 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
884 XShortField("leaf", 0x020A),
885 ]
886
887class TxFrame_64(Packet):
888 """ Variable Descriptor: TxFrame_64 """
889 name = "TxFrame_64"
890 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
891 XShortField("leaf", 0x020B),
892 ]
893
894class TxFrame_65_127(Packet):
895 """ Variable Descriptor: TxFrame_65_127 """
896 name = "TxFrame_65_127"
897 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
898 XShortField("leaf", 0x020C),
899 ]
900
901class TxFrame_128_255(Packet):
902 """ Variable Descriptor: TxFrame_128_255 """
903 name = "TxFrame_128_255"
904 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
905 XShortField("leaf", 0x020D),
906 ]
907
908class TxFrame_256_511(Packet):
909 """ Variable Descriptor: TxFrame_256_511 """
910 name = "TxFrame_256_511"
911 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
912 XShortField("leaf", 0x020E),
913 ]
914
915class TxFrame_512_1023(Packet):
916 """ Variable Descriptor: TxFrame_512_1023 """
917 name = "TxFrame_512_1023"
918 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
919 XShortField("leaf", 0x020F),
920 ]
921
922class TxFrame_1024_1518(Packet):
923 """ Variable Descriptor: TxFrame_1024_1518 """
924 name = "TxFrame_1024_1518"
925 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
926 XShortField("leaf", 0x0210),
927 ]
928
929class TxFrame_1519Plus(Packet):
930 """ Variable Descriptor: TxFrame_1024_1518 """
931 name = "TxFrame_1519_Plus"
932 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
933 XShortField("leaf", 0x0211),
934 ]
935
936class FramesDropped(Packet):
937 """ Variable Descriptor: Frames Dropped """
938 name = "Frames Dropped"
939 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
940 XShortField("leaf", 0x0214),
941 ]
942
943class BytesDropped(Packet):
944 """ Variable Descriptor: Bytes Dropped """
945 name = "Bytes Dropped"
946 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
947 XShortField("leaf", 0x0215),
948 ]
949
950class TxBytesUnused(Packet):
951 """ Variable Descriptor: Tx Bytes Unused """
952 name = "Tx Bytes Unused"
953 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
954 XShortField("leaf", 0x0217),
955 ]
956
957class TxL2Errors(Packet):
958 """ Variable Descriptor: TxL2Errors """
959 name = "TxL2Errors"
960 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
961 XShortField("leaf", 0x0235),
962 ]
963
964class RxL2Errors(Packet):
965 """ Variable Descriptor: RxL2Errors """
966 name = "RxL2Errors"
967 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
968 XShortField("leaf", 0x0236),
969 ]
970
971####
972#### 0xD7 - Alarm Reporting
973####
974
975class AlarmReporting(Packet):
976 """ Variable Descriptor: Alarm Reporting """
977 name = "Alarm Reporting"
978 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
979 XShortField("leaf", 0x0303),
980 ]
981
982class AlarmReportingSet(Packet):
983 """ Variable Descriptor: Alarm Reporting Set """
984 name = "Alarm Reporting Set"
985 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
986 XShortField("leaf", 0x0303),
987 XByteField("length", 6),
988 XShortField("LOS", 0x1101),
989 XShortField("KeyExchange", 0x1201),
990 XShortField("PortDisbled", 0x2101),
991 ]
992
993####
994#### 0xD7 - Encryption/ FEC/ and Queue CIR/EIR
995####
996class EncryptionMode(Packet):
997 """ Variable Descriptor: Encryption Mode """
998 name = "Encryption Mode"
999 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1000 XShortField("leaf", 0x0402),
1001 ]
1002
1003class EncryptionModeSet(Packet):
1004 """ Variable Descriptor: Encryption Mode Set """
1005 name = "Encryption Mode Set"
1006 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1007 XShortField("leaf", 0x0402),
1008 XByteField("length", 1),
1009 XByteField("value", 0),
1010 ]
1011
1012class IpmcForwardingRuleConfiguration(Packet):
1013 """ Variable Descriptor: IPMC Forwarding Rule Configuration """
1014 name = "IPMC Forwarding Rule Configuration"
1015 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1016 XShortField("leaf", 0x0505),
1017 XByteField("length", 2),
1018 XShortField("value", 0x0000),
1019 ]
1020
1021class QueueCommittedInformationRate(Packet):
1022 """ Variable Descriptor: Queue Committed Information Rate """
1023 name = "Queue Committed Information Rate"
1024 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1025 XShortField("leaf", 0x0604),
1026 ]
1027
1028class QueueCommittedInformationRateSet(Packet):
1029 """ Variable Descriptor: Queue Committed Information Rate Set """
1030 name = "Queue Committed Information Rate Set"
1031 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1032 XShortField("leaf", 0x0604),
1033 XByteField("length", 6),
1034 XShortField("burst", 0x0fff),
1035 XShortField("CIR_UPPER", 0x0000),
1036 XShortField("CIR_LOWER", 0xffff),
1037 ]
1038
1039class FECMode(Packet):
1040 """ Variable Descriptor: FEC Mode """
1041 name = "FEC Mode"
1042 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1043 XShortField("leaf", 0x0605),
1044 ]
1045
1046class FECModeSet(Packet):
1047 """ Variable Descriptor: FEC Mode """
1048 name = "FEC Mode"
1049 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1050 XShortField("leaf", 0x0605),
1051 XByteField("length", 2),
1052 XByteField("downstream", 0x01),
1053 XByteField("upstream", 0x01),
1054 ]
1055
1056class MediaType(Packet):
1057 """ Variable Descriptor: Media Type """
1058 name = "Media Type"
1059 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1060 XShortField("leaf", 0x0822),
1061 ]
1062
1063
1064####
1065#### 0xD7 - Port Ingress Rules
1066####
1067RuleSubtypeEnum = { 0x00: "Terminator",
1068 0x01: "Header",
1069 0x02: "Clause",
1070 0x03: "Result",
1071 }
1072
1073ClauseSubtypeEnum = {0x00: "LLID Index",
1074 0x01: "L2 Destination MAC address",
1075 0x02: "L2 Source MAC address",
1076 0x03: "L2 Type/Len",
1077 0x04: "B-DA",
1078 0x05: "B-SA",
1079 0x06: "I-Tag",
1080 0x07: "S-VLAN Tag",
1081 0x08: "C-VLAN Tag",
1082 0x09: "MPLS Label Stack Entry",
1083 0x0a: "IPv4 TOS/IPv6 Traffic Class",
1084 0x0b: "IPv4 TTL/IPv6 Hop Limit",
1085 0x0c: "IPv4/IPv6 Protocol Type",
1086 0x0d: "IPv4 Source Address",
1087 0x0e: "IPv6 Source Address",
1088 0x0f: "IPv4 Destination Address",
1089 0x10: "IPv6 Destination Address",
1090 0x11: "IPv6 Next Header",
1091 0x12: "IPv6 Flow Header",
1092 0x13: "TCP/UDP source port",
1093 0x14: "TCP/UDP destination port",
1094 0x15: "B-Tag",
1095 0x16: "Reserved",
1096 0x17: "Reserved",
1097 0x18: "Custom field 0",
1098 0x19: "Custom field 1",
1099 0x1a: "Custom field 2",
1100 0x1b: "Custom field 3",
1101 0x1c: "Custom field 4",
1102 0x1d: "Custom field 5",
1103 0x1e: "Custom field 6",
1104 0x1f: "Custom field 7",
1105 }
1106
1107RuleOperatorEnum = { 0x00: "F", #False
1108 0x01: "==",
1109 0x02: "!=",
1110 0x03: "<=",
1111 0x04: ">=",
1112 0x05: "exists",
1113 0x06: "!exist",
1114 0x07: "T", #True
1115 }
1116
1117RuleResultsEnum = { 0x00: "NOP",
1118 0x01: "Discard",
1119 0x02: "Forward",
1120 0x03: "Queue",
1121 0x04: "Set",
1122 0x05: "Copy",
1123 0x06: "Delete",
1124 0x07: "Insert",
1125 0x08: "Replace",
1126 0x09: "Clear Delete",
1127 0x0a: "Clear Insert",
1128 0x0b: "Increment Counter",
1129 # Tibit-specific values
1130 0x13: "OLT Queue",
1131 0x14: "Learning Group"
1132 }
1133
1134RuleClauses = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
1135RuleOperators = {v: k for k, v in RuleOperatorEnum.iteritems()}
1136RuleResults = {v: k for k, v in RuleResultsEnum.iteritems()}
1137
1138class PortIngressRule(Packet):
1139 """ Variable Descriptor: Port Ingress Rule """
1140 name = "Port Ingress Rule"
1141 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1142 XShortField("leaf", 0x0501),
1143 ]
1144
1145class PortIngressRuleHeader(Packet):
1146 """ Variable Descriptor: Port Ingress Rule Header """
1147 name = "Port Ingress Rule Header"
1148 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1149 XShortField("leaf", 0x0501),
1150 ByteField("length", 2),
1151 XByteField("subtype", 0x01), # Header
1152 ByteField("precedence", 12),
1153 ]
1154
1155class PortIngressRuleClause(Packet):
1156 """ Variable Descriptor: Port Ingress Rule Clause """
1157 name = "Port Ingress Rule Clause"
1158 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1159 XShortField("leaf", 0x0501),
1160 FieldLenField("length", None, length_of="match", fmt="B", adjust=lambda pkt,x: x+7),
1161 XByteField("subtype", 0x02), #Clause
1162 XByteField("fieldcode", 0),
1163 XByteField("fieldinstance", 0),
1164 XByteField("msbmask", 0),
1165 XByteField("lsbmask", 0),
1166 XByteField("operator", 0x7), # T
1167 XByteField("matchlength", 0),
1168 StrLenField("match", "", length_from=lambda x:x.matchlength),
1169 ]
1170
1171class PortIngressRuleResultNoData(Packet):
1172 """ Variable Descriptor: Port Ingress Rule Result NOP """
1173 name = "Rule Result NOP"
1174 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1175 XShortField("leaf", 0x0501),
1176 ByteField("length", 2),
1177 XByteField("subtype", 0x03), # Result
1178 ByteField("resulttype", 0x00),
1179 ]
1180
1181class PortIngressRuleClauseMatchLength00(Packet):
1182 """ Variable Descriptor: Port Ingress Rule Clause """
1183 name = "Port Ingress Rule Clause"
1184 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1185 XShortField("leaf", 0x0501),
1186 ByteField("length", 7),
1187 XByteField("clause", 2),
1188 XByteField("fieldcode", 0),
1189 XByteField("fieldinstance", 0),
1190 XByteField("msbmask", 0),
1191 XByteField("lsbmask", 0),
1192 XByteField("operator", 0),
1193 XByteField("matchlength", 0),
1194 ]
1195
1196class PortIngressRuleClauseAlwaysMatch(Packet):
1197 """ Variable Descriptor: Port Ingress Rule Clause """
1198 name = "Port Ingress Rule Clause"
1199 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1200 XShortField("leaf", 0x0501),
1201 ByteField("length", 7),
1202 XByteField("clause", 2),
1203 XByteField("fieldcode", 0),
1204 XByteField("fieldinstance", 0),
1205 XByteField("msbmask", 0),
1206 XByteField("lsbmask", 0),
1207 XByteField("operator", 7),
1208 XByteField("matchlength", 0),
1209 ]
1210
1211class PortIngressRuleClauseMatchLength01(Packet):
1212 """ Variable Descriptor: Port Ingress Rule Clause """
1213 name = "Port Ingress Rule Clause"
1214 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1215 XShortField("leaf", 0x0501),
1216 ByteField("length", 8),
1217 XByteField("clause", 2),
1218 XByteField("fieldcode", 0),
1219 XByteField("fieldinstance", 0),
1220 XByteField("msbmask", 0),
1221 XByteField("lsbmask", 0),
1222 XByteField("operator", 0),
1223 XByteField("matchlength", 1),
1224 XByteField("match", 0),
1225 ]
1226
1227class PortIngressRuleClauseMatchLength02(Packet):
1228 """ Variable Descriptor: Port Ingress Rule Clause """
1229 name = "Port Ingress Rule Clause"
1230 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1231 XShortField("leaf", 0x0501),
1232 ByteField("length", 9),
1233 XByteField("clause", 2),
1234 XByteField("fieldcode", 0),
1235 XByteField("fieldinstance", 0),
1236 XByteField("msbmask", 0),
1237 XByteField("lsbmask", 0),
1238 XByteField("operator", 0),
1239 XByteField("matchlength", 2),
1240 XShortField("match", 0)
1241 ]
1242
1243
1244class PortIngressRuleClauseMatchLength06(Packet):
1245 """ Variable Descriptor: Port Ingress Rule Clause """
1246 name = "Port Ingress Rule Clause"
1247 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1248 XShortField("leaf", 0x0501),
1249 ByteField("length", 13),
1250 XByteField("clause", 2),
1251 XByteField("fieldcode", 0),
1252 XByteField("fieldinstance", 0),
1253 XByteField("msbmask", 0),
1254 XByteField("lsbmask", 0),
1255 XByteField("operator", 0),
1256 XByteField("matchlength", 6),
1257 XByteField("match0", 0x01),
1258 XByteField("match1", 0x80),
1259 XByteField("match2", 0xc2),
1260 XByteField("match3", 0x00),
1261 XByteField("match4", 0x00),
1262 XByteField("match5", 0x00),
1263 ]
1264
1265class PortIngressRuleResultForward(Packet):
1266 """ Variable Descriptor: Port Ingress Rule Result Forward """
1267 name = "Port Ingress Rule Result Forward"
1268 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1269 XShortField("leaf", 0x0501),
1270 ByteField("length", 2),
1271 XByteField("result", 3),
1272 XByteField("forward", 2),
1273 ]
1274
1275class PortIngressRuleResultDiscard(Packet):
1276 """ Variable Descriptor: Port Ingress Rule Result Discard """
1277 name = "Port Ingress Rule Result Discard"
1278 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1279 XShortField("leaf", 0x0501),
1280 ByteField("length", 2),
1281 XByteField("result", 3),
1282 XByteField("discard", 1),
1283 ]
1284
1285class PortIngressRuleResultQueue(Packet):
1286 """ Variable Descriptor: Port Ingress Rule Result Queue """
1287 name = "Port Ingress Rule Result Queue"
1288 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1289 XShortField("leaf", 0x0501),
1290 ByteField("length", 6),
1291 XByteField("result", 3),
1292 XByteField("queuerule", 3),
1293 XShortField("objecttype", 0x0000),
1294 XByteField("instance", 0),
1295 XByteField("queuenum", 0),
1296 ]
1297
1298# __TIBIT_OLT_OAM__: Defined by Tibit
1299class PortIngressRuleResultOLTQueue(Packet):
1300 """ Variable Descriptor: Port Ingress Rule Result OLT Queue """
1301 name = "Port Ingress Rule Result OLT Queue"
1302 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1303 XShortField("leaf", 0x0501),
1304 ByteField("length", 15),
1305 XByteField("result", 3),
1306 XByteField("oltqueuerule", 0x13),
1307 XShortField("objecttype", 0x0001),
1308 XByteField("instance", 0),
1309 XByteField("pon", 0),
1310 StrField("unicastvssn", "TBIT"),
1311 XIntField("unicastlink", 0x00000000),
1312 XByteField("pad", 0),
1313 ]
1314
1315class PortIngressRuleResultOLTEPONQueue(Packet):
1316 """ Variable Descriptor: Port Ingress Rule Result OLT Queue """
1317 name = "Port Ingress Rule Result OLT Queue"
1318 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1319 XShortField("leaf", 0x0501),
1320 ByteField("length", 15),
1321 XByteField("result", 3),
1322 XByteField("oltqueuerule", 0x13),
1323 XShortField("objecttype", 0x0001),
1324 XByteField("instance", 0),
1325 XByteField("pon", 0),
1326 XIntField("unicastvssn", 0x00000000),
1327 XIntField("unicastlink", 0x00000000),
1328 XByteField("pad", 0),
1329 ]
1330
1331
1332
1333# __TIBIT_OLT_OAM__: Defined by Tibit
1334class PortIngressRuleResultOLTBroadcastQueue(Packet):
1335 """ Variable Descriptor: Port Ingress Rule Result OLT Broadcast Queue """
1336 name = "Port Ingress Rule Result OLT Broadcast Queue"
1337 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1338 XShortField("leaf", 0x0501),
1339 ByteField("length", 15),
1340 XByteField("result", 3),
1341 XByteField("oltqueuerule", 0x13),
1342 XShortField("objecttype", 0x0001),
1343 XByteField("instance", 0),
1344 XByteField("pon", 0),
1345 XLongField("broadcast", 0xffffffffffff0000),
1346 XByteField("pad", 0),
1347 ]
1348
1349class PortIngressRuleResultLearningGroup(Packet):
1350 """ Variable Descriptor: Port Ingress Rule Result Learning Group """
1351 name = "Port Ingress Rule Result Learning Group "
1352 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1353 XShortField("leaf", 0x0501),
1354 ByteField("length", 6),
1355 XByteField("result", 3),
1356 XByteField("grouprule", 0x14),
1357 XShortField("objecttype", 0x0000),
1358 XByteField("instance", 0),
1359 XByteField("num", 0),
1360 ]
1361
1362class PortIngressRuleResultSet(Packet):
1363 """ Variable Descriptor: Port Ingress Rule Result Set """
1364 name = "Port Ingress Rule Result Set"
1365 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1366 XShortField("leaf", 0x0501),
1367 FieldLenField("length", None, length_of="value", fmt="B", adjust=lambda pkt,x: x+6),
1368 XByteField("result", 3),
1369 XByteField("set", 4),
1370 XByteField("fieldcode", 0),
1371 XByteField("fieldinstance", 0),
1372 XByteField("msbmask", 0),
1373 XByteField("lsbmask", 0),
1374 StrLenField("value", "", length_from=lambda x:x.length-6),
1375 ]
1376
1377class PortIngressRuleResultCopy(Packet):
1378 """ Variable Descriptor: Port Ingress Rule Result Copy """
1379 name = "Port Ingress Rule Result Copy"
1380 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1381 XShortField("leaf", 0x0501),
1382 ByteField("length", 6),
1383 XByteField("result", 3),
1384 XByteField("copy", 5),
1385 XByteField("fieldcode", 0),
1386 XByteField("fieldinstance", 0),
1387 XByteField("msbmask", 0),
1388 XByteField("lsbmask", 0),
1389 ]
1390
1391class PortIngressRuleResultDelete(Packet):
1392 """ Variable Descriptor: Port Ingress Rule Result Delete """
1393 name = "Port Ingress Rule Result Delete"
1394 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1395 XShortField("leaf", 0x0501),
1396 ByteField("length", 4),
1397 XByteField("result", 3),
1398 XByteField("delete", 6),
1399 XByteField("fieldcode", 0),
1400 XByteField("fieldinstance", 0),
1401 ]
1402
1403class PortIngressRuleResultInsert(Packet):
1404 """ Variable Descriptor: Port Ingress Rule Result Insert """
1405 name = "Port Ingress Rule Result Insert"
1406 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1407 XShortField("leaf", 0x0501),
1408 ByteField("length", 4),
1409 XByteField("result", 3),
1410 XByteField("insert", 7),
1411 XByteField("fieldcode", 0),
1412 XByteField("fieldinstance", 0),
1413 ]
1414
1415class PortIngressRuleResultReplace(Packet):
1416 """ Variable Descriptor: Port Ingress Rule Result Replace """
1417 name = "Port Ingress Rule Result Replace"
1418 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1419 XShortField("leaf", 0x0501),
1420 ByteField("length", 4),
1421 XByteField("result", 3),
1422 XByteField("replace", 8),
1423 XByteField("fieldcode", 0),
1424 XByteField("fieldinstance", 0),
1425 ]
1426
1427class PortIngressRuleTerminator(Packet):
1428 """ Variable Descriptor: Port Ingress Rule Terminator """
1429 name = "Port Ingress Rule Terminator"
1430 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1431 XShortField("leaf", 0x0501),
1432 ByteField("length", 1),
1433 XByteField("terminator", 0),
1434 ]
1435
1436class CustomField(Packet):
1437 """ Variable Descriptor: Custom Field """
1438 name = "Custom Field"
1439 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1440 XShortField("leaf", 0x0502),
1441 XByteField("length", 1),
1442 XByteField("value", 0),
1443 ]
1444
1445class CustomFieldEtherType(Packet):
1446 """ Variable Descriptor: Custom Field EtherType """
1447 name = "Custom Field EtherType"
1448 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1449 XShortField("leaf", 0x0502),
1450 XByteField("length", 6),
1451 XByteField("fieldcode", 0x19),
1452 XByteField("layerselect", 2),
1453 XByteField("dwordoffset", 0),
1454 XByteField("lsb", 0),
1455 XByteField("width", 0x10),
1456 XByteField("numclauses", 0),
1457 ]
1458
1459class CustomFieldGenericL3(Packet):
1460 """ Variable Descriptor: Custom Field Generic L3 """
1461 name = "Custom Field Generic L3"
1462 fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
1463 XShortField("leaf", 0x0502),
1464 XByteField("length", 6),
1465 XByteField("fieldcode", 0x1a),
1466 XByteField("layerselect", 8),
1467 XByteField("dwordoffset", 0),
1468 XByteField("lsb", 0x18),
1469 XByteField("width", 0x8),
1470 XByteField("numclauses", 0),
1471 ]
1472
1473####
1474#### 0xD9 - Port Ingress Rules
1475####
1476
1477class ClearPortIngressRules(Packet):
1478 """ Variable Descriptor: Clear Port Ingress Rule """
1479 name = "Clear Port Ingress Rule"
1480 fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
1481 XShortField("leaf", 0x0501),
1482 ]
1483
1484class AddPortIngressRule(Packet):
1485 """ Variable Descriptor: Add Port Ingress Rule """
1486 name = "Add Port Ingress Rule"
1487 fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
1488 XShortField("leaf", 0x0502),
1489 ]
1490
1491
1492class DeletePortIngressRule(Packet):
1493 """ Variable Descriptor: Delete Port Ingress Rule """
1494 name = "Delete Port Ingress Rule"
1495 fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
1496 XShortField("leaf", 0x0503),
1497 ]
1498
1499####
1500#### 0xb7 - TIBIT ATTRIBUTES
1501####
1502class OltMode(Packet):
1503 """ Variable Descriptor: OLT Mode """
1504 name = "OLT Mode"
1505 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1506 XShortField("leaf", 0x0101),
1507 ]
1508
1509class OltModeSet(Packet):
1510 """ Variable Descriptor: OLT Mode """
1511 name = "OLT Mode"
1512 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1513 XShortField("leaf", 0x0101),
1514 XByteField("length", 1),
1515 XByteField("value", 0),
1516 ]
1517
1518class OltPonAdminState(Packet):
1519 """ Variable Descriptor: OLT PON Admin State """
1520 name = "PON Admin State"
1521 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1522 XShortField("leaf", 0x0102),
1523 ]
1524
1525class OltPonAdminStateSet(Packet):
1526 """ Variable Container: OLT PON Admin State """
1527 name = "PON Admin State"
1528 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1529 XShortField("leaf", 0x0102),
1530 XByteField("length", 1),
1531 XByteField("value", 0),
1532 ]
1533
1534class TibitLinkMacTable(Packet):
1535 """ Variable Descriptor: Link MAC Table """
1536 name = "Link MAC Table"
1537 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1538 XShortField("leaf", 0x0103),
1539 ]
1540
1541class TibitKeyExchange(Packet):
1542 """ Variable Descriptor: Key Exchange """
1543 name = "Key Exchange Period"
1544 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1545 XShortField("leaf", 0x0104),
1546 ]
1547
1548class TibitKeyExchangeSet(Packet):
1549 """ Variable Descriptor: Key Exchange Set"""
1550 name = "Key Exchange Period"
1551 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1552 XShortField("leaf", 0x0104),
1553 XByteField("length", 2),
1554 XShortField("value", 0x1234),
1555 ]
1556
1557class OnuMode(Packet):
1558 """ Variable Descriptor: ONU Mode """
1559 name = "ONU Mode"
1560 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1561 XShortField("leaf", 0x0105),
1562 ]
1563
1564class OnuModeSet(Packet):
1565 """ Variable Descriptor: ONU Mode """
1566 name = "ONU Mode"
1567 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1568 XShortField("leaf", 0x0105),
1569 XByteField("length", 1),
1570 XByteField("value", 0),
1571 ]
1572
1573class TibitGrantSpacing(Packet):
1574 """ Variable Descriptor: Grant Spacing """
1575 name = "Grant Spacing"
1576 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1577 XShortField("leaf", 0x0106),
1578 ]
1579
1580class TibitGrantSpacingSet(Packet):
1581 """ Variable Descriptor: Grant Spacing """
1582 name = "Grant Spacing"
1583 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1584 XShortField("leaf", 0x0106),
1585 XByteField("length", 1),
1586 XByteField("value", 0),
1587 ]
1588
1589class TibitBurstOverheadProfiles(Packet):
1590 """ Variable Descriptor: Burst Overhead Profiles """
1591 name = "Burst Overhead Profiles"
1592 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1593 XShortField("leaf", 0x0107),
1594 ]
1595
1596class TibitBurstOverheadProfilesSet(Packet):
1597 """ Variable Descriptor: Burst Overhead Profiles """
1598 name = "Burst Overhead Profiles"
1599 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1600 XShortField("leaf", 0x0107),
1601 # Length is one + 5 for each entry
1602 XByteField("length", 6),
1603 XByteField("num_profiles", 1),
1604 ]
1605
1606class TibitBurstOverheadProfilesEntry(Packet):
1607 """ Variable Descriptor: Burst Overhead Profile Entry """
1608 name = "Burst Profile Entry:"
1609 fields_desc = [XByteField("laser_on_time", 0x28),
1610 XByteField("laser_off_time", 0x28),
1611 XShortField("sync_time", 0x0040),
1612 XByteField("us_fec", 1),
1613 ]
1614
1615class TibitGpioConditionSet(Packet):
1616 """ Variable Descriptor: GPIO condition Set """
1617 name = "GPIO Condition"
1618 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1619 XShortField("leaf", 0x0108),
1620 XByteField("length", 1),
1621 XByteField("state", 0),
1622 ]
1623
1624class TibitDiscoveryPeriod(Packet):
1625 """ Variable Descriptor: Discovery Period """
1626 name = "Discovery Period"
1627 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1628 XShortField("leaf", 0x0109),
1629 ]
1630
1631class TibitDiscoveryPeriodSet(Packet):
1632 """ Variable Descriptor: Discovery Period Set """
1633 name = "Discovery Period"
1634 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1635 XShortField("leaf", 0x0109),
1636 XByteField("length", 2),
1637 XShortField("period", 3000),
1638 ]
1639class TibitLldpPeriod(Packet):
1640 """ Variable Descriptor: LLDP Period """
1641 name = "LLDP Period"
1642 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1643 XShortField("leaf", 0x010A),
1644 ]
1645
1646class TibitLldpPeriodSet(Packet):
1647 """ Variable Descriptor: LLDP Period Set """
1648 name = "LLDP Period"
1649 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1650 XShortField("leaf", 0x010A),
1651 XByteField("length", 2),
1652 XShortField("period", 60),
1653 ]
1654
1655class TibitLldpDestAddress(Packet):
1656 """ Variable Descriptor: LLDP Destination MAC Address """
1657 name = "LLDP Dest Address"
1658 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1659 XShortField("leaf", 0x010B),
1660 ]
1661
1662class TibitLldpDestAddressSet(Packet):
1663 """ Variable Descriptor: LLDP Destination MAC Address Set """
1664 name = "LLDP Dest Address"
1665 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1666 XShortField("leaf", 0x010B),
1667 XByteField("length", 6),
1668 MACField("addr", "01:80:c2:00:00:0e"),
1669 ]
1670
1671class TibitLldpTpid(Packet):
1672 """ Variable Descriptor: LLDP TPID """
1673 name = "LLDP TPID"
1674 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1675 XShortField("leaf", 0x010C),
1676 ]
1677
1678class TibitLldpTpidSet(Packet):
1679 """ Variable Descriptor: LLDP TPID Set """
1680 name = "LLDP TPID"
1681 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1682 XShortField("leaf", 0x010C),
1683 XByteField("length", 2),
1684 XShortField("tpid", 0),
1685 ]
1686
1687class TibitLldpVid(Packet):
1688 """ Variable Descriptor: LLDP TPID """
1689 name = "LLDP VID"
1690 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1691 XShortField("leaf", 0x010D),
1692 ]
1693
1694class TibitLldpVidSet(Packet):
1695 """ Variable Descriptor: LLDP TPID Set """
1696 name = "LLDP VID"
1697 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1698 XShortField("leaf", 0x010D),
1699 XByteField("length", 2),
1700 XShortField("vid", 0),
1701 ]
1702
1703class TibitFailsafeTimer(Packet):
1704 """ Variable Descriptor: Failsafe Timer """
1705 name = "Failsafe Timer"
1706 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1707 XShortField("leaf", 0x010E),
1708 ]
1709
1710class TibitFailsafeTimerSet(Packet):
1711 """ Variable Descriptor: Failsafe Timer Set """
1712 name = "Failsafe Timer"
1713 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1714 XShortField("leaf", 0x010E),
1715 XByteField("length", 1),
1716 XByteField("timer", 0),
1717 ]
1718
1719class TibitMtu(Packet):
1720 """ Variable Descriptor: MTU """
1721 name = "MTU"
1722 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1723 XShortField("leaf", 0x010F),
1724 ]
1725
1726class TibitMtuSet(Packet):
1727 """ Variable Descriptor: MTU Set """
1728 name = "MTU"
1729 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1730 XShortField("leaf", 0x010F),
1731 XByteField("length", 4),
1732 XIntField("mtu", 0),
1733 ]
1734
1735class TibitCtagCtagMode(Packet):
1736 """ Variable Descriptor: CTAG CTAG Mode """
1737 name = "CTAG-CTAG Mode"
1738 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1739 XShortField("leaf", 0x0110),
1740 ]
1741
1742class TibitCtagCtagModeSet(Packet):
1743 """ Variable Descriptor: CTAG CTAG Mode Set """
1744 name = "CTAG-CTAG Mode"
1745 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1746 XShortField("leaf", 0x0110),
1747 XByteField("length", 1),
1748 XByteField("enable", 0),
1749 ]
1750
1751class TibitStatsOptions(Packet):
1752 """ Variable Descriptor: Tibit Stats Options """
1753 name = "Tibit Stats Options"
1754 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1755 XShortField("leaf", 0x0111),
1756 ]
1757
1758class TibitStatsOptionsSet(Packet):
1759 """ Variable Descriptor: Tibit Stats Options Set"""
1760 name = "Tibit Stats Options Set"
1761 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1762 XShortField("leaf", 0x0111),
1763 ByteField("length", 5),
1764 ByteField("enable", 0),
1765 IntField("period", 0),
1766 ]
1767
1768
1769UpstreamSlaSubtypeEnum = { 0x00: "Terminator",
1770 0x01: "Header",
1771 0x02: "Max Grant Period",
1772 0x03: "Min Grant Period",
1773 0x04: "Service Limit",
1774 0x05: "Fixed Rate",
1775 0x06: "Guaranteed Rate",
1776 0x07: "Best Effort Rate",
1777 0x08: "Max Burst Size",
1778 0x09: "Priority",
1779 }
1780
1781class UpstreamSla(Packet):
1782 """ Variable Descriptor: Upstream SLA """
1783 name = "Upstream SLA"
1784 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1785 XShortField("leaf", 0x0621),
1786 ]
1787
1788class UpstreamSlaHeader(Packet):
1789 """ Variable Descriptor: Upstream SLA Header """
1790 name = "Upstream SLA Header"
1791 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1792 XShortField("leaf", 0x0621),
1793 ByteField("length", 1),
1794 XByteField("subtype", 1),
1795 ]
1796
1797class UpstreamSlaTerminator(Packet):
1798 """ Variable Descriptor: Upstream SLA Terminator """
1799 name = "Upstream SLA Terminator"
1800 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1801 XShortField("leaf", 0x0621),
1802 ByteField("length", 1),
1803 XByteField("subtype", 0),
1804 ]
1805
1806class UpstreamSlaSettingLength01(Packet):
1807 """ Variable Descriptor: Upstream SLA Setting """
1808 name = "Upstream SLA Setting"
1809 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1810 XShortField("leaf", 0x0621),
1811 ByteField("length", 3),
1812 XByteField("subtype", 0),
1813 XByteField("setting_len", 1),
1814 ByteField("setting_val", 0),
1815 ]
1816
1817class UpstreamSlaSettingLength02(Packet):
1818 """ Variable Descriptor: Upstream SLA Setting """
1819 name = "Upstream SLA Setting"
1820 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1821 XShortField("leaf", 0x0621),
1822 ByteField("length", 4),
1823 XByteField("subtype", 0),
1824 XByteField("setting_len", 2),
1825 ShortField("setting_val", 0),
1826 ]
1827
1828class UpstreamSlaSettingLength04(Packet):
1829 """ Variable Descriptor: Upstream SLA Setting """
1830 name = "Upstream SLA Setting"
1831 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1832 XShortField("leaf", 0x0621),
1833 ByteField("length", 6),
1834 XByteField("subtype", 0),
1835 XByteField("setting_len", 4),
1836 IntField("setting_val", 0),
1837 ]
1838
1839class SlaPriorityType(Packet):
1840 """ Variable Descriptor: SLA Priority Type """
1841 name = "SLA Priority Type"
1842 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1843 XShortField("leaf", 0x0622),
1844 ]
1845
1846class SlaPriorityTypeSet(Packet):
1847 """ Variable Container: SLA Priority Type """
1848 name = "SLA Priority Type"
1849 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1850 XShortField("leaf", 0x0622),
1851 XByteField("length", 1),
1852 XByteField("value", 1),
1853 ]
1854
1855class DsGuarRate(Packet):
1856 """ Variable Descriptor: Downstream Guaranteed Rate """
1857 name = "Downstream Guaranteed Rate"
1858 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1859 XShortField("leaf", 0x0623),
1860 ]
1861
1862class DsGuarRateSet(Packet):
1863 """ Variable Descriptor: Downstream Guaranteed Rate Set"""
1864 name = "Downstream Guaranteed Rate Set"
1865 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1866 XShortField("leaf", 0x0623),
1867 ByteField("length", 6),
1868 ShortField("mbs", 0),
1869 IntField("rate", 0), ]
1870
1871
1872class DsBestEffortRate(Packet):
1873 """ Variable Descriptor: Downstream Best Effort Rate """
1874 name = "Downstream Best Effort Rate"
1875 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1876 XShortField("leaf", 0x0624),
1877 ]
1878
1879class DsBestEffortRateSet(Packet):
1880 """ Variable Descriptor: Downstream Best Effort Rate Set"""
1881 name = "Downstream Best Effort Rate Set"
1882 fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
1883 XShortField("leaf", 0x0624),
1884 ByteField("length", 6),
1885 ShortField("mbs", 0),
1886 IntField("rate", 0), ]
1887
1888
1889####
1890#### 0xd9 - BRANCH ATTRIBUTES
1891####
1892
1893class EnableUserTraffic(Packet):
1894 """ Variable Descriptor: Enable User Traffic """
1895 name = "Enable User Traffic"
1896 fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
1897 XShortField("leaf", 0x0601),
1898 ]
1899
1900class DisableUserTraffic(Packet):
1901 """ Variable Descriptor: Disable User Traffic """
1902 name = "Disable User Traffic"
1903 fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
1904 XShortField("leaf", 0x0602),
1905 ]
1906
1907class LoopbackEnable(Packet):
1908 """ Variable Descriptor: Loopback Enable """
1909 name = "Loopback Enable"
1910 fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
1911 XShortField("leaf", 0x0603),
1912 XByteField("length", 1),
1913 XByteField("location", 0),
1914 ]
1915
1916class LoopbackDisable(Packet):
1917 """ Variable Descriptor: Loopback Disable """
1918 name = "Loopback Disable"
1919 fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
1920 XShortField("leaf", 0x0604),
1921 XByteField("length", 1),
1922 XByteField("location", 0),
1923 ]
1924
1925class CurrentAlarmSummary(Packet):
1926 """ Variable Descriptor: Current Alarm Summary """
1927 name = "Current Alarm Summary"
1928 fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
1929 XShortField("leaf", 0x0301)]
1930
1931class DeviceReset(Packet):
1932 """ Variable Descriptor: Device Reset """
1933 name = "Device Reset"
1934 fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
1935 XShortField("leaf", 0x0001),
1936 ]
1937
1938class TibitDeviceReset(Packet):
1939 """ Variable Descriptor: Tibit Device Reset """
1940 name = "Tibit Device Reset"
1941 fields_desc = [XByteField("branch", 0xB9),
1942 XShortField("leaf", 0x0001),
1943 ]
1944
1945class TibitPreprovisionLink(Packet):
1946 """ Variable Descriptor: Tibit Preprovision Link """
1947 name = "Tibit Preprovision Link"
1948 fields_desc = [XByteField("branch", 0xB9),
1949 XShortField("leaf", 0x0002),
1950 ]
1951
1952class TibitApplySla(Packet):
1953 """ Variable Descriptor: Apply SLA """
1954 name = "Apply Sla"
1955 fields_desc = [XByteField("branch", 0xB9),
1956 XShortField("leaf", 0x0601),
1957 ]
1958
1959
1960##
1961## DPoE File Transfer
1962##
1963
1964### Table 156 - DPoE File Transfer Opcodes
1965DPoEFileXferOpcodeEnum = {
1966 0x00: "Reserved",
1967 0x01: "Write Request",
1968 0x02: "File Transfer Data",
1969 0x03: "File Transfer Ack",
1970 }
1971
1972Dpoe_FileXferOpcodes = {v: k for k, v in DPoEFileXferOpcodeEnum.iteritems()}
1973
1974
1975### Table 160 - DPoE File Acknowledgement Response Codes
1976DPoEFileAckRespCodeEnum = {
1977 0x00: "OK",
1978 0x01: "Undefined",
1979 0x02: "Not Found",
1980 0x03: "No Access",
1981 0x04: "Full",
1982 0x05: "Illegal Operation",
1983 0x06: "Unknown ID",
1984 0x07: "Bad Block",
1985 0x08: "Timeout",
1986 0x09: "Busy",
1987 0x0A: "Incompatible File",
1988 0x0B: "Corrupted File",
1989 }
1990
1991Dpoe_FileAckRspOpcodes = {v: k for k, v in DPoEFileAckRespCodeEnum.iteritems()}
1992
1993class DpoeFileTransferWrite(Packet):
1994 name = "DPoE File Transfer Write "
1995 fields_desc = [ByteEnumField("opcode", 0x01, DPoEFileXferOpcodeEnum),
1996 StrField("filename", ""),
1997 ]
1998
1999class DpoeFileTransferData(Packet):
2000 name = "DPoE File Transfer Data "
2001 fields_desc = [ByteEnumField("opcode", 0x02, DPoEFileXferOpcodeEnum),
2002 ShortField("block_num", 0),
2003 FieldLenField("block_width", None, length_of="block", fmt="H"),
2004 StrLenField("block", "", length_from=lambda x:x.length),
2005 ]
2006
2007class DpoeFileTransferAck(Packet):
2008 name = "DPoE File Transfer Data "
2009 fields_desc = [ByteEnumField("opcode", 0x03, DPoEFileXferOpcodeEnum),
2010 ShortField("block_num", 0),
2011 ByteEnumField("response_code", 0x00, DPoEFileAckRespCodeEnum),
2012 ]
2013
2014
2015##
2016## Broadcom TLVs
2017##
2018class Broadcom07_7F_F1_Set01(Packet):
2019 """ Variable Descriptor: Broadcom 0x07/0x7ff1 """
2020 name = "Broadcom 0x07/0x7ff1"
2021 fields_desc = [ByteEnumField("branch", 0x07, OamBranchEnum),
2022 XShortField("leaf", 0x7ff1),
2023 XByteField("length", 2),
2024 XShortField("value0", 0x0101),
2025 ]
2026
2027class Broadcom07_7F_F1_Set02(Packet):
2028 """ Variable Descriptor: Broadcom 0x07/0x7ff1 """
2029 name = "Broadcom 0x07/0x7ff1"
2030 fields_desc = [ByteEnumField("branch", 0x07, OamBranchEnum),
2031 XShortField("leaf", 0x7ff1),
2032 XByteField("length", 7),
2033 XShortField("value0", 0x0201),
2034 XShortField("value1", 0x0000),
2035 XShortField("value2", 0x0107),
2036 XByteField("value3", 0xd0),
2037 ]
2038
2039class Broadcom07_7F_F1_Set03(Packet):
2040 """ Variable Descriptor: Broadcom 0x07/0x7ff1 """
2041 name = "Broadcom 0x07/0x7ff1"
2042 fields_desc = [ByteEnumField("branch", 0x07, OamBranchEnum),
2043 XShortField("leaf", 0x7ff1),
2044 XByteField("length", 7),
2045 XShortField("value0", 0x0301),
2046 XShortField("value1", 0x0000),
2047 XShortField("value2", 0x0100),
2048 XByteField("value3", 0xb8),
2049 ]
2050
2051class Broadcom07_7F_F1_Set04(Packet):
2052 """ Variable Descriptor: Broadcom 0x07/0x7ff1 """
2053 name = "Broadcom 0x07/0x7ff1"
2054 fields_desc = [ByteEnumField("branch", 0x07, OamBranchEnum),
2055 XShortField("leaf", 0x7ff1),
2056 XByteField("length", 1),
2057 XByteField("value0", 0x00),
2058 ]
2059
2060class Broadcom07_7F_F6_Set(Packet):
2061 """ Variable Descriptor: Broadcom 0x07/0x7ff6 """
2062 name = "Broadcom 0x07/0x7ff6"
2063 fields_desc = [ByteEnumField("branch", 0x07, OamBranchEnum),
2064 XShortField("leaf", 0x7ff6),
2065 XByteField("length", 2),
2066 XShortField("value0", 0x07d0),
2067 ]
2068
2069###
2070### Clause 30 Attributes (0x07)
2071###
2072class Clause30AttributesMacEnable(Packet):
2073 """ Variable Descriptor: Clause 30 Attributes MAC Enable """
2074 name = "Clause 30 Attributes MAC Enable"
2075 fields_desc = [ByteEnumField("branch", 0x07, OamBranchEnum),
2076 XShortField("leaf", 0x001a),
2077 XByteField("length", 1),
2078 XByteField("value", 1),
2079 ]
2080
2081class GenericTLV(Packet):
2082 """ Variable Descriptor: Generic TLV """
2083 name = "Generic TLV"
2084 fields_desc = [ByteEnumField("branch", 0x00, OamBranchEnum),
2085 XShortField("leaf", 0x0000),
2086 FieldLenField("length", None, length_of="value", fmt="B"),
2087 StrLenField("value", "", length_from=lambda x:x.length),
2088 ]
2089
2090class EndOfPDU(Packet):
2091 name = "End of EOAM PDU"
2092 fields_desc = [BitEnumField("type", 0x00, 7, TLV_dictionary),
2093 BitField("length", 0x00, 9)]