added generalized sockaddr structure and ip6 sockaddr
[people/xl0/gpxe.git] / src / include / gpxe / in.h
1 #ifndef _GPXE_IN_H
2 #define _GPXE_IN_H
3
4 #include <stdint.h>
5
6 /* Protocol numbers */
7
8 #define IP_ICMP         1
9 #define IP_IGMP         2
10 #define IP_TCP          6
11 #define IP_UDP          17
12
13 /* Network address family numbers */
14
15 #define AF_INET         1
16 #define AF_INET6        2
17 #define AF_802          6
18 #define AF_IPX          11
19
20 typedef uint16_t sa_family_t;
21
22 /* IP address constants */
23
24 #define INADDR_NONE 0xffffffff
25
26 #define INADDR_BROADCAST 0xffffffff
27
28 #define IN_MULTICAST(addr) ( ( (addr) & 0xf0000000 ) == 0xe0000000 )
29
30 /**
31  * IP address structure
32  */
33 struct in_addr {
34         uint32_t        s_addr;
35 };
36
37 typedef struct in_addr in_addr;
38
39 /**
40  * IP6 address structure
41  */
42 struct in6_addr {
43         union {
44                 uint8_t u6_addr8[16];
45                 uint16_t u6_addr16[8];
46                 uint32_t u6_addr32[4];
47         } in16_u;
48 #define s6_addr         in6_u.u6_addr8
49 #define s6_addr16       in6_u.u6_addr16
50 #define s6_addr32       in6_u.u6_addr32
51 };
52
53 typedef uint16_t in_port_t;
54
55 /**
56  * IP socket address
57  */
58 struct sockaddr_in {
59         struct in_addr  sin_addr;
60         in_port_t       sin_port;
61 };
62
63 /**
64  * IPv6 socket address
65  */
66 struct sockaddr_in6 {
67         in_port_t       sin6_port;      /* Destination port */
68         uint32_t        sin6_flowinfo;  /* Flow number */
69         struct in6_addr sin6_addr;      /* 128-bit destination address */
70         uint32_t        sin6_scope_id;  /* Scope ID */
71 };
72
73 /**
74  * Generalized socket address structure
75  */
76 struct sockaddr {
77         sa_family_t             sa_family;      /* Socket address family */
78         struct sockaddr_in      sin;            /* IP4 socket address */
79         struct sockaddr_in6     sin6;           /* IP6 socket address */
80 };
81
82 extern int inet_aton ( const char *cp, struct in_addr *inp );
83 extern char * inet_ntoa ( struct in_addr in );
84
85 /* Adding the following for IP6 support
86  *
87
88 extern int inet6_aton ( const char *cp, struct in6_addr *inp );
89 extern char * inet6_ntoa ( struct in_addr in );
90
91  */
92
93 #endif  /* _GPXE_IN_H */