summaryrefslogtreecommitdiffhomepage
path: root/pkg/tcpip/stack/registration.go
diff options
context:
space:
mode:
authorgVisor bot <gvisor-bot@google.com>2020-09-27 02:27:53 +0000
committergVisor bot <gvisor-bot@google.com>2020-09-27 02:27:53 +0000
commit9177d7067f52b594767f6bf9e1b041ecd7c0d37e (patch)
tree957a0f8a7dc101e75a81cd3d825f63431c8a0545 /pkg/tcpip/stack/registration.go
parent204ecb2a5c047371257eafcbeff7400cd22a4bc3 (diff)
parenta376a0baf362506549fcc58861465fa89ed33f7f (diff)
Merge release-20200921.0-52-ga376a0baf (automated)
Diffstat (limited to 'pkg/tcpip/stack/registration.go')
-rw-r--r--pkg/tcpip/stack/registration.go30
1 files changed, 16 insertions, 14 deletions
diff --git a/pkg/tcpip/stack/registration.go b/pkg/tcpip/stack/registration.go
index 77640cd8a..780a5ebde 100644
--- a/pkg/tcpip/stack/registration.go
+++ b/pkg/tcpip/stack/registration.go
@@ -197,6 +197,21 @@ type TransportProtocol interface {
Parse(pkt *PacketBuffer) (ok bool)
}
+// TransportPacketDisposition is the result from attempting to deliver a packet
+// to the transport layer.
+type TransportPacketDisposition int
+
+const (
+ // TransportPacketHandled indicates that a transport packet was handled by the
+ // transport layer and callers need not take any further action.
+ TransportPacketHandled TransportPacketDisposition = iota
+
+ // TransportPacketDestinationPortUnreachable indicates that there weren't any
+ // listeners interested in the packet and the transport protocol has no means
+ // to notify the sender.
+ TransportPacketDestinationPortUnreachable
+)
+
// TransportDispatcher contains the methods used by the network stack to deliver
// packets to the appropriate transport endpoint after it has been handled by
// the network layer.
@@ -207,7 +222,7 @@ type TransportDispatcher interface {
// pkt.NetworkHeader must be set before calling DeliverTransportPacket.
//
// DeliverTransportPacket takes ownership of pkt.
- DeliverTransportPacket(r *Route, protocol tcpip.TransportProtocolNumber, pkt *PacketBuffer)
+ DeliverTransportPacket(r *Route, protocol tcpip.TransportProtocolNumber, pkt *PacketBuffer) TransportPacketDisposition
// DeliverTransportControlPacket delivers control packets to the
// appropriate transport protocol endpoint.
@@ -342,19 +357,6 @@ type NetworkProtocol interface {
// does not encapsulate anything).
// - Whether pkt.Data was large enough to parse and set pkt.NetworkHeader.
Parse(pkt *PacketBuffer) (proto tcpip.TransportProtocolNumber, hasTransportHdr bool, ok bool)
-
- // ReturnError attempts to send a suitable error message to the sender
- // of a received packet.
- // - pkt holds the problematic packet.
- // - reason indicates what the reason for wanting a message is.
- // - route is the routing information for the received packet
- // ReturnError returns an error if the send failed and nil on success.
- // Note that deciding to deliberately send no message is a success.
- //
- // TODO(gvisor.dev/issues/3871): This method should be removed or simplified
- // after all (or all but one) of the ICMP error dispatch occurs through the
- // protocol specific modules. May become SendPortNotFound(r, pkt).
- ReturnError(r *Route, reason tcpip.ICMPReason, pkt *PacketBuffer) *tcpip.Error
}
// NetworkDispatcher contains the methods used by the network stack to deliver