diff -Naur linux-4.9.6_old/include/uapi/linux/netfilter_bridge/ebt_eq.h linux-4.9.6/include/uapi/linux/netfilter_bridge/ebt_eq.h
--- linux-4.9.6_old/include/uapi/linux/netfilter_bridge/ebt_eq.h	1970-01-01 01:00:00.000000000 +0100
+++ linux-4.9.6/include/uapi/linux/netfilter_bridge/ebt_eq.h	2017-07-12 09:10:18.000000000 +0200
@@ -0,0 +1,28 @@
+/*
+ *  ebt_eq
+ */
+
+#ifndef __LINUX_BRIDGE_EBT_EQ_H
+#define __LINUX_BRIDGE_EBT_EQ_H
+
+#include <linux/types.h>
+
+#define EBT_EQ_A	0x01
+#define EBT_EQ_TEST	0x02
+
+#define EBT_EQ_MATCH "eq"
+#define MAX_ETHOFFSET 1504	/*1518 - 14 (ethernet header)*/
+#define MAX_CMPDATALEN  16
+
+struct ebt_eq_info
+{
+	uint8_t  bitmask;
+	uint8_t  invflags;
+	int16_t offset;	//0 az MAX_ETHOFFSET-1
+//	int16_t data[MAX_CMPDATALEN];	//az 16 bajtu porovnavacich dat
+    uint8_t data[MAX_CMPDATALEN];	//az 16 bajtu porovnavacich dat
+	int16_t data_len;
+	uint32_t mask;
+};
+
+#endif
diff -Naur linux-4.9.6_old/include/uapi/linux/netfilter_bridge/Kbuild linux-4.9.6/include/uapi/linux/netfilter_bridge/Kbuild
--- linux-4.9.6_old/include/uapi/linux/netfilter_bridge/Kbuild	2017-01-26 08:25:24.000000000 +0100
+++ linux-4.9.6/include/uapi/linux/netfilter_bridge/Kbuild	2017-07-12 09:08:40.000000000 +0200
@@ -15,4 +15,5 @@
 header-y += ebt_redirect.h
 header-y += ebt_stp.h
 header-y += ebt_vlan.h
+header-y += ebt_eq.h
 header-y += ebtables.h
diff -Naur linux-4.9.6_old/net/bridge/netfilter/ebt_eq.c linux-4.9.6/net/bridge/netfilter/ebt_eq.c
--- linux-4.9.6_old/net/bridge/netfilter/ebt_eq.c	1970-01-01 01:00:00.000000000 +0100
+++ linux-4.9.6/net/bridge/netfilter/ebt_eq.c	2017-07-12 09:13:30.000000000 +0200
@@ -0,0 +1,120 @@
+/*
+ *  ebt_eq
+ *
+ *	Authors:
+ *	Karel Znamenacek  <karel@ryston.cz>
+ *
+ *  2009
+ *
+ */
+
+#include <linux/if_ether.h>
+#include <linux/if_vlan.h>
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/netfilter/x_tables.h>
+
+#include <linux/netfilter_bridge/ebtables.h>
+#include <linux/netfilter_bridge/ebt_eq.h>
+#include <linux/ip.h>
+#include <net/ip.h>
+#include <linux/in.h>
+#include <linux/module.h>
+/*#include <stdio.h> */
+
+#define MODULE_VERS "1.1"
+
+MODULE_AUTHOR("Karel Znamenacek <karel@ryston.cz>");
+MODULE_DESCRIPTION("Ebtables: payload data match");
+MODULE_LICENSE("GPL");
+
+
+/* 	nasledujici fce se aplikuje na kazdy ethernetovy ramec, pro ktery je tento
+	filtr nastaven */
+
+static bool
+ebt_filter_eq(const struct sk_buff *skb, struct xt_action_param *par)
+{
+	const struct ebt_eq_info *info = par->matchinfo;
+	char data_eth[MAX_CMPDATALEN];	/*pro ulozeni porovnavanych dat ether.ramce*/
+	int i;
+	//short int si=0;
+
+
+/*#define ETH_HEADER_LEN 14*/
+#define ETH_PING_SEQUENCE_OFFSET 0x1A
+//#define DEBUG_EBT
+
+	if(info->bitmask & EBT_EQ_A)
+	{	/* nakopiruju porovnavana data*/
+#ifdef DEBUG_EBT
+		printk(KERN_INFO "\nebt_eq MATCHing...o=%d len=%d invflags=0x%02X",info->offset,info->data_len,info->invflags);
+#endif
+		if(skb_copy_bits(skb, info->offset, data_eth, info->data_len))  /*chyba pri kopirovani dat z eth.ramce*/
+        {   if(info->invflags)  return false;
+            else return true;
+        }
+#ifdef DEBUG_EBT
+		printk(KERN_INFO "\ncomparing data[frame data] ");
+		for(i=0;i<info->data_len;i++)
+		{	printk(KERN_INFO "%02X[%02X] ",(char)info->data[i],data_eth[i]);
+
+		}
+#endif
+
+		for(i=0;i<info->data_len && i<MAX_CMPDATALEN; i++)
+/*	!! testuji shodu dat nasledujici radek pujde optimalizovat*/
+		{	if(data_eth[i] != (char)info->data[i])
+			{    if(info->invflags)	return true;
+			     else return false;
+			}
+		}
+        /* match ... */
+        if(info->invflags)  return false;
+	    else return true;
+
+	}else
+	if(info->bitmask & EBT_EQ_TEST)
+	{	if(skb_copy_bits(skb, ETH_PING_SEQUENCE_OFFSET, data_eth, 2))
+			return false;	/*chyba pri kopirovani dat z eth.ramce*/
+		if((char)data_eth[0] % 2)
+			return false;
+		//printk(KERN_INFO "ebt_eq-test MATCH...si==%d\n",si);
+	}
+	return true;
+}
+
+/* !!! ToDo */
+static int ebt_eq_check(const struct xt_mtchk_param *par)
+{
+    const struct ebt_eq_info *info = par->matchinfo;
+    if(info->data_len < 1 || info->data_len > MAX_CMPDATALEN || \
+        info->offset < 0 || info->offset > MAX_ETHOFFSET)
+    {
+        return -EINVAL;
+    }
+	return 0;
+}
+
+static struct xt_match ebt_eq_reg __read_mostly = {
+	.name		= EBT_EQ_MATCH,
+	.match		= ebt_filter_eq,
+	.checkentry	= ebt_eq_check,
+	.me		= THIS_MODULE,
+};
+
+static int __init ebt_eq_init(void)
+{
+	pr_debug("ebtables eq extension module v" MODULE_VERS "\n");
+	return xt_register_match(&ebt_eq_reg);
+}
+
+static void __exit ebt_eq_fini(void)
+{
+	xt_unregister_match(&ebt_eq_reg);
+}
+
+module_init(ebt_eq_init);
+module_exit(ebt_eq_fini);
+MODULE_DESCRIPTION("Ebtables: eq packet match");
+MODULE_LICENSE("GPL");
diff -Naur linux-4.9.6_old/net/bridge/netfilter/Kconfig linux-4.9.6/net/bridge/netfilter/Kconfig
--- linux-4.9.6_old/net/bridge/netfilter/Kconfig	2017-01-26 08:25:24.000000000 +0100
+++ linux-4.9.6/net/bridge/netfilter/Kconfig	2017-07-12 09:12:18.000000000 +0200
@@ -154,6 +154,14 @@
 	  802.1Q vlan fields.
 
 	  To compile it as a module, choose M here.  If unsure, say N.
+
+config BRIDGE_EBT_EQ
+	tristate "ebt: eq match filter support"
+	help
+	  This option adds the eq match, which allows byte-wise filtering of
+	  the ethernet frame payload - up to 16 bytes per rule.
+
+	  To compile it as a module, choose M here.  If unsure, say N.
 #
 # targets
 #
diff -Naur linux-4.9.6_old/net/bridge/netfilter/Makefile linux-4.9.6/net/bridge/netfilter/Makefile
--- linux-4.9.6_old/net/bridge/netfilter/Makefile	2017-01-26 08:25:24.000000000 +0100
+++ linux-4.9.6/net/bridge/netfilter/Makefile	2017-07-12 09:12:38.000000000 +0200
@@ -27,6 +27,7 @@
 obj-$(CONFIG_BRIDGE_EBT_PKTTYPE) += ebt_pkttype.o
 obj-$(CONFIG_BRIDGE_EBT_STP) += ebt_stp.o
 obj-$(CONFIG_BRIDGE_EBT_VLAN) += ebt_vlan.o
+obj-$(CONFIG_BRIDGE_EBT_EQ) += ebt_eq.o
 
 # targets
 obj-$(CONFIG_BRIDGE_EBT_ARPREPLY) += ebt_arpreply.o
diff -Naur linux-4.9.6_old/net/bridge/netfilter/ebt_eq.c linux-4.9.6/net/bridge/netfilter/ebt_eq.c
--- linux-4.9.6_old/net/bridge/netfilter/ebt_eq.c	2017-07-12 12:01:46.799027791 +0200
+++ linux-4.9.6/net/bridge/netfilter/ebt_eq.c	2017-07-12 11:00:22.000000000 +0200
@@ -97,10 +97,13 @@
 }
 
 static struct xt_match ebt_eq_reg __read_mostly = {
-	.name		= EBT_EQ_MATCH,
-	.match		= ebt_filter_eq,
-	.checkentry	= ebt_eq_check,
-	.me		= THIS_MODULE,
+    .name           = EBT_EQ_MATCH,
+    .revision       = 0,
+    .family         = NFPROTO_BRIDGE,
+    .match          = ebt_filter_eq,
+    .checkentry     = ebt_eq_check,
+    .matchsize      = sizeof(struct ebt_eq_info),
+    .me             = THIS_MODULE,
 };
 
 static int __init ebt_eq_init(void)
