Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2d06d4a5 authored by Jan Engelhardt's avatar Jan Engelhardt Committed by Patrick McHardy
Browse files

netfilter: change Ebtables function signatures to match Xtables's

parent 815377fe
Loading
Loading
Loading
Loading
+26 −17
Original line number Diff line number Diff line
@@ -31,6 +31,9 @@
 * The 4 lsb are more than enough to store the verdict. */
#define EBT_VERDICT_BITS 0x0000000F

struct xt_match;
struct xt_target;

struct ebt_counter
{
	uint64_t pcnt;
@@ -208,11 +211,13 @@ struct ebt_match
	struct list_head list;
	const char name[EBT_FUNCTION_MAXNAMELEN];
	bool (*match)(const struct sk_buff *skb, const struct net_device *in,
	   const struct net_device *out, const void *matchdata,
	   unsigned int datalen);
	bool (*check)(const char *tablename, unsigned int hookmask,
	   const struct ebt_entry *e, void *matchdata, unsigned int datalen);
	void (*destroy)(void *matchdata, unsigned int datalen);
		const struct net_device *out, const struct xt_match *match,
		const void *matchinfo, int offset, unsigned int protoff,
		bool *hotdrop);
	bool (*checkentry)(const char *table, const void *entry,
		const struct xt_match *match, void *matchinfo,
		unsigned int hook_mask);
	void (*destroy)(const struct xt_match *match, void *matchinfo);
	unsigned int matchsize;
	u_int8_t revision;
	u_int8_t family;
@@ -223,12 +228,14 @@ struct ebt_watcher
{
	struct list_head list;
	const char name[EBT_FUNCTION_MAXNAMELEN];
	unsigned int (*watcher)(const struct sk_buff *skb, unsigned int hooknr,
	unsigned int (*target)(struct sk_buff *skb,
		const struct net_device *in, const struct net_device *out,
	   const void *watcherdata, unsigned int datalen);
	bool (*check)(const char *tablename, unsigned int hookmask,
	   const struct ebt_entry *e, void *watcherdata, unsigned int datalen);
	void (*destroy)(void *watcherdata, unsigned int datalen);
		unsigned int hook_num, const struct xt_target *target,
		const void *targinfo);
	bool (*checkentry)(const char *table, const void *entry,
		const struct xt_target *target, void *targinfo,
		unsigned int hook_mask);
	void (*destroy)(const struct xt_target *target, void *targinfo);
	unsigned int targetsize;
	u_int8_t revision;
	u_int8_t family;
@@ -240,12 +247,14 @@ struct ebt_target
	struct list_head list;
	const char name[EBT_FUNCTION_MAXNAMELEN];
	/* returns one of the standard EBT_* verdicts */
	unsigned int (*target)(struct sk_buff *skb, unsigned int hooknr,
	unsigned int (*target)(struct sk_buff *skb,
		const struct net_device *in, const struct net_device *out,
	   const void *targetdata, unsigned int datalen);
	bool (*check)(const char *tablename, unsigned int hookmask,
	   const struct ebt_entry *e, void *targetdata, unsigned int datalen);
	void (*destroy)(void *targetdata, unsigned int datalen);
		unsigned int hook_num, const struct xt_target *target,
		const void *targinfo);
	bool (*checkentry)(const char *table, const void *entry,
		const struct xt_target *target, void *targinfo,
		unsigned int hook_mask);
	void (*destroy)(const struct xt_target *target, void *targinfo);
	unsigned int targetsize;
	u_int8_t revision;
	u_int8_t family;
+10 −8
Original line number Diff line number Diff line
@@ -12,9 +12,10 @@
#include <linux/netfilter_bridge/ebtables.h>
#include <linux/netfilter_bridge/ebt_802_3.h>

static bool ebt_filter_802_3(const struct sk_buff *skb,
   const struct net_device *in,
   const struct net_device *out, const void *data, unsigned int datalen)
static bool
ebt_802_3_mt(const struct sk_buff *skb, const struct net_device *in,
	     const struct net_device *out, const struct xt_match *match,
	     const void *data, int offset, unsigned int protoff, bool *hotdrop)
{
	const struct ebt_802_3_info *info = data;
	const struct ebt_802_3_hdr *hdr = ebt_802_3_hdr(skb);
@@ -37,9 +38,10 @@ static bool ebt_filter_802_3(const struct sk_buff *skb,
	return true;
}

static struct ebt_match filter_802_3;
static bool ebt_802_3_check(const char *tablename, unsigned int hookmask,
   const struct ebt_entry *e, void *data, unsigned int datalen)
static bool
ebt_802_3_mt_check(const char *table, const void *entry,
		   const struct xt_match *match, void *data,
		   unsigned int hook_mask)
{
	const struct ebt_802_3_info *info = data;

@@ -53,8 +55,8 @@ static struct ebt_match filter_802_3 __read_mostly = {
	.name		= EBT_802_3_MATCH,
	.revision	= 0,
	.family		= NFPROTO_BRIDGE,
	.match		= ebt_filter_802_3,
	.check		= ebt_802_3_check,
	.match		= ebt_802_3_mt,
	.checkentry	= ebt_802_3_mt_check,
	.matchsize	= XT_ALIGN(sizeof(struct ebt_802_3_info)),
	.me		= THIS_MODULE,
};
+9 −9
Original line number Diff line number Diff line
@@ -127,10 +127,10 @@ static int get_ip_src(const struct sk_buff *skb, __be32 *addr)
	return 0;
}

static bool ebt_filter_among(const struct sk_buff *skb,
			     const struct net_device *in,
			     const struct net_device *out, const void *data,
			     unsigned int datalen)
static bool
ebt_among_mt(const struct sk_buff *skb, const struct net_device *in,
	     const struct net_device *out, const struct xt_match *match,
	     const void *data, int offset, unsigned int protoff, bool *hotdrop)
{
	const struct ebt_among_info *info = data;
	const char *dmac, *smac;
@@ -174,9 +174,9 @@ static bool ebt_filter_among(const struct sk_buff *skb,
}

static bool
ebt_among_check(const char *tablename, unsigned int hookmask,
		const struct ebt_entry *e, void *data,
		unsigned int datalen)
ebt_among_mt_check(const char *table, const void *entry,
		   const struct xt_match *match, void *data,
		   unsigned int hook_mask)
{
	const struct ebt_entry_match *em =
		container_of(data, const struct ebt_entry_match, data);
@@ -215,8 +215,8 @@ static struct ebt_match filter_among __read_mostly = {
	.name		= EBT_AMONG_MATCH,
	.revision	= 0,
	.family		= NFPROTO_BRIDGE,
	.match		= ebt_filter_among,
	.check		= ebt_among_check,
	.match		= ebt_among_mt,
	.checkentry	= ebt_among_mt_check,
	.matchsize	= -1, /* special case */
	.me		= THIS_MODULE,
};
+11 −7
Original line number Diff line number Diff line
@@ -15,9 +15,10 @@
#include <linux/netfilter_bridge/ebtables.h>
#include <linux/netfilter_bridge/ebt_arp.h>

static bool ebt_filter_arp(const struct sk_buff *skb,
   const struct net_device *in,
   const struct net_device *out, const void *data, unsigned int datalen)
static bool
ebt_arp_mt(const struct sk_buff *skb, const struct net_device *in,
	   const struct net_device *out, const struct xt_match *match,
	   const void *data, int offset, unsigned int protoff, bool *hotdrop)
{
	const struct ebt_arp_info *info = data;
	const struct arphdr *ah;
@@ -101,10 +102,13 @@ static bool ebt_filter_arp(const struct sk_buff *skb,
	return true;
}

static bool ebt_arp_check(const char *tablename, unsigned int hookmask,
   const struct ebt_entry *e, void *data, unsigned int datalen)
static bool
ebt_arp_mt_check(const char *table, const void *entry,
		 const struct xt_match *match, void *data,
		 unsigned int hook_mask)
{
	const struct ebt_arp_info *info = data;
	const struct ebt_entry *e = entry;

	if ((e->ethproto != htons(ETH_P_ARP) &&
	   e->ethproto != htons(ETH_P_RARP)) ||
@@ -119,8 +123,8 @@ static struct ebt_match filter_arp __read_mostly = {
	.name		= EBT_ARP_MATCH,
	.revision	= 0,
	.family		= NFPROTO_BRIDGE,
	.match		= ebt_filter_arp,
	.check		= ebt_arp_check,
	.match		= ebt_arp_mt,
	.checkentry	= ebt_arp_mt_check,
	.matchsize	= XT_ALIGN(sizeof(struct ebt_arp_info)),
	.me		= THIS_MODULE,
};
+11 −7
Original line number Diff line number Diff line
@@ -15,9 +15,10 @@
#include <linux/netfilter_bridge/ebtables.h>
#include <linux/netfilter_bridge/ebt_arpreply.h>

static unsigned int ebt_target_reply(struct sk_buff *skb, unsigned int hooknr,
   const struct net_device *in, const struct net_device *out,
   const void *data, unsigned int datalen)
static unsigned int
ebt_arpreply_tg(struct sk_buff *skb, const struct net_device *in,
		const struct net_device *out, unsigned int hook_nr,
		const struct xt_target *target, const void *data)
{
	struct ebt_arpreply_info *info = (void *)data;
	const __be32 *siptr, *diptr;
@@ -58,10 +59,13 @@ static unsigned int ebt_target_reply(struct sk_buff *skb, unsigned int hooknr,
	return info->target;
}

static bool ebt_target_reply_check(const char *tablename, unsigned int hookmask,
   const struct ebt_entry *e, void *data, unsigned int datalen)
static bool
ebt_arpreply_tg_check(const char *tablename, const void *entry,
		      const struct xt_target *target, void *data,
		      unsigned int hookmask)
{
	const struct ebt_arpreply_info *info = data;
	const struct ebt_entry *e = entry;

	if (BASE_CHAIN && info->target == EBT_RETURN)
		return false;
@@ -78,8 +82,8 @@ static struct ebt_target reply_target __read_mostly = {
	.name		= EBT_ARPREPLY_TARGET,
	.revision	= 0,
	.family		= NFPROTO_BRIDGE,
	.target		= ebt_target_reply,
	.check		= ebt_target_reply_check,
	.target		= ebt_arpreply_tg,
	.checkentry	= ebt_arpreply_tg_check,
	.targetsize	= XT_ALIGN(sizeof(struct ebt_arpreply_info)),
	.me		= THIS_MODULE,
};
Loading