blob: 9ab5112edf4c42ff087d8accdf70754223364f0b [file] [log] [blame]
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -07001/*
2 * Copyright 2018-present Open Networking Foundation
3
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7
8 * http://www.apache.org/licenses/LICENSE-2.0
9
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -070017package packetHandlers_test
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -070018
19import (
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -070020 "github.com/google/gopacket"
21 "github.com/google/gopacket/layers"
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -070022 "github.com/opencord/bbsim/internal/bbsim/packetHandlers"
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -070023 "gotest.tools/assert"
24 "net"
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -070025 "testing"
26)
27
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -070028func TestPushSingleTag(t *testing.T) {
29 rawBytes := []byte{10, 20, 30}
30 srcMac := net.HardwareAddr{0xff, 0xff, 0xff, 0xff, byte(1), byte(1)}
31 dstMac := net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
32
33 ethernetLayer := &layers.Ethernet{
34 SrcMAC: srcMac,
35 DstMAC: dstMac,
36 EthernetType: 0x8100,
37 }
38
39 buffer := gopacket.NewSerializeBuffer()
40 gopacket.SerializeLayers(
41 buffer,
42 gopacket.SerializeOptions{
43 FixLengths: false,
44 },
45 ethernetLayer,
46 gopacket.Payload(rawBytes),
47 )
48
49 untaggedPkt := gopacket.NewPacket(buffer.Bytes(), layers.LayerTypeEthernet, gopacket.Default)
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -070050 taggedPkt, err := packetHandlers.PushSingleTag(111, untaggedPkt)
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -070051 if err != nil {
52 t.Fail()
53 t.Logf("Error in PushSingleTag: %v", err)
54 }
55
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -070056 vlan, _ := packetHandlers.GetVlanTag(taggedPkt)
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -070057 assert.Equal(t, vlan, uint16(111))
58}
59
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -070060func TestPushDoubleTag(t *testing.T) {
61 rawBytes := []byte{10, 20, 30}
62 srcMac := net.HardwareAddr{0xff, 0xff, 0xff, 0xff, byte(1), byte(1)}
63 dstMac := net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
64
65 ethernetLayer := &layers.Ethernet{
66 SrcMAC: srcMac,
67 DstMAC: dstMac,
68 EthernetType: 0x8100,
69 }
70
71 buffer := gopacket.NewSerializeBuffer()
72 gopacket.SerializeLayers(
73 buffer,
74 gopacket.SerializeOptions{
75 FixLengths: false,
76 },
77 ethernetLayer,
78 gopacket.Payload(rawBytes),
79 )
80
81 untaggedPkt := gopacket.NewPacket(buffer.Bytes(), layers.LayerTypeEthernet, gopacket.Default)
82 taggedPkt, err := packetHandlers.PushDoubleTag(900, 800, untaggedPkt)
83 if err != nil {
84 t.Fail()
85 t.Logf("Error in PushSingleTag: %v", err)
86 }
87
88 sTag, err := packetHandlers.GetVlanTag(taggedPkt)
89 if err != nil {
90 t.Fatalf(err.Error())
91 }
92 singleTagPkt, err := packetHandlers.PopSingleTag(taggedPkt)
93 if err != nil {
94 t.Fatalf(err.Error())
95 }
96 cTag, err := packetHandlers.GetVlanTag(singleTagPkt)
97 if err != nil {
98 t.Fatalf(err.Error())
99 }
100
101 assert.Equal(t, sTag, uint16(900))
102 assert.Equal(t, cTag, uint16(800))
103}
104
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -0700105func TestPopSingleTag(t *testing.T) {
106 rawBytes := []byte{10, 20, 30}
107 srcMac := net.HardwareAddr{0xff, 0xff, 0xff, 0xff, byte(1), byte(1)}
108 dstMac := net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
109
110 ethernetLayer := &layers.Ethernet{
111 SrcMAC: srcMac,
112 DstMAC: dstMac,
113 EthernetType: 0x8100,
114 }
115
116 dot1qLayer := &layers.Dot1Q{
117 Type: 0x8100,
118 VLANIdentifier: uint16(111),
119 }
120
121 buffer := gopacket.NewSerializeBuffer()
122 gopacket.SerializeLayers(
123 buffer,
124 gopacket.SerializeOptions{
125 FixLengths: false,
126 },
127 ethernetLayer,
128 dot1qLayer,
129 gopacket.Payload(rawBytes),
130 )
131
132 untaggedPkt := gopacket.NewPacket(buffer.Bytes(), layers.LayerTypeEthernet, gopacket.Default)
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -0700133 taggedPkt, err := packetHandlers.PopSingleTag(untaggedPkt)
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -0700134 if err != nil {
135 t.Fail()
136 t.Logf("Error in PushSingleTag: %v", err)
137 }
138
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -0700139 vlan, err := packetHandlers.GetVlanTag(taggedPkt)
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -0700140 assert.Equal(t, vlan, uint16(2580)) // FIXME where dows 2056 comes from??
141}
142
143func TestPopDoubleTag(t *testing.T) {
144 rawBytes := []byte{10, 20, 30}
145 srcMac := net.HardwareAddr{0xff, 0xff, 0xff, 0xff, byte(1), byte(1)}
146 dstMac := net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
147
148 ethernetLayer := &layers.Ethernet{
149 SrcMAC: srcMac,
150 DstMAC: dstMac,
151 EthernetType: 0x8100,
152 }
153
154 dot1qLayer := &layers.Dot1Q{
155 Type: 0x8100,
156 VLANIdentifier: uint16(111),
157 }
158
159 buffer := gopacket.NewSerializeBuffer()
160 gopacket.SerializeLayers(
161 buffer,
162 gopacket.SerializeOptions{
163 FixLengths: false,
164 },
165 ethernetLayer,
166 dot1qLayer,
167 gopacket.Payload(rawBytes),
168 )
169
170 untaggedPkt := gopacket.NewPacket(buffer.Bytes(), layers.LayerTypeEthernet, gopacket.Default)
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -0700171 taggedPkt, err := packetHandlers.PopDoubleTag(untaggedPkt)
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -0700172 if err != nil {
173 t.Fail()
174 t.Logf("Error in PushSingleTag: %v", err)
175 }
176
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -0700177 vlan, err := packetHandlers.GetVlanTag(taggedPkt)
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -0700178 assert.Equal(t, vlan, uint16(0))
179 assert.Equal(t, err.Error(), "no-dot1q-layer-in-packet")
180}