1 /*	$OpenBSD: linux_socket.h,v 1.7 2002/11/27 07:30:36 ish Exp $	*/
2 /*	$NetBSD: linux_socket.h,v 1.3 1995/05/28 10:16:34 mycroft Exp $	*/
3 
4 /*
5  * Copyright (c) 1995 Frank van der Linden
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 3. All advertising materials mentioning features or use of this software
17  *    must display the following acknowledgement:
18  *      This product includes software developed for the NetBSD Project
19  *      by Frank van der Linden
20  * 4. The name of the author may not be used to endorse or promote products
21  *    derived from this software without specific prior written permission
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
24  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
25  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
27  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
28  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
32  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  */
34 
35 #ifndef _LINUX_SOCKET_H
36 #define _LINUX_SOCKET_H
37 
38 /*
39  * Various Linux socket defines. Everything that is not re-defined here
40  * is the same as in OpenBSD.
41  *
42  * COMPAT_43 is assumed, and the osockaddr struct is used (it is what
43  * Linux uses)
44  */
45 
46 /*
47  * Address families. There are fewer of them, and they're numbered
48  * a bit different
49  */
50 
51 #define LINUX_AF_UNSPEC		0
52 #define LINUX_AF_UNIX		1
53 #define LINUX_AF_INET		2
54 #define LINUX_AF_AX25		3
55 #define LINUX_AF_IPX		4
56 #define LINUX_AF_APPLETALK	5
57 #define LINUX_AF_INET6		10
58 #define LINUX_AF_MAX		32
59 
60 /*
61  * Option levels for [gs]etsockopt(2). Only SOL_SOCKET is different,
62  * the rest matches IPPROTO_XXX
63  */
64 
65 #define LINUX_SOL_SOCKET	1
66 #define LINUX_SOL_IP		0
67 #define LINUX_SOL_IPX		256
68 #define LINUX_SOL_AX25		257
69 #define LINUX_SOL_TCP		6
70 #define LINUX_SOL_UDP		17
71 
72 /*
73  * Options for [gs]etsockopt(2), socket level. For Linux, they
74  * are not masks, but just increasing numbers.
75  */
76 
77 #define LINUX_SO_DEBUG		1
78 #define LINUX_SO_REUSEADDR	2
79 #define LINUX_SO_TYPE		3
80 #define LINUX_SO_ERROR		4
81 #define LINUX_SO_DONTROUTE	5
82 #define LINUX_SO_BROADCAST	6
83 #define LINUX_SO_SNDBUF		7
84 #define LINUX_SO_RCVBUF		8
85 #define LINUX_SO_KEEPALIVE	9
86 #define LINUX_SO_OOBINLINE	10
87 #define LINUX_SO_NO_CHECK	11
88 #define LINUX_SO_PRIORITY	12
89 #define LINUX_SO_LINGER		13
90 
91 /*
92  * Options vor [gs]etsockopt(2), IP level.
93  */
94 
95 #define	LINUX_IP_TOS		1
96 #define	LINUX_IP_TTL		2
97 #define	LINUX_IP_HDRINCL	3
98 #define	LINUX_IP_MULTICAST_IF	32
99 #define	LINUX_IP_MULTICAST_TTL	33
100 #define	LINUX_IP_MULTICAST_LOOP	34
101 #define	LINUX_IP_ADD_MEMBERSHIP	35
102 #define	LINUX_IP_DROP_MEMBERSHIP 36
103 
104 /*
105  * Options vor [gs]etsockopt(2), TCP level.
106  */
107 
108 #define	LINUX_TCP_NODELAY	1
109 #define	LINUX_TCP_MAXSEG	2
110 
111 struct linux_sockaddr {
112 	unsigned short	sa_family;
113 	char		sa_data[14];
114 };
115 
116 struct linux_ifmap {
117 	unsigned long	mem_start;
118 	unsigned long	mem_end;
119 	unsigned short	base_addr;
120 	unsigned char	irq;
121 	unsigned char	dma;
122 	unsigned char	port;
123 };
124 
125 struct linux_ifreq {
126 #define LINUX_IFHWADDRLEN     6
127 #define LINUX_IFNAMSIZ        16
128 	union {
129 		char ifrn_name[LINUX_IFNAMSIZ];		/* if name, e.g. "en0" */
130 	} ifr_ifrn;
131 
132 	union {
133 		struct linux_sockaddr	ifru_addr;
134 		struct linux_sockaddr	ifru_dstaddr;
135 		struct linux_sockaddr	ifru_broadaddr;
136 		struct linux_sockaddr	ifru_netmask;
137 		struct linux_sockaddr	ifru_hwaddr;
138 		short			ifru_flags;
139 		int			ifru_metric;
140 		int			ifru_mtu;
141 		struct linux_ifmap	ifru_map;
142 		char			ifru_slave[LINUX_IFNAMSIZ];
143 		caddr_t			ifru_data;
144 	} ifr_ifru;
145 };
146 
147 #define ifr_name	ifr_ifrn.ifrn_name		/* interface name */
148 #define ifr_hwaddr	ifr_ifru.ifru_hwaddr		/* MAC address */
149 
150 #endif /* _LINUX_SOCKET_H */
151