/*------------------------------------------------------------------------------ * * File: so.h * Description: socket api public header file * * Copyright (C) 2010 Nintendo. All rights reserved. * These coded instructions, statements, and computer programs contain * proprietary information of Nintendo of America Inc. and/or Nintendo * Company Ltd., and are protected by Federal copyright law. They may * not be disclosed to third parties or copied or duplicated in any form, * in whole or in part, without the prior written consent of Nintendo. * *------------------------------------------------------------------------------ */ #ifndef __SOCKET_PUB_H__ #define __SOCKET_PUB_H__ #ifdef __cplusplus extern "C" { #endif #include #include /* * Protocol address families */ #define AF_UNSPEC 0 #define AF_INET 2 /* * Type of socket */ #define SOCK_STREAM 1 #define SOCK_DGRAM 2 /* * Protocol number */ #define IPPROTO_IP 0 #define IPPROTO_TCP 6 #define IPPROTO_UDP 17 #define MSG_OOB 0x1 /* process out-of-band data */ #define MSG_PEEK 0x2 /* peek at incoming message */ #define MSG_DONTROUTE 0x4 /* send without using routing tables */ #define MSG_NEWPIPE 0x8 /* New pipe for recvfrom call */ #define MSG_EOR 0x10 /* data completes record */ #define MSG_DONTWAIT 0x20 /* this message should be nonblocking */ #define MSG_IP_RECVTTL 0x40 /* retrieve packet TTL */ /* * "level" parameter to setsockopt() and getsockopt() call */ #define SOL_SOCKET -1 /* * "optname" parameter to setsockopt() and getsockopt() call */ /* SOL_SOCKET level options */ #define SO_REUSEADDR 0x00004 /* allow local address reuse */ #define SO_KEEPALIVE 0x00008 /* keep connections alive */ #define SO_DONTROUTE 0x00010 /* just use interface addresses */ #define SO_BROADCAST 0x00020 /* permit sending of broadcast msgs */ #define SO_LINGER 0x00080 /* linger on close if data present */ #define SO_OOBINLINE 0x00100 /* leave received OOB data in line */ #define SO_TCPSACK 0x00200 /* Allow TCP SACK (Selective acknowledgment) */ #define SO_WINSCALE 0x00400 /* Window scale option for TCP sockets */ #define SO_HDRINCL 0x02000 /* user access to IP hdr for SOCK_RAW */ #define SO_RUSRBUF 0x10000 /* use user buffer for receive */ #define SO_SNDBUF 0x1001 /* send buffer size */ #define SO_RCVBUF 0x1002 /* receive buffer size */ #define SO_LASTERROR 0x1007 /* get error status and clear */ #define SO_TYPE 0x1008 /* get socket type */ #define SO_HOPCNT 0x1009 /* Hop count to get to dst */ #define SO_MAXMSG 0x1010 /* get TCP_MSS (max segment size) */ #define SO_RXDATA 0x1011 /* get count of bytes in sb_rcv */ #define SO_TXDATA 0x1012 /* get count of bytes in sb_snd */ #define SO_MYADDR 0x1013 /* return my IP address */ #define SO_NBIO 0x1014 /* set socket into NON-blocking mode */ #define SO_BIO 0x1015 /* set socket into blocking mode */ #define SO_NONBLOCK 0x1016 /* set/get blocking mode via optval param */ #define SO_KEEPIDLE 0x1019 /* time before keepalive probes begin */ #define SO_KEEPINTVL 0x101A /* probe interval */ #define SO_KEEPCNT 0x101B /* max probes before drop */ /* IPPROTO_IP level options */ #define IP_TOS 3 /* IP type of service and preced. */ #define IP_TTL_OPT 4 /* IP time to live */ #define IP_TTL IP_TTL_OPT /* BSD compatible definition*/ /* IPPROTO_TCP level options */ #define TCP_ACKDELAYTIME 0x2001 /* Set time for delayed acks */ #define TCP_NOACKDELAY 0x2002 /* suppress delayed ACKs */ #define TCP_MAXSEG 0x2003 /* set maximum segment size */ #define TCP_NODELAY 0x2004 /* Disable Nagle Algorithm */ #define TCP_ACKFREQUENCY 0x2005 /* Number of outstanding un-acked segments * after which an ACK will be sent (if * delay ack timer hasn't fired). */ /* * "liboptname" parameter to setsocklibopt() and getsocklibopt() call */ /* allow socketclose_all or not */ #define SOLIB_OPT_AVOID_CLOSE_ALL 0x3000 /* the number of times allocation table of socket descriptor is initialized */ #define SOLIB_OPT_SOCKFD_TBL_INIT_COUNT 0x3001 /* socket buffer consumption by the caller */ #define SOLIB_OPT_SOCKBUF_CONSUMPTION 0x3002 #define SO_SOCKBUF_CONSUMPTTION_LOW 0x01 #define SO_SOCKBUF_CONSUMPTTION_MED 0x02 #define SO_SOCKBUF_CONSUMPTTION_HIGH 0x04 #define SO_SOCKBUF_CONSUMPTTION_MAX 0x08 /* * SOMemOpt Reqs */ #define SO_MEMOPT_REQ_INIT 0x01 #define SO_MEMOPT_REQ_ASYNC_CHECK_INIT 0x02 #define SO_MEMOPT_REQ_SYNC_CHECK_INIT 0x03 #define SO_MEMOPT_REQ_ABORT_SYNC_CHECK_INIT 0x04 /* * SOMemOpt flags */ #define SO_MEMOPT_FLAG_OPT_UDP 0x01 /* * Max ICMP ping payload size used in SOIcmpPing() */ #define ICMP_MAX_PAYLOAD (1491) /* * Structure used for manipulating linger option. */ struct linger { int l_onoff; /* option on/off */ int l_linger; /* linger time */ }; /* * Select related macros */ /* * Select uses a bit mask of socket descriptors. Following macros manipulate * bit mask. At the max FD_SETSIZE number of descriptors can be selected. */ #define FD_SETSIZE (32) #define FD_SET(n, p) \ ((p)->fd_bits |= (1 << (n))) #define FD_CLR(n, p) \ ((p)->fd_bits &= ~(1 << (n))) #define FD_ISSET(n, p) \ ((p)->fd_bits & (1 << (n))) #define FD_ZERO(p) \ ((p)->fd_bits = 0) #define FD_COPY(f, t) \ ((t)->fd_bits = (f)->fd_bits) /* * SORecvFromMulti buffer length calculation macros */ #define ROUNDUP_RCVFMM_BUFF_LEN(len) \ (((u32)(len) + (PPC_IO_BUFFER_ALIGN)-1) & ~((PPC_IO_BUFFER_ALIGN)-1)) /* * Structure used for manipulating SORecvFromMulti function */ struct recvfrom_multi_buffers { void *buffer; unsigned int bufferlen; struct sockaddr *froms; unsigned int fromslen; int *results; unsigned int resultslen; }; /* * SOSendToMultiEx buffer length calculation macros */ #define ROUNDUP_SNDTMEX_BUFF_LEN(len) \ (((u32)(len) + (PPC_IO_BUFFER_ALIGN)-1) & ~((PPC_IO_BUFFER_ALIGN)-1)) /* * Structure used for manipulating SOSendToMultiEX function */ struct sendto_multi_ex_buffers { void *buffer; unsigned int bufferlen; int *datagram_lens; unsigned int datagram_lens_len; struct sockaddr *dests; unsigned int destslen; int *results; unsigned int resultslen; }; /* For additional options with SORecvFromEx */ typedef u8* amsg; /* * Socket API */ #define SOAccept accept #define SOBind bind #define SOConnect connect #define SOListen listen #define SORecv recv #define SORecvFrom recvfrom #define SORecvFromEx recvfrom_ex #define SORecvFromMulti recvfrom_multi #define SOSend send #define SOSendTo sendto #define SOSendToMulti sendto_multi #define SOSendToMultiEx sendto_multi_ex #define SOShutdown shutdown #define SOSocket socket #define SOClose socketclose #define SOInetAtoN inet_aton #define SOInetNtoA_r inet_ntoa_r #define SOInetNtoP inet_ntop #define SOInetPtoN inet_pton #define SOGetPeerName getpeername #define SOGetSockName getsockname #define SOGetSockOpt getsockopt #define SOSetSockOpt setsockopt #define SOHtoNl htonl #define SOHtoNs htons #define SONtoHl ntohl #define SONtoHs ntohs #define SOSelect select #define SOGetLibOpt getsocklibopt #define SOSetLibOpt setsocklibopt #define SOMemOpt somemopt /* * SOIcmp API */ #define SOIcmpLastCodeType icmp_last_code_type #define SOIcmpCreateHandle icmp_create_handle #define SOIcmpCloseHandle icmp_close_handle #define SOIcmpPing icmp_ping #define SOIcmpCancel icmp_cancel /* * Socket API (BSD-style) */ extern int accept(int fd, struct sockaddr *addr, int *addrlen); extern int bind(int fd, struct sockaddr *addr, int addrlen); extern int connect(int fd, struct sockaddr *addr, int addrlen); extern int listen(int fd, int backlog); extern int recv(int fd, void *buffer, int len, int flags); extern int recvfrom(int fd, void *buffer, int len, int flags, struct sockaddr *from, int *fromlen); extern int recvfrom_ex(int fd, void *buffer, int len, int flags, struct sockaddr *from, int *fromlen, amsg msg, int msglen); extern int recvfrom_multi (int fd, int flags, struct recvfrom_multi_buffers *buffs, int recv_datagram_len, int recv_datagram_count, struct timeval *timeout); extern int send(int fd, const void *buffer, int len, int flags); extern int sendto(int fd, const void *buffer, int len, int flags, const struct sockaddr *dest_addr, int dest_len); extern int sendto_multi(int fd, const void *buffer, int len, int flags, const struct sockaddr *dest_addrs, int dest_count); extern int sendto_multi_ex (int fd, int flags, struct sendto_multi_ex_buffers *buffs, int send_datagram_count); extern int shutdown(int fd, int how); extern int socket(int family, int type, int proto); extern int socketclose(int fd); extern int inet_aton(const char *cp, struct in_addr *addr); extern char *inet_ntoa_r(struct in_addr in, char *buf); extern const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); extern int inet_pton(int af, const char *src, void *dst); extern int getpeername(int fd, struct sockaddr *name, int *addrlen); extern int getsockname(int fd, struct sockaddr *name, int *addrlen); extern int getsockopt(int fd, int level, int optname, void *optval, socklen_t *optlen); extern int setsockopt(int fd, int level, int optname, void *optval, socklen_t optlen); extern void setsocketlasterr(int err); extern int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); extern int setsocklibopt (int liboptname, int optval); extern int getsocklibopt (int liboptname, int *optval); extern int somemopt (int req_type, char* mem, unsigned int memlen, int flags); extern u32 ntohl(u32 val); extern u32 htonl(u32 val); extern u16 ntohs(u16 val); extern u16 htons(u16 val); extern int icmp_create_handle(int family); extern int icmp_close_handle(int handle); extern int icmp_ping(int handle, const void* data, int len, const struct sockaddr *dest_addr, int dest_len, unsigned timeout, int flag); extern int icmp_cancel(int handle); extern int icmp_last_code_type(int handle); #ifdef __cplusplus } #endif #endif /* __SOCKET_PUB_H__ */