# -*- Mode: Python -*-
# vim: filetype=python

##
# = Socket data types
##

##
# @NetworkAddressFamily:
#
# The network address family
#
# @ipv4: IPV4 family
#
# @ipv6: IPV6 family
#
# @unix: unix socket
#
# @vsock: vsock family (since 2.8)
#
# @unknown: otherwise
#
# Since: 2.1
##
{ 'enum': 'NetworkAddressFamily',
  'data': [ 'ipv4', 'ipv6', 'unix', 'vsock', 'unknown' ] }

##
# @InetSocketAddressBase:
#
# @host: host part of the address
# @port: port part of the address
##
{ 'struct': 'InetSocketAddressBase',
  'data': {
    'host': 'str',
    'port': 'str' } }

##
# @InetSocketAddress:
#
# Captures a socket address or address range in the Internet
# namespace.
#
# @numeric: true if the host/port are guaranteed to be numeric, false
#     if name resolution should be attempted.  Defaults to false.
#     (Since 2.9)
#
# @to: If present, this is range of possible addresses, with port
#     between @port and @to.
#
# @ipv4: whether to accept IPv4 addresses, default try both IPv4 and
#     IPv6
#
# @ipv6: whether to accept IPv6 addresses, default try both IPv4 and
#     IPv6
#
# @keep-alive: enable keep-alive when connecting to this socket.  Not
#     supported for passive sockets.  (Since 4.2)
#
# @mptcp: enable multi-path TCP.  (Since 6.1)
#
# Since: 1.3
##
{ 'struct': 'InetSocketAddress',
  'base': 'InetSocketAddressBase',
  'data': {
    '*numeric':  'bool',
    '*to': 'uint16',
    '*ipv4': 'bool',
    '*ipv6': 'bool',
    '*keep-alive': 'bool',
    '*mptcp': { 'type': 'bool', 'if': 'HAVE_IPPROTO_MPTCP' } } }

##
# @UnixSocketAddress:
#
# Captures a socket address in the local ("Unix socket") namespace.
#
# @path: filesystem path to use
#
# @abstract: if true, this is a Linux abstract socket address.  @path
#     will be prefixed by a null byte, and optionally padded with null
#     bytes.  Defaults to false.  (Since 5.1)
#
# @tight: if false, pad an abstract socket address with enough null
#     bytes to make it fill struct sockaddr_un member sun_path.
#     Defaults to true.  (Since 5.1)
#
# Since: 1.3
##
{ 'struct': 'UnixSocketAddress',
  'data': {
    'path': 'str',
    '*abstract': { 'type': 'bool', 'if': 'CONFIG_LINUX' },
    '*tight': { 'type': 'bool', 'if': 'CONFIG_LINUX' } } }

##
# @VsockSocketAddress:
#
# Captures a socket address in the vsock namespace.
#
# @cid: unique host identifier
#
# @port: port
#
# .. note:: String types are used to allow for possible future hostname
#    or service resolution support.
#
# Since: 2.8
##
{ 'struct': 'VsockSocketAddress',
  'data': {
    'cid': 'str',
    'port': 'str' } }

##
# @FdSocketAddress:
#
# A file descriptor name or number.
#
# @str: decimal is for file descriptor number, otherwise it's a file
#     descriptor name.  Named file descriptors are permitted in
#     monitor commands, in combination with the 'getfd' command.
#     Decimal file descriptors are permitted at startup or other
#     contexts where no monitor context is active.
#
# Since: 1.2
##
{ 'struct': 'FdSocketAddress',
  'data': {
    'str': 'str' } }

##
# @InetSocketAddressWrapper:
#
# @data: internet domain socket address
#
# Since: 1.3
##
{ 'struct': 'InetSocketAddressWrapper',
  'data': { 'data': 'InetSocketAddress' } }

##
# @UnixSocketAddressWrapper:
#
# @data: UNIX domain socket address
#
# Since: 1.3
##
{ 'struct': 'UnixSocketAddressWrapper',
  'data': { 'data': 'UnixSocketAddress' } }

##
# @VsockSocketAddressWrapper:
#
# @data: VSOCK domain socket address
#
# Since: 2.8
##
{ 'struct': 'VsockSocketAddressWrapper',
  'data': { 'data': 'VsockSocketAddress' } }

##
# @FdSocketAddressWrapper:
#
# @data: file descriptor name or number
#
# Since: 1.3
##
{ 'struct': 'FdSocketAddressWrapper',
  'data': { 'data': 'FdSocketAddress' } }

##
# @SocketAddressLegacy:
#
# Captures the address of a socket, which could also be a named file
# descriptor
#
# @type: Transport type
#
# Since: 1.3
##
{ 'union': 'SocketAddressLegacy',
  'base': { 'type': 'SocketAddressType' },
  'discriminator': 'type',
  'data': {
    'inet': 'InetSocketAddressWrapper',
    'unix': 'UnixSocketAddressWrapper',
    'vsock': 'VsockSocketAddressWrapper',
    'fd': 'FdSocketAddressWrapper' } }
# Note: This type is deprecated in favor of SocketAddress.  The
# difference between SocketAddressLegacy and SocketAddress is that the
# latter has fewer ``{}`` on the wire.

##
# @SocketAddressType:
#
# Available SocketAddress types
#
# @inet: Internet address
#
# @unix: Unix domain socket
#
# @vsock: VMCI address
#
# @fd: Socket file descriptor
#
# Since: 2.9
##
{ 'enum': 'SocketAddressType',
  'data': [ 'inet', 'unix', 'vsock', 'fd' ] }

##
# @SocketAddress:
#
# Captures the address of a socket, which could also be a socket file
# descriptor
#
# @type: Transport type
#
# Since: 2.9
##
{ 'union': 'SocketAddress',
  'base': { 'type': 'SocketAddressType' },
  'discriminator': 'type',
  'data': { 'inet': 'InetSocketAddress',
            'unix': 'UnixSocketAddress',
            'vsock': 'VsockSocketAddress',
            'fd': 'FdSocketAddress' } }
