diff mbox series

[v2] ebtables: add option to install save/restore utils

Message ID 20191216220832.6792-1-matthew.weber@rockwellcollins.com
State Accepted
Headers show
Series [v2] ebtables: add option to install save/restore utils | expand

Commit Message

Matt Weber Dec. 16, 2019, 10:08 p.m. UTC
From: David Owens <david.owens@rockwellcollins.com>

This patch adds an option to include the tools on target that allow
the saving and restoring of ebtables. The upstream save utility is
replaced in this commit as it depended on perl which is not always
possible on an embedded system. The commit used to replace this
script seems to note it as a common approach across a few distros.

Signed-off-by: David Owens <david.owens@rockwellcollins.com>
Signed-off-by: Matt Weber <matthew.weber@rockwellcollins.com>
---
Changes
v1 -> v2
 - Split out the save and restore so that only when saving bash is
   a dependency
---
 ...-ebtables-save-perl-script-with-bash.patch | 75 +++++++++++++++++++
 package/ebtables/Config.in                    | 15 ++++
 package/ebtables/ebtables.mk                  | 16 ++++
 3 files changed, 106 insertions(+)
 create mode 100644 package/ebtables/0003-replace-ebtables-save-perl-script-with-bash.patch

Comments

Thomas Petazzoni Dec. 22, 2019, 9:27 p.m. UTC | #1
On Mon, 16 Dec 2019 16:08:32 -0600
Matt Weber <matthew.weber@rockwellcollins.com> wrote:

> From: David Owens <david.owens@rockwellcollins.com>
> 
> This patch adds an option to include the tools on target that allow
> the saving and restoring of ebtables. The upstream save utility is
> replaced in this commit as it depended on perl which is not always
> possible on an embedded system. The commit used to replace this
> script seems to note it as a common approach across a few distros.
> 
> Signed-off-by: David Owens <david.owens@rockwellcollins.com>
> Signed-off-by: Matt Weber <matthew.weber@rockwellcollins.com>

So, I've applied to master, after doing some changes.

First, I did two preparation patches:

 - One that drops EBTABLES_SUBDIR entirely, since it's not defined
   anywhere.

 - One that reworks the installation loop to use a make "foreach" loop.


> +if BR2_PACKAGE_EBTABLES
> +config BR2_PACKAGE_EBTABLES_UTILS_SAVE
> +	bool "ebtables save"
> +	depends on BR2_PACKAGE_BASH # runtime
> +	help
> +	  Include the save tool

Changed to:

	  Install the ebtables-save tool.

> +
> +config BR2_PACKAGE_EBTABLES_UTILS_RESTORE
> +	bool "ebtables restore"
> +	depends on !BR2_STATIC_LIBS
> +	help
> +	  Include the restore tool

Changed to:

	Install the ebtables-restore tool.

> +ifeq ($(BR2_PACKAGE_EBTABLES_UTILS_SAVE),y)
> +EBTABLES_DEPENDENCIES = bash

bash is a runtime dependency, so I dropped this.

> +define EBTABLES_INSTALL_TARGET_UTILS_SAVE
> +	$(INSTALL) -m 0755 -D $(@D)/$(EBTABLES_SUBDIR)/ebtables-save.sh \

Dropped EBTABLES_SUBDIR

> +		$(TARGET_DIR)/sbin/ebtables-save
> +endef
> +endif
> +ifeq ($(BR2_PACKAGE_EBTABLES_UTILS_RESTORE),y)
> +define EBTABLES_INSTALL_TARGET_UTILS_RESTORE
> +	$(INSTALL) -m 0755 -D $(@D)/$(EBTABLES_SUBDIR)/ebtables-restore \

Ditto.

Thanks, applied with those changes!

Thomas
diff mbox series

Patch

diff --git a/package/ebtables/0003-replace-ebtables-save-perl-script-with-bash.patch b/package/ebtables/0003-replace-ebtables-save-perl-script-with-bash.patch
new file mode 100644
index 0000000000..687eb6a373
--- /dev/null
+++ b/package/ebtables/0003-replace-ebtables-save-perl-script-with-bash.patch
@@ -0,0 +1,75 @@ 
+From 73536d15c80be96049289d96fc32122467c56b1d Mon Sep 17 00:00:00 2001
+From: Matt Weber <matthew.weber@rockwellcollins.com>
+Date: Mon, 16 Dec 2019 13:27:30 -0600
+Subject: [PATCH] ebtables: replace ebtables-save perl script with bash rewrite
+
+Fedora provides a bash replacement for the default ebtables-save perl
+script. Using it allows the ebtables run-time dependency on perl to
+be replaced with a runtime dependency on bash - which is lower
+overhead and more likely to be present on typical embedded systems
+already.
+
+  https://bugzilla.redhat.com/show_bug.cgi?id=746040
+  http://pkgs.fedoraproject.org/cgit/rpms/ebtables.git/tree/ebtables-save
+
+Upstream:
+https://github.com/openembedded/meta-openembedded/commit/7f723007364ba79de05447671e83d4eefb3097dc
+
+Signed-off-by: Matthew Weber <matthew.weber@rockwellcollins.com>
+---
+ ebtables-save.sh | 43 +++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 43 insertions(+)
+ create mode 100644 ebtables-save.sh
+
+diff --git a/ebtables-save.sh b/ebtables-save.sh
+new file mode 100644
+index 0000000..2d7fc4e
+--- /dev/null
++++ b/ebtables-save.sh
+@@ -0,0 +1,43 @@
++#!/bin/bash
++
++EBTABLES="/sbin/ebtables"
++
++[ -x "$EBTABLES" ] || exit 1
++
++echo "# Generated by ebtables-save v1.0 on $(date)"
++
++cnt=""
++[ "x$EBTABLES_SAVE_COUNTER" = "xyes" ] && cnt="--Lc"
++
++for table_name in $(grep -E '^ebtable_' /proc/modules | cut -f1 -d' ' | sed s/ebtable_//); do
++    table=$($EBTABLES -t $table_name -L $cnt)
++    [ $? -eq 0 ] || { echo "$table"; exit -1; }
++
++    chain=""
++    rules=""
++    while read line; do
++	[ -z "$line" ] && continue
++
++	case "$line" in 
++	    Bridge\ table:\ *)
++		echo "*${line:14}"
++		;;
++	    Bridge\ chain:\ *)
++		chain="${line:14}"
++		chain="${chain%%,*}"
++		policy="${line##*policy: }"
++		echo ":$chain $policy"
++		;;
++	    *)
++		if [ "$cnt" = "--Lc" ]; then
++		    line=${line/, pcnt \=/ -c}
++		    line=${line/-- bcnt \=/}
++		fi
++		rules="$rules-A $chain $line\n"
++		;;
++	esac
++    done <<EOF
++$table
++EOF
++    echo -e $rules
++done
+-- 
+2.17.1
+
diff --git a/package/ebtables/Config.in b/package/ebtables/Config.in
index 3f7566a607..f5fdd47927 100644
--- a/package/ebtables/Config.in
+++ b/package/ebtables/Config.in
@@ -5,3 +5,18 @@  config BR2_PACKAGE_EBTABLES
 	  Ethernet bridge frame table administration
 
 	  http://ebtables.netfilter.org/
+
+if BR2_PACKAGE_EBTABLES
+config BR2_PACKAGE_EBTABLES_UTILS_SAVE
+	bool "ebtables save"
+	depends on BR2_PACKAGE_BASH # runtime
+	help
+	  Include the save tool
+
+config BR2_PACKAGE_EBTABLES_UTILS_RESTORE
+	bool "ebtables restore"
+	depends on !BR2_STATIC_LIBS
+	help
+	  Include the restore tool
+
+endif
diff --git a/package/ebtables/ebtables.mk b/package/ebtables/ebtables.mk
index aae0c91a10..04298a531a 100644
--- a/package/ebtables/ebtables.mk
+++ b/package/ebtables/ebtables.mk
@@ -17,6 +17,20 @@  define EBTABLES_BUILD_CMDS
 		CFLAGS="$(TARGET_CFLAGS) $(EBTABLES_K64U32)" -C $(@D)
 endef
 
+ifeq ($(BR2_PACKAGE_EBTABLES_UTILS_SAVE),y)
+EBTABLES_DEPENDENCIES = bash
+define EBTABLES_INSTALL_TARGET_UTILS_SAVE
+	$(INSTALL) -m 0755 -D $(@D)/$(EBTABLES_SUBDIR)/ebtables-save.sh \
+		$(TARGET_DIR)/sbin/ebtables-save
+endef
+endif
+ifeq ($(BR2_PACKAGE_EBTABLES_UTILS_RESTORE),y)
+define EBTABLES_INSTALL_TARGET_UTILS_RESTORE
+	$(INSTALL) -m 0755 -D $(@D)/$(EBTABLES_SUBDIR)/ebtables-restore \
+		$(TARGET_DIR)/sbin/ebtables-restore
+endef
+endif
+
 ifeq ($(BR2_STATIC_LIBS),y)
 define EBTABLES_INSTALL_TARGET_CMDS
 	$(INSTALL) -m 0755 -D $(@D)/$(EBTABLES_SUBDIR)/static \
@@ -33,6 +47,8 @@  define EBTABLES_INSTALL_TARGET_CMDS
 	$(INSTALL) -m 0755 -D $(@D)/$(EBTABLES_SUBDIR)/ebtables \
 		$(TARGET_DIR)/sbin/ebtables
 	$(INSTALL) -m 0644 -D $(@D)/ethertypes $(TARGET_DIR)/etc/ethertypes
+	$(EBTABLES_INSTALL_TARGET_UTILS_RESTORE)
+	$(EBTABLES_INSTALL_TARGET_UTILS_SAVE)
 endef
 endif