diff options
author | Bhasker Hariharan <bhaskerh@google.com> | 2020-07-16 18:38:28 -0700 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2020-07-16 18:40:32 -0700 |
commit | dcf6ddc2772b8fcf824f1f48e0281e1cc80b93ea (patch) | |
tree | 0ce85a72f4e2b261d5779c0cff7e8e50a5d0786a /pkg/tcpip/tcpip.go | |
parent | e6894cb99fe4c6e8599354bf5bc6a72a79b63fd3 (diff) |
Add support to return protocol in recvmsg for AF_PACKET.
Updates #173
PiperOrigin-RevId: 321690756
Diffstat (limited to 'pkg/tcpip/tcpip.go')
-rw-r--r-- | pkg/tcpip/tcpip.go | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/pkg/tcpip/tcpip.go b/pkg/tcpip/tcpip.go index 71bcee785..48ad56d4d 100644 --- a/pkg/tcpip/tcpip.go +++ b/pkg/tcpip/tcpip.go @@ -549,6 +549,25 @@ type Endpoint interface { SetOwner(owner PacketOwner) } +// LinkPacketInfo holds Link layer information for a received packet. +// +// +stateify savable +type LinkPacketInfo struct { + // Protocol is the NetworkProtocolNumber for the packet. + Protocol NetworkProtocolNumber +} + +// PacketEndpoint are additional methods that are only implemented by Packet +// endpoints. +type PacketEndpoint interface { + // ReadPacket reads a datagram/packet from the endpoint and optionally + // returns the sender and additional LinkPacketInfo. + // + // This method does not block if there is no data pending. It will also + // either return an error or data, never both. + ReadPacket(*FullAddress, *LinkPacketInfo) (buffer.View, ControlMessages, *Error) +} + // EndpointInfo is the interface implemented by each endpoint info struct. type EndpointInfo interface { // IsEndpointInfo is an empty method to implement the tcpip.EndpointInfo |