blob: b05c6973944732fd0d20d3ed26bc67509a35b325 [file] [log] [blame]
Mikio Hara2a8857c2014-12-03 09:34:08 +09001// Copyright 2014 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package icmp
6
7import (
8 "net"
9 "reflect"
10 "runtime"
11 "testing"
12
13 "golang.org/x/net/ipv4"
14)
15
16var (
17 wireHeaderFromKernel = [ipv4.HeaderLen]byte{
18 0x45, 0x01, 0xbe, 0xef,
19 0xca, 0xfe, 0x45, 0xdc,
20 0xff, 0x01, 0xde, 0xad,
21 172, 16, 254, 254,
22 192, 168, 0, 1,
23 }
24 wireHeaderFromTradBSDKernel = [ipv4.HeaderLen]byte{
25 0x45, 0x01, 0xef, 0xbe,
26 0xca, 0xfe, 0x45, 0xdc,
27 0xff, 0x01, 0xde, 0xad,
28 172, 16, 254, 254,
29 192, 168, 0, 1,
30 }
31 // TODO(mikio): Add platform dependent wire header formats when
32 // we support new platforms.
33
34 testHeader = &ipv4.Header{
35 Version: ipv4.Version,
36 Len: ipv4.HeaderLen,
37 TOS: 1,
38 TotalLen: 0xbeef,
39 ID: 0xcafe,
40 Flags: ipv4.DontFragment,
41 FragOff: 1500,
42 TTL: 255,
43 Protocol: 1,
44 Checksum: 0xdead,
45 Src: net.IPv4(172, 16, 254, 254),
46 Dst: net.IPv4(192, 168, 0, 1),
47 }
48)
49
50func TestParseIPv4Header(t *testing.T) {
51 var wh []byte
52 switch runtime.GOOS {
53 case "darwin":
54 wh = wireHeaderFromTradBSDKernel[:]
55 case "freebsd":
56 if freebsdVersion >= 1000000 {
57 wh = wireHeaderFromKernel[:]
58 } else {
59 wh = wireHeaderFromTradBSDKernel[:]
60 }
61 default:
62 wh = wireHeaderFromKernel[:]
63 }
64 h, err := ParseIPv4Header(wh)
65 if err != nil {
66 t.Fatal(err)
67 }
68 if !reflect.DeepEqual(h, testHeader) {
69 t.Fatalf("got %#v; want %#v", h, testHeader)
70 }
71}