From ed2f45ace3cffa96c907acec2e57865844595e7d Mon Sep 17 00:00:00 2001 From: Ghanan Gowripalan Date: Wed, 26 Jan 2022 16:02:39 -0800 Subject: [PATCH] Populate link header from packet buffer fields The arguments passed to LinkEndpoint.AddHeader are all available in the packet buffer so just get the values from the packet buffer. PiperOrigin-RevId: 424463821 --- pkg/tcpip/link/channel/channel.go | 3 +-- pkg/tcpip/link/ethernet/ethernet.go | 8 ++++---- pkg/tcpip/link/fdbased/endpoint.go | 19 ++++++------------- pkg/tcpip/link/fdbased/endpoint_test.go | 4 ++-- pkg/tcpip/link/loopback/loopback.go | 3 +-- pkg/tcpip/link/muxed/injectable.go | 3 +-- pkg/tcpip/link/nested/nested.go | 4 ++-- pkg/tcpip/link/pipe/pipe.go | 3 +-- pkg/tcpip/link/sharedmem/sharedmem.go | 19 ++++++------------- pkg/tcpip/link/sharedmem/sharedmem_server.go | 19 ++++++------------- pkg/tcpip/link/sharedmem/sharedmem_test.go | 18 +++++++++--------- pkg/tcpip/link/tun/device.go | 17 ++++++----------- pkg/tcpip/link/waitable/waitable.go | 4 ++-- pkg/tcpip/link/waitable/waitable_test.go | 2 +- .../network/internal/testutil/testutil.go | 3 +-- pkg/tcpip/network/ip_test.go | 2 +- pkg/tcpip/network/ipv6/icmp_test.go | 3 +-- pkg/tcpip/stack/forwarding_test.go | 3 +-- pkg/tcpip/stack/nic.go | 2 +- pkg/tcpip/stack/registration.go | 4 ++-- 20 files changed, 55 insertions(+), 88 deletions(-) diff --git a/pkg/tcpip/link/channel/channel.go b/pkg/tcpip/link/channel/channel.go index de7ba5ca3..2f61b871c 100644 --- a/pkg/tcpip/link/channel/channel.go +++ b/pkg/tcpip/link/channel/channel.go @@ -267,8 +267,7 @@ func (*Endpoint) ARPHardwareType() header.ARPHardwareType { } // AddHeader implements stack.LinkEndpoint.AddHeader. -func (*Endpoint) AddHeader(tcpip.LinkAddress, tcpip.LinkAddress, tcpip.NetworkProtocolNumber, *stack.PacketBuffer) { -} +func (*Endpoint) AddHeader(*stack.PacketBuffer) {} // WriteRawPacket implements stack.LinkEndpoint. func (e *Endpoint) WriteRawPacket(pkt *stack.PacketBuffer) tcpip.Error { diff --git a/pkg/tcpip/link/ethernet/ethernet.go b/pkg/tcpip/link/ethernet/ethernet.go index 715d45d37..a5c7cdae9 100644 --- a/pkg/tcpip/link/ethernet/ethernet.go +++ b/pkg/tcpip/link/ethernet/ethernet.go @@ -93,12 +93,12 @@ func (e *Endpoint) ARPHardwareType() header.ARPHardwareType { } // AddHeader implements stack.LinkEndpoint. -func (*Endpoint) AddHeader(local, remote tcpip.LinkAddress, proto tcpip.NetworkProtocolNumber, pkt *stack.PacketBuffer) { +func (*Endpoint) AddHeader(pkt *stack.PacketBuffer) { eth := header.Ethernet(pkt.LinkHeader().Push(header.EthernetMinimumSize)) fields := header.EthernetFields{ - SrcAddr: local, - DstAddr: remote, - Type: proto, + SrcAddr: pkt.EgressRoute.LocalLinkAddress, + DstAddr: pkt.EgressRoute.RemoteLinkAddress, + Type: pkt.NetworkProtocolNumber, } eth.Encode(&fields) } diff --git a/pkg/tcpip/link/fdbased/endpoint.go b/pkg/tcpip/link/fdbased/endpoint.go index 95769c67d..51505aadf 100644 --- a/pkg/tcpip/link/fdbased/endpoint.go +++ b/pkg/tcpip/link/fdbased/endpoint.go @@ -486,22 +486,15 @@ const ( ) // AddHeader implements stack.LinkEndpoint.AddHeader. -func (e *endpoint) AddHeader(local, remote tcpip.LinkAddress, protocol tcpip.NetworkProtocolNumber, pkt *stack.PacketBuffer) { +func (e *endpoint) AddHeader(pkt *stack.PacketBuffer) { if e.hdrSize > 0 { // Add ethernet header if needed. eth := header.Ethernet(pkt.LinkHeader().Push(header.EthernetMinimumSize)) - ethHdr := &header.EthernetFields{ - DstAddr: remote, - Type: protocol, - } - - // Preserve the src address if it's set in the route. - if local != "" { - ethHdr.SrcAddr = local - } else { - ethHdr.SrcAddr = e.addr - } - eth.Encode(ethHdr) + eth.Encode(&header.EthernetFields{ + SrcAddr: pkt.EgressRoute.LocalLinkAddress, + DstAddr: pkt.EgressRoute.RemoteLinkAddress, + Type: pkt.NetworkProtocolNumber, + }) } } diff --git a/pkg/tcpip/link/fdbased/endpoint_test.go b/pkg/tcpip/link/fdbased/endpoint_test.go index f308af69d..3f746536b 100644 --- a/pkg/tcpip/link/fdbased/endpoint_test.go +++ b/pkg/tcpip/link/fdbased/endpoint_test.go @@ -220,7 +220,7 @@ func testWritePacket(t *testing.T, plen int, eth bool, gsoMaxSize uint32, hash u } } - c.ep.AddHeader(pkt.EgressRoute.LocalLinkAddress, pkt.EgressRoute.RemoteLinkAddress, pkt.NetworkProtocolNumber, pkt) + c.ep.AddHeader(pkt) var pkts stack.PacketBufferList pkts.PushBack(pkt) @@ -341,7 +341,7 @@ func TestPreserveSrcAddress(t *testing.T) { // Set LocalLinkAddress in route to the value of the bridged address. pkt.EgressRoute.LocalLinkAddress = baddr pkt.EgressRoute.RemoteLinkAddress = raddr - c.ep.AddHeader(pkt.EgressRoute.LocalLinkAddress, pkt.EgressRoute.RemoteLinkAddress, pkt.NetworkProtocolNumber, pkt) + c.ep.AddHeader(pkt) var pkts stack.PacketBufferList pkts.PushBack(pkt) diff --git a/pkg/tcpip/link/loopback/loopback.go b/pkg/tcpip/link/loopback/loopback.go index f8687008c..c9f3d2af5 100644 --- a/pkg/tcpip/link/loopback/loopback.go +++ b/pkg/tcpip/link/loopback/loopback.go @@ -91,8 +91,7 @@ func (*endpoint) ARPHardwareType() header.ARPHardwareType { return header.ARPHardwareLoopback } -func (e *endpoint) AddHeader(local, remote tcpip.LinkAddress, protocol tcpip.NetworkProtocolNumber, pkt *stack.PacketBuffer) { -} +func (*endpoint) AddHeader(*stack.PacketBuffer) {} // WriteRawPacket implements stack.LinkEndpoint. func (e *endpoint) WriteRawPacket(pkt *stack.PacketBuffer) tcpip.Error { diff --git a/pkg/tcpip/link/muxed/injectable.go b/pkg/tcpip/link/muxed/injectable.go index 0ba6e20b6..48dcf3176 100644 --- a/pkg/tcpip/link/muxed/injectable.go +++ b/pkg/tcpip/link/muxed/injectable.go @@ -135,8 +135,7 @@ func (*InjectableEndpoint) ARPHardwareType() header.ARPHardwareType { } // AddHeader implements stack.LinkEndpoint.AddHeader. -func (*InjectableEndpoint) AddHeader(local, remote tcpip.LinkAddress, protocol tcpip.NetworkProtocolNumber, pkt *stack.PacketBuffer) { -} +func (*InjectableEndpoint) AddHeader(*stack.PacketBuffer) {} // WriteRawPacket implements stack.LinkEndpoint. func (*InjectableEndpoint) WriteRawPacket(*stack.PacketBuffer) tcpip.Error { diff --git a/pkg/tcpip/link/nested/nested.go b/pkg/tcpip/link/nested/nested.go index 23cfc3787..38485ff0e 100644 --- a/pkg/tcpip/link/nested/nested.go +++ b/pkg/tcpip/link/nested/nested.go @@ -134,8 +134,8 @@ func (e *Endpoint) ARPHardwareType() header.ARPHardwareType { } // AddHeader implements stack.LinkEndpoint.AddHeader. -func (e *Endpoint) AddHeader(local, remote tcpip.LinkAddress, protocol tcpip.NetworkProtocolNumber, pkt *stack.PacketBuffer) { - e.child.AddHeader(local, remote, protocol, pkt) +func (e *Endpoint) AddHeader(pkt *stack.PacketBuffer) { + e.child.AddHeader(pkt) } // WriteRawPacket implements stack.LinkEndpoint. diff --git a/pkg/tcpip/link/pipe/pipe.go b/pkg/tcpip/link/pipe/pipe.go index dacd3e5db..5bce2376b 100644 --- a/pkg/tcpip/link/pipe/pipe.go +++ b/pkg/tcpip/link/pipe/pipe.go @@ -108,8 +108,7 @@ func (*Endpoint) ARPHardwareType() header.ARPHardwareType { } // AddHeader implements stack.LinkEndpoint. -func (*Endpoint) AddHeader(_, _ tcpip.LinkAddress, _ tcpip.NetworkProtocolNumber, _ *stack.PacketBuffer) { -} +func (*Endpoint) AddHeader(*stack.PacketBuffer) {} // WriteRawPacket implements stack.LinkEndpoint. func (e *Endpoint) WriteRawPacket(pkt *stack.PacketBuffer) tcpip.Error { diff --git a/pkg/tcpip/link/sharedmem/sharedmem.go b/pkg/tcpip/link/sharedmem/sharedmem.go index 808e3ca79..9fec2614b 100644 --- a/pkg/tcpip/link/sharedmem/sharedmem.go +++ b/pkg/tcpip/link/sharedmem/sharedmem.go @@ -319,25 +319,18 @@ func (e *endpoint) LinkAddress() tcpip.LinkAddress { } // AddHeader implements stack.LinkEndpoint.AddHeader. -func (e *endpoint) AddHeader(local, remote tcpip.LinkAddress, protocol tcpip.NetworkProtocolNumber, pkt *stack.PacketBuffer) { +func (e *endpoint) AddHeader(pkt *stack.PacketBuffer) { // Add ethernet header if needed. if len(e.addr) == 0 { return } eth := header.Ethernet(pkt.LinkHeader().Push(header.EthernetMinimumSize)) - ethHdr := &header.EthernetFields{ - DstAddr: remote, - Type: protocol, - } - - // Preserve the src address if it's set in the route. - if local != "" { - ethHdr.SrcAddr = local - } else { - ethHdr.SrcAddr = e.addr - } - eth.Encode(ethHdr) + eth.Encode(&header.EthernetFields{ + SrcAddr: pkt.EgressRoute.LocalLinkAddress, + DstAddr: pkt.EgressRoute.RemoteLinkAddress, + Type: pkt.NetworkProtocolNumber, + }) } func (e *endpoint) AddVirtioNetHeader(pkt *stack.PacketBuffer) { diff --git a/pkg/tcpip/link/sharedmem/sharedmem_server.go b/pkg/tcpip/link/sharedmem/sharedmem_server.go index 84d1763d6..a5626b74a 100644 --- a/pkg/tcpip/link/sharedmem/sharedmem_server.go +++ b/pkg/tcpip/link/sharedmem/sharedmem_server.go @@ -205,25 +205,18 @@ func (e *serverEndpoint) LinkAddress() tcpip.LinkAddress { } // AddHeader implements stack.LinkEndpoint.AddHeader. -func (e *serverEndpoint) AddHeader(local, remote tcpip.LinkAddress, protocol tcpip.NetworkProtocolNumber, pkt *stack.PacketBuffer) { +func (e *serverEndpoint) AddHeader(pkt *stack.PacketBuffer) { // Add ethernet header if needed. if len(e.addr) == 0 { return } eth := header.Ethernet(pkt.LinkHeader().Push(header.EthernetMinimumSize)) - ethHdr := &header.EthernetFields{ - DstAddr: remote, - Type: protocol, - } - - // Preserve the src address if it's set in the route. - if local != "" { - ethHdr.SrcAddr = local - } else { - ethHdr.SrcAddr = e.addr - } - eth.Encode(ethHdr) + eth.Encode(&header.EthernetFields{ + SrcAddr: pkt.EgressRoute.LocalLinkAddress, + DstAddr: pkt.EgressRoute.RemoteLinkAddress, + Type: pkt.NetworkProtocolNumber, + }) } func (e *serverEndpoint) AddVirtioNetHeader(pkt *stack.PacketBuffer) { diff --git a/pkg/tcpip/link/sharedmem/sharedmem_test.go b/pkg/tcpip/link/sharedmem/sharedmem_test.go index 4beb72e5a..1abc0b91e 100644 --- a/pkg/tcpip/link/sharedmem/sharedmem_test.go +++ b/pkg/tcpip/link/sharedmem/sharedmem_test.go @@ -226,7 +226,7 @@ func TestSimpleSend(t *testing.T) { pkt.EgressRoute.RemoteLinkAddress = remoteLinkAddr pkt.EgressRoute.LocalLinkAddress = localLinkAddr pkt.NetworkProtocolNumber = proto - c.ep.AddHeader(pkt.EgressRoute.LocalLinkAddress, pkt.EgressRoute.RemoteLinkAddress, pkt.NetworkProtocolNumber, pkt) + c.ep.AddHeader(pkt) var pkts stack.PacketBufferList pkts.PushBack(pkt) defer pkts.DecRef() @@ -300,7 +300,7 @@ func TestPreserveSrcAddressInSend(t *testing.T) { pkt.EgressRoute.LocalLinkAddress = newLocalLinkAddress pkt.EgressRoute.RemoteLinkAddress = remoteLinkAddr pkt.NetworkProtocolNumber = proto - c.ep.AddHeader(pkt.EgressRoute.LocalLinkAddress, pkt.EgressRoute.RemoteLinkAddress, pkt.NetworkProtocolNumber, pkt) + c.ep.AddHeader(pkt) var pkts stack.PacketBufferList defer pkts.DecRef() @@ -360,7 +360,7 @@ func TestFillTxQueue(t *testing.T) { }) pkt.EgressRoute.RemoteLinkAddress = remoteLinkAddr pkt.NetworkProtocolNumber = header.IPv4ProtocolNumber - c.ep.AddHeader(pkt.EgressRoute.LocalLinkAddress, pkt.EgressRoute.RemoteLinkAddress, pkt.NetworkProtocolNumber, pkt) + c.ep.AddHeader(pkt) var pkts stack.PacketBufferList pkts.PushBack(pkt) @@ -386,7 +386,7 @@ func TestFillTxQueue(t *testing.T) { }) pkt.EgressRoute.RemoteLinkAddress = remoteLinkAddr pkt.NetworkProtocolNumber = header.IPv4ProtocolNumber - c.ep.AddHeader(pkt.EgressRoute.LocalLinkAddress, pkt.EgressRoute.RemoteLinkAddress, pkt.NetworkProtocolNumber, pkt) + c.ep.AddHeader(pkt) var pkts stack.PacketBufferList pkts.PushBack(pkt) @@ -420,7 +420,7 @@ func TestFillTxQueueAfterBadCompletion(t *testing.T) { pkts.PushBack(pkt) pkt.EgressRoute.RemoteLinkAddress = remoteLinkAddr pkt.NetworkProtocolNumber = header.IPv4ProtocolNumber - c.ep.AddHeader(pkt.EgressRoute.LocalLinkAddress, pkt.EgressRoute.RemoteLinkAddress, pkt.NetworkProtocolNumber, pkt) + c.ep.AddHeader(pkt) } if _, err := c.ep.WritePackets(pkts); err != nil { t.Fatalf("WritePackets failed unexpectedly: %s", err) @@ -448,7 +448,7 @@ func TestFillTxQueueAfterBadCompletion(t *testing.T) { }) pkt.EgressRoute.RemoteLinkAddress = remoteLinkAddr pkt.NetworkProtocolNumber = header.IPv4ProtocolNumber - c.ep.AddHeader(pkt.EgressRoute.LocalLinkAddress, pkt.EgressRoute.RemoteLinkAddress, pkt.NetworkProtocolNumber, pkt) + c.ep.AddHeader(pkt) var pkts stack.PacketBufferList pkts.PushBack(pkt) @@ -473,7 +473,7 @@ func TestFillTxQueueAfterBadCompletion(t *testing.T) { }) pkt.EgressRoute.RemoteLinkAddress = remoteLinkAddr pkt.NetworkProtocolNumber = header.IPv4ProtocolNumber - c.ep.AddHeader(pkt.EgressRoute.LocalLinkAddress, pkt.EgressRoute.RemoteLinkAddress, pkt.NetworkProtocolNumber, pkt) + c.ep.AddHeader(pkt) var pkts stack.PacketBufferList pkts.PushBack(pkt) @@ -502,7 +502,7 @@ func TestFillTxMemory(t *testing.T) { }) pkt.EgressRoute.RemoteLinkAddress = remoteLinkAddr pkt.NetworkProtocolNumber = header.IPv4ProtocolNumber - c.ep.AddHeader(pkt.EgressRoute.LocalLinkAddress, pkt.EgressRoute.RemoteLinkAddress, pkt.NetworkProtocolNumber, pkt) + c.ep.AddHeader(pkt) var pkts stack.PacketBufferList pkts.PushBack(pkt) @@ -577,7 +577,7 @@ func TestFillTxMemoryWithMultiBuffer(t *testing.T) { }) pkt.EgressRoute.RemoteLinkAddress = remoteLinkAddr pkt.NetworkProtocolNumber = header.IPv4ProtocolNumber - c.ep.AddHeader(pkt.EgressRoute.LocalLinkAddress, pkt.EgressRoute.RemoteLinkAddress, pkt.NetworkProtocolNumber, pkt) + c.ep.AddHeader(pkt) pkts.PushBack(pkt) _, err := c.ep.WritePackets(pkts) diff --git a/pkg/tcpip/link/tun/device.go b/pkg/tcpip/link/tun/device.go index 83e785008..fc69c102d 100644 --- a/pkg/tcpip/link/tun/device.go +++ b/pkg/tcpip/link/tun/device.go @@ -337,21 +337,16 @@ func (e *tunEndpoint) ARPHardwareType() header.ARPHardwareType { } // AddHeader implements stack.LinkEndpoint.AddHeader. -func (e *tunEndpoint) AddHeader(local, remote tcpip.LinkAddress, protocol tcpip.NetworkProtocolNumber, pkt *stack.PacketBuffer) { +func (e *tunEndpoint) AddHeader(pkt *stack.PacketBuffer) { if !e.isTap { return } eth := header.Ethernet(pkt.LinkHeader().Push(header.EthernetMinimumSize)) - hdr := &header.EthernetFields{ - SrcAddr: local, - DstAddr: remote, - Type: protocol, - } - if hdr.SrcAddr == "" { - hdr.SrcAddr = e.LinkAddress() - } - - eth.Encode(hdr) + eth.Encode(&header.EthernetFields{ + SrcAddr: pkt.EgressRoute.LocalLinkAddress, + DstAddr: pkt.EgressRoute.RemoteLinkAddress, + Type: pkt.NetworkProtocolNumber, + }) } // MaxHeaderLength returns the maximum size of the link layer header. diff --git a/pkg/tcpip/link/waitable/waitable.go b/pkg/tcpip/link/waitable/waitable.go index e0f4ef8ed..1185309e8 100644 --- a/pkg/tcpip/link/waitable/waitable.go +++ b/pkg/tcpip/link/waitable/waitable.go @@ -130,8 +130,8 @@ func (e *Endpoint) ARPHardwareType() header.ARPHardwareType { } // AddHeader implements stack.LinkEndpoint.AddHeader. -func (e *Endpoint) AddHeader(local, remote tcpip.LinkAddress, protocol tcpip.NetworkProtocolNumber, pkt *stack.PacketBuffer) { - e.lower.AddHeader(local, remote, protocol, pkt) +func (e *Endpoint) AddHeader(pkt *stack.PacketBuffer) { + e.lower.AddHeader(pkt) } // WriteRawPacket implements stack.LinkEndpoint. diff --git a/pkg/tcpip/link/waitable/waitable_test.go b/pkg/tcpip/link/waitable/waitable_test.go index 9db10e007..019415ddc 100644 --- a/pkg/tcpip/link/waitable/waitable_test.go +++ b/pkg/tcpip/link/waitable/waitable_test.go @@ -90,7 +90,7 @@ func (*countedEndpoint) ARPHardwareType() header.ARPHardwareType { func (*countedEndpoint) Wait() {} // AddHeader implements stack.LinkEndpoint.AddHeader. -func (e *countedEndpoint) AddHeader(local, remote tcpip.LinkAddress, protocol tcpip.NetworkProtocolNumber, pkt *stack.PacketBuffer) { +func (*countedEndpoint) AddHeader(*stack.PacketBuffer) { panic("unimplemented") } diff --git a/pkg/tcpip/network/internal/testutil/testutil.go b/pkg/tcpip/network/internal/testutil/testutil.go index fb9089ef2..43a9e8a6d 100644 --- a/pkg/tcpip/network/internal/testutil/testutil.go +++ b/pkg/tcpip/network/internal/testutil/testutil.go @@ -88,8 +88,7 @@ func (*MockLinkEndpoint) Wait() {} func (*MockLinkEndpoint) ARPHardwareType() header.ARPHardwareType { return header.ARPHardwareNone } // AddHeader implements LinkEndpoint.AddHeader. -func (*MockLinkEndpoint) AddHeader(_, _ tcpip.LinkAddress, _ tcpip.NetworkProtocolNumber, _ *stack.PacketBuffer) { -} +func (*MockLinkEndpoint) AddHeader(*stack.PacketBuffer) {} // WriteRawPacket implements stack.LinkEndpoint. func (*MockLinkEndpoint) WriteRawPacket(*stack.PacketBuffer) tcpip.Error { diff --git a/pkg/tcpip/network/ip_test.go b/pkg/tcpip/network/ip_test.go index eef3d66c5..542e8ebad 100644 --- a/pkg/tcpip/network/ip_test.go +++ b/pkg/tcpip/network/ip_test.go @@ -218,7 +218,7 @@ func (*testObject) ARPHardwareType() header.ARPHardwareType { } // AddHeader implements stack.LinkEndpoint.AddHeader. -func (*testObject) AddHeader(local, remote tcpip.LinkAddress, protocol tcpip.NetworkProtocolNumber, pkt *stack.PacketBuffer) { +func (*testObject) AddHeader(*stack.PacketBuffer) { panic("not implemented") } diff --git a/pkg/tcpip/network/ipv6/icmp_test.go b/pkg/tcpip/network/ipv6/icmp_test.go index 7e2bd7e04..dd5db54c9 100644 --- a/pkg/tcpip/network/ipv6/icmp_test.go +++ b/pkg/tcpip/network/ipv6/icmp_test.go @@ -83,8 +83,7 @@ func (*stubLinkEndpoint) WritePackets(pkts stack.PacketBufferList) (int, tcpip.E func (*stubLinkEndpoint) Attach(stack.NetworkDispatcher) {} -func (*stubLinkEndpoint) AddHeader(_, _ tcpip.LinkAddress, _ tcpip.NetworkProtocolNumber, _ *stack.PacketBuffer) { -} +func (*stubLinkEndpoint) AddHeader(*stack.PacketBuffer) {} type stubDispatcher struct { stack.TransportDispatcher diff --git a/pkg/tcpip/stack/forwarding_test.go b/pkg/tcpip/stack/forwarding_test.go index e984e9638..79b7d9f4a 100644 --- a/pkg/tcpip/stack/forwarding_test.go +++ b/pkg/tcpip/stack/forwarding_test.go @@ -330,8 +330,7 @@ func (*fwdTestLinkEndpoint) ARPHardwareType() header.ARPHardwareType { } // AddHeader implements stack.LinkEndpoint.AddHeader. -func (e *fwdTestLinkEndpoint) AddHeader(tcpip.LinkAddress, tcpip.LinkAddress, tcpip.NetworkProtocolNumber, *PacketBuffer) { -} +func (*fwdTestLinkEndpoint) AddHeader(*PacketBuffer) {} func fwdTestNetFactory(t *testing.T, proto *fwdTestNetworkProtocol) (*faketime.ManualClock, *fwdTestLinkEndpoint, *fwdTestLinkEndpoint) { clock := faketime.NewManualClock() diff --git a/pkg/tcpip/stack/nic.go b/pkg/tcpip/stack/nic.go index 5c6943aac..996ad0f3f 100644 --- a/pkg/tcpip/stack/nic.go +++ b/pkg/tcpip/stack/nic.go @@ -395,7 +395,7 @@ func (n *nic) writePacket(pkt *PacketBuffer) tcpip.Error { // WritePacket modifies pkt, calculate numBytes first. numBytes := pkt.Size() - n.NetworkLinkEndpoint.AddHeader(n.LinkAddress(), pkt.EgressRoute.RemoteLinkAddress, pkt.NetworkProtocolNumber, pkt) + n.NetworkLinkEndpoint.AddHeader(pkt) n.deliverLinkPacket(pkt.NetworkProtocolNumber, pkt, false /* incoming */) diff --git a/pkg/tcpip/stack/registration.go b/pkg/tcpip/stack/registration.go index c24609a9c..5e1d8f045 100644 --- a/pkg/tcpip/stack/registration.go +++ b/pkg/tcpip/stack/registration.go @@ -832,8 +832,8 @@ type NetworkLinkEndpoint interface { // https://github.com/torvalds/linux/blob/aa0c9086b40c17a7ad94425b3b70dd1fdd7497bf/include/uapi/linux/if_arp.h#L30 ARPHardwareType() header.ARPHardwareType - // AddHeader adds a link layer header to pkt if required. - AddHeader(local, remote tcpip.LinkAddress, protocol tcpip.NetworkProtocolNumber, pkt *PacketBuffer) + // AddHeader adds a link layer header to the packet if required. + AddHeader(*PacketBuffer) } // QueueingDiscipline provides a queueing strategy for outgoing packets (e.g