root/include/linux/net.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


   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 
  22 #include <linux/wait.h>
  23 #include <linux/socket.h>
  24 
  25 
  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..   */
  29 
  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 
  50 typedef enum {
  51   SS_FREE = 0,                          /* not allocated                */
  52   SS_UNCONNECTED,                       /* unconnected to any socket    */
  53   SS_CONNECTING,                        /* in process of connecting     */
  54   SS_CONNECTED,                         /* connected to socket          */
  55   SS_DISCONNECTING                      /* in process of disconnecting  */
  56 } socket_state;
  57 
  58 #define SO_ACCEPTCON    (1<<16)         /* performed a listen           */
  59 #define SO_WAITDATA     (1<<17)         /* wait data to read            */
  60 #define SO_NOSPACE      (1<<18)         /* no space to write            */
  61 
  62 #ifdef __KERNEL__
  63 /*
  64  * Internal representation of a socket. not all the fields are used by
  65  * all configurations:
  66  *
  67  *              server                  client
  68  * conn         client connected to     server connected to
  69  * iconn        list of clients         -unused-
  70  *               awaiting connections
  71  * wait         sleep for clients,      sleep for connection,
  72  *              sleep for i/o           sleep for i/o
  73  */
  74 struct socket {
  75   short                 type;           /* SOCK_STREAM, ...             */
  76   socket_state          state;
  77   long                  flags;
  78   struct proto_ops      *ops;           /* protocols do most everything */
  79   void                  *data;          /* protocol data                */
  80   struct socket         *conn;          /* server socket connected to   */
  81   struct socket         *iconn;         /* incomplete client conn.s     */
  82   struct socket         *next;
  83   struct wait_queue     **wait;         /* ptr to place to wait on      */
  84   struct inode          *inode;
  85   struct fasync_struct  *fasync_list;   /* Asynchronous wake up list    */
  86 };
  87 
  88 #define SOCK_INODE(S)   ((S)->inode)
  89 
  90 struct proto_ops {
  91   int   family;
  92 
  93   int   (*create)       (struct socket *sock, int protocol);
  94   int   (*dup)          (struct socket *newsock, struct socket *oldsock);
  95   int   (*release)      (struct socket *sock, struct socket *peer);
  96   int   (*bind)         (struct socket *sock, struct sockaddr *umyaddr,
  97                          int sockaddr_len);
  98   int   (*connect)      (struct socket *sock, struct sockaddr *uservaddr,
  99                          int sockaddr_len, int flags);
 100   int   (*socketpair)   (struct socket *sock1, struct socket *sock2);
 101   int   (*accept)       (struct socket *sock, struct socket *newsock,
 102                          int flags);
 103   int   (*getname)      (struct socket *sock, struct sockaddr *uaddr,
 104                          int *usockaddr_len, int peer);
 105   int   (*read)         (struct socket *sock, char *ubuf, int size,
 106                          int nonblock);
 107   int   (*write)        (struct socket *sock, const char *ubuf, int size,
 108                          int nonblock);
 109   int   (*select)       (struct socket *sock, int sel_type,
 110                          select_table *wait);
 111   int   (*ioctl)        (struct socket *sock, unsigned int cmd,
 112                          unsigned long arg);
 113   int   (*listen)       (struct socket *sock, int len);
 114   int   (*send)         (struct socket *sock, const void *buff, int len, int nonblock,
 115                          unsigned flags);
 116   int   (*recv)         (struct socket *sock, void *buff, int len, int nonblock,
 117                          unsigned flags);
 118   int   (*sendto)       (struct socket *sock, const void *buff, int len, int nonblock,
 119                          unsigned flags, struct sockaddr *, int addr_len);
 120   int   (*recvfrom)     (struct socket *sock, void *buff, int len, int nonblock,
 121                          unsigned flags, struct sockaddr *, int *addr_len);
 122   int   (*shutdown)     (struct socket *sock, int flags);
 123   int   (*setsockopt)   (struct socket *sock, int level, int optname,
 124                          char *optval, int optlen);
 125   int   (*getsockopt)   (struct socket *sock, int level, int optname,
 126                          char *optval, int *optlen);
 127   int   (*fcntl)        (struct socket *sock, unsigned int cmd,
 128                          unsigned long arg);    
 129   int   (*sendmsg)      (struct socket *sock, struct msghdr *m, int total_len, int nonblock, int flags);
 130   int   (*recvmsg)      (struct socket *sock, struct msghdr *m, int total_len, int nonblock, int flags, int *addr_len);
 131 };
 132 
 133 struct net_proto {
 134         const char *name;               /* Protocol name */
 135         void (*init_func)(struct net_proto *);  /* Bootstrap */
 136 };
 137 
 138 extern int      sock_awaitconn(struct socket *mysock, struct socket *servsock, int flags);
 139 extern int      sock_wake_async(struct socket *sock, int how);
 140 extern int      sock_register(int family, struct proto_ops *ops);
 141 extern int      sock_unregister(int family);
 142 extern struct socket *sock_alloc(void);
 143 extern void     sock_release(struct socket *sock);
 144 #endif /* __KERNEL__ */
 145 #endif  /* _LINUX_NET_H */

/* [previous][next][first][last][top][bottom][index][help] */