d47369aac7596120077f8079db30f766e35c8de6
[people/xl0/gpxe-arm.git] / src / include / gpxe / socket.h
1 #ifndef _GPXE_SOCKET_H
2 #define _GPXE_SOCKET_H
3
4 /** @file
5  *
6  * Socket addresses
7  *
8  */
9
10 /**
11  * @defgroup commtypes Communication semantics
12  *
13  * @{
14  */
15 #define SOCK_STREAM     1       /**< Connection-based, reliable streams */
16 #define SOCK_DGRAM      2       /**< Connectionless, unreliable streams */
17 /** @} */
18
19 /**
20  * Name communication semantics
21  *
22  * @v semantics         Communication semantics (e.g. SOCK_STREAM)
23  * @ret name            Name of communication semantics
24  */
25 static inline __attribute__ (( always_inline )) const char *
26 socket_semantics_name ( int semantics ) {
27         switch ( semantics ) {
28         case SOCK_STREAM:       return "SOCK_STREAM";
29         case SOCK_DGRAM:        return "SOCK_DGRAM";
30         default:                return "SOCK_UNKNOWN";
31         }
32 }
33
34 /**
35  * @defgroup addrfam Address families
36  *
37  * @{
38  */
39 #define AF_INET         1       /**< IPv4 Internet addresses */
40 #define AF_INET6        2       /**< IPv6 Internet addresses */
41 /** @} */
42
43 /**
44  * Name address family
45  *
46  * @v family            Address family (e.g. AF_INET)
47  * @ret name            Name of address family
48  */
49 static inline __attribute__ (( always_inline )) const char *
50 socket_family_name ( int family ) {
51         switch ( family ) {
52         case AF_INET:           return "AF_INET";
53         case AF_INET6:          return "AF_INET6";
54         default:                return "AF_UNKNOWN";
55         }
56 }
57
58 /** A socket address family */
59 typedef uint16_t sa_family_t;
60
61 /** Length of a @c struct @c sockaddr */
62 #define SA_LEN 32
63
64 /**
65  * Generalized socket address structure
66  *
67  * This contains the fields common to socket addresses for all address
68  * families.
69  */
70 struct sockaddr {
71         /** Socket address family
72          *
73          * This is an AF_XXX constant.
74          */
75         sa_family_t sa_family;
76         /** Padding
77          *
78          * This ensures that a struct @c sockaddr_tcpip is large
79          * enough to hold a socket address for any TCP/IP address
80          * family.
81          */
82         char pad[ SA_LEN - sizeof ( sa_family_t ) ];
83 };
84
85 #endif /* _GPXE_SOCKET_H */