mirror of
https://github.com/tailscale/tailscale.git
synced 2025-12-03 02:21:58 +00:00
wgengine/packet: refactor and expose UDP header marshaling (#408)
Signed-off-by: Dmytro Shynkevych <dmytro@tailscale.com>
This commit is contained in:
committed by
GitHub
parent
5e0ff494a5
commit
059b1d10bb
@@ -284,6 +284,14 @@ func (p *pinger) run(ctx context.Context, peerKey wgcfg.Key, ips []wgcfg.IP, src
|
||||
close(p.done)
|
||||
}()
|
||||
|
||||
header := packet.ICMPHeader{
|
||||
IPHeader: packet.IPHeader{
|
||||
SrcIP: srcIP,
|
||||
},
|
||||
Type: packet.ICMPEchoRequest,
|
||||
Code: packet.ICMPNoCode,
|
||||
}
|
||||
|
||||
// sendFreq is slightly longer than sprayFreq in magicsock to ensure
|
||||
// that if these ping packets are the only source of early packets
|
||||
// sent to the peer, that each one will be sprayed.
|
||||
@@ -298,7 +306,7 @@ func (p *pinger) run(ctx context.Context, peerKey wgcfg.Key, ips []wgcfg.IP, src
|
||||
|
||||
payload := []byte("magicsock_spray") // no meaning
|
||||
|
||||
ipid := uint16(1)
|
||||
header.IPID = 1
|
||||
t := time.NewTicker(sendFreq)
|
||||
defer t.Stop()
|
||||
for {
|
||||
@@ -311,12 +319,13 @@ func (p *pinger) run(ctx context.Context, peerKey wgcfg.Key, ips []wgcfg.IP, src
|
||||
return
|
||||
}
|
||||
for _, dstIP := range dstIPs {
|
||||
b := packet.GenICMP(srcIP, dstIP, ipid, packet.ICMPEchoRequest, 0, payload)
|
||||
header.DstIP = dstIP
|
||||
// InjectOutbound take ownership of the packet, so we allocate.
|
||||
b := packet.Generate(&header, payload)
|
||||
p.e.tundev.InjectOutbound(b)
|
||||
}
|
||||
ipid++
|
||||
header.IPID++
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// pinger sends ping packets for a few seconds.
|
||||
|
||||
Reference in New Issue
Block a user