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

##
# = Socket data types
##

{ 'include': 'common.json' }

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

##
# @InetSocketAddressWrapper:
#
# Since: 1.3
##
{ 'struct': 'InetSocketAddressWrapper',
  'data': { 'data': 'InetSocketAddress' } }

##
# @UnixSocketAddressWrapper:
#
# Since: 1.3
##
{ 'struct': 'UnixSocketAddressWrapper',
  'data': { 'data': 'UnixSocketAddress' } }

##
# @VsockSocketAddressWrapper:
#
# Since: 2.8
##
{ 'struct': 'VsockSocketAddressWrapper',
  'data': { 'data': 'VsockSocketAddress' } }

##
# @StringWrapper:
#
# Since: 1.3
##
{ 'struct': 'StringWrapper',
  'data': { 'data': 'String' } }

##
# @SocketAddressLegacy:
#
# Captures the address of a socket, which could also be a named file descriptor
#
# 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': 'StringWrapper' } }

##
# @SocketAddressType:
#
# Available SocketAddress types
#
# @inet: Internet address
#
# @unix: Unix domain socket
#
# @vsock: VMCI address
#
# @fd: decimal is for file descriptor number, otherwise 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: 2.9
##
{ 'enum': 'SocketAddressType',
  'data': [ 'inet', 'unix', 'vsock', 'fd' ] }

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