# -*- 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
#
# Note: This type is deprecated in favor of SocketAddress.  The
#     difference between SocketAddressLegacy and SocketAddress is that
#     the latter has fewer {} on the wire.
#
# Since: 1.3
##
{ 'union': 'SocketAddressLegacy',
  'base': { 'type': 'SocketAddressType' },
  'discriminator': 'type',
  'data': {
    'inet': 'InetSocketAddressWrapper',
    'unix': 'UnixSocketAddressWrapper',
    'vsock': 'VsockSocketAddressWrapper',
    'fd': 'FdSocketAddressWrapper' } }

##
# @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' } }
