header_test.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. // Copyright 2012 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. package ipv4
  5. import (
  6. "bytes"
  7. "net"
  8. "reflect"
  9. "runtime"
  10. "testing"
  11. )
  12. var (
  13. wireHeaderFromKernel = [HeaderLen]byte{
  14. 0x45, 0x01, 0xbe, 0xef,
  15. 0xca, 0xfe, 0x45, 0xdc,
  16. 0xff, 0x01, 0xde, 0xad,
  17. 172, 16, 254, 254,
  18. 192, 168, 0, 1,
  19. }
  20. wireHeaderToKernel = [HeaderLen]byte{
  21. 0x45, 0x01, 0xbe, 0xef,
  22. 0xca, 0xfe, 0x45, 0xdc,
  23. 0xff, 0x01, 0xde, 0xad,
  24. 172, 16, 254, 254,
  25. 192, 168, 0, 1,
  26. }
  27. wireHeaderFromTradBSDKernel = [HeaderLen]byte{
  28. 0x45, 0x01, 0xdb, 0xbe,
  29. 0xca, 0xfe, 0xdc, 0x45,
  30. 0xff, 0x01, 0xde, 0xad,
  31. 172, 16, 254, 254,
  32. 192, 168, 0, 1,
  33. }
  34. wireHeaderFromFreeBSD10Kernel = [HeaderLen]byte{
  35. 0x45, 0x01, 0xef, 0xbe,
  36. 0xca, 0xfe, 0xdc, 0x45,
  37. 0xff, 0x01, 0xde, 0xad,
  38. 172, 16, 254, 254,
  39. 192, 168, 0, 1,
  40. }
  41. wireHeaderToTradBSDKernel = [HeaderLen]byte{
  42. 0x45, 0x01, 0xef, 0xbe,
  43. 0xca, 0xfe, 0xdc, 0x45,
  44. 0xff, 0x01, 0xde, 0xad,
  45. 172, 16, 254, 254,
  46. 192, 168, 0, 1,
  47. }
  48. // TODO(mikio): Add platform dependent wire header formats when
  49. // we support new platforms.
  50. testHeader = &Header{
  51. Version: Version,
  52. Len: HeaderLen,
  53. TOS: 1,
  54. TotalLen: 0xbeef,
  55. ID: 0xcafe,
  56. Flags: DontFragment,
  57. FragOff: 1500,
  58. TTL: 255,
  59. Protocol: 1,
  60. Checksum: 0xdead,
  61. Src: net.IPv4(172, 16, 254, 254),
  62. Dst: net.IPv4(192, 168, 0, 1),
  63. }
  64. )
  65. func TestMarshalHeader(t *testing.T) {
  66. b, err := testHeader.Marshal()
  67. if err != nil {
  68. t.Fatal(err)
  69. }
  70. var wh []byte
  71. if supportsNewIPInput {
  72. wh = wireHeaderToKernel[:]
  73. } else {
  74. wh = wireHeaderToTradBSDKernel[:]
  75. }
  76. if !bytes.Equal(b, wh) {
  77. t.Fatalf("got %#v; want %#v", b, wh)
  78. }
  79. }
  80. func TestParseHeader(t *testing.T) {
  81. var wh []byte
  82. if supportsNewIPInput {
  83. wh = wireHeaderFromKernel[:]
  84. } else {
  85. if runtime.GOOS == "freebsd" && freebsdVersion >= 1000000 {
  86. wh = wireHeaderFromFreeBSD10Kernel[:]
  87. } else {
  88. wh = wireHeaderFromTradBSDKernel[:]
  89. }
  90. }
  91. h, err := ParseHeader(wh)
  92. if err != nil {
  93. t.Fatal(err)
  94. }
  95. if !reflect.DeepEqual(h, testHeader) {
  96. t.Fatalf("got %#v; want %#v", h, testHeader)
  97. }
  98. }