Skip to content

Commit 00566d3

Browse files
committed
test (layer): added hsrpv2 tests
AI-Assisted: yes (OpenAI Codex)
1 parent 16dc529 commit 00566d3

1 file changed

Lines changed: 98 additions & 0 deletions

File tree

test/scapy/layers/hsrp.uts

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,101 @@ assert raw(
3232
reserved2=0x6f000000,
3333
)
3434
) == advertise_raw
35+
36+
= HSRPv2 - IPv4 Group State build & dissection
37+
virtual_ip4 = "192.0.2.1"
38+
virtual_ip4_raw = b"\xc0\x00\x02\x01" + b"\x00" * 12
39+
pkt = IP(raw(
40+
IP(dst="224.0.0.102") /
41+
UDP(dport=1985, sport=1985) /
42+
HSRPv2() /
43+
HSRPv2GroupStateTLV(
44+
group=2,
45+
identifier="00:05:73:a0:00:02",
46+
priority=110,
47+
hellotime=1000,
48+
holdtime=3000,
49+
virtualIP=virtual_ip4,
50+
)
51+
))
52+
assert pkt[IP].dst == "224.0.0.102" and pkt[UDP].sport == pkt[UDP].dport == 1985
53+
assert HSRPv2 in pkt and HSRPv2GroupStateTLV in pkt and HSRP not in pkt
54+
assert pkt[HSRPv2GroupStateTLV].type == 1 and pkt[HSRPv2GroupStateTLV].len == 40
55+
assert pkt[HSRPv2GroupStateTLV].version == 2 and pkt[HSRPv2GroupStateTLV].state == 6
56+
assert pkt[HSRPv2GroupStateTLV].group == 2
57+
assert pkt[HSRPv2GroupStateTLV].identifier == "00:05:73:a0:00:02"
58+
assert pkt[HSRPv2GroupStateTLV].priority == 110
59+
assert pkt[HSRPv2GroupStateTLV].hellotime == 1000
60+
assert pkt[HSRPv2GroupStateTLV].holdtime == 3000
61+
assert pkt[HSRPv2GroupStateTLV].virtualIP == virtual_ip4
62+
assert raw(pkt[HSRPv2GroupStateTLV])[-16:] == virtual_ip4_raw
63+
64+
= HSRPv2 - IPv6 Group State build & dissection
65+
if conf.ipv6_enabled:
66+
virtual_ip6 = "2001:db8::1"
67+
virtual_ip6_raw = b"\x20\x01\x0d\xb8" + b"\x00" * 11 + b"\x01"
68+
pkt = IPv6(raw(
69+
IPv6() /
70+
UDP(dport=2029, sport=2029) /
71+
HSRPv2() /
72+
HSRPv2GroupStateTLV(
73+
ipversion=6,
74+
group=2,
75+
virtualIP=virtual_ip6,
76+
)
77+
))
78+
assert pkt[IPv6].dst == "ff02::66" and pkt[UDP].sport == pkt[UDP].dport == 2029
79+
assert HSRPv2 in pkt and HSRPv2GroupStateTLV in pkt
80+
assert pkt[HSRPv2GroupStateTLV].len == 40
81+
assert pkt[HSRPv2GroupStateTLV].ipversion == 6
82+
assert pkt[HSRPv2GroupStateTLV].virtualIP == virtual_ip6
83+
assert raw(pkt[HSRPv2GroupStateTLV])[-16:] == virtual_ip6_raw
84+
85+
= HSRPv2 - multiple TLVs
86+
pkt = HSRPv2(raw(
87+
HSRPv2GroupStateTLV() /
88+
HSRPv2TextAuthTLV(auth=b"secret\x00\x00") /
89+
HSRPv2InterfaceStateTLV(activegroups=1, passivegroups=2)
90+
))
91+
assert HSRPv2GroupStateTLV in pkt
92+
assert HSRPv2TextAuthTLV in pkt
93+
assert HSRPv2InterfaceStateTLV in pkt
94+
assert pkt[HSRPv2GroupStateTLV].len == 40
95+
assert pkt[HSRPv2TextAuthTLV].len == 8 and pkt[HSRPv2TextAuthTLV].auth == b"secret\x00\x00"
96+
assert pkt[HSRPv2InterfaceStateTLV].len == 4
97+
assert pkt[HSRPv2InterfaceStateTLV].activegroups == 1
98+
assert pkt[HSRPv2InterfaceStateTLV].passivegroups == 2
99+
100+
= HSRPv2 - Unknown TLV build & dissection
101+
unknown_raw = raw(HSRPv2UnknownTLV(type=99, value=b"abcd"))
102+
pkt = HSRPv2(unknown_raw)
103+
assert unknown_raw == b"\x63\x04abcd"
104+
assert HSRPv2UnknownTLV in pkt
105+
assert pkt[HSRPv2UnknownTLV].type == 99
106+
assert pkt[HSRPv2UnknownTLV].len == 4
107+
assert pkt[HSRPv2UnknownTLV].value == b"abcd"
108+
109+
= HSRPv2 - MD5 Auth TLV build & dissection
110+
digest = b"\x11" * 16
111+
pkt = HSRPv2(raw(
112+
HSRPv2MD5AuthTLV(
113+
sourceip="192.0.2.1",
114+
keyid=7,
115+
authdigest=digest,
116+
)
117+
))
118+
assert HSRPv2MD5AuthTLV in pkt
119+
assert pkt[HSRPv2MD5AuthTLV].type == 4 and pkt[HSRPv2MD5AuthTLV].len == 28
120+
assert pkt[HSRPv2MD5AuthTLV].algo == 1
121+
assert pkt[HSRPv2MD5AuthTLV].sourceip == "192.0.2.1"
122+
assert pkt[HSRPv2MD5AuthTLV].keyid == 7
123+
assert pkt[HSRPv2MD5AuthTLV].authdigest == digest
124+
125+
= HSRPv2 - TLV length overflow
126+
try:
127+
raw(HSRPv2UnknownTLV(type=99, value=b"A" * 256))
128+
overflow_raised = False
129+
except ValueError:
130+
overflow_raised = True
131+
132+
assert overflow_raised

0 commit comments

Comments
 (0)