mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Check in gVisor.
PiperOrigin-RevId: 194583126 Change-Id: Ica1d8821a90f74e7e745962d71801c598c652463
This commit is contained in:
@@ -0,0 +1,290 @@
|
||||
// Copyright 2018 Google Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package linux
|
||||
|
||||
import "gvisor.googlesource.com/gvisor/pkg/binary"
|
||||
|
||||
// Address families, from linux/socket.h.
|
||||
const (
|
||||
AF_UNSPEC = 0
|
||||
AF_UNIX = 1
|
||||
AF_INET = 2
|
||||
AF_AX25 = 3
|
||||
AF_IPX = 4
|
||||
AF_APPLETALK = 5
|
||||
AF_NETROM = 6
|
||||
AF_BRIDGE = 7
|
||||
AF_ATMPVC = 8
|
||||
AF_X25 = 9
|
||||
AF_INET6 = 10
|
||||
AF_ROSE = 11
|
||||
AF_DECnet = 12
|
||||
AF_NETBEUI = 13
|
||||
AF_SECURITY = 14
|
||||
AF_KEY = 15
|
||||
AF_NETLINK = 16
|
||||
AF_PACKET = 17
|
||||
AF_ASH = 18
|
||||
AF_ECONET = 19
|
||||
AF_ATMSVC = 20
|
||||
AF_RDS = 21
|
||||
AF_SNA = 22
|
||||
AF_IRDA = 23
|
||||
AF_PPPOX = 24
|
||||
AF_WANPIPE = 25
|
||||
AF_LLC = 26
|
||||
AF_IB = 27
|
||||
AF_MPLS = 28
|
||||
AF_CAN = 29
|
||||
AF_TIPC = 30
|
||||
AF_BLUETOOTH = 31
|
||||
AF_IUCV = 32
|
||||
AF_RXRPC = 33
|
||||
AF_ISDN = 34
|
||||
AF_PHONET = 35
|
||||
AF_IEEE802154 = 36
|
||||
AF_CAIF = 37
|
||||
AF_ALG = 38
|
||||
AF_NFC = 39
|
||||
AF_VSOCK = 40
|
||||
)
|
||||
|
||||
// sendmsg(2)/recvmsg(2) flags, from linux/socket.h.
|
||||
const (
|
||||
MSG_OOB = 0x1
|
||||
MSG_PEEK = 0x2
|
||||
MSG_DONTROUTE = 0x4
|
||||
MSG_TRYHARD = 0x4
|
||||
MSG_CTRUNC = 0x8
|
||||
MSG_PROBE = 0x10
|
||||
MSG_TRUNC = 0x20
|
||||
MSG_DONTWAIT = 0x40
|
||||
MSG_EOR = 0x80
|
||||
MSG_WAITALL = 0x100
|
||||
MSG_FIN = 0x200
|
||||
MSG_EOF = MSG_FIN
|
||||
MSG_SYN = 0x400
|
||||
MSG_CONFIRM = 0x800
|
||||
MSG_RST = 0x1000
|
||||
MSG_ERRQUEUE = 0x2000
|
||||
MSG_NOSIGNAL = 0x4000
|
||||
MSG_MORE = 0x8000
|
||||
MSG_WAITFORONE = 0x10000
|
||||
MSG_SENDPAGE_NOTLAST = 0x20000
|
||||
MSG_REINJECT = 0x8000000
|
||||
MSG_ZEROCOPY = 0x4000000
|
||||
MSG_FASTOPEN = 0x20000000
|
||||
MSG_CMSG_CLOEXEC = 0x40000000
|
||||
)
|
||||
|
||||
// SOL_SOCKET is from socket.h
|
||||
const SOL_SOCKET = 1
|
||||
|
||||
// Socket types, from linux/net.h.
|
||||
const (
|
||||
SOCK_STREAM = 1
|
||||
SOCK_DGRAM = 2
|
||||
SOCK_RAW = 3
|
||||
SOCK_RDM = 4
|
||||
SOCK_SEQPACKET = 5
|
||||
SOCK_DCCP = 6
|
||||
SOCK_PACKET = 10
|
||||
)
|
||||
|
||||
// SOCK_TYPE_MASK covers all of the above socket types. The remaining bits are
|
||||
// flags. From linux/net.h.
|
||||
const SOCK_TYPE_MASK = 0xf
|
||||
|
||||
// socket(2)/socketpair(2)/accept4(2) flags, from linux/net.h.
|
||||
const (
|
||||
SOCK_CLOEXEC = O_CLOEXEC
|
||||
SOCK_NONBLOCK = O_NONBLOCK
|
||||
)
|
||||
|
||||
// shutdown(2) how commands, from <linux/net.h>.
|
||||
const (
|
||||
SHUT_RD = 0
|
||||
SHUT_WR = 1
|
||||
SHUT_RDWR = 2
|
||||
)
|
||||
|
||||
// Socket options from socket.h.
|
||||
const (
|
||||
SO_ERROR = 4
|
||||
SO_KEEPALIVE = 9
|
||||
SO_LINGER = 13
|
||||
SO_MARK = 36
|
||||
SO_PASSCRED = 16
|
||||
SO_PEERCRED = 17
|
||||
SO_PEERNAME = 28
|
||||
SO_PROTOCOL = 38
|
||||
SO_RCVBUF = 8
|
||||
SO_RCVTIMEO = 20
|
||||
SO_REUSEADDR = 2
|
||||
SO_SNDBUF = 7
|
||||
SO_SNDTIMEO = 21
|
||||
SO_TIMESTAMP = 29
|
||||
SO_TIMESTAMPNS = 35
|
||||
SO_TYPE = 3
|
||||
)
|
||||
|
||||
// SockAddrInt is struct sockaddr_in, from uapi/linux/in.h.
|
||||
type SockAddrInet struct {
|
||||
Family uint16
|
||||
Port uint16
|
||||
Addr [4]byte
|
||||
Zero [8]uint8 // pad to sizeof(struct sockaddr).
|
||||
}
|
||||
|
||||
// SockAddrInt6 is struct sockaddr_in6, from uapi/linux/in6.h.
|
||||
type SockAddrInet6 struct {
|
||||
Family uint16
|
||||
Port uint16
|
||||
Flowinfo uint32
|
||||
Addr [16]byte
|
||||
Scope_id uint32
|
||||
}
|
||||
|
||||
// UnixPathMax is the maximum length of the path in an AF_UNIX socket.
|
||||
//
|
||||
// From uapi/linux/un.h.
|
||||
const UnixPathMax = 108
|
||||
|
||||
// SockAddrUnix is struct sockaddr_un, from uapi/linux/un.h.
|
||||
type SockAddrUnix struct {
|
||||
Family uint16
|
||||
Path [UnixPathMax]int8
|
||||
}
|
||||
|
||||
// TCPInfo is a collection of TCP statistics.
|
||||
//
|
||||
// From uapi/linux/tcp.h.
|
||||
type TCPInfo struct {
|
||||
State uint8
|
||||
CaState uint8
|
||||
Retransmits uint8
|
||||
Probes uint8
|
||||
Backoff uint8
|
||||
Options uint8
|
||||
// WindowScale is the combination of snd_wscale (first 4 bits) and rcv_wscale (second 4 bits)
|
||||
WindowScale uint8
|
||||
// DeliveryRateAppLimited is a boolean and only the first bit is meaningful.
|
||||
DeliveryRateAppLimited uint8
|
||||
|
||||
RTO uint32
|
||||
ATO uint32
|
||||
SndMss uint32
|
||||
RcvMss uint32
|
||||
|
||||
Unacked uint32
|
||||
Sacked uint32
|
||||
Lost uint32
|
||||
Retrans uint32
|
||||
Fackets uint32
|
||||
|
||||
// Times.
|
||||
LastDataSent uint32
|
||||
LastAckSent uint32
|
||||
LastDataRecv uint32
|
||||
LastAckRecv uint32
|
||||
|
||||
// Metrics.
|
||||
PMTU uint32
|
||||
RcvSsthresh uint32
|
||||
RTT uint32
|
||||
RTTVar uint32
|
||||
SndSsthresh uint32
|
||||
SndCwnd uint32
|
||||
Advmss uint32
|
||||
Reordering uint32
|
||||
|
||||
RcvRTT uint32
|
||||
RcvSpace uint32
|
||||
|
||||
TotalRetrans uint32
|
||||
|
||||
PacingRate uint64
|
||||
MaxPacingRate uint64
|
||||
// BytesAcked is RFC4898 tcpEStatsAppHCThruOctetsAcked.
|
||||
BytesAcked uint64
|
||||
// BytesReceived is RFC4898 tcpEStatsAppHCThruOctetsReceived.
|
||||
BytesReceived uint64
|
||||
// SegsOut is RFC4898 tcpEStatsPerfSegsOut.
|
||||
SegsOut uint32
|
||||
// SegsIn is RFC4898 tcpEStatsPerfSegsIn.
|
||||
SegsIn uint32
|
||||
|
||||
NotSentBytes uint32
|
||||
MinRTT uint32
|
||||
// DataSegsIn is RFC4898 tcpEStatsDataSegsIn.
|
||||
DataSegsIn uint32
|
||||
// DataSegsOut is RFC4898 tcpEStatsDataSegsOut.
|
||||
DataSegsOut uint32
|
||||
|
||||
DeliveryRate uint64
|
||||
|
||||
// BusyTime is the time in microseconds busy sending data.
|
||||
BusyTime uint64
|
||||
// RwndLimited is the time in microseconds limited by receive window.
|
||||
RwndLimited uint64
|
||||
// SndBufLimited is the time in microseconds limited by send buffer.
|
||||
SndBufLimited uint64
|
||||
}
|
||||
|
||||
// SizeOfTCPInfo is the binary size of a TCPInfo struct (104 bytes).
|
||||
var SizeOfTCPInfo = binary.Size(TCPInfo{})
|
||||
|
||||
// Control message types, from linux/socket.h.
|
||||
const (
|
||||
SCM_CREDENTIALS = 0x2
|
||||
SCM_RIGHTS = 0x1
|
||||
)
|
||||
|
||||
// A ControlMessageHeader is the header for a socket control message.
|
||||
//
|
||||
// ControlMessageHeader represents struct cmsghdr from linux/socket.h.
|
||||
type ControlMessageHeader struct {
|
||||
Length uint64
|
||||
Level int32
|
||||
Type int32
|
||||
}
|
||||
|
||||
// SizeOfControlMessageHeader is the binary size of a ControlMessageHeader
|
||||
// struct.
|
||||
var SizeOfControlMessageHeader = int(binary.Size(ControlMessageHeader{}))
|
||||
|
||||
// A ControlMessageCredentials is an SCM_CREDENTIALS socket control message.
|
||||
//
|
||||
// ControlMessageCredentials represents struct ucred from linux/socket.h.
|
||||
type ControlMessageCredentials struct {
|
||||
PID int32
|
||||
UID uint32
|
||||
GID uint32
|
||||
}
|
||||
|
||||
// SizeOfControlMessageCredentials is the binary size of a
|
||||
// ControlMessageCredentials struct.
|
||||
var SizeOfControlMessageCredentials = int(binary.Size(ControlMessageCredentials{}))
|
||||
|
||||
// A ControlMessageRights is an SCM_RIGHTS socket control message.
|
||||
type ControlMessageRights []int32
|
||||
|
||||
// SizeOfControlMessageRight is the size of a single element in
|
||||
// ControlMessageRights.
|
||||
const SizeOfControlMessageRight = 4
|
||||
|
||||
// SCM_MAX_FD is the maximum number of FDs accepted in a single sendmsg call.
|
||||
// From net/scm.h.
|
||||
const SCM_MAX_FD = 253
|
||||
Reference in New Issue
Block a user