]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
tun/tuntest: make genICMPv4 allocate less
authorJosh Bleecher Snyder <josharian@gmail.com>
Thu, 13 Aug 2020 22:39:09 +0000 (15:39 -0700)
committerJosh Bleecher Snyder <josh@tailscale.com>
Tue, 8 Dec 2020 22:27:36 +0000 (14:27 -0800)
It doesn't really matter, because it is only used in tests,
but it does remove some noise from pprof profiles.

Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
tun/tuntest/tuntest.go

index e94c6d80f10cc67e38c2a9fea00e063fb1d94dd0..efafebe5cec36540a220e7d1e829db4f89c69e9f 100644 (file)
@@ -50,12 +50,13 @@ func genICMPv4(payload []byte, dst, src net.IP) []byte {
                ipv4TotalLenOffset   = 2
                ipv4ChecksumOffset   = 10
                ttl                  = 65
+               headerSize           = ipv4Size + icmpv4Size
        )
 
-       hdr := make([]byte, ipv4Size+icmpv4Size)
+       pkt := make([]byte, headerSize+len(payload))
 
-       ip := hdr[0:ipv4Size]
-       icmpv4 := hdr[ipv4Size : ipv4Size+icmpv4Size]
+       ip := pkt[0:ipv4Size]
+       icmpv4 := pkt[ipv4Size : ipv4Size+icmpv4Size]
 
        // https://tools.ietf.org/html/rfc792
        icmpv4[0] = icmpv4Echo // type
@@ -64,7 +65,7 @@ func genICMPv4(payload []byte, dst, src net.IP) []byte {
        binary.BigEndian.PutUint16(icmpv4[icmpv4ChecksumOffset:], chksum)
 
        // https://tools.ietf.org/html/rfc760 section 3.1
-       length := uint16(len(hdr) + len(payload))
+       length := uint16(len(pkt))
        ip[0] = (4 << 4) | (ipv4Size / 4)
        binary.BigEndian.PutUint16(ip[ipv4TotalLenOffset:], length)
        ip[8] = ttl
@@ -74,10 +75,8 @@ func genICMPv4(payload []byte, dst, src net.IP) []byte {
        chksum = ^checksum(ip[:], 0)
        binary.BigEndian.PutUint16(ip[ipv4ChecksumOffset:], chksum)
 
-       var v []byte
-       v = append(v, hdr...)
-       v = append(v, payload...)
-       return []byte(v)
+       copy(pkt[headerSize:], payload)
+       return pkt
 }
 
 // TODO(crawshaw): find a reusable home for this. package devicetest?