MCPcopy Create free account
hub / github.com/secdev/scapy / ZigbeeNWKCommandPayload

Class ZigbeeNWKCommandPayload

scapy/layers/zigbee.py:357–568  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

355
356
357class ZigbeeNWKCommandPayload(Packet):
358 name = "Zigbee Network Layer Command Payload"
359 fields_desc = [
360 ByteEnumField("cmd_identifier", 1, {
361 1: "route request",
362 2: "route reply",
363 3: "network status",
364 4: "leave",
365 5: "route record",
366 6: "rejoin request",
367 7: "rejoin response",
368 8: "link status",
369 9: "network report",
370 10: "network update",
371 11: "end device timeout request",
372 12: "end device timeout response"
373 # 0x0d - 0xff reserved
374 }),
375
376 # - Route Request Command - #
377 # Command options (1 octet)
378 ConditionalField(BitField("res1", 0, 1),
379 lambda pkt: pkt.cmd_identifier in [1, 2]),
380 ConditionalField(BitField("multicast", 0, 1),
381 lambda pkt: pkt.cmd_identifier in [1, 2]),
382 ConditionalField(BitField("dest_addr_bit", 0, 1), lambda pkt: pkt.cmd_identifier == 1), # noqa: E501
383 ConditionalField(
384 BitEnumField("many_to_one", 0, 2, {
385 0: "not_m2one", 1: "m2one_support_rrt", 2: "m2one_no_support_rrt", 3: "reserved"} # noqa: E501
386 ), lambda pkt: pkt.cmd_identifier == 1),
387 ConditionalField(BitField("res2", 0, 3), lambda pkt: pkt.cmd_identifier == 1), # noqa: E501
388
389 # - Route Reply Command - #
390 # Command options (1 octet)
391 ConditionalField(BitField("responder_addr_bit", 0, 1), lambda pkt: pkt.cmd_identifier == 2), # noqa: E501
392 ConditionalField(BitField("originator_addr_bit", 0, 1), lambda pkt: pkt.cmd_identifier == 2), # noqa: E501
393 ConditionalField(BitField("res3", 0, 4), lambda pkt: pkt.cmd_identifier == 2), # noqa: E501
394 # Route request identifier (1 octet)
395 ConditionalField(ByteField("route_request_identifier", 0),
396 lambda pkt: pkt.cmd_identifier in [1, 2]), # noqa: E501
397 # Originator address (2 octets)
398 ConditionalField(XLEShortField("originator_address", 0x0000), lambda pkt: pkt.cmd_identifier == 2), # noqa: E501
399 # Responder address (2 octets)
400 ConditionalField(XLEShortField("responder_address", 0x0000), lambda pkt: pkt.cmd_identifier == 2), # noqa: E501
401
402 # - Network Status Command - #
403 # Status code (1 octet)
404 ConditionalField(ByteEnumField("status_code", 0, {
405 0x00: "No route available",
406 0x01: "Tree link failure",
407 0x02: "Non-tree link failure",
408 0x03: "Low battery level",
409 0x04: "No routing capacity",
410 0x05: "No indirect capacity",
411 0x06: "Indirect transaction expiry",
412 0x07: "Target device unavailable",
413 0x08: "Target address unallocated",
414 0x09: "Parent link failure",

Callers

nothing calls this directly

Calls 9

ByteEnumFieldClass · 0.90
ConditionalFieldClass · 0.90
BitFieldClass · 0.90
BitEnumFieldClass · 0.90
ByteFieldClass · 0.90
XLEShortFieldClass · 0.90
dot15d4AddressFieldClass · 0.90
FieldListFieldClass · 0.90
PacketListFieldClass · 0.90

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…