123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- #ifndef _GPXE_SOCKET_H
- #define _GPXE_SOCKET_H
-
- /** @file
- *
- * Socket addresses
- *
- */
-
- #include <stdint.h>
-
- /**
- * @defgroup commtypes Communication semantics
- *
- * @{
- */
-
- /** Connection-based, reliable streams */
- extern int tcp_sock_stream;
- #define TCP_SOCK_STREAM 0x1
- #define SOCK_STREAM tcp_sock_stream
-
- /** Connectionless, unreliable streams */
- extern int udp_sock_dgram;
- #define UDP_SOCK_DGRAM 0x2
- #define SOCK_DGRAM udp_sock_dgram
-
- /** @} */
-
- /**
- * Name communication semantics
- *
- * @v semantics Communication semantics (e.g. SOCK_STREAM)
- * @ret name Name of communication semantics
- */
- static inline __attribute__ (( always_inline )) const char *
- socket_semantics_name ( int semantics ) {
- /* Cannot use a switch() because of the {TCP_UDP}_SOCK_XXX hack */
- if ( semantics == SOCK_STREAM ) {
- return "SOCK_STREAM";
- } else if ( semantics == SOCK_DGRAM ) {
- return "SOCK_DGRAM";
- } else {
- return "SOCK_UNKNOWN";
- }
- }
-
- /**
- * @defgroup addrfam Address families
- *
- * @{
- */
- #define AF_INET 1 /**< IPv4 Internet addresses */
- #define AF_INET6 2 /**< IPv6 Internet addresses */
- /** @} */
-
- /**
- * Name address family
- *
- * @v family Address family (e.g. AF_INET)
- * @ret name Name of address family
- */
- static inline __attribute__ (( always_inline )) const char *
- socket_family_name ( int family ) {
- switch ( family ) {
- case AF_INET: return "AF_INET";
- case AF_INET6: return "AF_INET6";
- default: return "AF_UNKNOWN";
- }
- }
-
- /** A socket address family */
- typedef uint16_t sa_family_t;
-
- /** Length of a @c struct @c sockaddr */
- #define SA_LEN 32
-
- /**
- * Generalized socket address structure
- *
- * This contains the fields common to socket addresses for all address
- * families.
- */
- struct sockaddr {
- /** Socket address family
- *
- * This is an AF_XXX constant.
- */
- sa_family_t sa_family;
- /** Padding
- *
- * This ensures that a struct @c sockaddr_tcpip is large
- * enough to hold a socket address for any TCP/IP address
- * family.
- */
- char pad[ SA_LEN - sizeof ( sa_family_t ) ];
- } __attribute__ (( may_alias ));
-
- #endif /* _GPXE_SOCKET_H */
|