005-imq1.patch 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. Index: iptables-1.3.8/extensions/.IMQ-test6
  2. ===================================================================
  3. --- /dev/null
  4. +++ iptables-1.3.8/extensions/.IMQ-test6
  5. @@ -0,0 +1,3 @@
  6. +#!/bin/sh
  7. +# True if IMQ target patch is applied.
  8. +[ -f $KERNEL_DIR/net/ipv6/netfilter/ip6t_IMQ.c ] && echo IMQ
  9. Index: iptables-1.3.8/extensions/libip6t_IMQ.c
  10. ===================================================================
  11. --- /dev/null
  12. +++ iptables-1.3.8/extensions/libip6t_IMQ.c
  13. @@ -0,0 +1,101 @@
  14. +/* Shared library add-on to iptables to add IMQ target support. */
  15. +#include <stdio.h>
  16. +#include <string.h>
  17. +#include <stdlib.h>
  18. +#include <getopt.h>
  19. +
  20. +#include <ip6tables.h>
  21. +#include <linux/netfilter_ipv6/ip6_tables.h>
  22. +#include <linux/netfilter_ipv6/ip6t_IMQ.h>
  23. +
  24. +/* Function which prints out usage message. */
  25. +static void
  26. +help(void)
  27. +{
  28. + printf(
  29. +"IMQ target v%s options:\n"
  30. +" --todev <N> enqueue to imq<N>, defaults to 0\n",
  31. +IPTABLES_VERSION);
  32. +}
  33. +
  34. +static struct option opts[] = {
  35. + { "todev", 1, 0, '1' },
  36. + { 0 }
  37. +};
  38. +
  39. +/* Initialize the target. */
  40. +static void
  41. +init(struct ip6t_entry_target *t, unsigned int *nfcache)
  42. +{
  43. + struct ip6t_imq_info *mr = (struct ip6t_imq_info*)t->data;
  44. +
  45. + mr->todev = 0;
  46. + *nfcache |= NFC_UNKNOWN;
  47. +}
  48. +
  49. +/* Function which parses command options; returns true if it
  50. + ate an option */
  51. +static int
  52. +parse(int c, char **argv, int invert, unsigned int *flags,
  53. + const struct ip6t_entry *entry,
  54. + struct ip6t_entry_target **target)
  55. +{
  56. + struct ip6t_imq_info *mr = (struct ip6t_imq_info*)(*target)->data;
  57. +
  58. + switch(c) {
  59. + case '1':
  60. + if (check_inverse(optarg, &invert, NULL, 0))
  61. + exit_error(PARAMETER_PROBLEM,
  62. + "Unexpected `!' after --todev");
  63. + mr->todev=atoi(optarg);
  64. + break;
  65. + default:
  66. + return 0;
  67. + }
  68. + return 1;
  69. +}
  70. +
  71. +static void
  72. +final_check(unsigned int flags)
  73. +{
  74. +}
  75. +
  76. +/* Prints out the targinfo. */
  77. +static void
  78. +print(const struct ip6t_ip6 *ip,
  79. + const struct ip6t_entry_target *target,
  80. + int numeric)
  81. +{
  82. + struct ip6t_imq_info *mr = (struct ip6t_imq_info*)target->data;
  83. +
  84. + printf("IMQ: todev %u ", mr->todev);
  85. +}
  86. +
  87. +/* Saves the union ipt_targinfo in parsable form to stdout. */
  88. +static void
  89. +save(const struct ip6t_ip6 *ip, const struct ip6t_entry_target *target)
  90. +{
  91. + struct ip6t_imq_info *mr = (struct ip6t_imq_info*)target->data;
  92. +
  93. + printf("--todev %u", mr->todev);
  94. +}
  95. +
  96. +static struct ip6tables_target imq = {
  97. + .next = NULL,
  98. + .name = "IMQ",
  99. + .version = IPTABLES_VERSION,
  100. + .size = IP6T_ALIGN(sizeof(struct ip6t_imq_info)),
  101. + .userspacesize = IP6T_ALIGN(sizeof(struct ip6t_imq_info)),
  102. + .help = &help,
  103. + .init = &init,
  104. + .parse = &parse,
  105. + .final_check = &final_check,
  106. + .print = &print,
  107. + .save = &save,
  108. + .extra_opts = opts
  109. +};
  110. +
  111. +static __attribute__((constructor)) void _init(void)
  112. +{
  113. + register_target6(&imq);
  114. +}
  115. Index: iptables-1.3.8/extensions/.IMQ-test
  116. ===================================================================
  117. --- /dev/null
  118. +++ iptables-1.3.8/extensions/.IMQ-test
  119. @@ -0,0 +1,3 @@
  120. +#!/bin/sh
  121. +# True if IMQ target patch is applied.
  122. +[ -f $KERNEL_DIR/net/ipv4/netfilter/ipt_IMQ.c ] && echo IMQ
  123. Index: iptables-1.3.8/extensions/libipt_IMQ.c
  124. ===================================================================
  125. --- /dev/null
  126. +++ iptables-1.3.8/extensions/libipt_IMQ.c
  127. @@ -0,0 +1,101 @@
  128. +/* Shared library add-on to iptables to add IMQ target support. */
  129. +#include <stdio.h>
  130. +#include <string.h>
  131. +#include <stdlib.h>
  132. +#include <getopt.h>
  133. +
  134. +#include <iptables.h>
  135. +#include <linux/netfilter_ipv4/ip_tables.h>
  136. +#include <linux/netfilter_ipv4/ipt_IMQ.h>
  137. +
  138. +/* Function which prints out usage message. */
  139. +static void
  140. +help(void)
  141. +{
  142. + printf(
  143. +"IMQ target v%s options:\n"
  144. +" --todev <N> enqueue to imq<N>, defaults to 0\n",
  145. +IPTABLES_VERSION);
  146. +}
  147. +
  148. +static struct option opts[] = {
  149. + { "todev", 1, 0, '1' },
  150. + { 0 }
  151. +};
  152. +
  153. +/* Initialize the target. */
  154. +static void
  155. +init(struct ipt_entry_target *t, unsigned int *nfcache)
  156. +{
  157. + struct ipt_imq_info *mr = (struct ipt_imq_info*)t->data;
  158. +
  159. + mr->todev = 0;
  160. + *nfcache |= NFC_UNKNOWN;
  161. +}
  162. +
  163. +/* Function which parses command options; returns true if it
  164. + ate an option */
  165. +static int
  166. +parse(int c, char **argv, int invert, unsigned int *flags,
  167. + const struct ipt_entry *entry,
  168. + struct ipt_entry_target **target)
  169. +{
  170. + struct ipt_imq_info *mr = (struct ipt_imq_info*)(*target)->data;
  171. +
  172. + switch(c) {
  173. + case '1':
  174. + if (check_inverse(optarg, &invert, NULL, 0))
  175. + exit_error(PARAMETER_PROBLEM,
  176. + "Unexpected `!' after --todev");
  177. + mr->todev=atoi(optarg);
  178. + break;
  179. + default:
  180. + return 0;
  181. + }
  182. + return 1;
  183. +}
  184. +
  185. +static void
  186. +final_check(unsigned int flags)
  187. +{
  188. +}
  189. +
  190. +/* Prints out the targinfo. */
  191. +static void
  192. +print(const struct ipt_ip *ip,
  193. + const struct ipt_entry_target *target,
  194. + int numeric)
  195. +{
  196. + struct ipt_imq_info *mr = (struct ipt_imq_info*)target->data;
  197. +
  198. + printf("IMQ: todev %u ", mr->todev);
  199. +}
  200. +
  201. +/* Saves the union ipt_targinfo in parsable form to stdout. */
  202. +static void
  203. +save(const struct ipt_ip *ip, const struct ipt_entry_target *target)
  204. +{
  205. + struct ipt_imq_info *mr = (struct ipt_imq_info*)target->data;
  206. +
  207. + printf("--todev %u", mr->todev);
  208. +}
  209. +
  210. +static struct iptables_target imq = {
  211. + .next = NULL,
  212. + .name = "IMQ",
  213. + .version = IPTABLES_VERSION,
  214. + .size = IPT_ALIGN(sizeof(struct ipt_imq_info)),
  215. + .userspacesize = IPT_ALIGN(sizeof(struct ipt_imq_info)),
  216. + .help = &help,
  217. + .init = &init,
  218. + .parse = &parse,
  219. + .final_check = &final_check,
  220. + .print = &print,
  221. + .save = &save,
  222. + .extra_opts = opts
  223. +};
  224. +
  225. +static __attribute__((constructor)) void _init(void)
  226. +{
  227. + register_target(&imq);
  228. +}