|
19 | 19 | ByteEnumField, |
20 | 20 | ByteField, |
21 | 21 | FieldLenField, |
| 22 | + FieldListField, |
22 | 23 | FlagsField, |
| 24 | + IntField, |
23 | 25 | IP6Field, |
24 | 26 | IPField, |
25 | 27 | OUIField, |
|
63 | 65 | # 0x0015: "CDPMsgSystemOID", |
64 | 66 | 0x0016: "CDPMsgMgmtAddr", |
65 | 67 | # 0x0017: "CDPMsgLocation", |
66 | | - 0x0019: "CDPMsgUnknown19", |
67 | | - # 0x001a: "CDPPowerAvailable" |
| 68 | + 0x0019: "CDPMsgPowerRequest", |
| 69 | + 0x001a: "CDPMsgPowerAvailable" |
68 | 70 | } |
69 | 71 |
|
70 | 72 | _cdp_tlv_types = {0x0001: "Device ID", |
|
91 | 93 | 0x0016: "Management Address", |
92 | 94 | 0x0017: "Location", |
93 | 95 | 0x0018: "CDP Unknown command (send us a pcap file)", |
94 | | - 0x0019: "CDP Unknown command (send us a pcap file)", |
| 96 | + 0x0019: "Power Request", |
95 | 97 | 0x001a: "Power Available"} |
96 | 98 |
|
97 | 99 |
|
@@ -351,9 +353,28 @@ class CDPMsgMgmtAddr(CDPMsgAddr): |
351 | 353 | type = 0x0016 |
352 | 354 |
|
353 | 355 |
|
354 | | -class CDPMsgUnknown19(CDPMsgGeneric): |
355 | | - name = "Unknown CDP Message" |
356 | | - type = 0x0019 |
| 356 | +class CDPMsgPowerRequest(CDPMsgGeneric): |
| 357 | + name = "Power Request" |
| 358 | + fields_desc = [XShortEnumField("type", 0x0019, _cdp_tlv_types), |
| 359 | + FieldLenField("len", None, "power_requested_list", fmt="!H", |
| 360 | + adjust=lambda pkt, x: x + 8), |
| 361 | + ShortField("req_id", 0), |
| 362 | + ShortField("mgmt_id", 0), |
| 363 | + FieldListField("power_requested_list", [], |
| 364 | + IntField("power_requested", 0), |
| 365 | + count_from=lambda pkt: (pkt.len - 8) // 4)] |
| 366 | + |
| 367 | + |
| 368 | +class CDPMsgPowerAvailable(CDPMsgGeneric): |
| 369 | + name = "Power Available" |
| 370 | + fields_desc = [XShortEnumField("type", 0x001a, _cdp_tlv_types), |
| 371 | + FieldLenField("len", None, "power_available_list", fmt="!H", |
| 372 | + adjust=lambda pkt, x: x + 8), |
| 373 | + ShortField("req_id", 0), |
| 374 | + ShortField("mgmt_id", 0), |
| 375 | + FieldListField("power_available_list", [], |
| 376 | + IntField("power_available", 0), |
| 377 | + count_from=lambda pkt: (pkt.len - 8) // 4)] |
357 | 378 |
|
358 | 379 |
|
359 | 380 | class CDPMsg(CDPMsgGeneric): |
|
0 commit comments