You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

mark.h 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #ifndef MARK_H
  2. #define MARK_H
  3. #include <linux/version.h>
  4. //original inclusions
  5. #if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 7, 0)
  6. #if 0
  7. #include "libiptc/libiptc.h"
  8. #include <linux/netfilter_ipv4/ip_conntrack.h>
  9. #include <linux/netfilter_ipv4/ip_conntrack_tuple.h>
  10. #include "libiptc/ipt_conntrack.h"
  11. #include "libiptc/ipt_connmark.h"
  12. #include "libiptc/ipt_CONNMARK.h"
  13. #endif
  14. #if 1
  15. #include "libiptc/libiptc.h"
  16. #if 1
  17. #include <linux/netfilter/nf_conntrack_common.h>
  18. #endif
  19. #if 0
  20. #include <linux/netfilter_ipv4/ipt_conntrack_tuple.h>
  21. #endif
  22. #include "libiptc/ipt_conntrack.h"
  23. #include "libiptc/ipt_connmark.h"
  24. #include "libiptc/ipt_CONNMARK.h"
  25. #endif
  26. /* 2010 fixes for debian package */
  27. #if 0
  28. #include "libiptc/libiptc.h"
  29. #include <linux/netfilter/nf_conntrack_common.h>
  30. #include <linux/netfilter_ipv4/ipt_conntrack.h>
  31. #include <linux/netfilter_ipv4/ipt_connmark.h>
  32. #include <linux/netfilter_ipv4/ipt_CONNMARK.h>
  33. #endif
  34. #endif
  35. #include "libiptc/libiptc.h"
  36. #include <linux/netfilter/nf_conntrack_common.h>
  37. #include "libiptc/ipt_conntrack.h"
  38. #include "libiptc/ipt_connmark.h"
  39. #include "libiptc/ipt_CONNMARK.h"
  40. #define MANGLE_TABLE "mangle"
  41. #define FILTER_TABLE "filter"
  42. #define NTK_MARK_CHAIN "ntk_mark_chain"
  43. #define CHAIN_OUTPUT "OUTPUT"
  44. #define CHAIN_POSTROUTING "POSTROUTING"
  45. #define CHAIN_PREROUTING "PREROUTING"
  46. #define CHAIN_POSTROUTING "POSTROUTING"
  47. #define CHAIN_FORWARD "FORWARD"
  48. #define MOD_CONNTRACK "conntrack"
  49. #define MOD_CONNMARK "CONNMARK"
  50. #define MARK_TARGET "MARK"
  51. #define NTK_NET_STR "10.0.0.0"
  52. #define NTK_NET_MASK_STR "255.0.0.0"
  53. #define IPT_ENTRY_SZ sizeof(struct ipt_entry)
  54. #define IPT_ENTRY_MATCH_SZ sizeof(struct ipt_entry_match)
  55. #define IPT_ENTRY_TARGET_SZ sizeof(struct ipt_entry_target)
  56. #define IPT_CT_INFO_SZ sizeof(struct ipt_conntrack_info)
  57. #define IPT_CM_TARGET_INFO_SZ sizeof(struct ipt_connmark_target_info)
  58. #define MATCH_SZ IPT_ENTRY_MATCH_SZ+IPT_CT_INFO_SZ
  59. #define TARGET_SZ IPT_ENTRY_TARGET_SZ+IPT_CM_TARGET_INFO_SZ
  60. #define RESTORE_OUTPUT_RULE_SZ IPT_ENTRY_SZ+MATCH_SZ+TARGET_SZ
  61. #define OFFSET_MATCH IPT_ENTRY_SZ
  62. #define OFFSET_MATCH_INFO OFFSET_MATCH+IPT_ENTRY_MATCH_SZ
  63. #define OFFSET_TARGET OFFSET_MATCH_INFO+IPT_CT_INFO_SZ
  64. #define OFFSET_TARGET_INFO OFFSET_TARGET+IPT_ENTRY_TARGET_SZ
  65. #define MARK_RULE_SZ IPT_ENTRY_SZ+TARGET_SZ
  66. #define MAX_MARK_RULES 100
  67. #define NTK_FORWARD_RULE_SZ OFFSET_TARGET_INFO+4
  68. #define IGW_FILTER_RULE_SZ IPT_ENTRY_SZ+IPT_ENTRY_SZ+4
  69. #define INET_MARK 25
  70. #define MAX_RULE_SZ RESTORE_OUTPUT_RULE_SZ
  71. //struct in_addr inet_dst,inet_dst_mask;
  72. typedef struct rule_store {
  73. char e[RESTORE_OUTPUT_RULE_SZ];
  74. int sz;
  75. char *chain;
  76. } rule_store;
  77. /* Functions */
  78. int table_init(const char *table, iptc_handle_t * t);
  79. int insert_rule(const char *rule, iptc_handle_t * t, const char *chain,
  80. int pos);
  81. int append_rule(const char *rule, iptc_handle_t * t, const char *chain);
  82. int commit_rules(iptc_handle_t * t);
  83. void restore_output_rule_init(char *rule);
  84. void ntk_forward_rule_init(char *rule);
  85. void mark_rule_init(char *rule, char *outiface, int outiface_num);
  86. void igw_mark_rule_init(char *rule);
  87. int ntk_mark_chain_init(iptc_handle_t * t);
  88. int store_rules();
  89. int mark_init(int igw);
  90. int count_ntk_mark_chain(iptc_handle_t * t);
  91. int create_mark_rules(int n);
  92. int delete_ntk_forward_chain(iptc_handle_t * t);
  93. int delete_first_rule(iptc_handle_t * t, const char *chain);
  94. int rule_position(rule_store * rule, iptc_handle_t * t);
  95. int delete_rule(rule_store * rule, iptc_handle_t * t);
  96. int mark_close();
  97. #endif /* MARK_H */