diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /include/linux/net.h |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'include/linux/net.h')
-rw-r--r-- | include/linux/net.h | 287 |
1 files changed, 287 insertions, 0 deletions
diff --git a/include/linux/net.h b/include/linux/net.h new file mode 100644 index 000000000000..7823b3482506 --- /dev/null +++ b/include/linux/net.h | |||
@@ -0,0 +1,287 @@ | |||
1 | /* | ||
2 | * NET An implementation of the SOCKET network access protocol. | ||
3 | * This is the master header file for the Linux NET layer, | ||
4 | * or, in plain English: the networking handling part of the | ||
5 | * kernel. | ||
6 | * | ||
7 | * Version: @(#)net.h 1.0.3 05/25/93 | ||
8 | * | ||
9 | * Authors: Orest Zborowski, <obz@Kodak.COM> | ||
10 | * Ross Biro, <bir7@leland.Stanford.Edu> | ||
11 | * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> | ||
12 | * | ||
13 | * This program is free software; you can redistribute it and/or | ||
14 | * modify it under the terms of the GNU General Public License | ||
15 | * as published by the Free Software Foundation; either version | ||
16 | * 2 of the License, or (at your option) any later version. | ||
17 | */ | ||
18 | #ifndef _LINUX_NET_H | ||
19 | #define _LINUX_NET_H | ||
20 | |||
21 | #include <linux/config.h> | ||
22 | #include <linux/wait.h> | ||
23 | #include <linux/stringify.h> | ||
24 | #include <asm/socket.h> | ||
25 | |||
26 | struct poll_table_struct; | ||
27 | struct inode; | ||
28 | |||
29 | #define NPROTO 32 /* should be enough for now.. */ | ||
30 | |||
31 | #define SYS_SOCKET 1 /* sys_socket(2) */ | ||
32 | #define SYS_BIND 2 /* sys_bind(2) */ | ||
33 | #define SYS_CONNECT 3 /* sys_connect(2) */ | ||
34 | #define SYS_LISTEN 4 /* sys_listen(2) */ | ||
35 | #define SYS_ACCEPT 5 /* sys_accept(2) */ | ||
36 | #define SYS_GETSOCKNAME 6 /* sys_getsockname(2) */ | ||
37 | #define SYS_GETPEERNAME 7 /* sys_getpeername(2) */ | ||
38 | #define SYS_SOCKETPAIR 8 /* sys_socketpair(2) */ | ||
39 | #define SYS_SEND 9 /* sys_send(2) */ | ||
40 | #define SYS_RECV 10 /* sys_recv(2) */ | ||
41 | #define SYS_SENDTO 11 /* sys_sendto(2) */ | ||
42 | #define SYS_RECVFROM 12 /* sys_recvfrom(2) */ | ||
43 | #define SYS_SHUTDOWN 13 /* sys_shutdown(2) */ | ||
44 | #define SYS_SETSOCKOPT 14 /* sys_setsockopt(2) */ | ||
45 | #define SYS_GETSOCKOPT 15 /* sys_getsockopt(2) */ | ||
46 | #define SYS_SENDMSG 16 /* sys_sendmsg(2) */ | ||
47 | #define SYS_RECVMSG 17 /* sys_recvmsg(2) */ | ||
48 | |||
49 | typedef enum { | ||
50 | SS_FREE = 0, /* not allocated */ | ||
51 | SS_UNCONNECTED, /* unconnected to any socket */ | ||
52 | SS_CONNECTING, /* in process of connecting */ | ||
53 | SS_CONNECTED, /* connected to socket */ | ||
54 | SS_DISCONNECTING /* in process of disconnecting */ | ||
55 | } socket_state; | ||
56 | |||
57 | #define __SO_ACCEPTCON (1 << 16) /* performed a listen */ | ||
58 | |||
59 | #ifdef __KERNEL__ | ||
60 | |||
61 | #define SOCK_ASYNC_NOSPACE 0 | ||
62 | #define SOCK_ASYNC_WAITDATA 1 | ||
63 | #define SOCK_NOSPACE 2 | ||
64 | #define SOCK_PASSCRED 3 | ||
65 | |||
66 | #ifndef ARCH_HAS_SOCKET_TYPES | ||
67 | /** sock_type - Socket types | ||
68 | * | ||
69 | * When adding some new socket type please | ||
70 | * grep ARCH_HAS_SOCKET_TYPE include/asm-* /socket.h, at least MIPS | ||
71 | * overrides this enum for binary compat reasons. | ||
72 | * | ||
73 | * @SOCK_STREAM - stream (connection) socket | ||
74 | * @SOCK_DGRAM - datagram (conn.less) socket | ||
75 | * @SOCK_RAW - raw socket | ||
76 | * @SOCK_RDM - reliably-delivered message | ||
77 | * @SOCK_SEQPACKET - sequential packet socket | ||
78 | * @SOCK_PACKET - linux specific way of getting packets at the dev level. | ||
79 | * For writing rarp and other similar things on the user level. | ||
80 | */ | ||
81 | enum sock_type { | ||
82 | SOCK_STREAM = 1, | ||
83 | SOCK_DGRAM = 2, | ||
84 | SOCK_RAW = 3, | ||
85 | SOCK_RDM = 4, | ||
86 | SOCK_SEQPACKET = 5, | ||
87 | SOCK_PACKET = 10, | ||
88 | }; | ||
89 | |||
90 | #define SOCK_MAX (SOCK_PACKET + 1) | ||
91 | |||
92 | #endif /* ARCH_HAS_SOCKET_TYPES */ | ||
93 | |||
94 | /** | ||
95 | * struct socket - general BSD socket | ||
96 | * @state - socket state (%SS_CONNECTED, etc) | ||
97 | * @flags - socket flags (%SOCK_ASYNC_NOSPACE, etc) | ||
98 | * @ops - protocol specific socket operations | ||
99 | * @fasync_list - Asynchronous wake up list | ||
100 | * @file - File back pointer for gc | ||
101 | * @sk - internal networking protocol agnostic socket representation | ||
102 | * @wait - wait queue for several uses | ||
103 | * @type - socket type (%SOCK_STREAM, etc) | ||
104 | * @passcred - credentials (used only in Unix Sockets (aka PF_LOCAL)) | ||
105 | */ | ||
106 | struct socket { | ||
107 | socket_state state; | ||
108 | unsigned long flags; | ||
109 | struct proto_ops *ops; | ||
110 | struct fasync_struct *fasync_list; | ||
111 | struct file *file; | ||
112 | struct sock *sk; | ||
113 | wait_queue_head_t wait; | ||
114 | short type; | ||
115 | }; | ||
116 | |||
117 | struct vm_area_struct; | ||
118 | struct page; | ||
119 | struct kiocb; | ||
120 | struct sockaddr; | ||
121 | struct msghdr; | ||
122 | struct module; | ||
123 | |||
124 | struct proto_ops { | ||
125 | int family; | ||
126 | struct module *owner; | ||
127 | int (*release) (struct socket *sock); | ||
128 | int (*bind) (struct socket *sock, | ||
129 | struct sockaddr *myaddr, | ||
130 | int sockaddr_len); | ||
131 | int (*connect) (struct socket *sock, | ||
132 | struct sockaddr *vaddr, | ||
133 | int sockaddr_len, int flags); | ||
134 | int (*socketpair)(struct socket *sock1, | ||
135 | struct socket *sock2); | ||
136 | int (*accept) (struct socket *sock, | ||
137 | struct socket *newsock, int flags); | ||
138 | int (*getname) (struct socket *sock, | ||
139 | struct sockaddr *addr, | ||
140 | int *sockaddr_len, int peer); | ||
141 | unsigned int (*poll) (struct file *file, struct socket *sock, | ||
142 | struct poll_table_struct *wait); | ||
143 | int (*ioctl) (struct socket *sock, unsigned int cmd, | ||
144 | unsigned long arg); | ||
145 | int (*listen) (struct socket *sock, int len); | ||
146 | int (*shutdown) (struct socket *sock, int flags); | ||
147 | int (*setsockopt)(struct socket *sock, int level, | ||
148 | int optname, char __user *optval, int optlen); | ||
149 | int (*getsockopt)(struct socket *sock, int level, | ||
150 | int optname, char __user *optval, int __user *optlen); | ||
151 | int (*sendmsg) (struct kiocb *iocb, struct socket *sock, | ||
152 | struct msghdr *m, size_t total_len); | ||
153 | int (*recvmsg) (struct kiocb *iocb, struct socket *sock, | ||
154 | struct msghdr *m, size_t total_len, | ||
155 | int flags); | ||
156 | int (*mmap) (struct file *file, struct socket *sock, | ||
157 | struct vm_area_struct * vma); | ||
158 | ssize_t (*sendpage) (struct socket *sock, struct page *page, | ||
159 | int offset, size_t size, int flags); | ||
160 | }; | ||
161 | |||
162 | struct net_proto_family { | ||
163 | int family; | ||
164 | int (*create)(struct socket *sock, int protocol); | ||
165 | /* These are counters for the number of different methods of | ||
166 | each we support */ | ||
167 | short authentication; | ||
168 | short encryption; | ||
169 | short encrypt_net; | ||
170 | struct module *owner; | ||
171 | }; | ||
172 | |||
173 | struct iovec; | ||
174 | struct kvec; | ||
175 | |||
176 | extern int sock_wake_async(struct socket *sk, int how, int band); | ||
177 | extern int sock_register(struct net_proto_family *fam); | ||
178 | extern int sock_unregister(int family); | ||
179 | extern int sock_create(int family, int type, int proto, | ||
180 | struct socket **res); | ||
181 | extern int sock_create_kern(int family, int type, int proto, | ||
182 | struct socket **res); | ||
183 | extern int sock_create_lite(int family, int type, int proto, | ||
184 | struct socket **res); | ||
185 | extern void sock_release(struct socket *sock); | ||
186 | extern int sock_sendmsg(struct socket *sock, struct msghdr *msg, | ||
187 | size_t len); | ||
188 | extern int sock_recvmsg(struct socket *sock, struct msghdr *msg, | ||
189 | size_t size, int flags); | ||
190 | extern int sock_map_fd(struct socket *sock); | ||
191 | extern struct socket *sockfd_lookup(int fd, int *err); | ||
192 | #define sockfd_put(sock) fput(sock->file) | ||
193 | extern int net_ratelimit(void); | ||
194 | extern unsigned long net_random(void); | ||
195 | extern void net_srandom(unsigned long); | ||
196 | extern void net_random_init(void); | ||
197 | |||
198 | extern int kernel_sendmsg(struct socket *sock, struct msghdr *msg, | ||
199 | struct kvec *vec, size_t num, size_t len); | ||
200 | extern int kernel_recvmsg(struct socket *sock, struct msghdr *msg, | ||
201 | struct kvec *vec, size_t num, | ||
202 | size_t len, int flags); | ||
203 | |||
204 | #ifndef CONFIG_SMP | ||
205 | #define SOCKOPS_WRAPPED(name) name | ||
206 | #define SOCKOPS_WRAP(name, fam) | ||
207 | #else | ||
208 | |||
209 | #define SOCKOPS_WRAPPED(name) __unlocked_##name | ||
210 | |||
211 | #define SOCKCALL_WRAP(name, call, parms, args) \ | ||
212 | static int __lock_##name##_##call parms \ | ||
213 | { \ | ||
214 | int ret; \ | ||
215 | lock_kernel(); \ | ||
216 | ret = __unlocked_##name##_ops.call args ;\ | ||
217 | unlock_kernel(); \ | ||
218 | return ret; \ | ||
219 | } | ||
220 | |||
221 | #define SOCKCALL_UWRAP(name, call, parms, args) \ | ||
222 | static unsigned int __lock_##name##_##call parms \ | ||
223 | { \ | ||
224 | int ret; \ | ||
225 | lock_kernel(); \ | ||
226 | ret = __unlocked_##name##_ops.call args ;\ | ||
227 | unlock_kernel(); \ | ||
228 | return ret; \ | ||
229 | } | ||
230 | |||
231 | |||
232 | #define SOCKOPS_WRAP(name, fam) \ | ||
233 | SOCKCALL_WRAP(name, release, (struct socket *sock), (sock)) \ | ||
234 | SOCKCALL_WRAP(name, bind, (struct socket *sock, struct sockaddr *uaddr, int addr_len), \ | ||
235 | (sock, uaddr, addr_len)) \ | ||
236 | SOCKCALL_WRAP(name, connect, (struct socket *sock, struct sockaddr * uaddr, \ | ||
237 | int addr_len, int flags), \ | ||
238 | (sock, uaddr, addr_len, flags)) \ | ||
239 | SOCKCALL_WRAP(name, socketpair, (struct socket *sock1, struct socket *sock2), \ | ||
240 | (sock1, sock2)) \ | ||
241 | SOCKCALL_WRAP(name, accept, (struct socket *sock, struct socket *newsock, \ | ||
242 | int flags), (sock, newsock, flags)) \ | ||
243 | SOCKCALL_WRAP(name, getname, (struct socket *sock, struct sockaddr *uaddr, \ | ||
244 | int *addr_len, int peer), (sock, uaddr, addr_len, peer)) \ | ||
245 | SOCKCALL_UWRAP(name, poll, (struct file *file, struct socket *sock, struct poll_table_struct *wait), \ | ||
246 | (file, sock, wait)) \ | ||
247 | SOCKCALL_WRAP(name, ioctl, (struct socket *sock, unsigned int cmd, \ | ||
248 | unsigned long arg), (sock, cmd, arg)) \ | ||
249 | SOCKCALL_WRAP(name, listen, (struct socket *sock, int len), (sock, len)) \ | ||
250 | SOCKCALL_WRAP(name, shutdown, (struct socket *sock, int flags), (sock, flags)) \ | ||
251 | SOCKCALL_WRAP(name, setsockopt, (struct socket *sock, int level, int optname, \ | ||
252 | char __user *optval, int optlen), (sock, level, optname, optval, optlen)) \ | ||
253 | SOCKCALL_WRAP(name, getsockopt, (struct socket *sock, int level, int optname, \ | ||
254 | char __user *optval, int __user *optlen), (sock, level, optname, optval, optlen)) \ | ||
255 | SOCKCALL_WRAP(name, sendmsg, (struct kiocb *iocb, struct socket *sock, struct msghdr *m, size_t len), \ | ||
256 | (iocb, sock, m, len)) \ | ||
257 | SOCKCALL_WRAP(name, recvmsg, (struct kiocb *iocb, struct socket *sock, struct msghdr *m, size_t len, int flags), \ | ||
258 | (iocb, sock, m, len, flags)) \ | ||
259 | SOCKCALL_WRAP(name, mmap, (struct file *file, struct socket *sock, struct vm_area_struct *vma), \ | ||
260 | (file, sock, vma)) \ | ||
261 | \ | ||
262 | static struct proto_ops name##_ops = { \ | ||
263 | .family = fam, \ | ||
264 | .owner = THIS_MODULE, \ | ||
265 | .release = __lock_##name##_release, \ | ||
266 | .bind = __lock_##name##_bind, \ | ||
267 | .connect = __lock_##name##_connect, \ | ||
268 | .socketpair = __lock_##name##_socketpair, \ | ||
269 | .accept = __lock_##name##_accept, \ | ||
270 | .getname = __lock_##name##_getname, \ | ||
271 | .poll = __lock_##name##_poll, \ | ||
272 | .ioctl = __lock_##name##_ioctl, \ | ||
273 | .listen = __lock_##name##_listen, \ | ||
274 | .shutdown = __lock_##name##_shutdown, \ | ||
275 | .setsockopt = __lock_##name##_setsockopt, \ | ||
276 | .getsockopt = __lock_##name##_getsockopt, \ | ||
277 | .sendmsg = __lock_##name##_sendmsg, \ | ||
278 | .recvmsg = __lock_##name##_recvmsg, \ | ||
279 | .mmap = __lock_##name##_mmap, \ | ||
280 | }; | ||
281 | #endif | ||
282 | |||
283 | #define MODULE_ALIAS_NETPROTO(proto) \ | ||
284 | MODULE_ALIAS("net-pf-" __stringify(proto)) | ||
285 | |||
286 | #endif /* __KERNEL__ */ | ||
287 | #endif /* _LINUX_NET_H */ | ||