1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
// Copyright 2012 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 (
"testing"
"github.com/gopacket/gopacket"
)
// testPacketRadiotap0 is the packet:
//
// 09:34:34.799438 1.0 Mb/s 2412 MHz 11b -58dB signal antenna 7 Acknowledgment RA:88:1f:a1:ae:9d:cb
// 0x0000: 0000 1200 2e48 0000 1002 6c09 a000 c607 .....H....l.....
// 0x0010: 0000 d400 0000 881f a1ae 9dcb c630 4b4b .............0KK
var testPacketRadiotap0 = []byte{
0x00, 0x00, 0x12, 0x00, 0x2e, 0x48, 0x00, 0x00, 0x10, 0x02, 0x6c, 0x09, 0xa0, 0x00, 0xc6, 0x07,
0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x88, 0x1f, 0xa1, 0xae, 0x9d, 0xcb, 0xc6, 0x30, 0x4b, 0x4b,
}
func TestPacketRadiotap0(t *testing.T) {
p := gopacket.NewPacket(testPacketRadiotap0, LayerTypeRadioTap, gopacket.Default)
if p.ErrorLayer() != nil {
t.Error("Failed to decode packet:", p.ErrorLayer().Error())
}
checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11}, t)
rt := p.Layer(LayerTypeRadioTap).(*RadioTap)
if rt.ChannelFrequency != 2412 || rt.DBMAntennaSignal != -58 || rt.Antenna != 7 {
t.Error("Radiotap decode error")
}
if rt.Rate != 2 { // 500Kbps unit
t.Error("Radiotap Rate decode error")
}
}
func BenchmarkDecodePacketRadiotap0(b *testing.B) {
for i := 0; i < b.N; i++ {
gopacket.NewPacket(testPacketRadiotap0, LayerTypeRadioTap, gopacket.NoCopy)
}
}
// testPacketRadiotap1 is the packet:
//
// 05:24:21.380948 2412 MHz 11g -36dB signal antenna 5 65.0 Mb/s MCS 7 20 MHz lon GI
// 0x0000: 0000 1500 2a48 0800 1000 6c09 8004 dc05 ....*H....l.....
// 0x0010: 0000 0700 0748 112c 0000 3a9d aaf0 191c .....H.,..:.....
// 0x0020: aba7 f213 9d00 3a9d aaf0 1970 b2ee a9f1 ......:....p....
// 0x0030: 16 .
var testPacketRadiotap1 = []byte{
0x00, 0x00, 0x15, 0x00, 0x2a, 0x48, 0x08, 0x00, 0x10, 0x00, 0x6c, 0x09, 0x80, 0x04, 0xdc, 0x05,
0x00, 0x00, 0x07, 0x00, 0x07, 0x48, 0x11, 0x2c, 0x00, 0x00, 0x3a, 0x9d, 0xaa, 0xf0, 0x19, 0x1c,
0xab, 0xa7, 0xf2, 0x13, 0x9d, 0x00, 0x3a, 0x9d, 0xaa, 0xf0, 0x19, 0x70, 0xb2, 0xee, 0xa9, 0xf1,
0x16,
}
func TestPacketRadiotap1(t *testing.T) {
p := gopacket.NewPacket(testPacketRadiotap1, LayerTypeRadioTap, gopacket.Default)
if p.ErrorLayer() != nil {
t.Error("Failed to decode packet:", p.ErrorLayer().Error())
}
checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11}, t)
rt := p.Layer(LayerTypeRadioTap).(*RadioTap)
if rt.ChannelFrequency != 2412 || rt.DBMAntennaSignal != -36 || rt.Antenna != 5 {
t.Error("Radiotap decode error")
}
if !rt.MCS.Known.MCSIndex() || rt.MCS.MCS != 7 {
t.Error("Radiotap MCS error")
}
if !rt.MCS.Known.Bandwidth() || rt.MCS.Flags.Bandwidth() != 0 {
t.Error("Radiotap bandwidth error")
}
if !rt.MCS.Known.GuardInterval() || rt.MCS.Flags.ShortGI() {
t.Error("Radiotap GI error")
}
}
func BenchmarkDecodePacketRadiotap1(b *testing.B) {
for i := 0; i < b.N; i++ {
gopacket.NewPacket(testPacketRadiotap1, LayerTypeRadioTap, gopacket.NoCopy)
}
}
// testPacketRadiotap2 is the packet:
//
// 09:34:34.799438 1.0 Mb/s 2412 MHz 11b -58dB signal antenna 7 Acknowledgment RA:88:1f:a1:ae:9d:cb
// 0x0000: 0000 ff00 2e48 0000 1002 6c09 a000 c607 .....H....l.....
// 0x0010: 0000 d400 0000 881f a1ae 9dcb c630 4b4b .............0KK
//
// Test when the RadioTap size is too large, but still process the RadioTap
var testPacketRadiotap2 = []byte{
0x00, 0x00, 0xff, 0x00, 0x2e, 0x48, 0x00, 0x00, 0x10, 0x02, 0x6c, 0x09, 0xa0, 0x00, 0xc6, 0x07,
0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x88, 0x1f, 0xa1, 0xae, 0x9d, 0xcb, 0xc6, 0x30, 0x4b, 0x4b,
}
func TestPacketRadiotap2(t *testing.T) {
p := gopacket.NewPacket(testPacketRadiotap2, LayerTypeRadioTap, gopacket.Default)
if p.ErrorLayer() != nil {
t.Error("Failed to decode packet:", p.ErrorLayer().Error())
}
checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap}, t)
rt := p.Layer(LayerTypeRadioTap).(*RadioTap)
if rt.ChannelFrequency != 2412 || rt.DBMAntennaSignal != -58 || rt.Antenna != 7 {
t.Error("Radiotap decode error")
}
if rt.Rate != 2 { // 500Kbps unit
t.Error("Radiotap Rate decode error")
}
}
// testPacketRadiotap3 is a HE-SU packet with a timestamp field
var testPacketRadiotap3 = []byte{
0x00, 0x00, 0x4c, 0x00, 0x2b, 0x40, 0xd0, 0xa0, 0x20, 0x08, 0x00, 0xa0, 0x20, 0x08, 0x00, 0x00,
0x27, 0xd7, 0x74, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x14, 0x40, 0x01, 0xd8, 0x00,
0x00, 0x00, 0x00, 0x00, 0x4f, 0x22, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x27, 0xd7, 0x74, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0xfc, 0xc7, 0x72, 0x00,
0xc0, 0x28, 0x00, 0x00, 0x92, 0x80, 0x02, 0x0e, 0xd0, 0x00, 0xd8, 0x01, 0x88, 0x41, 0x38, 0x00,
0x5c, 0xe9, 0x31, 0xff, 0xc3, 0x29, 0x84, 0x7b, 0x57, 0xfb, 0x4d, 0x11, 0x5c, 0xe9, 0x31, 0xff,
0xc3, 0x27, 0x40, 0x9d, 0x10, 0xb8, 0xd3, 0x49, 0x00, 0x20, 0x4b, 0x00, 0x00, 0x00, 0x95, 0xcd,
0xbe, 0xfd, 0xa5, 0xd2, 0xc9, 0x60, 0xd7, 0x0a, 0xdf, 0x7f, 0x21, 0xca, 0x38, 0xc4, 0xd4, 0x66,
0x4c, 0xe0, 0xda, 0xc0, 0x01, 0x8b, 0x2a, 0xc1, 0x7f, 0xbf, 0xb4, 0x5d, 0x8b, 0xdb, 0xba, 0x83,
0x76, 0x2f, 0x79, 0xd0, 0xc3, 0xf7, 0x08, 0xf1, 0xc9, 0x36, 0xbf, 0xb3, 0x24, 0x2d, 0xc9, 0xe8,
0x53, 0x93, 0x85, 0x91, 0xe3, 0xfb,
}
func TestPacketRadiotap3(t *testing.T) {
p := gopacket.NewPacket(testPacketRadiotap3, LayerTypeRadioTap, gopacket.Default)
if p.ErrorLayer() != nil {
t.Error("Failed to decode packet:", p.ErrorLayer().Error())
}
checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap}, t)
rt := p.Layer(LayerTypeRadioTap).(*RadioTap)
if !rt.HE.Data1.DataMCSKnown() {
t.Error("Radiotap HE Data1 MCS unknown")
} else if rt.HE.Data3.DataMCS() != 8 {
t.Error("Radiotap HE MCS error")
}
if !rt.HE.Data1.CodingKnown() {
t.Error("Radiotap HE Data1 Coding unknown")
} else if rt.HE.Data3.Coding() != RadiotapHECodingLDPC {
t.Error("Radiotap HE Coding error")
}
if !rt.HE.Data1.BeamChangeKnown() {
t.Error("Radiotap HE Data1 Beam Change unknown")
} else if !rt.HE.Data3.BeamChange() {
t.Error("Radiotap HE Beam Change error")
}
if rt.HE.Data5.DataBandwidth() != DataBandwidth80 {
t.Error("Radiotap HE Bandwidth error")
}
if rt.HE.Data1.HE_PPDUFormat() != RadiotapHePpduFormatHE_SU {
t.Error("Radiotap HE PPDU Format error")
}
}
|