mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Extract network datagram endpoint common facilities
...from the UDP endpoint. Datagram-based transport endpoints (e.g. UDP, RAW IP) can share a lot of their write path due to the datagram-based nature of these endpoints. Extract the common facilities from UDP so they can be shared with other transport endpoints (in a later change). Test: UDP syscall tests. PiperOrigin-RevId: 394347774
This commit is contained in:
committed by
gVisor bot
parent
5032f4f57d
commit
ae3bd32011
@@ -48,6 +48,7 @@ go_library(
|
||||
"//pkg/tcpip/network/ipv4",
|
||||
"//pkg/tcpip/network/ipv6",
|
||||
"//pkg/tcpip/stack",
|
||||
"//pkg/tcpip/transport",
|
||||
"//pkg/tcpip/transport/tcp",
|
||||
"//pkg/tcpip/transport/udp",
|
||||
"//pkg/usermem",
|
||||
|
||||
@@ -59,8 +59,8 @@ import (
|
||||
"gvisor.dev/gvisor/pkg/tcpip"
|
||||
"gvisor.dev/gvisor/pkg/tcpip/header"
|
||||
"gvisor.dev/gvisor/pkg/tcpip/stack"
|
||||
"gvisor.dev/gvisor/pkg/tcpip/transport"
|
||||
"gvisor.dev/gvisor/pkg/tcpip/transport/tcp"
|
||||
"gvisor.dev/gvisor/pkg/tcpip/transport/udp"
|
||||
"gvisor.dev/gvisor/pkg/usermem"
|
||||
"gvisor.dev/gvisor/pkg/waiter"
|
||||
)
|
||||
@@ -2045,7 +2045,7 @@ func setSockOptIPv6(t *kernel.Task, s socket.SocketOps, ep commonEndpoint, name
|
||||
|
||||
if isTCPSocket(skType, skProto) && tcp.EndpointState(ep.State()) != tcp.StateInitial {
|
||||
return syserr.ErrInvalidEndpointState
|
||||
} else if isUDPSocket(skType, skProto) && udp.EndpointState(ep.State()) != udp.StateInitial {
|
||||
} else if isUDPSocket(skType, skProto) && transport.DatagramEndpointState(ep.State()) != transport.DatagramEndpointStateInitial {
|
||||
return syserr.ErrInvalidEndpointState
|
||||
}
|
||||
|
||||
@@ -3331,10 +3331,10 @@ func (s *socketOpsCommon) State() uint32 {
|
||||
}
|
||||
case isUDPSocket(s.skType, s.protocol):
|
||||
// UDP socket.
|
||||
switch udp.EndpointState(s.Endpoint.State()) {
|
||||
case udp.StateInitial, udp.StateBound, udp.StateClosed:
|
||||
switch transport.DatagramEndpointState(s.Endpoint.State()) {
|
||||
case transport.DatagramEndpointStateInitial, transport.DatagramEndpointStateBound, transport.DatagramEndpointStateClosed:
|
||||
return linux.TCP_CLOSE
|
||||
case udp.StateConnected:
|
||||
case transport.DatagramEndpointStateConnected:
|
||||
return linux.TCP_ESTABLISHED
|
||||
default:
|
||||
return 0
|
||||
|
||||
Reference in New Issue
Block a user