1// Copyright 2012 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 7package layers 8 9import ( 10 "encoding/binary" 11 "github.com/google/gopacket" 12) 13 14// EtherIP is the struct for storing RFC 3378 EtherIP packet headers. 15type EtherIP struct { 16 BaseLayer 17 Version uint8 18 Reserved uint16 19} 20 21// LayerType returns gopacket.LayerTypeEtherIP. 22func (e *EtherIP) LayerType() gopacket.LayerType { return LayerTypeEtherIP } 23 24// DecodeFromBytes decodes the given bytes into this layer. 25func (e *EtherIP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error { 26 e.Version = data[0] >> 4 27 e.Reserved = binary.BigEndian.Uint16(data[:2]) & 0x0fff 28 e.BaseLayer = BaseLayer{data[:2], data[2:]} 29 return nil 30} 31 32// CanDecode returns the set of layer types that this DecodingLayer can decode. 33func (e *EtherIP) CanDecode() gopacket.LayerClass { 34 return LayerTypeEtherIP 35} 36 37// NextLayerType returns the layer type contained by this DecodingLayer. 38func (e *EtherIP) NextLayerType() gopacket.LayerType { 39 return LayerTypeEthernet 40} 41 42func decodeEtherIP(data []byte, p gopacket.PacketBuilder) error { 43 e := &EtherIP{} 44 return decodingLayerDecoder(e, data, p) 45} 46