summaryrefslogtreecommitdiff
path: root/sys/compat/linux/linux_socket.h
blob: 4020654e0cfd07e215b1af572d8269450ca5a36d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
/*	$OpenBSD: linux_socket.h,v 1.11 2012/06/26 10:18:08 pirofti Exp $	*/
/*	$NetBSD: linux_socket.h,v 1.3 1995/05/28 10:16:34 mycroft Exp $	*/

/*
 * Copyright (c) 1995 Frank van der Linden
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *      This product includes software developed for the NetBSD Project
 *      by Frank van der Linden
 * 4. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef _LINUX_SOCKET_H_
#define _LINUX_SOCKET_H_

/*
 * Various Linux socket defines. Everything that is not re-defined here
 * is the same as in OpenBSD.
 *
 * COMPAT_43 is assumed, and the osockaddr struct is used (it is what
 * Linux uses)
 */

/*
 * Address families. There are fewer of them, and they're numbered
 * a bit different
 */

#define LINUX_AF_UNSPEC		0
#define LINUX_AF_UNIX		1
#define LINUX_AF_INET		2
#define LINUX_AF_AX25		3
#define LINUX_AF_IPX		4
#define LINUX_AF_APPLETALK	5
#define LINUX_AF_INET6		10
#define LINUX_AF_MAX		32

/*
 * Option levels for [gs]etsockopt(2). Only SOL_SOCKET is different,
 * the rest matches IPPROTO_XXX
 */

#define LINUX_SOL_SOCKET	1
#define LINUX_SOL_IP		0
#define LINUX_SOL_IPX		256
#define LINUX_SOL_AX25		257
#define LINUX_SOL_TCP		6
#define LINUX_SOL_UDP		17

/*
 * Options for [gs]etsockopt(2), socket level. For Linux, they
 * are not masks, but just increasing numbers.
 */

#define LINUX_SO_DEBUG		1
#define LINUX_SO_REUSEADDR	2
#define LINUX_SO_TYPE		3
#define LINUX_SO_ERROR		4
#define LINUX_SO_DONTROUTE	5
#define LINUX_SO_BROADCAST	6
#define LINUX_SO_SNDBUF		7
#define LINUX_SO_RCVBUF		8
#define LINUX_SO_KEEPALIVE	9
#define LINUX_SO_OOBINLINE	10
#define LINUX_SO_NO_CHECK	11
#define LINUX_SO_PRIORITY	12
#define LINUX_SO_LINGER		13

/*
 * Options vor [gs]etsockopt(2), IP level.
 */

#define	LINUX_IP_TOS		1
#define	LINUX_IP_TTL		2
#define	LINUX_IP_HDRINCL	3
#define	LINUX_IP_MULTICAST_IF	32
#define	LINUX_IP_MULTICAST_TTL	33
#define	LINUX_IP_MULTICAST_LOOP	34
#define	LINUX_IP_ADD_MEMBERSHIP	35
#define	LINUX_IP_DROP_MEMBERSHIP 36

/*
 * Options for [gs]etsockopt(2), TCP level.
 */

#define	LINUX_TCP_NODELAY	1
#define	LINUX_TCP_MAXSEG	2

/*
 * Flags for recv(2) and send(2) family functions.
 * The first 3 match MSG_XXX.
 */

#define	LINUX_MSG_OOB		1
#define	LINUX_MSG_PEEK		2
#define	LINUX_MSG_DONTROUTE	4
#define	LINUX_MSG_DONTWAIT	0x40
#define	LINUX_MSG_WAITALL	0x100
#define	LINUX_MSG_NOSIGNAL	0x4000

/* Mask out extra type-related options */
#define LINUX_SOCKET_TYPE_MASK	0xf
#define LINUX_SOCK_CLOEXEC	02000000
#define LINUX_SOCK_NONBLOCK	00004000

struct linux_sockaddr {
	unsigned short	sa_family;
	char		sa_data[14];
};

struct linux_ifmap {
	unsigned long	mem_start;
	unsigned long	mem_end;
	unsigned short	base_addr; 
	unsigned char	irq;
	unsigned char	dma;
	unsigned char	port;
};

struct linux_ifreq {
#define LINUX_IFHWADDRLEN     6
#define LINUX_IFNAMSIZ        16
	union {
		char ifrn_name[LINUX_IFNAMSIZ];		/* if name, e.g. "en0" */       
	} ifr_ifrn;

	union {
		struct linux_sockaddr	ifru_addr;
		struct linux_sockaddr	ifru_dstaddr;
		struct linux_sockaddr	ifru_broadaddr;
		struct linux_sockaddr	ifru_netmask;
		struct linux_sockaddr	ifru_hwaddr;
		short			ifru_flags;
		int			ifru_metric;
		int			ifru_mtu;
		struct linux_ifmap	ifru_map;
		char			ifru_slave[LINUX_IFNAMSIZ];
		caddr_t			ifru_data;
	} ifr_ifru;
};

#define ifr_name	ifr_ifrn.ifrn_name		/* interface name */
#define ifr_hwaddr	ifr_ifru.ifru_hwaddr		/* MAC address */

#endif /* _LINUX_SOCKET_H_ */