[v1,1/4] fff-macnock: new package

Submitted by Tim Niemeyer on June 10, 2018, 12:05 p.m.

Details

Message ID 20180610120601.21151-2-tim@tn-x.org
State Accepted
Headers show

Commit Message

Tim Niemeyer June 10, 2018, 12:05 p.m.
Fixes #68

Signed-off-by: Tim Niemeyer <tim@tn-x.org>
---

Changes in v1:
- change repo URL to FreifunkFranken Repo
- macnock is started w/o hood (instead mac is used)
- use quotes
- add depends to fff-network

 src/packages/fff/fff-hoods/Makefile                |  2 +-
 src/packages/fff/fff-macnock/Makefile              | 40 ++++++++++++++
 .../fff/fff-macnock/files/etc/init.d/macnock       | 64 ++++++++++++++++++++++
 .../files/etc/uci-defaults/52-fff-macnock          |  6 ++
 4 files changed, 111 insertions(+), 1 deletion(-)
 create mode 100644 src/packages/fff/fff-macnock/Makefile
 create mode 100755 src/packages/fff/fff-macnock/files/etc/init.d/macnock
 create mode 100644 src/packages/fff/fff-macnock/files/etc/uci-defaults/52-fff-macnock

Patch hide | download patch | download mbox

diff --git a/src/packages/fff/fff-hoods/Makefile b/src/packages/fff/fff-hoods/Makefile
index f36d268..b565ac7 100644
--- a/src/packages/fff/fff-hoods/Makefile
+++ b/src/packages/fff/fff-hoods/Makefile
@@ -13,7 +13,7 @@  define Package/$(PKG_NAME)
     CATEGORY:=Freifunk
     TITLE:= Freifunk-Franken hoods
     URL:=http://www.freifunk-franken.de
-    DEPENDS:=+fff-hoodutils
+    DEPENDS:=+fff-hoodutils +fff-macnock
 endef
 
 define Package/$(PKG_NAME)/description
diff --git a/src/packages/fff/fff-macnock/Makefile b/src/packages/fff/fff-macnock/Makefile
new file mode 100644
index 0000000..359c45d
--- /dev/null
+++ b/src/packages/fff/fff-macnock/Makefile
@@ -0,0 +1,40 @@ 
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=fff-macnock
+PKG_VERSION:=0.1
+PKG_RELEASE:=1
+PKG_REV:=ffd1a64515709d75afaab0f990308fd164dc4cc6
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=https://github.com/FreifunkFranken/macnocker.git
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_VERSION:=$(PKG_REV)
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+CMAKE_OPTIONS:=-DMACNOCK_DEBUG=ON
+
+define Package/$(PKG_NAME)
+    SECTION:=base
+    CATEGORY:=Freifunk
+    TITLE:= Freifunk-Franken mac nocker
+    URL:=http://www.freifunk-franken.de
+    KCONFIG:= \
+        CONFIG_NET_EMATCH=y \
+        CONFIG_NET_EMATCH_U32=y \
+        CONFIG_NET_CLS_BASIC=y \
+        CONFIG_NET_CLS_ACT=y \
+        CONFIG_NET_ACT_GACT=y \
+        CONFIG_NET_CLS_U32=y
+    DEPENDS:=+fff-network
+endef
+
+define Package/$(PKG_NAME)/install
+	$(INSTALL_DIR) $(1)/usr/sbin
+	$(INSTALL_BIN) $(PKG_BUILD_DIR)/macnock $(1)/usr/sbin/macnock
+	$(CP) ./files/* $(1)/
+endef
+
+$(eval $(call BuildPackage,$(PKG_NAME)))
diff --git a/src/packages/fff/fff-macnock/files/etc/init.d/macnock b/src/packages/fff/fff-macnock/files/etc/init.d/macnock
new file mode 100755
index 0000000..41fc9f1
--- /dev/null
+++ b/src/packages/fff/fff-macnock/files/etc/init.d/macnock
@@ -0,0 +1,64 @@ 
+#!/bin/sh /etc/rc.common
+
+START=99
+
+USE_PROCD=1
+PROCD_DEBUG=9
+
+validate_hood_section() {
+    if [ -z "$(uci -q get network.ethmesh.ifname)" ]; then
+        # false
+        return 1
+    fi
+
+    if [ -n "$(uci -q get system.@system[0].hood)" -o -n "$(uci -q get network.mesh.macaddr)" ]; then
+        # true
+        return 0
+    fi
+
+    # false
+    return 1
+}
+
+service_triggers()
+{
+    local script name
+
+    script=$(readlink -f "$initscript")
+    name=$(basename ${script:-$initscript})
+
+    procd_add_config_trigger "config.change" "system" /etc/init.d/$name reload
+    procd_add_interface_trigger "interface.*" "ethmesh" /etc/init.d/$name reload
+    procd_add_validation validate_hood_section
+}
+
+reload_service()
+{
+    echo "Explicitly restarting macnocker"
+    stop
+    start
+}
+
+start_service() {
+    validate_hood_section || {
+        echo "validation failed"
+        return 1
+    }
+
+
+    local IFACE="$(uci -q get network.ethmesh.ifname)"
+    local HOOD="$(uci -q get system.@system[0].hood)"
+    if [ -z "$HOOD" ]; then
+        HOOD="$(uci -q get network.mesh.macaddr)"
+    fi
+
+    procd_open_instance macnock
+    procd_set_param command /usr/sbin/macnock $IFACE $HOOD
+    procd_set_param respawn 10 10 0
+    procd_set_param file /etc/config/system
+    procd_set_param netdev $IFACE
+    procd_set_param stdout 1
+    procd_set_param stderr 1
+    procd_set_param user root
+    procd_close_instance
+}
diff --git a/src/packages/fff/fff-macnock/files/etc/uci-defaults/52-fff-macnock b/src/packages/fff/fff-macnock/files/etc/uci-defaults/52-fff-macnock
new file mode 100644
index 0000000..5c0b788
--- /dev/null
+++ b/src/packages/fff/fff-macnock/files/etc/uci-defaults/52-fff-macnock
@@ -0,0 +1,6 @@ 
+#!/bin/sh
+
+if ! grep -q u32 /etc/iproute2/ematch_map;
+then
+    echo "3 u32" > /etc/iproute2/ematch_map
+fi

Comments

Adrian Schmutzler June 10, 2018, 12:19 p.m.
Den kann ich nicht reviewen, wäre aber anhand diverser Berichte damit
einverstanden.

Acked-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>

> -----Original Message-----
> From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf
> Of Tim Niemeyer
> Sent: Sonntag, 10. Juni 2018 14:06
> To: franken-dev@freifunk.net
> Subject: [PATCH v1 1/4] fff-macnock: new package
> 
> Fixes #68
> 
> Signed-off-by: Tim Niemeyer <tim@tn-x.org>
> ---
> 
> Changes in v1:
> - change repo URL to FreifunkFranken Repo
> - macnock is started w/o hood (instead mac is used)
> - use quotes
> - add depends to fff-network
> 
>  src/packages/fff/fff-hoods/Makefile                |  2 +-
>  src/packages/fff/fff-macnock/Makefile              | 40 ++++++++++++++
>  .../fff/fff-macnock/files/etc/init.d/macnock       | 64
> ++++++++++++++++++++++
>  .../files/etc/uci-defaults/52-fff-macnock          |  6 ++
>  4 files changed, 111 insertions(+), 1 deletion(-)  create mode 100644
> src/packages/fff/fff-macnock/Makefile
>  create mode 100755 src/packages/fff/fff-macnock/files/etc/init.d/macnock
>  create mode 100644
src/packages/fff/fff-macnock/files/etc/uci-defaults/52-
> fff-macnock
> 
> diff --git a/src/packages/fff/fff-hoods/Makefile b/src/packages/fff/fff-
> hoods/Makefile
> index f36d268..b565ac7 100644
> --- a/src/packages/fff/fff-hoods/Makefile
> +++ b/src/packages/fff/fff-hoods/Makefile
> @@ -13,7 +13,7 @@ define Package/$(PKG_NAME)
>      CATEGORY:=Freifunk
>      TITLE:= Freifunk-Franken hoods
>      URL:=http://www.freifunk-franken.de
> -    DEPENDS:=+fff-hoodutils
> +    DEPENDS:=+fff-hoodutils +fff-macnock
>  endef
> 
>  define Package/$(PKG_NAME)/description
> diff --git a/src/packages/fff/fff-macnock/Makefile b/src/packages/fff/fff-
> macnock/Makefile
> new file mode 100644
> index 0000000..359c45d
> --- /dev/null
> +++ b/src/packages/fff/fff-macnock/Makefile
> @@ -0,0 +1,40 @@
> +include $(TOPDIR)/rules.mk
> +
> +PKG_NAME:=fff-macnock
> +PKG_VERSION:=0.1
> +PKG_RELEASE:=1
> +PKG_REV:=ffd1a64515709d75afaab0f990308fd164dc4cc6
> +
> +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
> +PKG_SOURCE_URL:=https://github.com/FreifunkFranken/macnocker.git
> +PKG_SOURCE_PROTO:=git
> +PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
> +PKG_SOURCE_VERSION:=$(PKG_REV)
> +
> +include $(INCLUDE_DIR)/package.mk
> +include $(INCLUDE_DIR)/cmake.mk
> +
> +CMAKE_OPTIONS:=-DMACNOCK_DEBUG=ON
> +
> +define Package/$(PKG_NAME)
> +    SECTION:=base
> +    CATEGORY:=Freifunk
> +    TITLE:= Freifunk-Franken mac nocker
> +    URL:=http://www.freifunk-franken.de
> +    KCONFIG:= \
> +        CONFIG_NET_EMATCH=y \
> +        CONFIG_NET_EMATCH_U32=y \
> +        CONFIG_NET_CLS_BASIC=y \
> +        CONFIG_NET_CLS_ACT=y \
> +        CONFIG_NET_ACT_GACT=y \
> +        CONFIG_NET_CLS_U32=y
> +    DEPENDS:=+fff-network
> +endef
> +
> +define Package/$(PKG_NAME)/install
> +	$(INSTALL_DIR) $(1)/usr/sbin
> +	$(INSTALL_BIN) $(PKG_BUILD_DIR)/macnock $(1)/usr/sbin/macnock
> +	$(CP) ./files/* $(1)/
> +endef
> +
> +$(eval $(call BuildPackage,$(PKG_NAME)))
> diff --git a/src/packages/fff/fff-macnock/files/etc/init.d/macnock
> b/src/packages/fff/fff-macnock/files/etc/init.d/macnock
> new file mode 100755
> index 0000000..41fc9f1
> --- /dev/null
> +++ b/src/packages/fff/fff-macnock/files/etc/init.d/macnock
> @@ -0,0 +1,64 @@
> +#!/bin/sh /etc/rc.common
> +
> +START=99
> +
> +USE_PROCD=1
> +PROCD_DEBUG=9
> +
> +validate_hood_section() {
> +    if [ -z "$(uci -q get network.ethmesh.ifname)" ]; then
> +        # false
> +        return 1
> +    fi
> +
> +    if [ -n "$(uci -q get system.@system[0].hood)" -o -n "$(uci -q get
> network.mesh.macaddr)" ]; then
> +        # true
> +        return 0
> +    fi
> +
> +    # false
> +    return 1
> +}
> +
> +service_triggers()
> +{
> +    local script name
> +
> +    script=$(readlink -f "$initscript")
> +    name=$(basename ${script:-$initscript})
> +
> +    procd_add_config_trigger "config.change" "system" /etc/init.d/$name
> reload
> +    procd_add_interface_trigger "interface.*" "ethmesh" /etc/init.d/$name
> reload
> +    procd_add_validation validate_hood_section }
> +
> +reload_service()
> +{
> +    echo "Explicitly restarting macnocker"
> +    stop
> +    start
> +}
> +
> +start_service() {
> +    validate_hood_section || {
> +        echo "validation failed"
> +        return 1
> +    }
> +
> +
> +    local IFACE="$(uci -q get network.ethmesh.ifname)"
> +    local HOOD="$(uci -q get system.@system[0].hood)"
> +    if [ -z "$HOOD" ]; then
> +        HOOD="$(uci -q get network.mesh.macaddr)"
> +    fi
> +
> +    procd_open_instance macnock
> +    procd_set_param command /usr/sbin/macnock $IFACE $HOOD
> +    procd_set_param respawn 10 10 0
> +    procd_set_param file /etc/config/system
> +    procd_set_param netdev $IFACE
> +    procd_set_param stdout 1
> +    procd_set_param stderr 1
> +    procd_set_param user root
> +    procd_close_instance
> +}
> diff --git a/src/packages/fff/fff-macnock/files/etc/uci-defaults/52-fff-
> macnock b/src/packages/fff/fff-macnock/files/etc/uci-defaults/52-fff-
> macnock
> new file mode 100644
> index 0000000..5c0b788
> --- /dev/null
> +++ b/src/packages/fff/fff-macnock/files/etc/uci-defaults/52-fff-macnock
> @@ -0,0 +1,6 @@
> +#!/bin/sh
> +
> +if ! grep -q u32 /etc/iproute2/ematch_map; then
> +    echo "3 u32" > /etc/iproute2/ematch_map fi
> --
> 2.11.0
Robert Langhammer June 11, 2018, 4:22 p.m.
Hallo Tim,

moechtest du das PROCD_DEBUG=9 drin lassen?

Die 9 hat mich erstmal leicht irritiert. Soweit ich das dann verstanden
habe wird nur geprueft, ob die Variable Inhalt hat und nicht der Wert.
procd.sh 59:    [ -n "$PROCD_DEBUG" ] && json_dump >&2

Das kann aber auch so bleiben.

Reviewed-by: Robert Langhammer <rlanghammer@web.de>

gilt natuerlich nicht fuer den macnocker. Das muss jemand machen, der C kann.

Am 10.06.2018 um 14:05 schrieb Tim Niemeyer:
> Fixes #68
>
> Signed-off-by: Tim Niemeyer <tim@tn-x.org>
> ---
>
> Changes in v1:
> - change repo URL to FreifunkFranken Repo
> - macnock is started w/o hood (instead mac is used)
> - use quotes
> - add depends to fff-network
>
>  src/packages/fff/fff-hoods/Makefile                |  2 +-
>  src/packages/fff/fff-macnock/Makefile              | 40 ++++++++++++++
>  .../fff/fff-macnock/files/etc/init.d/macnock       | 64 ++++++++++++++++++++++
>  .../files/etc/uci-defaults/52-fff-macnock          |  6 ++
>  4 files changed, 111 insertions(+), 1 deletion(-)
>  create mode 100644 src/packages/fff/fff-macnock/Makefile
>  create mode 100755 src/packages/fff/fff-macnock/files/etc/init.d/macnock
>  create mode 100644 src/packages/fff/fff-macnock/files/etc/uci-defaults/52-fff-macnock
>
> diff --git a/src/packages/fff/fff-hoods/Makefile b/src/packages/fff/fff-hoods/Makefile
> index f36d268..b565ac7 100644
> --- a/src/packages/fff/fff-hoods/Makefile
> +++ b/src/packages/fff/fff-hoods/Makefile
> @@ -13,7 +13,7 @@ define Package/$(PKG_NAME)
>      CATEGORY:=Freifunk
>      TITLE:= Freifunk-Franken hoods
>      URL:=http://www.freifunk-franken.de
> -    DEPENDS:=+fff-hoodutils
> +    DEPENDS:=+fff-hoodutils +fff-macnock
>  endef
>  
>  define Package/$(PKG_NAME)/description
> diff --git a/src/packages/fff/fff-macnock/Makefile b/src/packages/fff/fff-macnock/Makefile
> new file mode 100644
> index 0000000..359c45d
> --- /dev/null
> +++ b/src/packages/fff/fff-macnock/Makefile
> @@ -0,0 +1,40 @@
> +include $(TOPDIR)/rules.mk
> +
> +PKG_NAME:=fff-macnock
> +PKG_VERSION:=0.1
> +PKG_RELEASE:=1
> +PKG_REV:=ffd1a64515709d75afaab0f990308fd164dc4cc6
> +
> +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
> +PKG_SOURCE_URL:=https://github.com/FreifunkFranken/macnocker.git
> +PKG_SOURCE_PROTO:=git
> +PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
> +PKG_SOURCE_VERSION:=$(PKG_REV)
> +
> +include $(INCLUDE_DIR)/package.mk
> +include $(INCLUDE_DIR)/cmake.mk
> +
> +CMAKE_OPTIONS:=-DMACNOCK_DEBUG=ON
> +
> +define Package/$(PKG_NAME)
> +    SECTION:=base
> +    CATEGORY:=Freifunk
> +    TITLE:= Freifunk-Franken mac nocker
> +    URL:=http://www.freifunk-franken.de
> +    KCONFIG:= \
> +        CONFIG_NET_EMATCH=y \
> +        CONFIG_NET_EMATCH_U32=y \
> +        CONFIG_NET_CLS_BASIC=y \
> +        CONFIG_NET_CLS_ACT=y \
> +        CONFIG_NET_ACT_GACT=y \
> +        CONFIG_NET_CLS_U32=y
> +    DEPENDS:=+fff-network
> +endef
> +
> +define Package/$(PKG_NAME)/install
> +	$(INSTALL_DIR) $(1)/usr/sbin
> +	$(INSTALL_BIN) $(PKG_BUILD_DIR)/macnock $(1)/usr/sbin/macnock
> +	$(CP) ./files/* $(1)/
> +endef
> +
> +$(eval $(call BuildPackage,$(PKG_NAME)))
> diff --git a/src/packages/fff/fff-macnock/files/etc/init.d/macnock b/src/packages/fff/fff-macnock/files/etc/init.d/macnock
> new file mode 100755
> index 0000000..41fc9f1
> --- /dev/null
> +++ b/src/packages/fff/fff-macnock/files/etc/init.d/macnock
> @@ -0,0 +1,64 @@
> +#!/bin/sh /etc/rc.common
> +
> +START=99
> +
> +USE_PROCD=1
> +PROCD_DEBUG=9
> +
> +validate_hood_section() {
> +    if [ -z "$(uci -q get network.ethmesh.ifname)" ]; then
> +        # false
> +        return 1
> +    fi
> +
> +    if [ -n "$(uci -q get system.@system[0].hood)" -o -n "$(uci -q get network.mesh.macaddr)" ]; then
> +        # true
> +        return 0
> +    fi
> +
> +    # false
> +    return 1
> +}
> +
> +service_triggers()
> +{
> +    local script name
> +
> +    script=$(readlink -f "$initscript")
> +    name=$(basename ${script:-$initscript})
> +
> +    procd_add_config_trigger "config.change" "system" /etc/init.d/$name reload
> +    procd_add_interface_trigger "interface.*" "ethmesh" /etc/init.d/$name reload
> +    procd_add_validation validate_hood_section
> +}
> +
> +reload_service()
> +{
> +    echo "Explicitly restarting macnocker"
> +    stop
> +    start
> +}
> +
> +start_service() {
> +    validate_hood_section || {
> +        echo "validation failed"
> +        return 1
> +    }
> +
> +
> +    local IFACE="$(uci -q get network.ethmesh.ifname)"
> +    local HOOD="$(uci -q get system.@system[0].hood)"
> +    if [ -z "$HOOD" ]; then
> +        HOOD="$(uci -q get network.mesh.macaddr)"
> +    fi
> +
> +    procd_open_instance macnock
> +    procd_set_param command /usr/sbin/macnock $IFACE $HOOD
> +    procd_set_param respawn 10 10 0
> +    procd_set_param file /etc/config/system
> +    procd_set_param netdev $IFACE
> +    procd_set_param stdout 1
> +    procd_set_param stderr 1
> +    procd_set_param user root
> +    procd_close_instance
> +}
> diff --git a/src/packages/fff/fff-macnock/files/etc/uci-defaults/52-fff-macnock b/src/packages/fff/fff-macnock/files/etc/uci-defaults/52-fff-macnock
> new file mode 100644
> index 0000000..5c0b788
> --- /dev/null
> +++ b/src/packages/fff/fff-macnock/files/etc/uci-defaults/52-fff-macnock
> @@ -0,0 +1,6 @@
> +#!/bin/sh
> +
> +if ! grep -q u32 /etc/iproute2/ematch_map;
> +then
> +    echo "3 u32" > /etc/iproute2/ematch_map
> +fi
Tim Niemeyer June 11, 2018, 4:45 p.m.
Am Montag, den 11.06.2018, 18:22 +0200 schrieb robert:
> Hallo Tim,
> moechtest du das PROCD_DEBUG=9 drin lassen? 
Ja, wollte ich erstmal.

Im MacNocker ist auch noch n Haufen Debug-Output drin. Für den
(unwahrscheinlichen) Fall, dass es doch Probleme gibt, sollte man mMn
was sehen können.

Tim

> Die 9 hat mich erstmal leicht irritiert. Soweit ich das dann
> verstanden habe wird nur geprueft, ob die Variable Inhalt hat und
> nicht der Wert. procd.sh 59:    [ -n "$PROCD_DEBUG" ] && json_dump
> >&2
> Das kann aber auch so bleiben.
> Reviewed-by: Robert Langhammer <rlanghammer@web.de>
> 
> gilt natuerlich nicht fuer den macnocker. Das muss jemand machen, der
> C kann.
> Am 10.06.2018 um 14:05 schrieb Tim Niemeyer:
> > Fixes #68
> > 
> > Signed-off-by: Tim Niemeyer <tim@tn-x.org>
> > ---
> > 
> > Changes in v1:
> > - change repo URL to FreifunkFranken Repo
> > - macnock is started w/o hood (instead mac is used)
> > - use quotes
> > - add depends to fff-network
> > 
> >  src/packages/fff/fff-hoods/Makefile                |  2 +-
> >  src/packages/fff/fff-macnock/Makefile              | 40
> > ++++++++++++++
> >  .../fff/fff-macnock/files/etc/init.d/macnock       | 64
> > ++++++++++++++++++++++
> >  .../files/etc/uci-defaults/52-fff-macnock          |  6 ++
> >  4 files changed, 111 insertions(+), 1 deletion(-)
> >  create mode 100644 src/packages/fff/fff-macnock/Makefile
> >  create mode 100755 src/packages/fff/fff-
> > macnock/files/etc/init.d/macnock
> >  create mode 100644 src/packages/fff/fff-macnock/files/etc/uci-
> > defaults/52-fff-macnock
> > 
> > diff --git a/src/packages/fff/fff-hoods/Makefile
> > b/src/packages/fff/fff-hoods/Makefile
> > index f36d268..b565ac7 100644
> > --- a/src/packages/fff/fff-hoods/Makefile
> > +++ b/src/packages/fff/fff-hoods/Makefile
> > @@ -13,7 +13,7 @@ define Package/$(PKG_NAME)
> >      CATEGORY:=Freifunk
> >      TITLE:= Freifunk-Franken hoods
> >      URL:=http://www.freifunk-franken.de
> > -    DEPENDS:=+fff-hoodutils
> > +    DEPENDS:=+fff-hoodutils +fff-macnock
> >  endef
> >  
> >  define Package/$(PKG_NAME)/description
> > diff --git a/src/packages/fff/fff-macnock/Makefile
> > b/src/packages/fff/fff-macnock/Makefile
> > new file mode 100644
> > index 0000000..359c45d
> > --- /dev/null
> > +++ b/src/packages/fff/fff-macnock/Makefile
> > @@ -0,0 +1,40 @@
> > +include $(TOPDIR)/rules.mk
> > +
> > +PKG_NAME:=fff-macnock
> > +PKG_VERSION:=0.1
> > +PKG_RELEASE:=1
> > +PKG_REV:=ffd1a64515709d75afaab0f990308fd164dc4cc6
> > +
> > +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
> > +PKG_SOURCE_URL:=https://github.com/FreifunkFranken/macnocker.git
> > +PKG_SOURCE_PROTO:=git
> > +PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
> > +PKG_SOURCE_VERSION:=$(PKG_REV)
> > +
> > +include $(INCLUDE_DIR)/package.mk
> > +include $(INCLUDE_DIR)/cmake.mk
> > +
> > +CMAKE_OPTIONS:=-DMACNOCK_DEBUG=ON
> > +
> > +define Package/$(PKG_NAME)
> > +    SECTION:=base
> > +    CATEGORY:=Freifunk
> > +    TITLE:= Freifunk-Franken mac nocker
> > +    URL:=http://www.freifunk-franken.de
> > +    KCONFIG:= \
> > +        CONFIG_NET_EMATCH=y \
> > +        CONFIG_NET_EMATCH_U32=y \
> > +        CONFIG_NET_CLS_BASIC=y \
> > +        CONFIG_NET_CLS_ACT=y \
> > +        CONFIG_NET_ACT_GACT=y \
> > +        CONFIG_NET_CLS_U32=y
> > +    DEPENDS:=+fff-network
> > +endef
> > +
> > +define Package/$(PKG_NAME)/install
> > +	$(INSTALL_DIR) $(1)/usr/sbin
> > +	$(INSTALL_BIN) $(PKG_BUILD_DIR)/macnock
> > $(1)/usr/sbin/macnock
> > +	$(CP) ./files/* $(1)/
> > +endef
> > +
> > +$(eval $(call BuildPackage,$(PKG_NAME)))
> > diff --git a/src/packages/fff/fff-macnock/files/etc/init.d/macnock
> > b/src/packages/fff/fff-macnock/files/etc/init.d/macnock
> > new file mode 100755
> > index 0000000..41fc9f1
> > --- /dev/null
> > +++ b/src/packages/fff/fff-macnock/files/etc/init.d/macnock
> > @@ -0,0 +1,64 @@
> > +#!/bin/sh /etc/rc.common
> > +
> > +START=99
> > +
> > +USE_PROCD=1
> > +PROCD_DEBUG=9
> > +
> > +validate_hood_section() {
> > +    if [ -z "$(uci -q get network.ethmesh.ifname)" ]; then
> > +        # false
> > +        return 1
> > +    fi
> > +
> > +    if [ -n "$(uci -q get system.@system[0].hood)" -o -n "$(uci -q
> > get network.mesh.macaddr)" ]; then
> > +        # true
> > +        return 0
> > +    fi
> > +
> > +    # false
> > +    return 1
> > +}
> > +
> > +service_triggers()
> > +{
> > +    local script name
> > +
> > +    script=$(readlink -f "$initscript")
> > +    name=$(basename ${script:-$initscript})
> > +
> > +    procd_add_config_trigger "config.change" "system"
> > /etc/init.d/$name reload
> > +    procd_add_interface_trigger "interface.*" "ethmesh"
> > /etc/init.d/$name reload
> > +    procd_add_validation validate_hood_section
> > +}
> > +
> > +reload_service()
> > +{
> > +    echo "Explicitly restarting macnocker"
> > +    stop
> > +    start
> > +}
> > +
> > +start_service() {
> > +    validate_hood_section || {
> > +        echo "validation failed"
> > +        return 1
> > +    }
> > +
> > +
> > +    local IFACE="$(uci -q get network.ethmesh.ifname)"
> > +    local HOOD="$(uci -q get system.@system[0].hood)"
> > +    if [ -z "$HOOD" ]; then
> > +        HOOD="$(uci -q get network.mesh.macaddr)"
> > +    fi
> > +
> > +    procd_open_instance macnock
> > +    procd_set_param command /usr/sbin/macnock $IFACE $HOOD
> > +    procd_set_param respawn 10 10 0
> > +    procd_set_param file /etc/config/system
> > +    procd_set_param netdev $IFACE
> > +    procd_set_param stdout 1
> > +    procd_set_param stderr 1
> > +    procd_set_param user root
> > +    procd_close_instance
> > +}
> > diff --git a/src/packages/fff/fff-macnock/files/etc/uci-
> > defaults/52-fff-macnock b/src/packages/fff/fff-
> > macnock/files/etc/uci-defaults/52-fff-macnock
> > new file mode 100644
> > index 0000000..5c0b788
> > --- /dev/null
> > +++ b/src/packages/fff/fff-macnock/files/etc/uci-defaults/52-fff-
> > macnock
> > @@ -0,0 +1,6 @@
> > +#!/bin/sh
> > +
> > +if ! grep -q u32 /etc/iproute2/ematch_map;
> > +then
> > +    echo "3 u32" > /etc/iproute2/ematch_map
> > +fi
>