github.com/gopacket/gopacket@v1.1.0/layers/icmp6NDflags_test.go (about) 1 // Copyright 2012, Google, Inc. All rights reserved. 2 // Copyright 2009-2011 Andreas Krennmair. All rights reserved. 3 // 4 // Use of this source code is governed by a BSD-style license 5 // that can be found in the LICENSE file in the root of the source 6 // tree. 7 8 package layers 9 10 import ( 11 "testing" 12 13 "github.com/gopacket/gopacket" 14 ) 15 16 var icmp6NeighborAnnouncementData = []byte{ 17 // Ethernet layer 18 0x00, 0x1F, 0xCA, 0xB3, 0x76, 0x40, // destination 19 0x24, 0xBE, 0x05, 0x27, 0x0B, 0x17, // source 20 0x86, 0xDD, // type IPv6 21 22 // IPv6 layer 23 0x60, 0x00, 0x00, 0x00, // version; traffic class; flow label 24 0x00, 0x18, // payload length? 25 0x3A, // Next Header - IPv6-ICMP 26 0xFF, // Hop Limit 27 0x26, 0x20, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xBE, 0x05, 0xFF, 0xFE, 0x27, 0x0B, 0x17, // source 28 0xFE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1F, 0xCA, 0xFF, 0xFE, 0xB3, 0x76, 0x40, // destination 29 30 // ICMPv6 layer 31 0x88, 0x00, // ICMP type 136, code 0 32 33 0x1E, 0xD6, // checksum 34 0x40, 0x00, 0x00, 0x00, // flags & reserved 35 0x26, 0x20, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xBE, 0x05, 0xFF, 0xFE, 0x27, 0x0B, 0x17, // target address 36 } 37 38 var icmp6RouterAdvertisementData = []byte{ 39 // Ethernet layer 40 0x33, 0x33, 0x00, 0x00, 0x00, 0x01, // destination, 41 0xde, 0x42, 0x72, 0xb0, 0x1e, 0xf4, // source 42 0x86, 0xdd, 43 44 // IPv6 layer 45 0x60, 0x00, 0x00, 0x00, // version; traffic class; flow label 46 0x00, 0x20, // payload length? 47 0x3a, // Next Header - IPv6-ICMP 48 0xff, // Hop Limit 49 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x42, 0x72, 0xff, 0xfe, 0xb0, 0x1e, 0xf4, // source, 50 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // destination 51 52 // ICMPv6 layer 53 0x86, 0x00, // ICMP type 134, code 0 54 55 0x4c, 0x6b, // checksum 56 0x40, // current hop limit 57 0x00, // flags & reserves 58 0x07, 0x08, // router lifetime 59 0x00, 0x00, 0x00, 0x00, // reachable time 60 0x00, 0x00, 0x00, 0x00, //retrans time 61 0x01, 0x01, 0xde, 0x42, 0x72, 0xb0, 0x1e, 0xf4, // source link layer address 62 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x05, 0xdc, // MTU option 63 } 64 65 func TestPacketICMPv6NeighborAnnouncementFlags(t *testing.T) { 66 var ethLayer Ethernet 67 var ipV6Layer IPv6 68 var icmpLayer ICMPv6 69 70 var icmpNeighAdvLayer ICMPv6NeighborAdvertisement 71 72 parser := gopacket.NewDecodingLayerParser(LayerTypeEthernet, ðLayer, &ipV6Layer, &icmpLayer) 73 parser.IgnoreUnsupported = true 74 75 respLayers := make([]gopacket.LayerType, 0) 76 err := parser.DecodeLayers(icmp6NeighborAnnouncementData, &respLayers) 77 78 if err != nil { 79 t.Errorf("error decoding layers %s", err) 80 return 81 } 82 83 err = icmpNeighAdvLayer.DecodeFromBytes(icmpLayer.LayerPayload(), gopacket.NilDecodeFeedback) 84 if err != nil { 85 t.Errorf("Error while Decodeing From Bytes: %s", err) 86 return 87 } 88 89 if icmpNeighAdvLayer.Router() { 90 t.Errorf("This Neighbor Advertisement message's Router flag should not be set") 91 } 92 if !icmpNeighAdvLayer.Solicited() { 93 t.Errorf("This Neighbor Advertisement message's Solicited flag should be set") 94 } 95 if icmpNeighAdvLayer.Override() { 96 t.Errorf("This Neighbor Advertisement message's Override bit should not be set") 97 } 98 } 99 100 func TestPacketICMPv6RouterAnnouncementFlags(t *testing.T) { 101 var ethLayer Ethernet 102 var ipV6Layer IPv6 103 var icmpLayer ICMPv6 104 105 var icmpRouterAdvLayer ICMPv6RouterAdvertisement 106 107 parser := gopacket.NewDecodingLayerParser(LayerTypeEthernet, ðLayer, &ipV6Layer, &icmpLayer) 108 parser.IgnoreUnsupported = true 109 110 respLayers := make([]gopacket.LayerType, 0) 111 err := parser.DecodeLayers(icmp6RouterAdvertisementData, &respLayers) 112 113 if err != nil { 114 t.Errorf("error decoding layers %s", err) 115 return 116 } 117 118 err = icmpRouterAdvLayer.DecodeFromBytes(icmpLayer.LayerPayload(), gopacket.NilDecodeFeedback) 119 if err != nil { 120 t.Errorf("Error while Decodeing From Bytes: %s", err) 121 return 122 } 123 124 if icmpRouterAdvLayer.ManagedAddressConfig() { 125 t.Errorf("This Router Advertisement message's ManagedAddressConfig flag should not be set") 126 } 127 if icmpRouterAdvLayer.OtherConfig() { 128 t.Errorf("This Router Advertisement message's OtherConfig flag should not be set") 129 } 130 }