github.com/gopacket/gopacket@v1.1.0/layers/base.go (about)

     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  
     7  package layers
     8  
     9  import (
    10  	"github.com/gopacket/gopacket"
    11  )
    12  
    13  // BaseLayer is a convenience struct which implements the LayerData and
    14  // LayerPayload functions of the Layer interface.
    15  type BaseLayer struct {
    16  	// Contents is the set of bytes that make up this layer.  IE: for an
    17  	// Ethernet packet, this would be the set of bytes making up the
    18  	// Ethernet frame.
    19  	Contents []byte
    20  	// Payload is the set of bytes contained by (but not part of) this
    21  	// Layer.  Again, to take Ethernet as an example, this would be the
    22  	// set of bytes encapsulated by the Ethernet protocol.
    23  	Payload []byte
    24  }
    25  
    26  // LayerContents returns the bytes of the packet layer.
    27  func (b *BaseLayer) LayerContents() []byte { return b.Contents }
    28  
    29  // LayerPayload returns the bytes contained within the packet layer.
    30  func (b *BaseLayer) LayerPayload() []byte { return b.Payload }
    31  
    32  type layerDecodingLayer interface {
    33  	gopacket.Layer
    34  	DecodeFromBytes([]byte, gopacket.DecodeFeedback) error
    35  	NextLayerType() gopacket.LayerType
    36  }
    37  
    38  func decodingLayerDecoder(d layerDecodingLayer, data []byte, p gopacket.PacketBuilder) error {
    39  	err := d.DecodeFromBytes(data, p)
    40  	if err != nil {
    41  		return err
    42  	}
    43  	p.AddLayer(d)
    44  	next := d.NextLayerType()
    45  	if next == gopacket.LayerTypeZero {
    46  		return nil
    47  	}
    48  	return p.NextDecoder(next)
    49  }
    50  
    51  // hacky way to zero out memory... there must be a better way?
    52  var lotsOfZeros [1024]byte