2 * 'raw' table, which is the very first hooked in at PRE_ROUTING and LOCAL_OUT .
4 * Copyright (C) 2003 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
6 #include <linux/module.h>
7 #include <linux/netfilter_ipv4/ip_tables.h>
9 #define RAW_VALID_HOOKS ((1 << NF_IP_PRE_ROUTING) | (1 << NF_IP_LOCAL_OUT))
14 struct ipt_entry entry
;
15 struct ipt_standard_target target
;
18 struct ipt_error_target
20 struct ipt_entry_target target
;
21 char errorname
[IPT_FUNCTION_MAXNAMELEN
];
26 struct ipt_entry entry
;
27 struct ipt_error_target target
;
32 struct ipt_replace repl
;
33 struct ipt_standard entries
[2];
34 struct ipt_error term
;
35 } initial_table __initdata
= {
38 .valid_hooks
= RAW_VALID_HOOKS
,
40 .size
= sizeof(struct ipt_standard
) * 2 + sizeof(struct ipt_error
),
42 [NF_IP_PRE_ROUTING
] = 0,
43 [NF_IP_LOCAL_OUT
] = sizeof(struct ipt_standard
) },
45 [NF_IP_PRE_ROUTING
] = 0,
46 [NF_IP_LOCAL_OUT
] = sizeof(struct ipt_standard
) },
52 .target_offset
= sizeof(struct ipt_entry
),
53 .next_offset
= sizeof(struct ipt_standard
),
58 .target_size
= IPT_ALIGN(sizeof(struct ipt_standard_target
)),
61 .verdict
= -NF_ACCEPT
- 1,
68 .target_offset
= sizeof(struct ipt_entry
),
69 .next_offset
= sizeof(struct ipt_standard
),
74 .target_size
= IPT_ALIGN(sizeof(struct ipt_standard_target
)),
77 .verdict
= -NF_ACCEPT
- 1,
84 .target_offset
= sizeof(struct ipt_entry
),
85 .next_offset
= sizeof(struct ipt_error
),
91 .target_size
= IPT_ALIGN(sizeof(struct ipt_error_target
)),
92 .name
= IPT_ERROR_TARGET
,
101 static struct ipt_table packet_raw
= {
103 .table
= &initial_table
.repl
,
104 .valid_hooks
= RAW_VALID_HOOKS
,
105 .lock
= RW_LOCK_UNLOCKED
,
109 /* The work comes in here from netfilter.c. */
111 ipt_hook(unsigned int hook
,
112 struct sk_buff
**pskb
,
113 const struct net_device
*in
,
114 const struct net_device
*out
,
115 int (*okfn
)(struct sk_buff
*))
117 return ipt_do_table(pskb
, hook
, in
, out
, &packet_raw
, NULL
);
120 /* 'raw' is the very first table. */
121 static struct nf_hook_ops ipt_ops
[] = {
125 .hooknum
= NF_IP_PRE_ROUTING
,
126 .priority
= NF_IP_PRI_RAW
131 .hooknum
= NF_IP_LOCAL_OUT
,
132 .priority
= NF_IP_PRI_RAW
136 static int __init
init(void)
141 ret
= ipt_register_table(&packet_raw
);
146 ret
= nf_register_hook(&ipt_ops
[0]);
150 ret
= nf_register_hook(&ipt_ops
[1]);
157 nf_unregister_hook(&ipt_ops
[0]);
159 ipt_unregister_table(&packet_raw
);
164 static void __exit
fini(void)
168 for (i
= 0; i
< sizeof(ipt_ops
)/sizeof(struct nf_hook_ops
); i
++)
169 nf_unregister_hook(&ipt_ops
[i
]);
171 ipt_unregister_table(&packet_raw
);
176 MODULE_LICENSE("GPL");