--- /dev/null
+#
+# Copyright (C) 2009 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+#
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/kernel.mk
+
+PKG_NAME:=ipset
+PKG_VERSION:=4.2
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=http://ipset.netfilter.org
+PKG_MD5SUM:=9060d549a18c1c0794fa47a71343d627
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/ipset/Default
+ DEPENDS:= @(!(TARGET_ps3||TARGET_pxcab)||BROKEN)
+endef
+
+define Package/ipset
+$(call Package/ipset/Default)
+ SECTION:=net
+ CATEGORY:=Network
+ DEPENDS+= +iptables-mod-ipset +kmod-ipt-ipset
+ TITLE:=IPset administration utility
+ URL:=http://ipset.netfilter.org/
+endef
+
+include $(INCLUDE_DIR)/kernel-defaults.mk
+
+IPSET_MAKEOPTS:= -C $(PKG_BUILD_DIR) \
+ $(TARGET_CONFIGURE_OPTS) \
+ COPT_FLAGS="$(TARGET_CFLAGS)" \
+ LDFLAGS="-rdynamic" \
+ NO_EXTRA_WARN_FLAGS=yes \
+ KERNEL_DIR="$(LINUX_DIR)" \
+ PREFIX=/usr \
+
+IPSET_MODULES:= \
+ ip_set \
+ ip_set_iphash \
+ ip_set_ipmap \
+ ip_set_ipporthash \
+ ip_set_ipportiphash \
+ ip_set_ipportnethash \
+ ip_set_iptree \
+ ip_set_iptreemap \
+ ip_set_macipmap \
+ ip_set_nethash \
+ ip_set_portmap \
+ ip_set_setlist \
+ ipt_set \
+ ipt_SET \
+
+define Build/Compile
+ mkdir -p $(PKG_INSTALL_DIR)
+ $(MAKE) $(IPSET_MAKEOPTS) binaries
+ $(MAKE) $(KERNEL_MAKEOPTS) M="$(PKG_BUILD_DIR)/kernel" IP_NF_SET_MAX="256" IP_NF_SET_HASHSIZE="1024" modules
+ $(MAKE) $(IPSET_MAKEOPTS) DESTDIR="$(PKG_INSTALL_DIR)" binaries_install
+endef
+
+define Package/ipset/install
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(CP) $(PKG_INSTALL_DIR)/usr/sbin/ipset $(1)/usr/sbin/
+ $(INSTALL_DIR) $(1)/usr/lib/ipset
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/ipset/libipset*.so $(1)/usr/lib/ipset/
+endef
+
+define KernelPackage/ipt-ipset
+$(call Package/ipset/Default)
+ SUBMENU:=Netfilter Extensions
+ TITLE:=IPset netfilter modules
+ DEPENDS+= kmod-ipt-core
+ FILES:=$(foreach mod,$(IPSET_MODULES),$(PKG_BUILD_DIR)/kernel/$(mod).ko)
+ AUTOLOAD:=$(call AutoLoad,46,$(IPSET_MODULES))
+endef
+
+$(eval $(call BuildPackage,ipset))
+$(eval $(call KernelPackage,ipt-ipset))
--- /dev/null
+--- a/kernel/ipt_set.c
++++ b/kernel/ipt_set.c
+@@ -83,10 +83,14 @@ match(const struct sk_buff *skb,
+ int offset,
+ unsigned int protoff,
+ bool *hotdrop)
+-#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28) */
++#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)
+ static bool
+ match(const struct sk_buff *skb,
+ const struct xt_match_param *par)
++#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35) */
++static bool
++match(const struct sk_buff *skb,
++ struct xt_action_param *par)
+ #endif
+ {
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28)
+@@ -136,9 +140,12 @@ checkentry(const char *tablename,
+ const struct xt_match *match,
+ void *matchinfo,
+ unsigned int hook_mask)
+-#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28) */
++#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)
+ static bool
+ checkentry(const struct xt_mtchk_param *par)
++#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35) */
++static int
++checkentry(const struct xt_mtchk_param *par)
+ #endif
+ {
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28)
+--- a/kernel/ipt_SET.c
++++ b/kernel/ipt_SET.c
+@@ -64,9 +64,12 @@ target(struct sk_buff *skb,
+ unsigned int hooknum,
+ const struct xt_target *target,
+ const void *targinfo)
+-#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28) */
++#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)
+ target(struct sk_buff *skb,
+ const struct xt_target_param *par)
++#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35) */
++target(struct sk_buff *skb,
++ const struct xt_action_param *par)
+ #endif
+ {
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28)
+@@ -127,9 +130,12 @@ checkentry(const char *tablename,
+ const struct xt_target *target,
+ void *targinfo,
+ unsigned int hook_mask)
+-#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28) */
++#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)
+ static bool
+ checkentry(const struct xt_tgchk_param *par)
++#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35) */
++static int
++checkentry(const struct xt_tgchk_param *par)
+ #endif
+ {
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28)