diff options
author | Josh Bleecher Snyder <josh@tailscale.com> | 2020-08-13 15:39:09 -0700 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-01-07 14:49:37 +0100 |
commit | 347ce76bbcc6d2351dc298a1c8ca5604534bebec (patch) | |
tree | fe9a1b97b87d150f9330523c246d49791c09397a /tun/tuntest | |
parent | c4895658e629ed9d5154c73eb5585c12fdba5b4b (diff) |
tun/tuntest: make genICMPv4 allocate less
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>
Diffstat (limited to 'tun/tuntest')
-rw-r--r-- | tun/tuntest/tuntest.go | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/tun/tuntest/tuntest.go b/tun/tuntest/tuntest.go index e94c6d8..efafebe 100644 --- a/tun/tuntest/tuntest.go +++ b/tun/tuntest/tuntest.go @@ -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? |