[SQUASHED PATCH v18 4/8] Add fff-hoods

mail at adrianschmutzler.de mail at adrianschmutzler.de
So Okt 15 13:34:25 CEST 2017


Interessanter Nebenfund:

Wenn ein Meshrouter auf dem falschen Port sucht, kriegt er keine /tmp/keydings und dann geht einiges kaputt.

Man sollte die nachgelagerten Sachen (Zeitserver, Updatepath, usw.) auf die /www/public/keydings ändern. Ist für mich aber kein Grund, das Applien aufzuhalten.

Grüße

Adrian

> -----Original Message-----
> From: franken-dev [mailto:franken-dev-bounces at freifunk.net] On Behalf
> Of Christian Dresel
> Sent: Sonntag, 15. Oktober 2017 13:13
> To: robert <rlanghammer at web.de>; franken-dev at freifunk.net
> Subject: Re: [SQUASHED PATCH v18 4/8] Add fff-hoods
> 
> hi
> 
> weil Port 80 schon für normales http auf den Servern "reserviert" ist, daher
> war die Idee da nen anderen Port zu nehmen und einen "Minihttpserver"
> o.ä. auf den Port lauschen zu lassen, der exakt auf das Interface (und nicht
> IP) hört. Damit man sich da nicht mit einen "normalen" Webserver in die
> Quere kommt, eben ein anderer Port.
> 
> mfg
> 
> Christian
> 
> On 15.10.2017 13:10, robert wrote:
> > Hi,
> >
> > ich verstehe nicht ganz, warum du den Port fest in der Firmware
> moechtest.
> > Welchen Vorteil haette das gegenueber Standartport 80?
> > Wenn mehrere Hoods auf nem Gateway sind, muss man sowieso tricksen.
> z.B.
> > Port umbiegen und Vhosts auf andere Ports legen. Das muesste man mit
> > einem anderen Port auch machen.
> > Robert
> >
> >
> > Am 15.10.2017 um 11:43 schrieb Christian Dresel:
> >> hi
> >>
> >> wie schon angemerkt würde ich gerne von vornerein noch den Port
> >> festlegen auf welchen vom Gateway die File geholt wird, siehe inline:
> >>
> >> On 14.10.2017 22:38, Tim Niemeyer wrote:
> >>> From: Christian Dresel <fff at chrisi01.de>
> >>>
> >>> This package connects to keyxchangev2
> >>>
> >>> Signed-off-by: Christian Dresel <fff at chrisi01.de>
> >>> Signed-off-by: Jan Kraus <mayosemmel at gmail.com>
> >>> Signed-off-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>
> >>>
> >>> Signed-off-by: Tim Niemeyer <tim at tn-x.org>
> >>> ---
> >>>
> >>> Changes in v18:
> >>> - Initialize variable radio
> >>> - Suppress error when deleting non-existent files
> >>>
> >>> Changes in v17:
> >>> - Fix resetting interfaces during connection drop
> >>> - Remove exit before vpn-select
> >>> - Use function for conditional wifiAddPhy
> >>>
> >>> Changes in v16:
> >>> - Open configap for both 2.4 and 5 GHz
> >>>
> >>> Changes in v15:
> >>> - Fixed 5 GHz channel
> >>> - Only start vpn-select if router has internet
> >>> - Put ping into function since it is used twice
> >>> - Check for started in micrond to prevent race condition
> >>> - Moved copy of keyxchangev2data to the end
> >>>
> >>> Changes in v14:
> >>> - Tested, working Inet+mesh:
> >>> - Fixed stderr redirect
> >>> - Added call of configurehood to rc.local, so it is triggered if wan does not
> come up. To prevent race condition, hotplug.d is removed.
> >>> - Added wifi call to configAP setup
> >>> - Remove hiddenap flag after successful setup
> >>> - Added -q to uci calls
> >>> - Added network interface configSta
> >>> - Substitute timestamp to enable SHA comparison
> >>> - Removed started-check from vpn-select
> >>>
> >>> Changes in v13: None
> >>> Changes in v12:
> >>> - Removed obsolete hostname
> >>>
> >>> Changes in v11:
> >>> - Changed isGatewayAvailable to return integers (bool is not valid)
> >>> and removed brackets for evaluations
> >>> - Added variables for channels as they are used twice
> >>> - Fixed $radio not set at the beginning (WORKAROUND!)
> >>> - Changed OpenWRT to LEDE
> >>> - Correctly reset json_select before reuse
> >>> - Some tidying-up of comments and quotes
> >>> - Fixed vpn loop so it works for more than one host (TESTED)
> >>> - Fixed "else" if no file received
> >>>
> >>> Changes in v10:
> >>> - Minor code fixes
> >>> - Added fff-hoods to fff-base Makefile
> >>> - Removed trailing whitespaces and harmonized tabs
> >>> - Fixed some comments spelling
> >>> - Added mac for hostname rewrite
> >>> - Removed redundant check for /tmp/keyxchangev2data
> >>>
> >>> Changes in v9:
> >>> - rebase onto 20170918-beta
> >>>
> >>> Changes in v8:
> >>> - rebase onto 20170918-beta
> >>>
> >>> Changes in v7: None
> >>> Changes in v6:
> >>> - !!UNTESTED!!
> >>> - fix hidden station v6
> >>> - fix -n to -f if
> >>> - Add function to check for a gateway and use this
> >>> - remove /etc/community.cfg and variables
> >>> - send fewer infos to keyxchangev2
> >>> - add a check if /tmp/keyxchangev2 not downloadable and edit a bit
> >>> on the wgets
> >>> - change the position from json_load and do this only 1 times
> >>> - !!UNTESTED!!
> >>> - delete keyxchangev2data at start of the script
> >>> - do only things with keyxchangev2data if available
> >>> - change keyxchangev2 url
> >>>
> >>> Changes in v5:
> >>> - clean tabstops
> >>> - !!UNTESTED!!
> >>> - change hidden AP ip to locallink
> >>> - Open hidden AP after more checks
> >>> - Load json File from Gateway if Gateway in Batman in Range
> >>>
> >>> Changes in v4: None
> >>> Changes in v3: None
> >>> Changes in v2:
> >>> - clean tabstops
> >>> - move the json vpn out of the if because we need this after reboot
> >>>
> >>>  bsp/default/root_file_system/etc/rc.local          |   4 +
> >>>  src/packages/fff/fff-hoods/Makefile                |  39 ++++
> >>>  .../fff/fff-hoods/files/usr/lib/micron.d/fff-hoods |   1 +
> >>>  .../fff/fff-hoods/files/usr/sbin/configurehood     | 206
> +++++++++++++++++++++
> >>>  .../fff/fff-vpn-select/files/usr/sbin/vpn-select   |   2 -
> >>>  .../fff-wireless/files/lib/functions/fff/wireless  |  24 +++
> >>>  src/packages/fff/fff/Makefile                      |   3 +-
> >>>  7 files changed, 276 insertions(+), 3 deletions(-)  create mode
> >>> 100644 src/packages/fff/fff-hoods/Makefile
> >>>  create mode 100644
> >>> src/packages/fff/fff-hoods/files/usr/lib/micron.d/fff-hoods
> >>>  create mode 100755
> >>> src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> >>>
> >>> diff --git a/bsp/default/root_file_system/etc/rc.local
> >>> b/bsp/default/root_file_system/etc/rc.local
> >>> index bd972fb..59042c3 100755
> >>> --- a/bsp/default/root_file_system/etc/rc.local
> >>> +++ b/bsp/default/root_file_system/etc/rc.local
> >>> @@ -4,6 +4,10 @@
> >>>
> >>>  /usr/sbin/configurenetwork
> >>>
> >>> +sleep 3
> >>> +
> >>> +/usr/sbin/configurehood
> >>> +
> >>>  touch /tmp/started
> >>>
> >>>  exit 0
> >>> diff --git a/src/packages/fff/fff-hoods/Makefile
> >>> b/src/packages/fff/fff-hoods/Makefile
> >>> new file mode 100644
> >>> index 0000000..f85178d
> >>> --- /dev/null
> >>> +++ b/src/packages/fff/fff-hoods/Makefile
> >>> @@ -0,0 +1,39 @@
> >>> +include $(TOPDIR)/rules.mk
> >>> +
> >>> +PKG_NAME:=fff-hoods
> >>> +PKG_VERSION:=0.0.1
> >>> +PKG_RELEASE:=1
> >>> +
> >>> +PKG_BUILD_DIR:=$(BUILD_DIR)/fff-hoods
> >>> +
> >>> +include $(INCLUDE_DIR)/package.mk
> >>> +
> >>> +define Package/fff-hoods
> >>> +    SECTION:=base
> >>> +    CATEGORY:=Freifunk
> >>> +    TITLE:= Freifunk-Franken hoods
> >>> +    URL:=http://www.freifunk-franken.de
> >>> +    DEPENDS:=+fff-network
> >>> +endef
> >>> +
> >>> +define Package/fff-hoods/description
> >>> +    This package load and configures the current hood endef
> >>> +
> >>> +define Build/Prepare
> >>> +	echo "all: " > $(PKG_BUILD_DIR)/Makefile endef
> >>> +
> >>> +define Build/Configure
> >>> +	# nothing
> >>> +endef
> >>> +
> >>> +define Build/Compile
> >>> +	# nothing
> >>> +endef
> >>> +
> >>> +define Package/fff-hoods/install
> >>> +	$(CP) ./files/* $(1)/
> >>> +endef
> >>> +
> >>> +$(eval $(call BuildPackage,fff-hoods))
> >>> diff --git
> >>> a/src/packages/fff/fff-hoods/files/usr/lib/micron.d/fff-hoods
> >>> b/src/packages/fff/fff-hoods/files/usr/lib/micron.d/fff-hoods
> >>> new file mode 100644
> >>> index 0000000..39e800e
> >>> --- /dev/null
> >>> +++ b/src/packages/fff/fff-hoods/files/usr/lib/micron.d/fff-hoods
> >>> @@ -0,0 +1 @@
> >>> +*/5 * * * * [ -f /tmp/started ] && /usr/sbin/configurehood
> >>> diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> >>> b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> >>> new file mode 100755
> >>> index 0000000..d078d6a
> >>> --- /dev/null
> >>> +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> >>> @@ -0,0 +1,206 @@
> >>> +#!/bin/sh
> >>> +
> >>> +. /usr/share/libubox/jshn.sh
> >>> +. /lib/functions/fff/wireless
> >>> +
> >>> +rm -f /tmp/keyxchangev2data
> >>> +
> >>> +# Gatewaycheck function
> >>> +isGatewayAvailable() {
> >>> +	if [ "$(batctl gwl | wc -l)" -gt 2 ]; then
> >>> +		return 0
> >>> +	else
> >>> +		return 1
> >>> +	fi
> >>> +}
> >>> +
> >>> +# Ping test
> >>> +hasInternet() {
> >>> +	test_ipv4_host1="keyserver.freifunk-franken.de" # Freifunk-
> Franken keyserver
> >>> +	test_ipv4_host2="8.8.8.8"        # Google DNS
> >>> +	test_ipv6_host1="heise.de"       # heise Zeitschriftenverlag
> >>> +	if ping -w5 -c3 "$test_ipv4_host1" &>/dev/null ||
> >>> +		ping -w5 -c3 "$test_ipv4_host2" &>/dev/null ||
> >>> +		ping6 -w5 -c3 "$test_ipv6_host1" &>/dev/null ; then
> >>> +		return 0
> >>> +	fi
> >>> +	return 1
> >>> +}
> >>> +
> >>> +chan2ghz="1"
> >>> +chan5ghz="36"
> >>> +
> >>> +# Hidden AP check
> >>> +
> >>> +if [ -f /tmp/hiddenapflag ]; then
> >>> +	if isGatewayAvailable ; then
> >>> +
> >>> +		uci set network.configap=interface
> >>> +		uci set network.configap.proto='static'
> >>> +		uci set network.configap.ip6addr='fe80::1/64'
> >>> +		uci commit network
> >>> +
> >>> +		for radio in $(uci show wireless | sed -n 's,.*\.\([a-z0-
> 9]*\)=wifi-device,\1,p'); do
> >>> +			if ! wifiAddAP "$radio" "config.franken.freifunk.net"
> "configap" "configap" "1"; then
> >>> +				echo "Can't add Config interface on $radio."
> >>> +				exit 1
> >>> +			fi
> >>> +		done
> >>> +
> >>> +		wifi
> >>> +	fi
> >>> +	rm /tmp/hiddenapflag
> >>> +fi
> >>> +
> >>> +lat=$(uci -q get system. at system[0].latitude) long=$(uci -q get
> >>> +system. at system[0].longitude)
> >>> +
> >>> +# if we have Internet, we download the Hoodfile from the
> >>> +keyxchangev2 if hasInternet ; then
> >>> +	wget -T15 -t5 "http://keyserver.freifunk-
> franken.de/v2/?lat=$lat&long=$long" -O /tmp/keyxchangev2data
> >>> +	#if no Internet, we connect to the hidden AP and download the file
> >>> +from another Node in range else
> >>> +	# connect to wireless hidden ap here and download the json File
> from the nearest router
> >>> +	# Only do that, when we have no gateway in range. If the
> Uplinkrouter changed the hood, we lost the GW and do this automatically
> again, I think! Nice idea?
> >>> +	if ! isGatewayAvailable ; then
> >>> +		#now we haven't a gateway in Range, we search for a hidden
> AP to get a keyxchangev2data file!
> >>> +		#first we delete all wifi settings
> >>> +		rm -f /www/public/keyxchangev2data # delete this, so
> interfaces
> >>> +are recreated if reconnect with unchanged hood file takes place
> >>> +
> >>> +		if ! wifiDelAll; then
> >>> +			echo "Can't delete current wifi setup"
> >>> +			exit 1
> >>> +		fi
> >>> +		#now we look for phy and add this
> >>> +		for phy in $(iw phy | awk '/^Wiphy/{ print $2 }'); do
> >>> +			radio="$(wifiAddPhyCond "$phy" "2" "$chan2ghz")"
> >>> +			radio5="$(wifiAddPhyCond "$phy" "5" "$chan5ghz")"
> >>> +			[ -n "$radio5" ] && radio="$radio5"
> >>> +
> >>> +			#and here we add the station
> >>> +			if ! wifiAddSta "$radio" "config.franken.freifunk.net"
> "configSta"; then
> >>> +				echo "Can't add Sta interface on $radio."
> >>> +				exit 1
> >>> +			else
> >>> +				uci -q set network.configSta=interface
> >>> +				uci -q set network.configSta.proto='static'
> >>> +				uci -q commit network
> >>> +			fi
> >>> +		done
> >>> +
> >>> +		wifi
> >>> +		# wait a moment to start the interface
> >>> +		sleep 10;
> >>> +		# and here we can download the Hoodfile from the other
> node
> >>> +		wget -T15 -t5 "http://[fe80::1%w2sta]/keyxchangev2data" -O
> /tmp/keyxchangev2data
> >>> +	else
> >>> +		echo "We have a Gateway in Range, we load the
> keyxchangev2data from fe80::1"
> >>> +		wget -T15 -t5 "http://[fe80::1%br-mesh]/keyxchangev2data"
> -O
> >>> +/tmp/keyxchangev2data
> >>
> >> wget -T15 -t5 "http://[fe80::1%br-mesh]:2342/keyxchangev2data" -O
> >> /tmp/keyxchangev2data
> >>
> >> Testen ist grad etwas schwer, da dies nur Meshrouter tun und ich da
> >> aktuell keinen in Betrieb habe, reicht dir folgendes als Test aus?
> >>
> >> root at Test:~# wget -T15 -t5
> >> "http://[fe80::1%br-mesh]:2342/keyxchangev2data" -O
> >> /tmp/keyxchangev2dataTEST Connecting to [fe80::1%br-mesh]:2342
> >> ([fe80::1%br-mesh]:2342) root at Test:~# cat /tmp/keyxchangev2dataTEST
> >> {"version":1,"network":{"ula_prefix":"fd43:5602:29bd:4:\/64"},"vpn":[
> >> {"name":"vm3fffgwcd1","protocol":"fastd","address":"144.76.70.186","p
> >>
> ort":"10004","key":"373cf6dca701a8b1516b816a13c91dc9df29ac5a822d12331
> >> b503982d655399b"}],"hood":{"name":"FuerthV2","essid":"fuerth.freifunk
> >> ","mesh_bssid":"ca:ff:ee:ba:be:02","mesh_essid":"batman.fuerth.freifu
> >> nk","mesh_id":"mesh.fuerth.freifunk","protocol":"batman-adv-v15","cha
> >>
> nnel2":"13","mode2":"ht20","mesh_type2":"802.11s","channel5":"40","mo
> >> de5":"ht20","mesh_type5":"802.11s","upgrade_path":"","ntp_ip":"fd43:5
> >> 602:29bd:ffff::1","timestamp":"1507655035","location":{"lat":"49.4814
> >> ","lon":"10.966"}}}root at Test:~#
> >>
> >> root at Test:~#
> >>
> >> mfg
> >>
> >> Christian
> >>
> >>> +	fi
> >>> +fi
> >>> +
> >>> +if [ -s /tmp/keyxchangev2data ]; then
> >>> +
> >>> +	# we get a json file in this format:
> >>> +	# https://pw.freifunk-franken.de/patch/205/
> >>> +	# but without signature, every hood file we get is valid!
> >>> +
> >>> +	catnew="$(cat /tmp/keyxchangev2data | sed 's/"timestamp":[0-
> 9]*/"timestamp":0/')"
> >>> +	catold="$(cat /www/public/keyxchangev2data 2>/dev/null | sed
> 's/"timestamp":[0-9]*/"timestamp":0/')"
> >>> +	sumnew=$(echo "$catnew" | sha256sum | cut -f1 -d " ")
> >>> +	sumold=$(echo "$catold" | sha256sum | cut -f1 -d " ")
> >>> +
> >>> +	json_load "$(cat /tmp/keyxchangev2data)"
> >>> +
> >>> +	if [ "$sumnew" != "$sumold" ]; then
> >>> +		echo "New file detect, we reconfigure the Node";
> >>> +
> >>> +		json_select hood
> >>> +
> >>> +		json_get_var hood name
> >>> +		json_get_var mesh_bssid mesh_bssid
> >>> +		json_get_var mesh_essid mesh_essid
> >>> +		json_get_var essid essid
> >>> +		# i think the next things we don't active this in the first
> version! we can do it later
> >>> +		#json_get_var channel2 channel2
> >>> +		#json_get_var mode2 mode2
> >>> +		#json_get_var type2 type2
> >>> +		#json_get_var channel5 channel5
> >>> +		#json_get_var mode5 mode5
> >>> +		#json_get_var type5 type5
> >>> +		#json_get_var protocol protocol
> >>> +
> >>> +		json_select ".." # back to root
> >>> +
> >>> +		echo "Setting hood name: $hood"
> >>> +		uci set "system. at system[0].hood=$hood"
> >>> +
> >>> +		if ! wifiDelAll; then
> >>> +			echo "Can't delete current wifi setup"
> >>> +			exit 1
> >>> +		fi
> >>> +
> >>> +		for phy in $(iw phy | awk '/^Wiphy/{ print $2 }'); do
> >>> +			radio="$(wifiAddPhyCond "$phy" "2" "$chan2ghz")"
> >>> +			radio5="$(wifiAddPhyCond "$phy" "5" "$chan5ghz")"
> >>> +			[ -n "$radio5" ] && radio="$radio5"
> >>> +
> >>> +			if ! wifiAddAP "$radio" "$essid" "mesh" "ap" "0"; then
> >>> +				echo "Can't add AP interface on $radio."
> >>> +				exit 1
> >>> +			fi
> >>> +
> >>> +			# here we set a bit for add hidden AP
> >>> +			touch /tmp/hiddenapflag
> >>> +
> >>> +			if ! wifiAddAdHocMesh "$radio" "$mesh_essid"
> "$mesh_bssid"; then
> >>> +				echo "Can't add AP interface on $radio."
> >>> +				exit 1
> >>> +			fi
> >>> +		done
> >>> +
> >>> +		echo "Loading wifi"
> >>> +		wifi
> >>> +
> >>> +		# copy the file to webroot so that other Meshrouter can
> download it;
> >>> +		# copy only after all other steps so IF can be reentered if
> something goes wrong
> >>> +		cp /tmp/keyxchangev2data /www/public/
> >>> +
> >>> +	else
> >>> +		echo "We have no new file. We do nothing. We try it again in
> 5 minutes...";
> >>> +	fi
> >>> +
> >>> +	# and now we read the VPN Data and give this data to fff-vpn
> >>> +	json_select vpn
> >>> +	Index=1
> >>> +	rm /tmp/fastd_fff_output
> >>> +	touch /tmp/fastd_fff_output
> >>> +	while json_select "$Index" > /dev/null
> >>> +	do
> >>> +		json_get_var protocol protocol
> >>> +		if [ "$protocol" == "fastd" ]; then
> >>> +			json_get_var servername name
> >>> +			echo "####${servername}.conf" >>
> /tmp/fastd_fff_output
> >>> +			echo "#name \"${servername}\";" >>
> /tmp/fastd_fff_output
> >>> +			json_get_var key key
> >>> +			echo "key \"${key}\";" >> /tmp/fastd_fff_output
> >>> +			json_get_var address address
> >>> +			json_get_var port port
> >>> +			echo "remote ipv4 \"${address}\" port $port float;"
> >> /tmp/fastd_fff_output
> >>> +		fi
> >>> +		echo "" >> /tmp/fastd_fff_output
> >>> +		json_select ".." # back to vpn
> >>> +		Index=$(( Index + 1 ))
> >>> +	done
> >>> +	echo "###" >> /tmp/fastd_fff_output
> >>> +	json_select ".." # back to root
> >>> +	#this we do every 5 minutes, because it can change the VPN Protocol
> >>> +	#and now we get to vpn-select Script and load VPNs
> >>> +
> >>> +	if hasInternet ; then
> >>> +		sh /usr/sbin/vpn-select
> >>> +	fi
> >>> +else
> >>> +	echo "We haven't got a file. We do nothing. We try it again in 5
> minutes...";
> >>> +	exit 0
> >>> +fi
> >>> diff --git
> >>> a/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select
> >>> b/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select
> >>> index bb4c933..bbc87cc 100755
> >>> --- a/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select
> >>> +++ b/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select
> >>> @@ -1,7 +1,5 @@
> >>>  #!/bin/sh
> >>>
> >>> -test -f /tmp/started || exit
> >>> -
> >>>  make_config() {
> >>>  # remove old config
> >>>  >/etc/config/tunneldigger
> >>> diff --git
> >>> a/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless
> >>> b/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless
> >>> index 8ba9463..71f566a 100644
> >>> --- a/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless
> >>> +++ b/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless
> >>> @@ -50,6 +50,28 @@ wifiAddPhy() {
> >>>  	return 0
> >>>  }
> >>>
> >>> +wifiAddPhyCond() {
> >>> +	if [ $# -ne "3" ]
> >>> +	then
> >>> +		return 1
> >>> +	fi
> >>> +
> >>> +	local phy=$1
> >>> +	local freq=$2
> >>> +	local channel=$3
> >>> +	local radio=""
> >>> +
> >>> +	if iw phy "$phy" info | grep -q -m1 "${freq}... MHz"; then
> >>> +		radio="$(wifiAddPhy "$phy" "$channel")"
> >>> +		if [ -z "$radio" ]; then
> >>> +			return 1
> >>> +		fi
> >>> +	fi
> >>> +
> >>> +	echo "$radio"
> >>> +	return 0 # also returns success if outermost if is false }
> >>> +
> >>>  wifiAddAdHocMesh() {
> >>>  	if [ $# -ne "3" ]
> >>>  	then
> >>> @@ -122,6 +144,7 @@ wifiAddAP() {
> >>>  	__EOF__
> >>>
> >>>  	echo "${iface}"
> >>> +	return 0
> >>>  }
> >>>
> >>>  wifiAddSta() {
> >>> @@ -152,6 +175,7 @@ wifiAddSta() {
> >>>  	__EOF__
> >>>
> >>>  	echo "${iface}"
> >>> +	return 0
> >>>  }
> >>>
> >>>  # vim: set noexpandtab:tabstop=4
> >>> diff --git a/src/packages/fff/fff/Makefile
> >>> b/src/packages/fff/fff/Makefile index 166d423..305ab8d 100644
> >>> --- a/src/packages/fff/fff/Makefile
> >>> +++ b/src/packages/fff/fff/Makefile
> >>> @@ -29,7 +29,8 @@ define Package/fff-base
> >>>               +fff-wireless \
> >>>               +fff-timeserver \
> >>>               +fff-vpn-select \
> >>> -             +simple-tc
> >>> +             +simple-tc \
> >>> +             +fff-hoods
> >>>  endef
> >>>
> >>>  define Package/fff-base/description
> >>>
> >>
> >>
> >
> >
> >




Mehr Informationen über die Mailingliste franken-dev