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

Class dot15d4AddressField

scapy/layers/dot15d4.py:44–99  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

42
43
44class dot15d4AddressField(Field):
45 __slots__ = ["adjust", "length_of"]
46
47 def __init__(self, name, default, length_of=None, fmt="<H", adjust=None):
48 Field.__init__(self, name, default, fmt)
49 self.length_of = length_of
50 if adjust is not None:
51 self.adjust = adjust
52 else:
53 self.adjust = lambda pkt, x: self.lengthFromAddrMode(pkt, x)
54
55 def i2repr(self, pkt, x):
56 """Convert internal value to a nice representation"""
57 if len(hex(self.i2m(pkt, x))) < 7: # short address
58 return hex(self.i2m(pkt, x))
59 else: # long address
60 x = "%016x" % self.i2m(pkt, x)
61 return ":".join(["%s%s" % (x[i], x[i + 1]) for i in range(0, len(x), 2)]) # noqa: E501
62
63 def addfield(self, pkt, s, val):
64 """Add an internal value to a string"""
65 if self.adjust(pkt, self.length_of) == 2:
66 return s + struct.pack(self.fmt[0] + "H", val)
67 elif self.adjust(pkt, self.length_of) == 8:
68 return s + struct.pack(self.fmt[0] + "Q", val)
69 else:
70 return s
71
72 def getfield(self, pkt, s):
73 if self.adjust(pkt, self.length_of) == 2:
74 return s[2:], self.m2i(pkt, struct.unpack(self.fmt[0] + "H", s[:2])[0]) # noqa: E501
75 elif self.adjust(pkt, self.length_of) == 8:
76 return s[8:], self.m2i(pkt, struct.unpack(self.fmt[0] + "Q", s[:8])[0]) # noqa: E501
77 else:
78 raise Exception('impossible case')
79
80 def lengthFromAddrMode(self, pkt, x):
81 addrmode = 0
82 pkttop = pkt.underlayer
83 if pkttop is None:
84 warning("No underlayer to guess address mode")
85 return 0
86 while True:
87 try:
88 addrmode = pkttop.getfieldval(x)
89 break
90 except Exception:
91 if pkttop.underlayer is None:
92 break
93 pkttop = pkttop.underlayer
94 # print("Underlayer field value of", x, "is", addrmode)
95 if addrmode == 2:
96 return 2
97 elif addrmode == 3:
98 return 8
99 return 0
100
101

Callers 9

ZigbeeNWKClass · 0.90
ZigBeeBeaconClass · 0.90
ZDPDeviceAnnceClass · 0.90
Dot15d4DataClass · 0.85
Dot15d4BeaconClass · 0.85
Dot15d4CmdClass · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…