protocol.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:3k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  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. #include <linux/config.h>
  27. #include <linux/in6.h>
  28. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  29. #include <linux/ipv6.h>
  30. #endif
  31. #define MAX_INET_PROTOS 32 /* Must be a power of 2 */
  32. /* This is used to register protocols. */
  33. struct inet_protocol 
  34. {
  35. int (*handler)(struct sk_buff *skb);
  36. void (*err_handler)(struct sk_buff *skb, u32 info);
  37. struct inet_protocol *next;
  38. unsigned char protocol;
  39. unsigned char copy:1;
  40. void *data;
  41. const char *name;
  42. };
  43. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  44. struct inet6_protocol 
  45. {
  46. int (*handler)(struct sk_buff *skb);
  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. struct inet6_protocol *next;
  52. unsigned char protocol;
  53. unsigned char copy:1;
  54. void *data;
  55. const char *name;
  56. };
  57. #endif
  58. /* This is used to register socket interfaces for IP protocols.  */
  59. struct inet_protosw {
  60. struct list_head list;
  61.         /* These two fields form the lookup key.  */
  62. unsigned short  type;    /* This is the 2nd argument to socket(2). */
  63. int  protocol; /* This is the L4 protocol number.  */
  64. struct proto  *prot;
  65. struct proto_ops *ops;
  66.   
  67. int              capability; /* Which (if any) capability do
  68.       * we need to use this socket
  69.       * interface?
  70.                                       */
  71. char             no_check;   /* checksum on rcv/xmit/none? */
  72. unsigned char  flags;      /* See INET_PROTOSW_* below.  */
  73. };
  74. #define INET_PROTOSW_REUSE 0x01      /* Are ports automatically reusable? */
  75. #define INET_PROTOSW_PERMANENT 0x02  /* Permanent protocols are unremovable. */
  76. extern struct inet_protocol *inet_protocol_base;
  77. extern struct inet_protocol *inet_protos[MAX_INET_PROTOS];
  78. extern struct list_head inetsw[SOCK_MAX];
  79. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  80. extern struct inet6_protocol *inet6_protos[MAX_INET_PROTOS];
  81. extern struct list_head inetsw6[SOCK_MAX];
  82. #endif
  83. extern void inet_add_protocol(struct inet_protocol *prot);
  84. extern int inet_del_protocol(struct inet_protocol *prot);
  85. extern void inet_register_protosw(struct inet_protosw *p);
  86. extern void inet_unregister_protosw(struct inet_protosw *p);
  87. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  88. extern void inet6_add_protocol(struct inet6_protocol *prot);
  89. extern int inet6_del_protocol(struct inet6_protocol *prot);
  90. extern void inet6_register_protosw(struct inet_protosw *p);
  91. extern void inet6_unregister_protosw(struct inet_protosw *p);
  92. #endif
  93. #endif /* _PROTOCOL_H */