home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / net.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  10.7 KB  |  308 lines

  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
  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/wait.h>
  22. #include <asm/socket.h>
  23.  
  24. struct poll_table_struct;
  25. struct inode;
  26.  
  27. #define NPROTO        32        /* should be enough for now..    */
  28.  
  29. #define SYS_SOCKET    1        /* sys_socket(2)        */
  30. #define SYS_BIND    2        /* sys_bind(2)            */
  31. #define SYS_CONNECT    3        /* sys_connect(2)        */
  32. #define SYS_LISTEN    4        /* sys_listen(2)        */
  33. #define SYS_ACCEPT    5        /* sys_accept(2)        */
  34. #define SYS_GETSOCKNAME    6        /* sys_getsockname(2)        */
  35. #define SYS_GETPEERNAME    7        /* sys_getpeername(2)        */
  36. #define SYS_SOCKETPAIR    8        /* sys_socketpair(2)        */
  37. #define SYS_SEND    9        /* sys_send(2)            */
  38. #define SYS_RECV    10        /* sys_recv(2)            */
  39. #define SYS_SENDTO    11        /* sys_sendto(2)        */
  40. #define SYS_RECVFROM    12        /* sys_recvfrom(2)        */
  41. #define SYS_SHUTDOWN    13        /* sys_shutdown(2)        */
  42. #define SYS_SETSOCKOPT    14        /* sys_setsockopt(2)        */
  43. #define SYS_GETSOCKOPT    15        /* sys_getsockopt(2)        */
  44. #define SYS_SENDMSG    16        /* sys_sendmsg(2)        */
  45. #define SYS_RECVMSG    17        /* sys_recvmsg(2)        */
  46.  
  47. typedef enum {
  48.     SS_FREE = 0,            /* not allocated        */
  49.     SS_UNCONNECTED,            /* unconnected to any socket    */
  50.     SS_CONNECTING,            /* in process of connecting    */
  51.     SS_CONNECTED,            /* connected to socket        */
  52.     SS_DISCONNECTING        /* in process of disconnecting    */
  53. } socket_state;
  54.  
  55. #define __SO_ACCEPTCON    (1 << 16)    /* performed a listen        */
  56.  
  57. #ifdef __KERNEL__
  58. #include <linux/stringify.h>
  59.  
  60. #define SOCK_ASYNC_NOSPACE    0
  61. #define SOCK_ASYNC_WAITDATA    1
  62. #define SOCK_NOSPACE        2
  63. #define SOCK_PASSCRED        3
  64.  
  65. #ifndef ARCH_HAS_SOCKET_TYPES
  66. /**
  67.  * enum sock_type - Socket types
  68.  * @SOCK_STREAM: stream (connection) socket
  69.  * @SOCK_DGRAM: datagram (conn.less) socket
  70.  * @SOCK_RAW: raw socket
  71.  * @SOCK_RDM: reliably-delivered message
  72.  * @SOCK_SEQPACKET: sequential packet socket
  73.  * @SOCK_DCCP: Datagram Congestion Control Protocol socket
  74.  * @SOCK_PACKET: linux specific way of getting packets at the dev level.
  75.  *          For writing rarp and other similar things on the user level.
  76.  *
  77.  * When adding some new socket type please
  78.  * grep ARCH_HAS_SOCKET_TYPE include/asm-* /socket.h, at least MIPS
  79.  * overrides this enum for binary compat reasons.
  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_DCCP    = 6,
  88.     SOCK_PACKET    = 10,
  89. };
  90.  
  91. #define SOCK_MAX (SOCK_PACKET + 1)
  92.  
  93. #endif /* ARCH_HAS_SOCKET_TYPES */
  94.  
  95. /**
  96.  *  struct socket - general BSD socket
  97.  *  @state: socket state (%SS_CONNECTED, etc)
  98.  *  @flags: socket flags (%SOCK_ASYNC_NOSPACE, etc)
  99.  *  @ops: protocol specific socket operations
  100.  *  @fasync_list: Asynchronous wake up list
  101.  *  @file: File back pointer for gc
  102.  *  @sk: internal networking protocol agnostic socket representation
  103.  *  @wait: wait queue for several uses
  104.  *  @type: socket type (%SOCK_STREAM, etc)
  105.  */
  106. struct socket {
  107.     socket_state        state;
  108.     unsigned long        flags;
  109.     const 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         (*compat_ioctl) (struct socket *sock, unsigned int cmd,
  146.                       unsigned long arg);
  147.     int        (*listen)    (struct socket *sock, int len);
  148.     int        (*shutdown)  (struct socket *sock, int flags);
  149.     int        (*setsockopt)(struct socket *sock, int level,
  150.                       int optname, char __user *optval, int optlen);
  151.     int        (*getsockopt)(struct socket *sock, int level,
  152.                       int optname, char __user *optval, int __user *optlen);
  153.     int        (*compat_setsockopt)(struct socket *sock, int level,
  154.                       int optname, char __user *optval, int optlen);
  155.     int        (*compat_getsockopt)(struct socket *sock, int level,
  156.                       int optname, char __user *optval, int __user *optlen);
  157.     int        (*sendmsg)   (struct kiocb *iocb, struct socket *sock,
  158.                       struct msghdr *m, size_t total_len);
  159.     int        (*recvmsg)   (struct kiocb *iocb, struct socket *sock,
  160.                       struct msghdr *m, size_t total_len,
  161.                       int flags);
  162.     int        (*mmap)         (struct file *file, struct socket *sock,
  163.                       struct vm_area_struct * vma);
  164.     ssize_t        (*sendpage)  (struct socket *sock, struct page *page,
  165.                       int offset, size_t size, int flags);
  166. };
  167.  
  168. struct net_proto_family {
  169.     int        family;
  170.     int        (*create)(struct socket *sock, int protocol);
  171.     /* These are counters for the number of different methods of
  172.        each we support */
  173.     short        authentication;
  174.     short        encryption;
  175.     short        encrypt_net;
  176.     struct module    *owner;
  177. };
  178.  
  179. struct iovec;
  180. struct kvec;
  181.  
  182. extern int         sock_wake_async(struct socket *sk, int how, int band);
  183. extern int         sock_register(struct net_proto_family *fam);
  184. extern int         sock_unregister(int family);
  185. extern int         sock_create(int family, int type, int proto,
  186.                  struct socket **res);
  187. extern int         sock_create_kern(int family, int type, int proto,
  188.                       struct socket **res);
  189. extern int         sock_create_lite(int family, int type, int proto,
  190.                       struct socket **res); 
  191. extern void         sock_release(struct socket *sock);
  192. extern int            sock_sendmsg(struct socket *sock, struct msghdr *msg,
  193.                   size_t len);
  194. extern int         sock_recvmsg(struct socket *sock, struct msghdr *msg,
  195.                   size_t size, int flags);
  196. extern int          sock_map_fd(struct socket *sock);
  197. extern struct socket *sockfd_lookup(int fd, int *err);
  198. #define             sockfd_put(sock) fput(sock->file)
  199. extern int         net_ratelimit(void);
  200. extern unsigned long net_random(void);
  201. extern void         net_srandom(unsigned long);
  202. extern void         net_random_init(void);
  203.  
  204. extern int            kernel_sendmsg(struct socket *sock, struct msghdr *msg,
  205.                     struct kvec *vec, size_t num, size_t len);
  206. extern int            kernel_recvmsg(struct socket *sock, struct msghdr *msg,
  207.                     struct kvec *vec, size_t num,
  208.                     size_t len, int flags);
  209.  
  210. #ifndef CONFIG_SMP
  211. #define SOCKOPS_WRAPPED(name) name
  212. #define SOCKOPS_WRAP(name, fam)
  213. #else
  214.  
  215. #define SOCKOPS_WRAPPED(name) __unlocked_##name
  216.  
  217. #define SOCKCALL_WRAP(name, call, parms, args)        \
  218. static int __lock_##name##_##call  parms        \
  219. {                            \
  220.     int ret;                    \
  221.     lock_kernel();                    \
  222.     ret = __unlocked_##name##_ops.call  args ;\
  223.     unlock_kernel();                \
  224.     return ret;                    \
  225. }
  226.  
  227. #define SOCKCALL_UWRAP(name, call, parms, args)        \
  228. static unsigned int __lock_##name##_##call  parms    \
  229. {                            \
  230.     int ret;                    \
  231.     lock_kernel();                    \
  232.     ret = __unlocked_##name##_ops.call  args ;\
  233.     unlock_kernel();                \
  234.     return ret;                    \
  235. }
  236.  
  237.  
  238. #define SOCKOPS_WRAP(name, fam)                    \
  239. SOCKCALL_WRAP(name, release, (struct socket *sock), (sock))    \
  240. SOCKCALL_WRAP(name, bind, (struct socket *sock, struct sockaddr *uaddr, int addr_len), \
  241.           (sock, uaddr, addr_len))                \
  242. SOCKCALL_WRAP(name, connect, (struct socket *sock, struct sockaddr * uaddr, \
  243.                   int addr_len, int flags),     \
  244.           (sock, uaddr, addr_len, flags))            \
  245. SOCKCALL_WRAP(name, socketpair, (struct socket *sock1, struct socket *sock2), \
  246.           (sock1, sock2))                    \
  247. SOCKCALL_WRAP(name, accept, (struct socket *sock, struct socket *newsock, \
  248.              int flags), (sock, newsock, flags)) \
  249. SOCKCALL_WRAP(name, getname, (struct socket *sock, struct sockaddr *uaddr, \
  250.              int *addr_len, int peer), (sock, uaddr, addr_len, peer)) \
  251. SOCKCALL_UWRAP(name, poll, (struct file *file, struct socket *sock, struct poll_table_struct *wait), \
  252.           (file, sock, wait)) \
  253. SOCKCALL_WRAP(name, ioctl, (struct socket *sock, unsigned int cmd, \
  254.              unsigned long arg), (sock, cmd, arg)) \
  255. SOCKCALL_WRAP(name, compat_ioctl, (struct socket *sock, unsigned int cmd, \
  256.              unsigned long arg), (sock, cmd, arg)) \
  257. SOCKCALL_WRAP(name, listen, (struct socket *sock, int len), (sock, len)) \
  258. SOCKCALL_WRAP(name, shutdown, (struct socket *sock, int flags), (sock, flags)) \
  259. SOCKCALL_WRAP(name, setsockopt, (struct socket *sock, int level, int optname, \
  260.              char __user *optval, int optlen), (sock, level, optname, optval, optlen)) \
  261. SOCKCALL_WRAP(name, getsockopt, (struct socket *sock, int level, int optname, \
  262.              char __user *optval, int __user *optlen), (sock, level, optname, optval, optlen)) \
  263. SOCKCALL_WRAP(name, sendmsg, (struct kiocb *iocb, struct socket *sock, struct msghdr *m, size_t len), \
  264.           (iocb, sock, m, len)) \
  265. SOCKCALL_WRAP(name, recvmsg, (struct kiocb *iocb, struct socket *sock, struct msghdr *m, size_t len, int flags), \
  266.           (iocb, sock, m, len, flags)) \
  267. SOCKCALL_WRAP(name, mmap, (struct file *file, struct socket *sock, struct vm_area_struct *vma), \
  268.           (file, sock, vma)) \
  269.           \
  270. static const struct proto_ops name##_ops = {            \
  271.     .family        = fam,                \
  272.     .owner        = THIS_MODULE,            \
  273.     .release    = __lock_##name##_release,    \
  274.     .bind        = __lock_##name##_bind,        \
  275.     .connect    = __lock_##name##_connect,    \
  276.     .socketpair    = __lock_##name##_socketpair,    \
  277.     .accept        = __lock_##name##_accept,    \
  278.     .getname    = __lock_##name##_getname,    \
  279.     .poll        = __lock_##name##_poll,        \
  280.     .ioctl        = __lock_##name##_ioctl,    \
  281.     .compat_ioctl    = __lock_##name##_compat_ioctl,    \
  282.     .listen        = __lock_##name##_listen,    \
  283.     .shutdown    = __lock_##name##_shutdown,    \
  284.     .setsockopt    = __lock_##name##_setsockopt,    \
  285.     .getsockopt    = __lock_##name##_getsockopt,    \
  286.     .sendmsg    = __lock_##name##_sendmsg,    \
  287.     .recvmsg    = __lock_##name##_recvmsg,    \
  288.     .mmap        = __lock_##name##_mmap,        \
  289. };
  290.  
  291. #endif
  292.  
  293. #define MODULE_ALIAS_NETPROTO(proto) \
  294.     MODULE_ALIAS("net-pf-" __stringify(proto))
  295.  
  296. #define MODULE_ALIAS_NET_PF_PROTO(pf, proto) \
  297.     MODULE_ALIAS("net-pf-" __stringify(pf) "-proto-" __stringify(proto))
  298.  
  299. #ifdef CONFIG_SYSCTL
  300. #include <linux/sysctl.h>
  301. extern ctl_table net_table[];
  302. extern int net_msg_cost;
  303. extern int net_msg_burst;
  304. #endif
  305.  
  306. #endif /* __KERNEL__ */
  307. #endif    /* _LINUX_NET_H */
  308.