Skip to content

Commit 85459e1

Browse files
authored
p2p/discover: unwrap 4-in-6 UDP source addresses (#29944)
Fixes an issue where discovery responses were not recognized.
1 parent 0750cb0 commit 85459e1

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

p2p/discover/v4_udp.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,11 @@ func (t *UDPv4) readLoop(unhandled chan<- ReadPacket) {
557557
}
558558

559559
func (t *UDPv4) handlePacket(from netip.AddrPort, buf []byte) error {
560+
// Unwrap IPv4-in-6 source address.
561+
if from.Addr().Is4In6() {
562+
from = netip.AddrPortFrom(netip.AddrFrom4(from.Addr().As4()), from.Port())
563+
}
564+
560565
rawpacket, fromKey, hash, err := v4wire.Decode(buf)
561566
if err != nil {
562567
t.log.Debug("Bad discv4 packet", "addr", from, "err", err)

p2p/discover/v5_udp.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -674,6 +674,10 @@ func (t *UDPv5) readLoop() {
674674

675675
// dispatchReadPacket sends a packet into the dispatch loop.
676676
func (t *UDPv5) dispatchReadPacket(from netip.AddrPort, content []byte) bool {
677+
// Unwrap IPv4-in-6 source address.
678+
if from.Addr().Is4In6() {
679+
from = netip.AddrPortFrom(netip.AddrFrom4(from.Addr().As4()), from.Port())
680+
}
677681
select {
678682
case t.packetInCh <- ReadPacket{content, from}:
679683
return true

0 commit comments

Comments
 (0)