e0a2b95ecb23666b386feb63edbbd7edd9d19591
[govpp.git] / vendor / github.com / google / gopacket / layers / mpls_test.go
1 // Copyright 2016 Google, Inc. All rights reserved.
2 //
3 // Use of this source code is governed by a BSD-style license
4 // that can be found in the LICENSE file in the root of the source
5 // tree.
6
7 package layers
8
9 import (
10         "reflect"
11         "testing"
12
13         "github.com/google/gopacket"
14 )
15
16 // testPacketMPLS
17 // Ethernet II, Src: cc:15:14:64:00:00 (cc:15:14:64:00:00), Dst: cc:13:14:64:00:01 (cc:13:14:64:00:01)
18 // MultiProtocol Label Switching Header, Label: 17, Exp: 0, S: 0, TTL: 254
19 // MultiProtocol Label Switching Header, Label: 19, Exp: 0, S: 1, TTL: 254
20 // Internet Protocol Version 4, Src: 12.0.0.1, Dst: 2.2.2.2
21 // Internet Control Message Protocol
22 // 0000   cc 13 14 64 00 01 cc 15 14 64 00 00 88 47 00 01  ...d.....d...G..
23 // 0010   10 fe 00 01 31 fe 45 00 00 64 00 39 00 00 fe 01  ....1.E..d.9....
24 // 0020   ac 5b 0c 00 00 01 02 02 02 02 08 00 3a 6b 00 0b  .[..........:k..
25 // 0030   00 02 00 00 00 00 00 3e 43 94 ab cd ab cd ab cd  .......>C.......
26 // 0040   ab cd ab cd ab cd ab cd ab cd ab cd ab cd ab cd  ................
27 // 0050   ab cd ab cd ab cd ab cd ab cd ab cd ab cd ab cd  ................
28 // 0060   ab cd ab cd ab cd ab cd ab cd ab cd ab cd ab cd  ................
29 // 0070   ab cd ab cd ab cd ab cd ab cd                    ..........
30
31 var testPacketMPLS = []byte{
32         0xcc, 0x13, 0x14, 0x64, 0x00, 0x01, 0xcc, 0x15, 0x14, 0x64, 0x00, 0x00, 0x88, 0x47, 0x00, 0x01,
33         0x10, 0xfe, 0x00, 0x01, 0x31, 0xfe, 0x45, 0x00, 0x00, 0x64, 0x00, 0x39, 0x00, 0x00, 0xfe, 0x01,
34         0xac, 0x5b, 0x0c, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x08, 0x00, 0x3a, 0x6b, 0x00, 0x0b,
35         0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x43, 0x94, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
36         0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
37         0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
38         0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
39         0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
40 }
41
42 func TestPacketMPLS(t *testing.T) {
43         p := gopacket.NewPacket(testPacketMPLS, LinkTypeEthernet, gopacket.Default)
44         if p.ErrorLayer() != nil {
45                 t.Error("Failed to decode packet:", p.ErrorLayer().Error())
46         }
47         checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeMPLS, LayerTypeMPLS, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
48         if got, ok := p.Layers()[1].(*MPLS); ok {
49                 want := &MPLS{
50                         BaseLayer: BaseLayer{
51                                 Contents: []byte{0x00, 0x01, 0x10, 0xfe},
52                                 Payload: []byte{0x00, 0x01, 0x31, 0xfe, 0x45, 0x00, 0x00, 0x64, 0x00, 0x39, 0x00, 0x00, 0xfe, 0x01,
53                                         0xac, 0x5b, 0x0c, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x08, 0x00, 0x3a, 0x6b, 0x00, 0x0b,
54                                         0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x43, 0x94, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
55                                         0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
56                                         0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
57                                         0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
58                                         0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd},
59                         },
60                         Label:        17,
61                         TrafficClass: 0,
62                         StackBottom:  false,
63                         TTL:          254,
64                 }
65                 if !reflect.DeepEqual(want, got) {
66                         t.Errorf("MPLS layer 1 mismatch, \nwant %#v\ngot %#v\n", want, got)
67                 }
68         }
69         if got, ok := p.Layers()[2].(*MPLS); ok {
70                 want := &MPLS{
71                         BaseLayer: BaseLayer{
72                                 Contents: []byte{0x00, 0x01, 0x31, 0xfe},
73                                 Payload: []byte{0x45, 0x00, 0x00, 0x64, 0x00, 0x39, 0x00, 0x00, 0xfe, 0x01,
74                                         0xac, 0x5b, 0x0c, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x08, 0x00, 0x3a, 0x6b, 0x00, 0x0b,
75                                         0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x43, 0x94, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
76                                         0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
77                                         0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
78                                         0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
79                                         0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd},
80                         },
81                         Label:        19,
82                         TrafficClass: 0,
83                         StackBottom:  true,
84                         TTL:          254,
85                 }
86                 if !reflect.DeepEqual(want, got) {
87                         t.Errorf("MPLS layer 2 mismatch, \nwant %#v\ngot %#v\n", want, got)
88                 }
89         }
90 }
91
92 func BenchmarkDecodePacketMPLS(b *testing.B) {
93         for i := 0; i < b.N; i++ {
94                 gopacket.NewPacket(testPacketMPLS, LinkTypeEthernet, gopacket.NoCopy)
95         }
96 }