From c70f15c47e33e541bd7fabdccdd28b46f7b18080 Mon Sep 17 00:00:00 2001 From: Abhishek Pandey Date: Sun, 20 Jul 2025 00:41:00 +0530 Subject: [PATCH 1/2] Fix: DHCPv6_am returns Reply instead of Solicit for DHCP6_Request --- scapy/layers/dhcp6.py | 2 +- test/scapy/layers/dhcp6.uts | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/scapy/layers/dhcp6.py b/scapy/layers/dhcp6.py index 84737991dff..ca24bb17b25 100644 --- a/scapy/layers/dhcp6.py +++ b/scapy/layers/dhcp6.py @@ -1875,7 +1875,7 @@ def _include_options(query, answer): client_duid = p[DHCP6OptClientId].duid resp = IPv6(src=self.src_addr, dst=req_src) resp /= UDP(sport=547, dport=546) - resp /= DHCP6_Solicit(trid=trid) + resp /= DHCP6_Reply(trid=trid) resp /= DHCP6OptServerId(duid=self.duid) resp /= DHCP6OptClientId(duid=client_duid) diff --git a/test/scapy/layers/dhcp6.uts b/test/scapy/layers/dhcp6.uts index cb87561f730..6085e3be7e6 100644 --- a/test/scapy/layers/dhcp6.uts +++ b/test/scapy/layers/dhcp6.uts @@ -1626,3 +1626,15 @@ a.sport == 546 and a.dport == 547 = DHCP6_AddrRegReply - Dispatch based on UDP port a=UDP(raw(UDP()/DHCP6_AddrRegReply())) isinstance(a.payload, DHCP6_AddrRegReply) + +############ +############ ++ DHCP6_Reply - make_reply generates DHCP6_Reply and not DHCP6_Solicit in response to DHCP6_Request + += DHCP6_Reply - Test that make_reply generates DHCP6_Reply and not DHCP6_Solicit in response to DHCP6_Request +req = IPv6(src="fe80::1", dst="ff02::1:2")/UDP(sport=546, dport=547)/DHCP6_Request(trid=1)/DHCP6OptClientId(duid=2) +am = DHCPv6_am() +am.src_addr = "fe80::2" +am.duid = 3 +reply = am.make_reply(req) +reply.haslayer(DHCP6_Reply) and not reply.haslayer(DHCP6_Solicit) \ No newline at end of file From af5a9bc2fb02a0d34bef066098faa40c4747eeb7 Mon Sep 17 00:00:00 2001 From: Abhishek Pandey Date: Sun, 20 Jul 2025 14:34:12 +0530 Subject: [PATCH 2/2] Fix assert DHCP6_Solicit CI failure --- test/answering_machines.uts | 2 +- test/scapy/layers/dhcp6.uts | 12 ------------ 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/test/answering_machines.uts b/test/answering_machines.uts index f81f4fbbe0d..bee850405cb 100644 --- a/test/answering_machines.uts +++ b/test/answering_machines.uts @@ -232,7 +232,7 @@ assert a.is_request(req) res = a.make_reply(req) assert not a.is_request(res) assert res[UDP].dport == 546 -assert res[DHCP6_Solicit] +assert res[DHCP6_Reply] a.print_reply(req, res) = WiFi_am diff --git a/test/scapy/layers/dhcp6.uts b/test/scapy/layers/dhcp6.uts index 6085e3be7e6..cb87561f730 100644 --- a/test/scapy/layers/dhcp6.uts +++ b/test/scapy/layers/dhcp6.uts @@ -1626,15 +1626,3 @@ a.sport == 546 and a.dport == 547 = DHCP6_AddrRegReply - Dispatch based on UDP port a=UDP(raw(UDP()/DHCP6_AddrRegReply())) isinstance(a.payload, DHCP6_AddrRegReply) - -############ -############ -+ DHCP6_Reply - make_reply generates DHCP6_Reply and not DHCP6_Solicit in response to DHCP6_Request - -= DHCP6_Reply - Test that make_reply generates DHCP6_Reply and not DHCP6_Solicit in response to DHCP6_Request -req = IPv6(src="fe80::1", dst="ff02::1:2")/UDP(sport=546, dport=547)/DHCP6_Request(trid=1)/DHCP6OptClientId(duid=2) -am = DHCPv6_am() -am.src_addr = "fe80::2" -am.duid = 3 -reply = am.make_reply(req) -reply.haslayer(DHCP6_Reply) and not reply.haslayer(DHCP6_Solicit) \ No newline at end of file