home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / net.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  12.4 KB  |  357 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/socket.h>
  22. #include <asm/socket.h>
  23.  
  24. #define NPROTO        AF_MAX
  25.  
  26. #define SYS_SOCKET    1        /* sys_socket(2)        */
  27. #define SYS_BIND    2        /* sys_bind(2)            */
  28. #define SYS_CONNECT    3        /* sys_connect(2)        */
  29. #define SYS_LISTEN    4        /* sys_listen(2)        */
  30. #define SYS_ACCEPT    5        /* sys_accept(2)        */
  31. #define SYS_GETSOCKNAME    6        /* sys_getsockname(2)        */
  32. #define SYS_GETPEERNAME    7        /* sys_getpeername(2)        */
  33. #define SYS_SOCKETPAIR    8        /* sys_socketpair(2)        */
  34. #define SYS_SEND    9        /* sys_send(2)            */
  35. #define SYS_RECV    10        /* sys_recv(2)            */
  36. #define SYS_SENDTO    11        /* sys_sendto(2)        */
  37. #define SYS_RECVFROM    12        /* sys_recvfrom(2)        */
  38. #define SYS_SHUTDOWN    13        /* sys_shutdown(2)        */
  39. #define SYS_SETSOCKOPT    14        /* sys_setsockopt(2)        */
  40. #define SYS_GETSOCKOPT    15        /* sys_getsockopt(2)        */
  41. #define SYS_SENDMSG    16        /* sys_sendmsg(2)        */
  42. #define SYS_RECVMSG    17        /* sys_recvmsg(2)        */
  43. #define SYS_ACCEPT4    18        /* sys_accept4(2)        */
  44.  
  45. typedef enum {
  46.     SS_FREE = 0,            /* not allocated        */
  47.     SS_UNCONNECTED,            /* unconnected to any socket    */
  48.     SS_CONNECTING,            /* in process of connecting    */
  49.     SS_CONNECTED,            /* connected to socket        */
  50.     SS_DISCONNECTING        /* in process of disconnecting    */
  51. } socket_state;
  52.  
  53. #define __SO_ACCEPTCON    (1 << 16)    /* performed a listen        */
  54.  
  55. #ifdef __KERNEL__
  56. #include <linux/stringify.h>
  57. #include <linux/random.h>
  58. #include <linux/wait.h>
  59. #include <linux/fcntl.h>    /* For O_CLOEXEC and O_NONBLOCK */
  60.  
  61. struct poll_table_struct;
  62. struct pipe_inode_info;
  63. struct inode;
  64. struct net;
  65.  
  66. #define SOCK_ASYNC_NOSPACE    0
  67. #define SOCK_ASYNC_WAITDATA    1
  68. #define SOCK_NOSPACE        2
  69. #define SOCK_PASSCRED        3
  70. #define SOCK_PASSSEC        4
  71.  
  72. #ifndef ARCH_HAS_SOCKET_TYPES
  73. /**
  74.  * enum sock_type - Socket types
  75.  * @SOCK_STREAM: stream (connection) socket
  76.  * @SOCK_DGRAM: datagram (conn.less) socket
  77.  * @SOCK_RAW: raw socket
  78.  * @SOCK_RDM: reliably-delivered message
  79.  * @SOCK_SEQPACKET: sequential packet socket
  80.  * @SOCK_DCCP: Datagram Congestion Control Protocol socket
  81.  * @SOCK_PACKET: linux specific way of getting packets at the dev level.
  82.  *          For writing rarp and other similar things on the user level.
  83.  *
  84.  * When adding some new socket type please
  85.  * grep ARCH_HAS_SOCKET_TYPE include/asm-* /socket.h, at least MIPS
  86.  * overrides this enum for binary compat reasons.
  87.  */
  88. enum sock_type {
  89.     SOCK_STREAM    = 1,
  90.     SOCK_DGRAM    = 2,
  91.     SOCK_RAW    = 3,
  92.     SOCK_RDM    = 4,
  93.     SOCK_SEQPACKET    = 5,
  94.     SOCK_DCCP    = 6,
  95.     SOCK_PACKET    = 10,
  96. };
  97.  
  98. #define SOCK_MAX (SOCK_PACKET + 1)
  99. /* Mask which covers at least up to SOCK_MASK-1.  The
  100.  * remaining bits are used as flags. */
  101. #define SOCK_TYPE_MASK 0xf
  102.  
  103. /* Flags for socket, socketpair, accept4 */
  104. #define SOCK_CLOEXEC    O_CLOEXEC
  105. #ifndef SOCK_NONBLOCK
  106. #define SOCK_NONBLOCK    O_NONBLOCK
  107. #endif
  108.  
  109. #endif /* ARCH_HAS_SOCKET_TYPES */
  110.  
  111. enum sock_shutdown_cmd {
  112.     SHUT_RD        = 0,
  113.     SHUT_WR        = 1,
  114.     SHUT_RDWR    = 2,
  115. };
  116.  
  117. /**
  118.  *  struct socket - general BSD socket
  119.  *  @state: socket state (%SS_CONNECTED, etc)
  120.  *  @type: socket type (%SOCK_STREAM, etc)
  121.  *  @flags: socket flags (%SOCK_ASYNC_NOSPACE, etc)
  122.  *  @ops: protocol specific socket operations
  123.  *  @fasync_list: Asynchronous wake up list
  124.  *  @file: File back pointer for gc
  125.  *  @sk: internal networking protocol agnostic socket representation
  126.  *  @wait: wait queue for several uses
  127.  */
  128. struct socket {
  129.     socket_state        state;
  130.     short            type;
  131.     unsigned long        flags;
  132.     const struct proto_ops    *ops;
  133.     struct fasync_struct    *fasync_list;
  134.     struct file        *file;
  135.     struct sock        *sk;
  136.     wait_queue_head_t    wait;
  137. };
  138.  
  139. struct vm_area_struct;
  140. struct page;
  141. struct kiocb;
  142. struct sockaddr;
  143. struct msghdr;
  144. struct module;
  145.  
  146. struct proto_ops {
  147.     int        family;
  148.     struct module    *owner;
  149.     int        (*release)   (struct socket *sock);
  150.     int        (*bind)         (struct socket *sock,
  151.                       struct sockaddr *myaddr,
  152.                       int sockaddr_len);
  153.     int        (*connect)   (struct socket *sock,
  154.                       struct sockaddr *vaddr,
  155.                       int sockaddr_len, int flags);
  156.     int        (*socketpair)(struct socket *sock1,
  157.                       struct socket *sock2);
  158.     int        (*accept)    (struct socket *sock,
  159.                       struct socket *newsock, int flags);
  160.     int        (*getname)   (struct socket *sock,
  161.                       struct sockaddr *addr,
  162.                       int *sockaddr_len, int peer);
  163.     unsigned int    (*poll)         (struct file *file, struct socket *sock,
  164.                       struct poll_table_struct *wait);
  165.     int        (*ioctl)     (struct socket *sock, unsigned int cmd,
  166.                       unsigned long arg);
  167.     int         (*compat_ioctl) (struct socket *sock, unsigned int cmd,
  168.                       unsigned long arg);
  169.     int        (*listen)    (struct socket *sock, int len);
  170.     int        (*shutdown)  (struct socket *sock, int flags);
  171.     int        (*setsockopt)(struct socket *sock, int level,
  172.                       int optname, char __user *optval, int optlen);
  173.     int        (*getsockopt)(struct socket *sock, int level,
  174.                       int optname, char __user *optval, int __user *optlen);
  175.     int        (*compat_setsockopt)(struct socket *sock, int level,
  176.                       int optname, char __user *optval, int optlen);
  177.     int        (*compat_getsockopt)(struct socket *sock, int level,
  178.                       int optname, char __user *optval, int __user *optlen);
  179.     int        (*sendmsg)   (struct kiocb *iocb, struct socket *sock,
  180.                       struct msghdr *m, size_t total_len);
  181.     int        (*recvmsg)   (struct kiocb *iocb, struct socket *sock,
  182.                       struct msghdr *m, size_t total_len,
  183.                       int flags);
  184.     int        (*mmap)         (struct file *file, struct socket *sock,
  185.                       struct vm_area_struct * vma);
  186.     ssize_t        (*sendpage)  (struct socket *sock, struct page *page,
  187.                       int offset, size_t size, int flags);
  188.     ssize_t     (*splice_read)(struct socket *sock,  loff_t *ppos,
  189.                        struct pipe_inode_info *pipe, size_t len, unsigned int flags);
  190. };
  191.  
  192. struct net_proto_family {
  193.     int        family;
  194.     int        (*create)(struct net *net, struct socket *sock, int protocol);
  195.     struct module    *owner;
  196. };
  197.  
  198. struct iovec;
  199. struct kvec;
  200.  
  201. enum {
  202.     SOCK_WAKE_IO,
  203.     SOCK_WAKE_WAITD,
  204.     SOCK_WAKE_SPACE,
  205.     SOCK_WAKE_URG,
  206. };
  207.  
  208. extern int         sock_wake_async(struct socket *sk, int how, int band);
  209. extern int         sock_register(const struct net_proto_family *fam);
  210. extern void         sock_unregister(int family);
  211. extern int         sock_create(int family, int type, int proto,
  212.                  struct socket **res);
  213. extern int         sock_create_kern(int family, int type, int proto,
  214.                       struct socket **res);
  215. extern int         sock_create_lite(int family, int type, int proto,
  216.                       struct socket **res); 
  217. extern void         sock_release(struct socket *sock);
  218. extern int            sock_sendmsg(struct socket *sock, struct msghdr *msg,
  219.                   size_t len);
  220. extern int         sock_recvmsg(struct socket *sock, struct msghdr *msg,
  221.                   size_t size, int flags);
  222. extern int          sock_map_fd(struct socket *sock, int flags);
  223. extern struct socket *sockfd_lookup(int fd, int *err);
  224. #define             sockfd_put(sock) fput(sock->file)
  225. extern int         net_ratelimit(void);
  226.  
  227. #define net_random()        random32()
  228. #define net_srandom(seed)    srandom32((__force u32)seed)
  229.  
  230. extern int            kernel_sendmsg(struct socket *sock, struct msghdr *msg,
  231.                     struct kvec *vec, size_t num, size_t len);
  232. extern int            kernel_recvmsg(struct socket *sock, struct msghdr *msg,
  233.                     struct kvec *vec, size_t num,
  234.                     size_t len, int flags);
  235.  
  236. extern int kernel_bind(struct socket *sock, struct sockaddr *addr,
  237.                int addrlen);
  238. extern int kernel_listen(struct socket *sock, int backlog);
  239. extern int kernel_accept(struct socket *sock, struct socket **newsock,
  240.              int flags);
  241. extern int kernel_connect(struct socket *sock, struct sockaddr *addr,
  242.               int addrlen, int flags);
  243. extern int kernel_getsockname(struct socket *sock, struct sockaddr *addr,
  244.                   int *addrlen);
  245. extern int kernel_getpeername(struct socket *sock, struct sockaddr *addr,
  246.                   int *addrlen);
  247. extern int kernel_getsockopt(struct socket *sock, int level, int optname,
  248.                  char *optval, int *optlen);
  249. extern int kernel_setsockopt(struct socket *sock, int level, int optname,
  250.                  char *optval, int optlen);
  251. extern int kernel_sendpage(struct socket *sock, struct page *page, int offset,
  252.                size_t size, int flags);
  253. extern int kernel_sock_ioctl(struct socket *sock, int cmd, unsigned long arg);
  254. extern int kernel_sock_shutdown(struct socket *sock,
  255.                 enum sock_shutdown_cmd how);
  256.  
  257. #ifndef CONFIG_SMP
  258. #define SOCKOPS_WRAPPED(name) name
  259. #define SOCKOPS_WRAP(name, fam)
  260. #else
  261.  
  262. #define SOCKOPS_WRAPPED(name) __unlocked_##name
  263.  
  264. #define SOCKCALL_WRAP(name, call, parms, args)        \
  265. static int __lock_##name##_##call  parms        \
  266. {                            \
  267.     int ret;                    \
  268.     lock_kernel();                    \
  269.     ret = __unlocked_##name##_ops.call  args ;\
  270.     unlock_kernel();                \
  271.     return ret;                    \
  272. }
  273.  
  274. #define SOCKCALL_UWRAP(name, call, parms, args)        \
  275. static unsigned int __lock_##name##_##call  parms    \
  276. {                            \
  277.     int ret;                    \
  278.     lock_kernel();                    \
  279.     ret = __unlocked_##name##_ops.call  args ;\
  280.     unlock_kernel();                \
  281.     return ret;                    \
  282. }
  283.  
  284.  
  285. #define SOCKOPS_WRAP(name, fam)                    \
  286. SOCKCALL_WRAP(name, release, (struct socket *sock), (sock))    \
  287. SOCKCALL_WRAP(name, bind, (struct socket *sock, struct sockaddr *uaddr, int addr_len), \
  288.           (sock, uaddr, addr_len))                \
  289. SOCKCALL_WRAP(name, connect, (struct socket *sock, struct sockaddr * uaddr, \
  290.                   int addr_len, int flags),     \
  291.           (sock, uaddr, addr_len, flags))            \
  292. SOCKCALL_WRAP(name, socketpair, (struct socket *sock1, struct socket *sock2), \
  293.           (sock1, sock2))                    \
  294. SOCKCALL_WRAP(name, accept, (struct socket *sock, struct socket *newsock, \
  295.              int flags), (sock, newsock, flags)) \
  296. SOCKCALL_WRAP(name, getname, (struct socket *sock, struct sockaddr *uaddr, \
  297.              int *addr_len, int peer), (sock, uaddr, addr_len, peer)) \
  298. SOCKCALL_UWRAP(name, poll, (struct file *file, struct socket *sock, struct poll_table_struct *wait), \
  299.           (file, sock, wait)) \
  300. SOCKCALL_WRAP(name, ioctl, (struct socket *sock, unsigned int cmd, \
  301.              unsigned long arg), (sock, cmd, arg)) \
  302. SOCKCALL_WRAP(name, compat_ioctl, (struct socket *sock, unsigned int cmd, \
  303.              unsigned long arg), (sock, cmd, arg)) \
  304. SOCKCALL_WRAP(name, listen, (struct socket *sock, int len), (sock, len)) \
  305. SOCKCALL_WRAP(name, shutdown, (struct socket *sock, int flags), (sock, flags)) \
  306. SOCKCALL_WRAP(name, setsockopt, (struct socket *sock, int level, int optname, \
  307.              char __user *optval, int optlen), (sock, level, optname, optval, optlen)) \
  308. SOCKCALL_WRAP(name, getsockopt, (struct socket *sock, int level, int optname, \
  309.              char __user *optval, int __user *optlen), (sock, level, optname, optval, optlen)) \
  310. SOCKCALL_WRAP(name, sendmsg, (struct kiocb *iocb, struct socket *sock, struct msghdr *m, size_t len), \
  311.           (iocb, sock, m, len)) \
  312. SOCKCALL_WRAP(name, recvmsg, (struct kiocb *iocb, struct socket *sock, struct msghdr *m, size_t len, int flags), \
  313.           (iocb, sock, m, len, flags)) \
  314. SOCKCALL_WRAP(name, mmap, (struct file *file, struct socket *sock, struct vm_area_struct *vma), \
  315.           (file, sock, vma)) \
  316.           \
  317. static const struct proto_ops name##_ops = {            \
  318.     .family        = fam,                \
  319.     .owner        = THIS_MODULE,            \
  320.     .release    = __lock_##name##_release,    \
  321.     .bind        = __lock_##name##_bind,        \
  322.     .connect    = __lock_##name##_connect,    \
  323.     .socketpair    = __lock_##name##_socketpair,    \
  324.     .accept        = __lock_##name##_accept,    \
  325.     .getname    = __lock_##name##_getname,    \
  326.     .poll        = __lock_##name##_poll,        \
  327.     .ioctl        = __lock_##name##_ioctl,    \
  328.     .compat_ioctl    = __lock_##name##_compat_ioctl,    \
  329.     .listen        = __lock_##name##_listen,    \
  330.     .shutdown    = __lock_##name##_shutdown,    \
  331.     .setsockopt    = __lock_##name##_setsockopt,    \
  332.     .getsockopt    = __lock_##name##_getsockopt,    \
  333.     .sendmsg    = __lock_##name##_sendmsg,    \
  334.     .recvmsg    = __lock_##name##_recvmsg,    \
  335.     .mmap        = __lock_##name##_mmap,        \
  336. };
  337.  
  338. #endif
  339.  
  340. #define MODULE_ALIAS_NETPROTO(proto) \
  341.     MODULE_ALIAS("net-pf-" __stringify(proto))
  342.  
  343. #define MODULE_ALIAS_NET_PF_PROTO(pf, proto) \
  344.     MODULE_ALIAS("net-pf-" __stringify(pf) "-proto-" __stringify(proto))
  345.  
  346. #define MODULE_ALIAS_NET_PF_PROTO_TYPE(pf, proto, type) \
  347.     MODULE_ALIAS("net-pf-" __stringify(pf) "-proto-" __stringify(proto) \
  348.              "-type-" __stringify(type))
  349.  
  350. #ifdef CONFIG_SYSCTL
  351. #include <linux/sysctl.h>
  352. extern struct ratelimit_state net_ratelimit_state;
  353. #endif
  354.  
  355. #endif /* __KERNEL__ */
  356. #endif    /* _LINUX_NET_H */
  357.