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 / net / protocol.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.2 KB  |  100 lines

  1. /*
  2.  * INET        An implementation of the TCP/IP protocol suite for the LINUX
  3.  *        operating system.  INET is implemented using the  BSD Socket
  4.  *        interface as the means of communication with the user level.
  5.  *
  6.  *        Definitions for the protocol dispatcher.
  7.  *
  8.  * Version:    @(#)protocol.h    1.0.2    05/07/93
  9.  *
  10.  * Author:    Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  11.  *
  12.  *        This program is free software; you can redistribute it and/or
  13.  *        modify it under the terms of the GNU General Public License
  14.  *        as published by the Free Software Foundation; either version
  15.  *        2 of the License, or (at your option) any later version.
  16.  *
  17.  *    Changes:
  18.  *        Alan Cox    :    Added a name field and a frag handler
  19.  *                    field for later.
  20.  *        Alan Cox    :    Cleaned up, and sorted types.
  21.  *        Pedro Roque    :    inet6 protocols
  22.  */
  23.  
  24. #ifndef _PROTOCOL_H
  25. #define _PROTOCOL_H
  26.  
  27. #include <linux/in6.h>
  28. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  29. #include <linux/ipv6.h>
  30. #endif
  31.  
  32. #define MAX_INET_PROTOS    256        /* Must be a power of 2        */
  33.  
  34.  
  35. /* This is used to register protocols. */
  36. struct net_protocol {
  37.     int            (*handler)(struct sk_buff *skb);
  38.     void            (*err_handler)(struct sk_buff *skb, u32 info);
  39.     int            no_policy;
  40. };
  41.  
  42. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  43. struct inet6_protocol 
  44. {
  45.     int    (*handler)(struct sk_buff **skb);
  46.  
  47.     void    (*err_handler)(struct sk_buff *skb,
  48.                    struct inet6_skb_parm *opt,
  49.                    int type, int code, int offset,
  50.                    __u32 info);
  51.     unsigned int    flags;    /* INET6_PROTO_xxx */
  52. };
  53.  
  54. #define INET6_PROTO_NOPOLICY    0x1
  55. #define INET6_PROTO_FINAL    0x2
  56. #endif
  57.  
  58. /* This is used to register socket interfaces for IP protocols.  */
  59. struct inet_protosw {
  60.     struct list_head list;
  61.  
  62.         /* These two fields form the lookup key.  */
  63.     unsigned short     type;       /* This is the 2nd argument to socket(2). */
  64.     int         protocol; /* This is the L4 protocol number.  */
  65.  
  66.     struct proto     *prot;
  67.     const struct proto_ops *ops;
  68.   
  69.     int              capability; /* Which (if any) capability do
  70.                       * we need to use this socket
  71.                       * interface?
  72.                                       */
  73.     char             no_check;   /* checksum on rcv/xmit/none? */
  74.     unsigned char     flags;      /* See INET_PROTOSW_* below.  */
  75. };
  76. #define INET_PROTOSW_REUSE 0x01         /* Are ports automatically reusable? */
  77. #define INET_PROTOSW_PERMANENT 0x02  /* Permanent protocols are unremovable. */
  78. #define INET_PROTOSW_ICSK      0x04  /* Is this an inet_connection_sock? */
  79.  
  80. extern struct net_protocol *inet_protocol_base;
  81. extern struct net_protocol *inet_protos[MAX_INET_PROTOS];
  82.  
  83. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  84. extern struct inet6_protocol *inet6_protos[MAX_INET_PROTOS];
  85. #endif
  86.  
  87. extern int    inet_add_protocol(struct net_protocol *prot, unsigned char num);
  88. extern int    inet_del_protocol(struct net_protocol *prot, unsigned char num);
  89. extern void    inet_register_protosw(struct inet_protosw *p);
  90. extern void    inet_unregister_protosw(struct inet_protosw *p);
  91.  
  92. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  93. extern int    inet6_add_protocol(struct inet6_protocol *prot, unsigned char num);
  94. extern int    inet6_del_protocol(struct inet6_protocol *prot, unsigned char num);
  95. extern void    inet6_register_protosw(struct inet_protosw *p);
  96. extern void    inet6_unregister_protosw(struct inet_protosw *p);
  97. #endif
  98.  
  99. #endif    /* _PROTOCOL_H */
  100.