vmkdrivers/BLD/build/HEADERS/vmkapi-current-all-public-bincomp/vmkernel64/release/sockets/vmkapi_socket.h
2015-10-23 15:48:45 -04:00

366 lines
14 KiB
C

/***************************************************************************
* Copyright 2007 - 2009 VMware, Inc. All rights reserved.
***************************************************************************/
/*
* @VMKAPIMOD_LICENSE@
*/
/*
***********************************************************************
* Sockets */ /**
* \defgroup Socket Network Socket Interfaces
* @{
*
***********************************************************************
*/
#ifndef _VMKAPI_SOCKET_H_
#define _VMKAPI_SOCKET_H_
/** \cond never */
#ifndef VMK_HEADER_INCLUDED_FROM_VMKAPI_H
#error This vmkapi file should never be included directly but only via vmkapi.h
#endif
/** \endcond never */
/**
* \brief Opaque socket handle.
*/
typedef struct vmk_SocketInt *vmk_Socket;
/*
* Address families
*/
/** \brief IPv4 */
#define VMK_SOCKET_AF_INET 2
/*
* Socket types
*/
/** \brief Datagrams */
#define VMK_SOCKET_SOCK_DGRAM 2
/** \brief Raw datagrams */
#define VMK_SOCKET_SOCK_RAW 3
/*
* Socket option levels
*/
/** \brief Operate on the socket itself */
#define VMK_SOCKET_SOL_SOCKET 0xffff
/*
* Socket-level socket options
*/
/** \brief Bind socket to a vmknic */
#define VMK_SOCKET_SO_BINDTOVMK 0x1016
/**
* \brief
* Abstract socket network address
*
* A protocol-specific address is used in actual practice.
*/
typedef struct vmk_SocketAddress {
vmk_uint8 sa_len;
vmk_uint8 sa_family;
vmk_uint8 sa_data[254];
} VMK_ATTRIBUTE_PACKED vmk_SocketAddress;
/*
***********************************************************************
* vmk_SocketAddrToString -- */ /**
*
* \ingroup Socket
* \brief Convert an address into a simple string for a particular
* address family.
*
* \note This function will not block.
*
* \param[in] addr Address to translate to a string.
* \param[out] buffer Buffer to place the converted string into.
* \param[in] bufferLength Length of the buffer in bytes.
*
* \retval VMK_OK Success.
* \retval VMK_BAD_PARAM Bad input addr or buffer
* \retval VMK_NOT_SUPPORTED Unknown address family.
*
* \note This call does *not* do any sort of network lookup. It merely
* converts an address into a human-readable format. In most
* cases the converted string is simply a numeric string.
*
***********************************************************************
*/
VMK_ReturnStatus vmk_SocketAddrToString(const vmk_SocketAddress *addr,
char *buffer,
int bufferLength);
/*
***********************************************************************
* vmk_SocketStringToAddr -- */ /**
*
* \ingroup Socket
* \brief Convert an address into a simple string for a particular
* address family.
*
* \note This function will not block.
*
* \param[in] addressFamily Address family that the string address
* will be converted into.
* \param[in] buffer Buffer containing the string to convert.
* \param[in] bufferLength Length of the buffer in bytes.
* \param[out] addr Address the string is converted into.
*
* \retval VMK_OK Success.
* \retval VMK_BAD_PARAM Bad input addr or buffer
* \retval VMK_NOT_SUPPORTED Unknown address family.
* \note This call does *not* do any sort of network lookup. It merely
* converts a simple human-readable string into a address. In most
* cases, this is simply a conversion of a numeric string into
* a network address.
*
***********************************************************************
*/
VMK_ReturnStatus vmk_SocketStringToAddr(int addressFamily,
const char *buffer,
int bufferLength,
vmk_SocketAddress *addr);
/*
***********************************************************************
* vmk_SocketCreate -- */ /**
*
* \ingroup Socket
* \brief Create a new unbound socket.
*
* \note This function will not block.
*
* \param[in] domain Protocol family for this socket.
* \param[in] type Type of communication on this socket
* \param[in] protocol Specific protocol to use from address family
* \param[out] socket Newly created socket
*
* \retval VMK_OK Success.
* \retval VMK_BAD_PARAM Bad input parameter.
* \retval VMK_NO_MEMORY Unable to allocate memory for socket.
* \retval VMK_EPROTONOSUPPORT Maps to BSD error code EPROTONOSUPPORT.
* \retval VMK_BAD_PARAM_TYPE Maps to BSD error code EPROTOTYPE.
* \retval VMK_NO_BUFFERSPACE Maps to BSD error code ENOBUFS.
* \retval VMK_EOPNOTSUPP Maps to BSD error code EOPNOTSUPP.
* \retval VMK_NO_ACCESS Maps to BSD error code EACCESS.
*
* \note For BSD error code definitions see the FreeBSD 7 man page
* socket(2).
*
* \note Specific domain (VMK_SOCKET_AF_*), type (VMK_SOCKET_SOCK_*),
* and protocol (VMK_SOCKET_*PROTO*) values are implementation
* dependent, an application can determine if a specific domain
* and type is supported by trying to create a socket with zero
* protocol value.
*
***********************************************************************
*/
VMK_ReturnStatus vmk_SocketCreate(int domain,
int type,
int protocol,
vmk_Socket *socket);
/*
***********************************************************************
* vmk_SocketClose -- */ /**
*
* \ingroup Socket
* \brief Destroy an existing socket.
*
* \note This function may block if VMK_SOCKET_SO_LINGER has been set
* otherwise will not block.
*
* \param[in] socket Socket to close
*
* \retval VMK_OK Success.
* \retval VMK_BAD_PARAM Input socket is invalid.
* \retval VMK_BUSY Socket is already closing.
* \retval VMK_NOT_SUPPORTED Unknown socket type.
*
***********************************************************************
*/
VMK_ReturnStatus vmk_SocketClose(vmk_Socket socket);
/*
***********************************************************************
* vmk_SocketGetSockOpt -- */ /**
*
* \ingroup Socket
* \brief Get the option information from a socket
*
* \note This function will not block.
*
* \param[in] socket Socket to get the option info from.
* \param[in] level Level of communication infrastructure from which
* to get the socket option.
* \param[in] option The option to get the information about.
* \param[out] optval Data that is currently set on the option.
* \param[out] optlen The length of option data.
*
* \retval VMK_OK Success.
* \retval VMK_BAD_PARAM Input socket is invalid.
* \retval VMK_NOT_SUPPORTED Unknown socket type.
* \retval VMK_NOT_SUPPORTED Maps to BSD error code ENOPROTOOPT.
* \retval VMK_EOPNOTSUPP Maps to BSD error code EOPNOTSUPP.
* \retval VMK_BAD_PARAM Maps to BSD error code EINVAL.
*
* \note For BSD error code definitions see the FreeBSD 7 man page
* getsockopt(2).
*
***********************************************************************
*/
VMK_ReturnStatus vmk_SocketGetSockOpt(vmk_Socket socket,
int level,
int option,
void *optval,
int *optlen);
/*
***********************************************************************
* vmk_SocketSetSockOpt -- */ /**
*
* \ingroup Socket
* \brief Set the option information on a socket
*
* \note This function will not block.
*
* \param[in] socket Socket to set the option info on.
* \param[in] level Level of communication infrastructure from which
* to set the socket option.
* \param[in] option The option to set the information about.
* \param[in] optval Data to set on the option.
* \param[in] optlen The length of the option data.
*
* \retval VMK_OK Success.
* \retval VMK_BAD_PARAM Input socket is invalid.
* \retval VMK_NOT_SUPPORTED Unknown socket type.
* \retval VMK_NOT_SUPPORTED Maps to BSD error code ENOPROTOOPT.
* \retval VMK_EOPNOTSUPP Maps to BSD error code EOPNOTSUPP.
* \retval VMK_BAD_PARAM Maps to BSD error code EINVAL.
*
* \note For BSD error code definitions see the FreeBSD 7 man page
* setsockopt(2).
*
***********************************************************************
*/
VMK_ReturnStatus vmk_SocketSetSockOpt(vmk_Socket socket,
int level,
int option,
const void *optval,
int optlen);
/*
***********************************************************************
* vmk_SocketSendTo -- */ /**
*
* \ingroup Socket
* \brief Send data to a network address.
*
* \note This function may block if flags VMK_SOCKET_MSG_DONTWAIT is not
* set or is not a nonblocking socket (default).
*
* \param[in] socket Socket to send the data through.
* \param[in] flags Settings for this send transaction.
* \param[in] address Address information describing the
* data's destination.
* \param[in] data Pointer to data buffer to send.
* \param[in] len Length in bytes of the data buffer to send.
* \param[out] bytesSent Number of bytes actually sent.
*
* \retval VMK_OK Success.
* \retval VMK_NOT_SUPPORTED Unknown socket type.
* \retval VMK_BAD_PARAM Unsupported flags setting.
* \retval VMK_EOPNOTSUPP Maps to BSD error code EOPNOTSUPP.
* \retval VMK_ENOTCONN Maps to BSD error code ENOTCONN.
* \retval VMK_EDESTADDRREQ Maps to BSD error code EDESTADDRREQ.
* \retval VMK_MESSAGE_TOO_LONG Maps to BSD error code EMSGSIZE.
* \retval VMK_WOULD_BLOCK Maps to BSD error code EAGAIN.
* \retval VMK_NO_BUFFERSPACE Maps to BSD error code ENOBUFS.
* \retval VMK_EHOSTUNREACH Maps to BSD error code EHOSTUNREACH.
* \retval VMK_ALREADY_CONNECTED Maps to BSD error code EISCONN.
* \retval VMK_ECONNREFUSED Maps to BSD error code ECONNREFUSED.
* \retval VMK_EHOSTDOWN Maps to BSD error code EHOSTDOWN.
* \retval VMK_ENETDOWN Maps to BSD error code ENETDOWN.
* \retval VMK_EADDRNOTAVAIL Maps to BSD error code EADDRNOTAVAIL.
* \retval VMK_BROKEN_PIPE Maps to BSD error code EPIPE.
*
* \note For BSD error code definitions see the FreeBSD 7 man page
* sendto(2).
*
***********************************************************************
*/
VMK_ReturnStatus vmk_SocketSendTo(vmk_Socket socket,
int flags,
vmk_SocketAddress *address,
void *data,
int len,
int *bytesSent);
/*
***********************************************************************
* vmk_SocketGetSockName -- */ /**
*
* \ingroup Socket
* \brief Get the socket's local endpoint network address information.
*
* \note This function will not block.
*
* \param[in] socket Socket to query.
* \param[out] address The network address info for the socket
* local endpoint.
* \param[in,out] addressLength The length of the address info.
*
* \retval VMK_OK Success.
* \retval VMK_BAD_PARAM Bad input socket or address.
* \retval VMK_NOT_SUPPORTED Unknown socket family.
* \retval VMK_EOPNOTSUPP Maps to BSD error code EOPNOTSUPP.
* \retval VMK_BAD_PARAM Maps to BSD error code EINVAL.
* \retval VMK_NO_MEMORY Maps to BSD error code ENOMEM.
*
* \note For BSD error code definitions see the FreeBSD 7 man page
* getsockname(2).
*
***********************************************************************
*/
VMK_ReturnStatus vmk_SocketGetSockName(vmk_Socket socket,
vmk_SocketAddress *address,
int *addressLength);
/*
***********************************************************************
* vmk_SocketGetPeerName -- */ /**
*
* \ingroup Socket
* \brief Get the socket's far endpoint network address information.
*
* \note This function will not block.
*
* \param[in] socket Socket to query.
* \param[out] address The network address info for the
* socket remote endpoint.
* \param[in,out] addressLength The length of the address info.
*
* \retval VMK_OK Success.
* \retval VMK_BAD_PARAM Bad input socket or address.
* \retval VMK_NOT_SUPPORTED Unknown socket family.
* \retval VMK_EOPNOTSUPP Maps to BSD error code EOPNOTSUPP.
* \retval VMK_NO_MEMORY Maps to BSD error code ENOMEM.
* \retval VMK_ENOTCONN Maps to BSD error code ENOTCONN.
*
* \note For BSD error code definitions see the FreeBSD 7 man page
* getpeername(2).
*
***********************************************************************
*/
VMK_ReturnStatus vmk_SocketGetPeerName(vmk_Socket socket,
vmk_SocketAddress *address,
int *addressLength);
#endif /* _VMKAPI_SOCKET_H_ */
/** @} */