ea602537e260f4690d65c916ab18eb6e46b12dbd
[people/dverkamp/gpxe.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 commdomains Communication domains
12  *
13  * @{
14  */
15 #define PF_INET         1       /**< IPv4 Internet protocols */
16 #define PF_INET6        2       /**< IPv6 Internet protocols */
17 /** @} */
18
19 /**
20  * Name communication domain
21  *
22  * @v domain            Communication domain (e.g. PF_INET)
23  * @ret name            Name of communication domain
24  */
25 static inline __attribute__ (( always_inline )) const char *
26 socket_domain_name ( int domain ) {
27         switch ( domain ) {
28         case PF_INET:           return "PF_INET";
29         case PF_INET6:          return "PF_INET6";
30         default:                return "PF_UNKNOWN";
31         }
32 }
33
34 /**
35  * @defgroup commtypes Communication types
36  *
37  * @{
38  */
39 #define SOCK_STREAM     1       /**< Connection-based, reliable streams */
40 #define SOCK_DGRAM      2       /**< Connectionless, unreliable streams */
41 /** @} */
42
43 /**
44  * Name communication type
45  *
46  * @v type              Communication type (e.g. SOCK_STREAM)
47  * @ret name            Name of communication type
48  */
49 static inline __attribute__ (( always_inline )) const char *
50 socket_type_name ( int type ) {
51         switch ( type ) {
52         case SOCK_STREAM:       return "SOCK_STREAM";
53         case SOCK_DGRAM:        return "SOCK_DGRAM";
54         default:                return "SOCK_UNKNOWN";
55         }
56 }
57
58 /**
59  * @defgroup addrfam Address families
60  *
61  * @{
62  */
63 #define AF_INET         1       /**< IPv4 Internet addresses */
64 #define AF_INET6        2       /**< IPv6 Internet addresses */
65 /** @} */
66
67 /** A socket address family */
68 typedef uint16_t sa_family_t;
69
70 /** Length of a @c struct @c sockaddr */
71 #define SA_LEN 32
72
73 /**
74  * Generalized socket address structure
75  *
76  * This contains the fields common to socket addresses for all address
77  * families.
78  */
79 struct sockaddr {
80         /** Socket address family
81          *
82          * This is an AF_XXX constant.
83          */
84         sa_family_t sa_family;
85         /** Padding
86          *
87          * This ensures that a struct @c sockaddr_tcpip is large
88          * enough to hold a socket address for any TCP/IP address
89          * family.
90          */
91         char pad[ SA_LEN - sizeof ( sa_family_t ) ];
92 };
93
94 #endif /* _GPXE_SOCKET_H */