~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/include/linux/net.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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/socket.h>
 23 #include <linux/wait.h>
 24 
 25 struct poll_table_struct;
 26 
 27 #define NPROTO          32              /* should be enough for now..   */
 28 
 29 
 30 #define SYS_SOCKET      1               /* sys_socket(2)                */
 31 #define SYS_BIND        2               /* sys_bind(2)                  */
 32 #define SYS_CONNECT     3               /* sys_connect(2)               */
 33 #define SYS_LISTEN      4               /* sys_listen(2)                */
 34 #define SYS_ACCEPT      5               /* sys_accept(2)                */
 35 #define SYS_GETSOCKNAME 6               /* sys_getsockname(2)           */
 36 #define SYS_GETPEERNAME 7               /* sys_getpeername(2)           */
 37 #define SYS_SOCKETPAIR  8               /* sys_socketpair(2)            */
 38 #define SYS_SEND        9               /* sys_send(2)                  */
 39 #define SYS_RECV        10              /* sys_recv(2)                  */
 40 #define SYS_SENDTO      11              /* sys_sendto(2)                */
 41 #define SYS_RECVFROM    12              /* sys_recvfrom(2)              */
 42 #define SYS_SHUTDOWN    13              /* sys_shutdown(2)              */
 43 #define SYS_SETSOCKOPT  14              /* sys_setsockopt(2)            */
 44 #define SYS_GETSOCKOPT  15              /* sys_getsockopt(2)            */
 45 #define SYS_SENDMSG     16              /* sys_sendmsg(2)               */
 46 #define SYS_RECVMSG     17              /* sys_recvmsg(2)               */
 47 
 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 
 65 struct socket
 66 {
 67         socket_state            state;
 68 
 69         unsigned long           flags;
 70         struct proto_ops        *ops;
 71         struct inode            *inode;
 72         struct fasync_struct    *fasync_list;   /* Asynchronous wake up list    */
 73         struct file             *file;          /* File back pointer for gc     */
 74         struct sock             *sk;
 75         wait_queue_head_t       wait;
 76 
 77         short                   type;
 78         unsigned char           passcred;
 79 };
 80 
 81 #define SOCK_INODE(S)   ((S)->inode)
 82 
 83 struct scm_cookie;
 84 struct vm_area_struct;
 85 
 86 struct proto_ops {
 87   int   family;
 88 
 89   int   (*release)      (struct socket *sock);
 90   int   (*bind)         (struct socket *sock, struct sockaddr *umyaddr,
 91                          int sockaddr_len);
 92   int   (*connect)      (struct socket *sock, struct sockaddr *uservaddr,
 93                          int sockaddr_len, int flags);
 94   int   (*socketpair)   (struct socket *sock1, struct socket *sock2);
 95   int   (*accept)       (struct socket *sock, struct socket *newsock,
 96                          int flags);
 97   int   (*getname)      (struct socket *sock, struct sockaddr *uaddr,
 98                          int *usockaddr_len, int peer);
 99   unsigned int (*poll)  (struct file *file, struct socket *sock, struct poll_table_struct *wait);
100   int   (*ioctl)        (struct socket *sock, unsigned int cmd,
101                          unsigned long arg);
102   int   (*listen)       (struct socket *sock, int len);
103   int   (*shutdown)     (struct socket *sock, int flags);
104   int   (*setsockopt)   (struct socket *sock, int level, int optname,
105                          char *optval, int optlen);
106   int   (*getsockopt)   (struct socket *sock, int level, int optname,
107                          char *optval, int *optlen);
108   int   (*sendmsg)      (struct socket *sock, struct msghdr *m, int total_len, struct scm_cookie *scm);
109   int   (*recvmsg)      (struct socket *sock, struct msghdr *m, int total_len, int flags, struct scm_cookie *scm);
110   int   (*mmap)         (struct file *file, struct socket *sock, struct vm_area_struct * vma);
111 };
112 
113 struct net_proto_family 
114 {
115         int     family;
116         int     (*create)(struct socket *sock, int protocol);
117         /* These are counters for the number of different methods of
118            each we support */
119         short   authentication;
120         short   encryption;
121         short   encrypt_net;
122 };
123 
124 struct net_proto 
125 {
126         const char *name;               /* Protocol name */
127         void (*init_func)(struct net_proto *);  /* Bootstrap */
128 };
129 
130 extern int      sock_wake_async(struct socket *sk, int how, int band);
131 extern int      sock_register(struct net_proto_family *fam);
132 extern int      sock_unregister(int family);
133 extern struct socket *sock_alloc(void);
134 extern int      sock_create(int family, int type, int proto, struct socket **);
135 extern void     sock_release(struct socket *);
136 extern int      sock_sendmsg(struct socket *, struct msghdr *m, int len);
137 extern int      sock_recvmsg(struct socket *, struct msghdr *m, int len, int flags);
138 extern int      sock_readv_writev(int type, struct inode * inode, struct file * file,
139                                   const struct iovec * iov, long count, long size);
140 
141 extern int      net_ratelimit(void);
142 extern unsigned long net_random(void);
143 extern void net_srandom(unsigned long);
144 
145 #ifndef CONFIG_SMP
146 #define SOCKOPS_WRAPPED(name) name
147 #define SOCKOPS_WRAP(name, fam)
148 #else
149 
150 #define SOCKOPS_WRAPPED(name) __unlocked_##name
151 
152 #define SOCKCALL_WRAP(name, call, parms, args)          \
153 static int __lock_##name##_##call  parms                \
154 {                                                       \
155         int ret;                                        \
156         lock_kernel();                                  \
157         ret = __unlocked_##name##_ops.call  args ;\
158         unlock_kernel();                                \
159         return ret;                                     \
160 }
161 
162 #define SOCKCALL_UWRAP(name, call, parms, args)         \
163 static unsigned int __lock_##name##_##call  parms       \
164 {                                                       \
165         int ret;                                        \
166         lock_kernel();                                  \
167         ret = __unlocked_##name##_ops.call  args ;\
168         unlock_kernel();                                \
169         return ret;                                     \
170 }
171 
172 
173 #define SOCKOPS_WRAP(name, fam)                                 \
174 SOCKCALL_WRAP(name, release, (struct socket *sock), (sock))     \
175 SOCKCALL_WRAP(name, bind, (struct socket *sock, struct sockaddr *uaddr, int addr_len), \
176               (sock, uaddr, addr_len))                          \
177 SOCKCALL_WRAP(name, connect, (struct socket *sock, struct sockaddr * uaddr, \
178                               int addr_len, int flags),         \
179               (sock, uaddr, addr_len, flags))                   \
180 SOCKCALL_WRAP(name, socketpair, (struct socket *sock1, struct socket *sock2), \
181               (sock1, sock2))                                   \
182 SOCKCALL_WRAP(name, accept, (struct socket *sock, struct socket *newsock, \
183                          int flags), (sock, newsock, flags)) \
184 SOCKCALL_WRAP(name, getname, (struct socket *sock, struct sockaddr *uaddr, \
185                          int *addr_len, int peer), (sock, uaddr, addr_len, peer)) \
186 SOCKCALL_UWRAP(name, poll, (struct file *file, struct socket *sock, struct poll_table_struct *wait), \
187               (file, sock, wait)) \
188 SOCKCALL_WRAP(name, ioctl, (struct socket *sock, unsigned int cmd, \
189                          unsigned long arg), (sock, cmd, arg)) \
190 SOCKCALL_WRAP(name, listen, (struct socket *sock, int len), (sock, len)) \
191 SOCKCALL_WRAP(name, shutdown, (struct socket *sock, int flags), (sock, flags)) \
192 SOCKCALL_WRAP(name, setsockopt, (struct socket *sock, int level, int optname, \
193                          char *optval, int optlen), (sock, level, optname, optval, optlen)) \
194 SOCKCALL_WRAP(name, getsockopt, (struct socket *sock, int level, int optname, \
195                          char *optval, int *optlen), (sock, level, optname, optval, optlen)) \
196 SOCKCALL_WRAP(name, sendmsg, (struct socket *sock, struct msghdr *m, int len, struct scm_cookie *scm), \
197               (sock, m, len, scm)) \
198 SOCKCALL_WRAP(name, recvmsg, (struct socket *sock, struct msghdr *m, int len, int flags, struct scm_cookie *scm), \
199               (sock, m, len, flags, scm)) \
200 SOCKCALL_WRAP(name, mmap, (struct file *file, struct socket *sock, struct vm_area_struct *vma), \
201               (file, sock, vma)) \
202               \
203 static struct proto_ops name##_ops = {                  \
204         family:         fam,                            \
205                                                         \
206         release:        __lock_##name##_release,        \
207         bind:           __lock_##name##_bind,           \
208         connect:        __lock_##name##_connect,        \
209         socketpair:     __lock_##name##_socketpair,     \
210         accept:         __lock_##name##_accept,         \
211         getname:        __lock_##name##_getname,        \
212         poll:           __lock_##name##_poll,           \
213         ioctl:          __lock_##name##_ioctl,          \
214         listen:         __lock_##name##_listen,         \
215         shutdown:       __lock_##name##_shutdown,       \
216         setsockopt:     __lock_##name##_setsockopt,     \
217         getsockopt:     __lock_##name##_getsockopt,     \
218         sendmsg:        __lock_##name##_sendmsg,        \
219         recvmsg:        __lock_##name##_recvmsg,        \
220         mmap:           __lock_##name##_mmap,           \
221 };
222 #endif
223 
224 
225 #endif /* __KERNEL__ */
226 #endif  /* _LINUX_NET_H */
227 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.