summaryrefslogtreecommitdiffhomepage
path: root/pkg/tcpip/packet_buffer.go
diff options
context:
space:
mode:
authorKevin Krakauer <krakauer@google.com>2019-11-14 10:14:07 -0800
committergVisor bot <gvisor-bot@google.com>2019-11-14 10:15:38 -0800
commit3f7d9370909a598cf83dfa07a1e87545a66e182f (patch)
treeb348ff082a8fabc584694b19c1d812541eb9e12b /pkg/tcpip/packet_buffer.go
parent1e55eb3800a60c1a1118b84f2534b78481702f38 (diff)
Use PacketBuffers for outgoing packets.
PiperOrigin-RevId: 280455453
Diffstat (limited to 'pkg/tcpip/packet_buffer.go')
-rw-r--r--pkg/tcpip/packet_buffer.go21
1 files changed, 13 insertions, 8 deletions
diff --git a/pkg/tcpip/packet_buffer.go b/pkg/tcpip/packet_buffer.go
index 10b04239d..695f7b188 100644
--- a/pkg/tcpip/packet_buffer.go
+++ b/pkg/tcpip/packet_buffer.go
@@ -31,12 +31,19 @@ type PacketBuffer struct {
// or otherwise modified.
Data buffer.VectorisedView
+ // Header holds the headers of outbound packets. As a packet is passed
+ // down the stack, each layer adds to Header.
+ Header buffer.Prependable
+
+ // These fields are used by both inbound and outbound packets. They
+ // typically overlap with the Data and Header fields.
+ //
// The bytes backing these views are immutable. Each field may be nil
// if either it has not been set yet or no such header exists (e.g.
// packets sent via loopback may not have a link header).
//
- // These fields may be Views into other Views. SR dosen't support this,
- // so deep copies are necessary in some cases.
+ // These fields may be Views into other slices (either Data or Header).
+ // SR dosen't support this, so deep copies are necessary in some cases.
LinkHeader buffer.View
NetworkHeader buffer.View
TransportHeader buffer.View
@@ -44,11 +51,9 @@ type PacketBuffer struct {
// Clone makes a copy of pk. It clones the Data field, which creates a new
// VectorisedView but does not deep copy the underlying bytes.
+//
+// Clone also does not deep copy any of its other fields.
func (pk PacketBuffer) Clone() PacketBuffer {
- return PacketBuffer{
- Data: pk.Data.Clone(nil),
- LinkHeader: pk.LinkHeader,
- NetworkHeader: pk.NetworkHeader,
- TransportHeader: pk.TransportHeader,
- }
+ pk.Data = pk.Data.Clone(nil)
+ return pk
}