iPXE
socket.h
Go to the documentation of this file.
1#ifndef _IPXE_SOCKET_H
2#define _IPXE_SOCKET_H
3
4/** @file
5 *
6 * Socket addresses
7 *
8 */
9
10FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11FILE_SECBOOT ( PERMITTED );
12
13#include <stdint.h>
14#include <ipxe/tables.h>
15
16/**
17 * @defgroup commtypes Communication semantics
18 *
19 * @{
20 */
21
22/** Connection-based, reliable streams */
23extern int tcp_sock_stream;
24#define TCP_SOCK_STREAM 0x1
25#define SOCK_STREAM tcp_sock_stream
26
27/** Connectionless, unreliable streams */
28extern int udp_sock_dgram;
29#define UDP_SOCK_DGRAM 0x2
30#define SOCK_DGRAM udp_sock_dgram
31
32/** Echo testing streams */
33extern int ping_sock_echo;
34#define PING_SOCK_ECHO 0x3
35#define SOCK_ECHO ping_sock_echo
36
37/** @} */
38
39/**
40 * Name communication semantics
41 *
42 * @v semantics Communication semantics (e.g. SOCK_STREAM)
43 * @ret name Name of communication semantics
44 */
45static inline __attribute__ (( always_inline )) const char *
46socket_semantics_name ( int semantics ) {
47 /* Cannot use a switch() because of the {TCP_UDP}_SOCK_XXX hack */
48 if ( semantics == SOCK_STREAM ) {
49 return "SOCK_STREAM";
50 } else if ( semantics == SOCK_DGRAM ) {
51 return "SOCK_DGRAM";
52 } else if ( semantics == SOCK_ECHO ) {
53 return "SOCK_ECHO";
54 } else {
55 return "SOCK_UNKNOWN";
56 }
57}
58
59/**
60 * @defgroup addrfam Address families
61 *
62 * @{
63 */
64#define AF_INET 1 /**< IPv4 Internet addresses */
65#define AF_INET6 2 /**< IPv6 Internet addresses */
66#define AF_FC 3 /**< Fibre Channel addresses */
67/** @} */
68
69/**
70 * Name address family
71 *
72 * @v family Address family (e.g. AF_INET)
73 * @ret name Name of address family
74 */
75static inline __attribute__ (( always_inline )) const char *
76socket_family_name ( int family ) {
77 switch ( family ) {
78 case AF_INET: return "AF_INET";
79 case AF_INET6: return "AF_INET6";
80 case AF_FC: return "AF_FC";
81 default: return "AF_UNKNOWN";
82 }
83}
84
85/** A socket address family */
87
88/** Length of a @c struct @c sockaddr */
89#define SA_LEN 32
90
91/**
92 * Generalized socket address structure
93 *
94 * This contains the fields common to socket addresses for all address
95 * families.
96 */
97struct sockaddr {
98 /** Socket address family
99 *
100 * This is an AF_XXX constant.
101 */
103 /** Padding
104 *
105 * This ensures that a struct @c sockaddr_tcpip is large
106 * enough to hold a socket address for any TCP/IP address
107 * family.
108 */
109 char pad[ SA_LEN - sizeof ( sa_family_t ) ];
110} __attribute__ (( packed, may_alias ));
111
112/**
113 * Socket address converter
114 *
115 */
117 /** Socket address family
118 *
119 * This is an AF_XXX constant.
120 */
122 /** Transcribe socket address
123 *
124 * @v sa Socket address
125 * @ret string Socket address string
126 */
127 const char * ( * ntoa ) ( struct sockaddr *sa );
128 /** Parse socket address
129 *
130 * @v string Socket address stringh
131 * @v sa Socket address to fill in
132 * @ret rc Return status code
133 */
134 int ( * aton ) ( const char *string, struct sockaddr *sa );
135};
136
137/** Socket address converter table */
138#define SOCKADDR_CONVERTERS \
139 __table ( struct sockaddr_converter, "sockaddr_converters" )
140
141/** Declare a socket address converter */
142#define __sockaddr_converter __table_entry ( SOCKADDR_CONVERTERS, 01 )
143
144extern const char * sock_ntoa ( struct sockaddr *sa );
145extern int sock_aton ( const char *string, struct sockaddr *sa );
146
147#endif /* _IPXE_SOCKET_H */
unsigned short uint16_t
Definition stdint.h:11
#define AF_FC
Fibre Channel addresses.
Definition socket.h:66
#define AF_INET
IPv4 Internet addresses.
Definition socket.h:64
#define AF_INET6
IPv6 Internet addresses.
Definition socket.h:65
#define SOCK_STREAM
Definition socket.h:25
#define SOCK_DGRAM
Definition socket.h:30
#define SOCK_ECHO
Definition socket.h:35
int tcp_sock_stream
Linkage hack.
Definition tcp.c:1774
int udp_sock_dgram
Linkage hack.
Definition udp.c:407
int ping_sock_echo
Linkage hack.
Definition ping.c:270
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:896
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
Definition compiler.h:926
#define __attribute__(x)
Definition compiler.h:10
uint32_t string
Definition multiboot.h:2
static const char * socket_semantics_name(int semantics)
Name communication semantics.
Definition socket.h:46
uint16_t sa_family_t
A socket address family.
Definition socket.h:86
int sock_aton(const char *string, struct sockaddr *sa)
Parse socket address.
Definition socket.c:60
static const char * socket_family_name(int family)
Name address family.
Definition socket.h:76
const char * sock_ntoa(struct sockaddr *sa)
Transcribe socket address.
Definition socket.c:43
#define SA_LEN
Length of a struct sockaddr.
Definition socket.h:89
Socket address converter.
Definition socket.h:116
sa_family_t family
Socket address family.
Definition socket.h:121
int(* aton)(const char *string, struct sockaddr *sa)
Parse socket address.
Definition socket.h:134
Generalized socket address structure.
Definition socket.h:97
char pad[SA_LEN - sizeof(sa_family_t)]
Padding.
Definition socket.h:109
sa_family_t sa_family
Socket address family.
Definition socket.h:102
struct sockaddr sa
Definition syslog.c:57
Linker tables.