1 /*
2  * Copyright (c) 2006-2022, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2023-03-13     RT-Thread    Export as header
9  */
10 #ifndef __LWP_SYS_SOCKET_H__
11 #define __LWP_SYS_SOCKET_H__
12 
13 /* socket levels */
14 #define INTF_SOL_SOCKET     1
15 #define IMPL_SOL_SOCKET     0xFFF
16 
17 #define INTF_IPPROTO_IP     0
18 #define IMPL_IPPROTO_IP     0
19 
20 #define INTF_IPPROTO_TCP    6
21 #define IMPL_IPPROTO_TCP    6
22 
23 #define INTF_IPPROTO_IPV6   41
24 #define IMPL_IPPROTO_IPV6   41
25 
26 /* SOL_SOCKET option names */
27 #define INTF_SO_BROADCAST   6
28 #define INTF_SO_KEEPALIVE   9
29 #define INTF_SO_REUSEADDR   2
30 #define INTF_SO_TYPE        3
31 #define INTF_SO_ERROR       4
32 #define INTF_SO_SNDTIMEO    21
33 #define INTF_SO_RCVTIMEO    20
34 #define INTF_SO_RCVBUF      8
35 #define INTF_SO_LINGER      13
36 #define INTF_SO_NO_CHECK    11
37 #define INTF_SO_ACCEPTCONN  30
38 #define INTF_SO_DONTROUTE   5
39 #define INTF_SO_OOBINLINE   10
40 #define INTF_SO_REUSEPORT   15
41 #define INTF_SO_SNDBUF      7
42 #define INTF_SO_SNDLOWAT    19
43 #define INTF_SO_RCVLOWAT    18
44 #define INTF_SO_BINDTODEVICE        25
45 #define INTF_SO_TIMESTAMPNS         35
46 #define INTF_SO_TIMESTAMPING        37
47 #define INTF_SO_SELECT_ERR_QUEUE    45
48 
49 #define IMPL_SO_BROADCAST   0x0020
50 #define IMPL_SO_KEEPALIVE   0x0008
51 #define IMPL_SO_REUSEADDR   0x0004
52 #define IMPL_SO_TYPE        0x1008
53 #define IMPL_SO_ERROR       0x1007
54 #define IMPL_SO_SNDTIMEO    0x1005
55 #define IMPL_SO_RCVTIMEO    0x1006
56 #define IMPL_SO_RCVBUF      0x1002
57 #define IMPL_SO_LINGER      0x0080
58 #define IMPL_SO_NO_CHECK    0x100a
59 #define IMPL_SO_ACCEPTCONN  0x0002
60 #define IMPL_SO_DONTROUTE   0x0010
61 #define IMPL_SO_OOBINLINE   0x0100
62 #define IMPL_SO_REUSEPORT   0x0200
63 #define IMPL_SO_SNDBUF      0x1001
64 #define IMPL_SO_SNDLOWAT    0x1003
65 #define IMPL_SO_RCVLOWAT    0x1004
66 #define IMPL_SO_BINDTODEVICE        0x100b
67 #define IMPL_SO_TIMESTAMPNS         INTF_SO_TIMESTAMPNS
68 #define IMPL_SO_TIMESTAMPING        INTF_SO_TIMESTAMPING
69 #define IMPL_SO_SELECT_ERR_QUEUE    INTF_SO_SELECT_ERR_QUEUE
70 
71 /* IPPROTO_IP option names */
72 #define INTF_IP_TTL 2
73 #define INTF_IP_TOS 1
74 #define INTF_IP_MULTICAST_TTL   33
75 #define INTF_IP_MULTICAST_IF    32
76 #define INTF_IP_MULTICAST_LOOP  34
77 #define INTF_IP_ADD_MEMBERSHIP  35
78 #define INTF_IP_DROP_MEMBERSHIP 36
79 
80 #define IMPL_IP_TTL  2
81 #define IMPL_IP_TOS  1
82 #define IMPL_IP_MULTICAST_TTL   5
83 #define IMPL_IP_MULTICAST_IF    6
84 #define IMPL_IP_MULTICAST_LOOP  7
85 #define IMPL_IP_ADD_MEMBERSHIP  3
86 #define IMPL_IP_DROP_MEMBERSHIP 4
87 
88 /* IPPROTO_TCP option names */
89 #define INTF_TCP_NODELAY    1
90 #define INTF_TCP_KEEPALIVE  9
91 #define INTF_TCP_KEEPIDLE   4
92 #define INTF_TCP_KEEPINTVL  5
93 #define INTF_TCP_KEEPCNT    6
94 
95 #define IMPL_TCP_NODELAY    0x01
96 #define IMPL_TCP_KEEPALIVE  0x02
97 #define IMPL_TCP_KEEPIDLE   0x03
98 #define IMPL_TCP_KEEPINTVL  0x04
99 #define IMPL_TCP_KEEPCNT    0x05
100 
101 /* IPPROTO_IPV6 option names */
102 #define INTF_IPV6_V6ONLY    26
103 #define IMPL_IPV6_V6ONLY    27
104 
105 struct musl_sockaddr
106 {
107     uint16_t sa_family;
108     char     sa_data[14];
109 };
110 
111 struct musl_ifmap {
112     unsigned long int mem_start;
113     unsigned long int mem_end;
114     unsigned short int base_addr;
115     unsigned char irq;
116     unsigned char dma;
117     unsigned char port;
118 };
119 
120 struct musl_ifreq
121 {
122     union
123     {
124 #define IFNAMSIZ    16
125         char ifrn_name[IFNAMSIZ];
126     } ifr_ifrn;
127     union
128     {
129         struct musl_sockaddr ifru_addr;
130         struct musl_sockaddr ifru_dstaddr;
131         struct musl_sockaddr ifru_broadaddr;
132         struct musl_sockaddr ifru_netmask;
133         struct musl_sockaddr ifru_hwaddr;
134         short int ifru_flags;
135         int ifru_ivalue;
136         int ifru_mtu;
137         struct musl_ifmap ifru_map;
138         char ifru_slave[IFNAMSIZ];
139         char ifru_newname[IFNAMSIZ];
140         char *ifru_data;
141     } ifr_ifru;
142 };
143 
144 struct musl_rtentry
145 {
146     unsigned long int rt_pad1;
147     struct musl_sockaddr rt_dst;
148     struct musl_sockaddr rt_gateway;
149     struct musl_sockaddr rt_genmask;
150     unsigned short int rt_flags;
151     short int rt_pad2;
152     unsigned long int rt_pad3;
153     unsigned char rt_tos;
154     unsigned char rt_class;
155     short int rt_pad4[sizeof(long)/2-1];
156     short int rt_metric;
157     char *rt_dev;
158     unsigned long int rt_mtu;
159     unsigned long int rt_window;
160     unsigned short int rt_irtt;
161 };
162 
163 #endif /* __LWP_SYS_SOCKET_H__ */
164