Import 1.3.15
[davej-history.git] / include / linux / net.h
blob85ded6a618a29e4e356db27c8ec9a619a91df2b6
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.
7 * Version: @(#)net.h 1.0.3 05/25/93
9 * Authors: Orest Zborowski, <obz@Kodak.COM>
10 * Ross Biro, <bir7@leland.Stanford.Edu>
11 * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
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.
18 #ifndef _LINUX_NET_H
19 #define _LINUX_NET_H
22 #include <linux/wait.h>
23 #include <linux/socket.h>
26 #define NSOCKETS 2000/* Dynamic, this is MAX LIMIT */
27 #define NSOCKETS_UNIX 128/* unix domain static limit */
28 #define NPROTO 16/* should be enough for now.. */
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) */
48 typedefenum{
49 SS_FREE =0,/* not allocated */
50 SS_UNCONNECTED,/* unconnected to any socket */
51 SS_CONNECTING,/* in process of connecting */
52 SS_CONNECTED,/* connected to socket */
53 SS_DISCONNECTING /* in process of disconnecting */
54 } socket_state;
56 #define SO_ACCEPTCON (1<<16)/* performed a listen */
57 #define SO_WAITDATA (1<<17)/* wait data to read */
58 #define SO_NOSPACE (1<<18)/* no space to write */
60 #ifdef __KERNEL__
62 * Internal representation of a socket. not all the fields are used by
63 * all configurations:
65 * server client
66 * conn client connected to server connected to
67 * iconn list of clients -unused-
68 * awaiting connections
69 * wait sleep for clients, sleep for connection,
70 * sleep for i/o sleep for i/o
72 struct socket {
73 short type;/* SOCK_STREAM, ... */
74 socket_state state;
75 long flags;
76 struct proto_ops *ops;/* protocols do most everything */
77 void*data;/* protocol data */
78 struct socket *conn;/* server socket connected to */
79 struct socket *iconn;/* incomplete client conn.s */
80 struct socket *next;
81 struct wait_queue **wait;/* ptr to place to wait on */
82 struct inode *inode;
83 struct fasync_struct *fasync_list;/* Asynchronous wake up list */
86 #define SOCK_INODE(S) ((S)->inode)
88 struct proto_ops {
89 int family;
91 int(*create) (struct socket *sock,int protocol);
92 int(*dup) (struct socket *newsock,struct socket *oldsock);
93 int(*release) (struct socket *sock,struct socket *peer);
94 int(*bind) (struct socket *sock,struct sockaddr *umyaddr,
95 int sockaddr_len);
96 int(*connect) (struct socket *sock,struct sockaddr *uservaddr,
97 int sockaddr_len,int flags);
98 int(*socketpair) (struct socket *sock1,struct socket *sock2);
99 int(*accept) (struct socket *sock,struct socket *newsock,
100 int flags);
101 int(*getname) (struct socket *sock,struct sockaddr *uaddr,
102 int*usockaddr_len,int peer);
103 int(*read) (struct socket *sock,char*ubuf,int size,
104 int nonblock);
105 int(*write) (struct socket *sock,const char*ubuf,int size,
106 int nonblock);
107 int(*select) (struct socket *sock,int sel_type,
108 select_table *wait);
109 int(*ioctl) (struct socket *sock,unsigned int cmd,
110 unsigned long arg);
111 int(*listen) (struct socket *sock,int len);
112 int(*send) (struct socket *sock,const void*buff,int len,int nonblock,
113 unsigned flags);
114 int(*recv) (struct socket *sock,void*buff,int len,int nonblock,
115 unsigned flags);
116 int(*sendto) (struct socket *sock,const void*buff,int len,int nonblock,
117 unsigned flags,struct sockaddr *,int addr_len);
118 int(*recvfrom) (struct socket *sock,void*buff,int len,int nonblock,
119 unsigned flags,struct sockaddr *,int*addr_len);
120 int(*shutdown) (struct socket *sock,int flags);
121 int(*setsockopt) (struct socket *sock,int level,int optname,
122 char*optval,int optlen);
123 int(*getsockopt) (struct socket *sock,int level,int optname,
124 char*optval,int*optlen);
125 int(*fcntl) (struct socket *sock,unsigned int cmd,
126 unsigned long arg);
129 struct net_proto {
130 const char*name;/* Protocol name */
131 void(*init_func)(struct net_proto *);/* Bootstrap */
134 externintsock_awaitconn(struct socket *mysock,struct socket *servsock,int flags);
135 externintsock_wake_async(struct socket *sock,int how);
136 externintsock_register(int family,struct proto_ops *ops);
137 externintsock_unregister(int family);
138 externstruct socket *sock_alloc(void);
139 externvoidsock_release(struct socket *sock);
140 #endif/* __KERNEL__ */
141 #endif/* _LINUX_NET_H */
close