// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package testutil

import (
	"github.com/google/go-cmp/cmp"
	"gvisor.dev/gvisor/pkg/tcpip/buffer"
	"gvisor.dev/gvisor/pkg/tcpip/stack"
)

// The headers and data from a stack.PacketBuffer.
type PacketBufferParts struct {
	LinkHeader      buffer.View
	NetworkHeader   buffer.View
	TransportHeader buffer.View
	Data            buffer.View
}

// PacketBufferCmpTransformer transforms a stack.PacketBuffer to a
// PacketBufferParts which represents the PacketBuffer for the purposes of our
// tests.
var PacketBufferCmpTransformer = cmp.Transformer("packetBufferToParts", func(pkt *stack.PacketBuffer) PacketBufferParts {
	return PacketBufferParts{
		LinkHeader:      pkt.LinkHeader().View(),
		NetworkHeader:   pkt.NetworkHeader().View(),
		TransportHeader: pkt.TransportHeader().View(),
		Data:            pkt.Data().AsRange().ToOwnedView(),
	}
})
