blob: b2696a6b160db0e65e022498d89e308c9f0b3eed [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 (
Shrey Baid688b4242020-07-10 20:40:10 +053020 "net"
21 "testing"
22
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -070023 "github.com/google/gopacket"
24 "github.com/google/gopacket/layers"
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -070025 "github.com/opencord/bbsim/internal/bbsim/packetHandlers"
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -070026 "gotest.tools/assert"
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -070027)
28
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -070029func TestPushSingleTag(t *testing.T) {
30 rawBytes := []byte{10, 20, 30}
31 srcMac := net.HardwareAddr{0xff, 0xff, 0xff, 0xff, byte(1), byte(1)}
32 dstMac := net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
33
34 ethernetLayer := &layers.Ethernet{
35 SrcMAC: srcMac,
36 DstMAC: dstMac,
37 EthernetType: 0x8100,
38 }
39
40 buffer := gopacket.NewSerializeBuffer()
Shrey Baid688b4242020-07-10 20:40:10 +053041 _ = gopacket.SerializeLayers(
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -070042 buffer,
43 gopacket.SerializeOptions{
44 FixLengths: false,
45 },
46 ethernetLayer,
47 gopacket.Payload(rawBytes),
48 )
49
50 untaggedPkt := gopacket.NewPacket(buffer.Bytes(), layers.LayerTypeEthernet, gopacket.Default)
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -070051 taggedPkt, err := packetHandlers.PushSingleTag(111, untaggedPkt)
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -070052 if err != nil {
53 t.Fail()
54 t.Logf("Error in PushSingleTag: %v", err)
55 }
56
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -070057 vlan, _ := packetHandlers.GetVlanTag(taggedPkt)
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -070058 assert.Equal(t, vlan, uint16(111))
59}
60
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -070061func TestPushDoubleTag(t *testing.T) {
62 rawBytes := []byte{10, 20, 30}
63 srcMac := net.HardwareAddr{0xff, 0xff, 0xff, 0xff, byte(1), byte(1)}
64 dstMac := net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
65
66 ethernetLayer := &layers.Ethernet{
67 SrcMAC: srcMac,
68 DstMAC: dstMac,
69 EthernetType: 0x8100,
70 }
71
72 buffer := gopacket.NewSerializeBuffer()
Shrey Baid688b4242020-07-10 20:40:10 +053073 _ = gopacket.SerializeLayers(
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -070074 buffer,
75 gopacket.SerializeOptions{
76 FixLengths: false,
77 },
78 ethernetLayer,
79 gopacket.Payload(rawBytes),
80 )
81
82 untaggedPkt := gopacket.NewPacket(buffer.Bytes(), layers.LayerTypeEthernet, gopacket.Default)
83 taggedPkt, err := packetHandlers.PushDoubleTag(900, 800, untaggedPkt)
84 if err != nil {
85 t.Fail()
86 t.Logf("Error in PushSingleTag: %v", err)
87 }
88
89 sTag, err := packetHandlers.GetVlanTag(taggedPkt)
90 if err != nil {
91 t.Fatalf(err.Error())
92 }
93 singleTagPkt, err := packetHandlers.PopSingleTag(taggedPkt)
94 if err != nil {
95 t.Fatalf(err.Error())
96 }
97 cTag, err := packetHandlers.GetVlanTag(singleTagPkt)
98 if err != nil {
99 t.Fatalf(err.Error())
100 }
101
102 assert.Equal(t, sTag, uint16(900))
103 assert.Equal(t, cTag, uint16(800))
104}
105
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -0700106func TestPopSingleTag(t *testing.T) {
107 rawBytes := []byte{10, 20, 30}
108 srcMac := net.HardwareAddr{0xff, 0xff, 0xff, 0xff, byte(1), byte(1)}
109 dstMac := net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
110
111 ethernetLayer := &layers.Ethernet{
112 SrcMAC: srcMac,
113 DstMAC: dstMac,
114 EthernetType: 0x8100,
115 }
116
117 dot1qLayer := &layers.Dot1Q{
118 Type: 0x8100,
119 VLANIdentifier: uint16(111),
120 }
121
122 buffer := gopacket.NewSerializeBuffer()
Shrey Baid688b4242020-07-10 20:40:10 +0530123 _ = gopacket.SerializeLayers(
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -0700124 buffer,
125 gopacket.SerializeOptions{
126 FixLengths: false,
127 },
128 ethernetLayer,
129 dot1qLayer,
130 gopacket.Payload(rawBytes),
131 )
132
133 untaggedPkt := gopacket.NewPacket(buffer.Bytes(), layers.LayerTypeEthernet, gopacket.Default)
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -0700134 taggedPkt, err := packetHandlers.PopSingleTag(untaggedPkt)
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -0700135 if err != nil {
136 t.Fail()
137 t.Logf("Error in PushSingleTag: %v", err)
138 }
139
Shrey Baid688b4242020-07-10 20:40:10 +0530140 vlan, _ := packetHandlers.GetVlanTag(taggedPkt)
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -0700141 assert.Equal(t, vlan, uint16(2580)) // FIXME where dows 2056 comes from??
142}
143
144func TestPopDoubleTag(t *testing.T) {
145 rawBytes := []byte{10, 20, 30}
146 srcMac := net.HardwareAddr{0xff, 0xff, 0xff, 0xff, byte(1), byte(1)}
147 dstMac := net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
148
149 ethernetLayer := &layers.Ethernet{
150 SrcMAC: srcMac,
151 DstMAC: dstMac,
152 EthernetType: 0x8100,
153 }
154
155 dot1qLayer := &layers.Dot1Q{
156 Type: 0x8100,
157 VLANIdentifier: uint16(111),
158 }
159
160 buffer := gopacket.NewSerializeBuffer()
Shrey Baid688b4242020-07-10 20:40:10 +0530161 _ = gopacket.SerializeLayers(
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -0700162 buffer,
163 gopacket.SerializeOptions{
164 FixLengths: false,
165 },
166 ethernetLayer,
167 dot1qLayer,
168 gopacket.Payload(rawBytes),
169 )
170
171 untaggedPkt := gopacket.NewPacket(buffer.Bytes(), layers.LayerTypeEthernet, gopacket.Default)
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -0700172 taggedPkt, err := packetHandlers.PopDoubleTag(untaggedPkt)
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -0700173 if err != nil {
174 t.Fail()
175 t.Logf("Error in PushSingleTag: %v", err)
176 }
177
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -0700178 vlan, err := packetHandlers.GetVlanTag(taggedPkt)
Matteo Scandolo4b3fc7e2019-09-17 16:49:54 -0700179 assert.Equal(t, vlan, uint16(0))
180 assert.Equal(t, err.Error(), "no-dot1q-layer-in-packet")
181}