aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/google/gopacket/layers/ip6_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/google/gopacket/layers/ip6_test.go')
-rw-r--r--vendor/github.com/google/gopacket/layers/ip6_test.go430
1 files changed, 0 insertions, 430 deletions
diff --git a/vendor/github.com/google/gopacket/layers/ip6_test.go b/vendor/github.com/google/gopacket/layers/ip6_test.go
deleted file mode 100644
index ab22f17..0000000
--- a/vendor/github.com/google/gopacket/layers/ip6_test.go
+++ /dev/null
@@ -1,430 +0,0 @@
-// Copyright 2014, Google, Inc. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the LICENSE file in the root of the source
-// tree.
-
-package layers
-
-import (
- "bytes"
- "github.com/google/gopacket"
- "net"
- "reflect"
- "testing"
-)
-
-func TestSerializeIPv6HeaderTLVOptions(t *testing.T) {
- //RFC 2460 Appendix B
- /*
- Example 3
-
- A Hop-by-Hop or Destination Options header containing both options X
- and Y from Examples 1 and 2 would have one of the two following
- formats, depending on which option appeared first:
-
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Next Header | Hdr Ext Len=3 | Option Type=X |Opt Data Len=12|
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | 4-octet field |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | |
- + 8-octet field +
- | |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | PadN Option=1 |Opt Data Len=1 | 0 | Option Type=Y |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- |Opt Data Len=7 | 1-octet field | 2-octet field |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | 4-octet field |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | PadN Option=1 |Opt Data Len=2 | 0 | 0 |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- */
- opt1 := &ipv6HeaderTLVOption{}
- opt1.OptionType = 0x1e
- opt1.OptionData = []byte{0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb}
- opt1.OptionAlignment = [2]uint8{8, 2}
-
- opt2 := &ipv6HeaderTLVOption{}
- opt2.OptionType = 0x3e
- opt2.OptionData = []byte{0x11, 0x22, 0x22, 0x44, 0x44, 0x44, 0x44}
- opt2.OptionAlignment = [2]uint8{4, 3}
-
- l := serializeIPv6HeaderTLVOptions(nil, []*ipv6HeaderTLVOption{opt1, opt2}, true)
- b := make([]byte, l)
- serializeIPv6HeaderTLVOptions(b, []*ipv6HeaderTLVOption{opt1, opt2}, true)
- got := b
- want := []byte{0x1e, 0x0c, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x01, 0x01, 0x00, 0x3e, 0x07, 0x11, 0x22, 0x22, 0x44, 0x44, 0x44, 0x44, 0x01, 0x02, 0x00, 0x00}
-
- if !bytes.Equal(got, want) {
- t.Errorf("IPv6HeaderTLVOption serialize (X,Y) failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
- }
-
- /*
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Next Header | Hdr Ext Len=3 | Pad1 Option=0 | Option Type=Y |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- |Opt Data Len=7 | 1-octet field | 2-octet field |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | 4-octet field |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | PadN Option=1 |Opt Data Len=4 | 0 | 0 |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | 0 | 0 | Option Type=X |Opt Data Len=12|
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | 4-octet field |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | |
- + 8-octet field +
- | |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- */
-
- l = serializeIPv6HeaderTLVOptions(nil, []*ipv6HeaderTLVOption{opt2, opt1}, true)
- b = make([]byte, l)
- serializeIPv6HeaderTLVOptions(b, []*ipv6HeaderTLVOption{opt2, opt1}, true)
- got = b
- want = []byte{0x00, 0x3e, 0x07, 0x11, 0x22, 0x22, 0x44, 0x44, 0x44, 0x44, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb}
-
- if !bytes.Equal(got, want) {
- t.Errorf("IPv6HeaderTLVOption serialize (Y,X) failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
- }
-}
-
-var testPacketIPv6HopByHop0 = []byte{
- 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00,
-}
-
-func TestPacketIPv6HopByHop0Serialize(t *testing.T) {
- var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 2)
- var err error
-
- ip6 := &IPv6{}
- ip6.Version = 6
- ip6.NextHeader = IPProtocolIPv6HopByHop
- ip6.HopLimit = 64
- ip6.SrcIP = net.ParseIP("2001:db8::1")
- ip6.DstIP = net.ParseIP("2001:db8::2")
- serialize = append(serialize, ip6)
-
- tlv := &IPv6HopByHopOption{}
- tlv.OptionType = 0x01 //PadN
- tlv.OptionData = []byte{0x00, 0x00, 0x00, 0x00}
- hop := &IPv6HopByHop{}
- hop.Options = append(hop.Options, tlv)
- hop.NextHeader = IPProtocolNoNextHeader
- ip6.HopByHop = hop
-
- buf := gopacket.NewSerializeBuffer()
- opts := gopacket.SerializeOptions{FixLengths: true}
- err = gopacket.SerializeLayers(buf, opts, serialize...)
- if err != nil {
- t.Fatal(err)
- }
-
- got := buf.Bytes()
- want := testPacketIPv6HopByHop0
- if !bytes.Equal(got, want) {
- t.Errorf("IPv6HopByHop serialize failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
- }
-}
-
-func TestPacketIPv6HopByHop0Decode(t *testing.T) {
- ip6 := &IPv6{
- BaseLayer: BaseLayer{
- Contents: []byte{
- 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
- },
- Payload: []byte{0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00},
- },
- Version: 6,
- TrafficClass: 0,
- FlowLabel: 0,
- Length: 8,
- NextHeader: IPProtocolIPv6HopByHop,
- HopLimit: 64,
- SrcIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
- DstIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
- }
-
- hop := &ip6.hbh
- hop.ipv6ExtensionBase = ipv6ExtensionBase{
- BaseLayer: BaseLayer{
- Contents: []byte{0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00},
- Payload: []byte{},
- },
- NextHeader: IPProtocolNoNextHeader,
- HeaderLength: uint8(0),
- ActualLength: 8,
- }
- opt := &IPv6HopByHopOption{
- OptionType: uint8(0x01),
- OptionLength: uint8(0x04),
- ActualLength: 6,
- OptionData: []byte{0x00, 0x00, 0x00, 0x00},
- }
- hop.Options = append(hop.Options, opt)
- ip6.HopByHop = hop
-
- p := gopacket.NewPacket(testPacketIPv6HopByHop0, LinkTypeRaw, gopacket.Default)
- if p.ErrorLayer() != nil {
- t.Error("Failed to decode packet:", p.ErrorLayer().Error())
- }
- checkLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6HopByHop}, t)
- if got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok {
- want := ip6
- want.HopByHop = got.HopByHop // avoid comparing pointers
- if !reflect.DeepEqual(got, want) {
- t.Errorf("IPv6 packet processing failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
- }
- } else {
- t.Error("No IPv6 layer type found in packet")
- }
- if got, ok := p.Layer(LayerTypeIPv6HopByHop).(*IPv6HopByHop); ok {
- want := hop
- if !reflect.DeepEqual(got, want) {
- t.Errorf("IPv6HopByHop packet processing failed:\ngot\n%#v\n\nwant:\n%#v\n\n", got, want)
- }
- } else {
- t.Error("No IPv6HopByHop layer type found in packet")
- }
-}
-
-// testPacketIPv6Destination0 is the packet:
-// 12:40:14.429409595 IP6 2001:db8::1 > 2001:db8::2: DSTOPT no next header
-// 0x0000: 6000 0000 0008 3c40 2001 0db8 0000 0000 `.....<@........
-// 0x0010: 0000 0000 0000 0001 2001 0db8 0000 0000 ................
-// 0x0020: 0000 0000 0000 0002 3b00 0104 0000 0000 ........;.......
-var testPacketIPv6Destination0 = []byte{
- 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x3c, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00,
-}
-
-func TestPacketIPv6Destination0Serialize(t *testing.T) {
- var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 2)
- var err error
-
- ip6 := &IPv6{}
- ip6.Version = 6
- ip6.NextHeader = IPProtocolIPv6Destination
- ip6.HopLimit = 64
- ip6.SrcIP = net.ParseIP("2001:db8::1")
- ip6.DstIP = net.ParseIP("2001:db8::2")
- serialize = append(serialize, ip6)
-
- tlv := &IPv6DestinationOption{}
- tlv.OptionType = 0x01 //PadN
- tlv.OptionData = []byte{0x00, 0x00, 0x00, 0x00}
- dst := &IPv6Destination{}
- dst.Options = append(dst.Options, tlv)
- dst.NextHeader = IPProtocolNoNextHeader
- serialize = append(serialize, dst)
-
- buf := gopacket.NewSerializeBuffer()
- opts := gopacket.SerializeOptions{FixLengths: true}
- err = gopacket.SerializeLayers(buf, opts, serialize...)
- if err != nil {
- t.Fatal(err)
- }
-
- got := buf.Bytes()
- want := testPacketIPv6Destination0
- if !bytes.Equal(got, want) {
- t.Errorf("IPv6Destination serialize failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
- }
-}
-
-func TestPacketIPv6Destination0Decode(t *testing.T) {
- ip6 := &IPv6{
- BaseLayer: BaseLayer{
- Contents: []byte{
- 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x3c, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
- },
- Payload: []byte{0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00},
- },
- Version: 6,
- TrafficClass: 0,
- FlowLabel: 0,
- Length: 8,
- NextHeader: IPProtocolIPv6Destination,
- HopLimit: 64,
- SrcIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
- DstIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
- }
-
- dst := &IPv6Destination{}
- dst.BaseLayer = BaseLayer{
- Contents: []byte{0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00},
- Payload: []byte{},
- }
- dst.NextHeader = IPProtocolNoNextHeader
- dst.HeaderLength = uint8(0)
- dst.ActualLength = 8
- opt := &IPv6DestinationOption{
- OptionType: uint8(0x01),
- OptionLength: uint8(0x04),
- ActualLength: 6,
- OptionData: []byte{0x00, 0x00, 0x00, 0x00},
- }
- dst.Options = append(dst.Options, opt)
-
- p := gopacket.NewPacket(testPacketIPv6Destination0, LinkTypeRaw, gopacket.Default)
- if p.ErrorLayer() != nil {
- t.Error("Failed to decode packet:", p.ErrorLayer().Error())
- }
- checkLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6Destination}, t)
- if got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok {
- want := ip6
- if !reflect.DeepEqual(got, want) {
- t.Errorf("IPv6 packet processing failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
- }
- } else {
- t.Error("No IPv6 layer type found in packet")
- }
- if got, ok := p.Layer(LayerTypeIPv6Destination).(*IPv6Destination); ok {
- want := dst
- if !reflect.DeepEqual(got, want) {
- t.Errorf("IPv6Destination packet processing failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
- }
- } else {
- t.Error("No IPv6Destination layer type found in packet")
- }
-}
-
-var testPacketIPv6JumbogramHeader = []byte{
- 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3b, 0x00, 0xc2, 0x04, 0x00, 0x01, 0x00, 0x08,
-}
-
-func TestIPv6JumbogramSerialize(t *testing.T) {
- var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 2)
- var err error
-
- ip6 := &IPv6{}
- ip6.Version = 6
- ip6.NextHeader = IPProtocolNoNextHeader
- ip6.HopLimit = 64
- ip6.SrcIP = net.ParseIP("2001:db8::1")
- ip6.DstIP = net.ParseIP("2001:db8::2")
- serialize = append(serialize, ip6)
-
- payload := make([]byte, ipv6MaxPayloadLength+1)
- for i := range payload {
- payload[i] = 0xfe
- }
- serialize = append(serialize, gopacket.Payload(payload))
-
- buf := gopacket.NewSerializeBuffer()
- opts := gopacket.SerializeOptions{FixLengths: true}
- err = gopacket.SerializeLayers(buf, opts, serialize...)
- if err != nil {
- t.Fatal(err)
- }
-
- got := buf.Bytes()
- w := new(bytes.Buffer)
- w.Write(testPacketIPv6JumbogramHeader)
- w.Write(payload)
- want := w.Bytes()
-
- if !bytes.Equal(got, want) {
- t.Errorf("IPv6 Jumbogram serialize failed:\ngot:\n%v\n\nwant:\n%v\n\n",
- gopacket.LongBytesGoString(got), gopacket.LongBytesGoString(want))
- }
-}
-
-func TestIPv6JumbogramDecode(t *testing.T) {
- payload := make([]byte, ipv6MaxPayloadLength+1)
- for i := range payload {
- payload[i] = 0xfe
- }
-
- ip6 := &IPv6{
- BaseLayer: BaseLayer{
- Contents: []byte{
- 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
- },
- },
- Version: 6,
- TrafficClass: 0,
- FlowLabel: 0,
- Length: 0,
- NextHeader: IPProtocolIPv6HopByHop,
- HopLimit: 64,
- SrcIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
- DstIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
- }
- buf := new(bytes.Buffer)
- buf.Write([]byte{0x3b, 0x00, 0xc2, 0x04, 0x00, 0x01, 0x00, 0x08})
- buf.Write(payload)
- ip6.Payload = buf.Bytes()
-
- hop := &ip6.hbh
- hop.Contents = []byte{0x3b, 0x00, 0xc2, 0x04, 0x00, 0x01, 0x00, 0x08}
- hop.Payload = payload
- hop.NextHeader = IPProtocolNoNextHeader
- hop.HeaderLength = uint8(0)
- hop.ActualLength = 8
- opt := &IPv6HopByHopOption{}
- opt.OptionType = uint8(0xc2)
- opt.OptionLength = uint8(0x04)
- opt.ActualLength = 6
- opt.OptionData = []byte{0x00, 0x01, 0x00, 0x08}
- hop.Options = append(hop.Options, opt)
- ip6.HopByHop = hop
-
- pkt := new(bytes.Buffer)
- pkt.Write(testPacketIPv6JumbogramHeader)
- pkt.Write(payload)
-
- p := gopacket.NewPacket(pkt.Bytes(), LinkTypeRaw, gopacket.Default)
- if p.ErrorLayer() != nil {
- t.Error("Failed to decode packet:", p.ErrorLayer().Error())
- }
- checkLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6HopByHop, gopacket.LayerTypePayload}, t)
-
- if got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok {
- want := ip6
- want.HopByHop = got.HopByHop // Hack, avoid comparing pointers
- if !reflect.DeepEqual(got, want) {
- t.Errorf("IPv6 packet processing failed:\ngot:\n%v\n\nwant:\n%v\n\n",
- gopacket.LayerGoString(got), gopacket.LayerGoString(want))
- }
- } else {
- t.Error("No IPv6 layer type found in packet")
- }
-
- if got, ok := p.Layer(LayerTypeIPv6HopByHop).(*IPv6HopByHop); ok {
- want := hop
- if !reflect.DeepEqual(got, want) {
- t.Errorf("IPv6HopByHop packet processing failed:\ngot:\n%v\n\nwant:\n%v\n\n",
- gopacket.LayerGoString(got), gopacket.LayerGoString(want))
- }
- } else {
- t.Error("No IPv6HopByHop layer type found in packet")
- }
-
- if got, ok := p.Layer(gopacket.LayerTypePayload).(*gopacket.Payload); ok {
- want := (*gopacket.Payload)(&payload)
- if !reflect.DeepEqual(got, want) {
- t.Errorf("Payload packet processing failed:\ngot:\n%v\n\nwant:\n%v\n\n",
- gopacket.LayerGoString(got), gopacket.LayerGoString(want))
- }
- } else {
- t.Error("No Payload layer type found in packet")
- }
-}