netfilter: xtables: move extension arguments into compound structure (1/6)
[deliverable/linux.git] / net / bridge / netfilter / ebt_802_3.c
CommitLineData
1da177e4
LT
1/*
2 * 802_3
3 *
4 * Author:
5 * Chris Vitale csv@bluetail.com
6 *
7 * May 2003
9d6f229f 8 *
1da177e4 9 */
18219d3f
JE
10#include <linux/module.h>
11#include <linux/netfilter/x_tables.h>
1da177e4
LT
12#include <linux/netfilter_bridge/ebtables.h>
13#include <linux/netfilter_bridge/ebt_802_3.h>
1da177e4 14
2d06d4a5 15static bool
f7108a20 16ebt_802_3_mt(const struct sk_buff *skb, const struct xt_match_param *par)
1da177e4 17{
f7108a20 18 const struct ebt_802_3_info *info = par->matchinfo;
abfdf1c4 19 const struct ebt_802_3_hdr *hdr = ebt_802_3_hdr(skb);
47c183fa 20 __be16 type = hdr->llc.ui.ctrl & IS_UI ? hdr->llc.ui.type : hdr->llc.ni.type;
1da177e4
LT
21
22 if (info->bitmask & EBT_802_3_SAP) {
9d6f229f 23 if (FWINV(info->sap != hdr->llc.ui.ssap, EBT_802_3_SAP))
8cc784ee 24 return false;
1da177e4 25 if (FWINV(info->sap != hdr->llc.ui.dsap, EBT_802_3_SAP))
8cc784ee 26 return false;
1da177e4
LT
27 }
28
29 if (info->bitmask & EBT_802_3_TYPE) {
30 if (!(hdr->llc.ui.dsap == CHECK_TYPE && hdr->llc.ui.ssap == CHECK_TYPE))
8cc784ee 31 return false;
9d6f229f 32 if (FWINV(info->type != type, EBT_802_3_TYPE))
8cc784ee 33 return false;
1da177e4
LT
34 }
35
8cc784ee 36 return true;
1da177e4
LT
37}
38
2d06d4a5
JE
39static bool
40ebt_802_3_mt_check(const char *table, const void *entry,
41 const struct xt_match *match, void *data,
42 unsigned int hook_mask)
1da177e4 43{
abfdf1c4 44 const struct ebt_802_3_info *info = data;
1da177e4 45
1da177e4 46 if (info->bitmask & ~EBT_802_3_MASK || info->invflags & ~EBT_802_3_MASK)
19eda879 47 return false;
1da177e4 48
19eda879 49 return true;
1da177e4
LT
50}
51
043ef46c
JE
52static struct xt_match ebt_802_3_mt_reg __read_mostly = {
53 .name = "802_3",
001a18d3
JE
54 .revision = 0,
55 .family = NFPROTO_BRIDGE,
2d06d4a5
JE
56 .match = ebt_802_3_mt,
57 .checkentry = ebt_802_3_mt_check,
18219d3f 58 .matchsize = XT_ALIGN(sizeof(struct ebt_802_3_info)),
1da177e4
LT
59 .me = THIS_MODULE,
60};
61
65b4b4e8 62static int __init ebt_802_3_init(void)
1da177e4 63{
043ef46c 64 return xt_register_match(&ebt_802_3_mt_reg);
1da177e4
LT
65}
66
65b4b4e8 67static void __exit ebt_802_3_fini(void)
1da177e4 68{
043ef46c 69 xt_unregister_match(&ebt_802_3_mt_reg);
1da177e4
LT
70}
71
65b4b4e8
AM
72module_init(ebt_802_3_init);
73module_exit(ebt_802_3_fini);
f776c4cd 74MODULE_DESCRIPTION("Ebtables: DSAP/SSAP field and SNAP type matching");
1da177e4 75MODULE_LICENSE("GPL");
This page took 0.368415 seconds and 5 git commands to generate.