package/ebtables: add option to install save/restore utils
authorDavid Owens <david.owens@rockwellcollins.com>
Mon, 16 Dec 2019 22:08:32 +0000 (16:08 -0600)
committerThomas Petazzoni <thomas.petazzoni@bootlin.com>
Sun, 22 Dec 2019 21:25:58 +0000 (22:25 +0100)
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>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
package/ebtables/0003-replace-ebtables-save-perl-script-with-bash.patch [new file with mode: 0644]
package/ebtables/Config.in
package/ebtables/ebtables.mk

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 (file)
index 0000000..687eb6a
--- /dev/null
@@ -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
+
index 3f7566a6072934432f01317e16af3706c857a586..4fc4b30dec272d5a2f9711e568af3bdf68ec7753 100644 (file)
@@ -5,3 +5,22 @@ 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
+         Install the ebtables-save tool
+
+config BR2_PACKAGE_EBTABLES_UTILS_RESTORE
+       bool "ebtables restore"
+       depends on !BR2_STATIC_LIBS
+       help
+         Install the ebtables-restore tool
+
+comment "ebtables-restore needs a toolchain w/ dynamic library"
+       depends on BR2_STATIC_LIBS
+
+endif
index 9a975cc7a15724d48942a09ed3fc74c397e3fa76..117cd5e99e3917b9e1fb461590cd2007d69c2998 100644 (file)
@@ -17,6 +17,17 @@ define EBTABLES_BUILD_CMDS
                CFLAGS="$(TARGET_CFLAGS) $(EBTABLES_K64U32)" -C $(@D)
 endef
 
+ifeq ($(BR2_PACKAGE_EBTABLES_UTILS_SAVE),y)
+define EBTABLES_INSTALL_TARGET_UTILS_SAVE
+       $(INSTALL) -m 0755 -D $(@D)/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-restore $(TARGET_DIR)/sbin/ebtables-restore
+endef
+endif
+
 ifeq ($(BR2_STATIC_LIBS),y)
 define EBTABLES_INSTALL_TARGET_CMDS
        $(INSTALL) -m 0755 -D $(@D)/static $(TARGET_DIR)/sbin/ebtables
@@ -29,6 +40,8 @@ define EBTABLES_INSTALL_TARGET_CMDS
        )
        $(INSTALL) -m 0755 -D $(@D)/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