// Copyright 2012 Google, Inc. All rights reserved. // Copyright 2009-2011 Andreas Krennmair. 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 ( "encoding/binary" "github.com/google/gopacket" ) // UDPLite is the layer for UDP-Lite headers (rfc 3828). type UDPLite struct { BaseLayer SrcPort, DstPort UDPLitePort ChecksumCoverage uint16 Checksum uint16 sPort, dPort []byte } // LayerType returns gopacket.LayerTypeUDPLite func (u *UDPLite) LayerType() gopacket.LayerType { return LayerTypeUDPLite } func decodeUDPLite(data []byte, p gopacket.PacketBuilder) error { udp := &UDPLite{ SrcPort: UDPLitePort(binary.BigEndian.Uint16(data[0:2])), sPort: data[0:2], DstPort: UDPLitePort(binary.BigEndian.Uint16(data[2:4])), dPort: data[2:4], ChecksumCoverage: binary.BigEndian.Uint16(data[4:6]), Checksum: binary.BigEndian.Uint16(data[6:8]), BaseLayer: BaseLayer{data[:8], data[8:]}, } p.AddLayer(udp) p.SetTransportLayer(udp) return p.NextDecoder(gopacket.LayerTypePayload) } func (u *UDPLite) TransportFlow() gopacket.Flow { return gopacket.NewFlow(EndpointUDPLitePort, u.sPort, u.dPort) }