ipt_sctp.h
上传用户:szlgq88
上传日期:2009-04-28
资源大小:48287k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. #ifndef _IPT_SCTP_H_
  2. #define _IPT_SCTP_H_
  3. #define IPT_SCTP_SRC_PORTS         0x01
  4. #define IPT_SCTP_DEST_PORTS         0x02
  5. #define IPT_SCTP_CHUNK_TYPES 0x04
  6. #define IPT_SCTP_VALID_FLAGS 0x07
  7. #define ELEMCOUNT(x) (sizeof(x)/sizeof(x[0]))
  8. struct ipt_sctp_flag_info {
  9. u_int8_t chunktype;
  10. u_int8_t flag;
  11. u_int8_t flag_mask;
  12. };
  13. #define IPT_NUM_SCTP_FLAGS 4
  14. struct ipt_sctp_info {
  15. u_int16_t dpts[2];  /* Min, Max */
  16. u_int16_t spts[2];  /* Min, Max */
  17. u_int32_t chunkmap[256 / sizeof (u_int32_t)];  /* Bit mask of chunks to be matched according to RFC 2960 */
  18. #define SCTP_CHUNK_MATCH_ANY   0x01  /* Match if any of the chunk types are present */
  19. #define SCTP_CHUNK_MATCH_ALL   0x02  /* Match if all of the chunk types are present */
  20. #define SCTP_CHUNK_MATCH_ONLY  0x04  /* Match if these are the only chunk types present */
  21. u_int32_t chunk_match_type;
  22. struct ipt_sctp_flag_info flag_info[IPT_NUM_SCTP_FLAGS];
  23. int flag_count;
  24. u_int32_t flags;
  25. u_int32_t invflags;
  26. };
  27. #define bytes(type) (sizeof(type) * 8)
  28. #define SCTP_CHUNKMAP_SET(chunkmap, type) 
  29. do { 
  30. chunkmap[type / bytes(u_int32_t)] |= 
  31. 1 << (type % bytes(u_int32_t));
  32. } while (0)
  33. #define SCTP_CHUNKMAP_CLEAR(chunkmap, type)  
  34. do {
  35. chunkmap[type / bytes(u_int32_t)] &= 
  36. ~(1 << (type % bytes(u_int32_t)));
  37. } while (0)
  38. #define SCTP_CHUNKMAP_IS_SET(chunkmap, type) 
  39. ({
  40. (chunkmap[type / bytes (u_int32_t)] & 
  41. (1 << (type % bytes (u_int32_t)))) ? 1: 0;
  42. })
  43. #define SCTP_CHUNKMAP_RESET(chunkmap) 
  44. do {
  45. int i; 
  46. for (i = 0; i < ELEMCOUNT(chunkmap); i++)
  47. chunkmap[i] = 0;
  48. } while (0)
  49. #define SCTP_CHUNKMAP_SET_ALL(chunkmap) 
  50. do {
  51. int i; 
  52. for (i = 0; i < ELEMCOUNT(chunkmap); i++) 
  53. chunkmap[i] = ~0;
  54. } while (0)
  55. #define SCTP_CHUNKMAP_COPY(destmap, srcmap) 
  56. do {
  57. int i; 
  58. for (i = 0; i < ELEMCOUNT(chunkmap); i++) 
  59. destmap[i] = srcmap[i];
  60. } while (0)
  61. #define SCTP_CHUNKMAP_IS_CLEAR(chunkmap) 
  62. ({
  63. int i; 
  64. int flag = 1;
  65. for (i = 0; i < ELEMCOUNT(chunkmap); i++) {
  66. if (chunkmap[i]) {
  67. flag = 0;
  68. break;
  69. }
  70. }
  71.         flag;
  72. })
  73. #define SCTP_CHUNKMAP_IS_ALL_SET(chunkmap) 
  74. ({
  75. int i; 
  76. int flag = 1;
  77. for (i = 0; i < ELEMCOUNT(chunkmap); i++) {
  78. if (chunkmap[i] != ~0) {
  79. flag = 0;
  80. break;
  81. }
  82. }
  83.         flag;
  84. })
  85. #endif /* _IPT_SCTP_H_ */