summaryrefslogtreecommitdiffhomepage
path: root/pkg/tcpip/link/fdbased
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/tcpip/link/fdbased')
-rw-r--r--pkg/tcpip/link/fdbased/endpoint.go12
-rw-r--r--pkg/tcpip/link/fdbased/endpoint_test.go7
2 files changed, 11 insertions, 8 deletions
diff --git a/pkg/tcpip/link/fdbased/endpoint.go b/pkg/tcpip/link/fdbased/endpoint.go
index 449acdfdd..12c249c0d 100644
--- a/pkg/tcpip/link/fdbased/endpoint.go
+++ b/pkg/tcpip/link/fdbased/endpoint.go
@@ -161,10 +161,12 @@ func (e *endpoint) LinkAddress() tcpip.LinkAddress {
// WritePacket writes outbound packets to the file descriptor. If it is not
// currently writable, the packet is dropped.
-func (e *endpoint) WritePacket(r *stack.Route, hdr *buffer.Prependable, payload buffer.View, protocol tcpip.NetworkProtocolNumber) *tcpip.Error {
+func (e *endpoint) WritePacket(r *stack.Route, hdr *buffer.Prependable, payload buffer.VectorisedView, protocol tcpip.NetworkProtocolNumber) *tcpip.Error {
if e.handleLocal && r.LocalAddress != "" && r.LocalAddress == r.RemoteAddress {
- hdrView := hdr.View()
- vv := buffer.NewVectorisedView(len(hdrView)+len(payload), []buffer.View{hdrView, payload})
+ views := make([]buffer.View, 1, 1+len(payload.Views()))
+ views[0] = hdr.View()
+ views = append(views, payload.Views()...)
+ vv := buffer.NewVectorisedView(len(views[0])+payload.Size(), views)
e.dispatcher.DeliverNetworkPacket(e, r.RemoteLinkAddress, protocol, &vv)
return nil
}
@@ -178,11 +180,11 @@ func (e *endpoint) WritePacket(r *stack.Route, hdr *buffer.Prependable, payload
})
}
- if len(payload) == 0 {
+ if payload.Size() == 0 {
return rawfile.NonBlockingWrite(e.fd, hdr.UsedBytes())
}
- return rawfile.NonBlockingWrite2(e.fd, hdr.UsedBytes(), payload)
+ return rawfile.NonBlockingWrite2(e.fd, hdr.UsedBytes(), payload.ToView())
}
func (e *endpoint) capViews(n int, buffers []int) int {
diff --git a/pkg/tcpip/link/fdbased/endpoint_test.go b/pkg/tcpip/link/fdbased/endpoint_test.go
index 89e791543..408169bbe 100644
--- a/pkg/tcpip/link/fdbased/endpoint_test.go
+++ b/pkg/tcpip/link/fdbased/endpoint_test.go
@@ -152,13 +152,14 @@ func TestWritePacket(t *testing.T) {
b[i] = uint8(rand.Intn(256))
}
- // Buiild payload and write.
- payload := make([]byte, plen)
+ // Build payload and write.
+ payload := make(buffer.View, plen)
for i := range payload {
payload[i] = uint8(rand.Intn(256))
}
want := append(hdr.UsedBytes(), payload...)
- if err := c.ep.WritePacket(r, &hdr, payload, proto); err != nil {
+ vv := buffer.NewVectorisedView(len(payload), []buffer.View{payload})
+ if err := c.ep.WritePacket(r, &hdr, vv, proto); err != nil {
t.Fatalf("WritePacket failed: %v", err)
}