Here is a proposed patch to provide support for IPv4LL (IPv4 link local
addressing in the 169.254.*.* range per RFC3927). Combined with the
previously integrated Avahi patch, this makes a complete Zeroconf stack.
The patch implements IPv4LL via the avahi-autoipd daemon. I did do some
experimentation with the zcip applet in busybox as a lighter-weight
alternative, but found the zcip applet was unable to understand aliased
interfaces, which are a recommended practice.
When Avahi and avahi-autoipd are enabled, an additional "link local"
option becomes available in config for each network interface. This may
be used instead of or in addition to the dhcp option.
This one touches a lot of configuration parts -- review, comments,
suggestions welcome!
thanks,
--FritzM.
Index: ltib
===================================================================
RCS file: /sources/ltib/ltib/ltib,v
retrieving revision 1.82
diff -u -a -r1.82 ltib
--- ltib 4 Mar 2012 18:59:39 -0000 1.82
+++ ltib 7 Mar 2012 08:34:53 -0000
@@ -258,7 +258,8 @@
SYSCFG_START_DHCPD SYSCFG_DHCPC_CMD SYSCFG_DHCP_ARG
SYSCFG_START_WATCHDOG SYSCFG_START_SSHD
SYSCFG_START_SAMBA SYSCFG_SMBD_ARGS SYSCFG_NMBD_ARGS
- SYSCFG_BOA_ARGS SYSCFG_DROPBEAR_ARGS/ ],
+ SYSCFG_BOA_ARGS SYSCFG_DROPBEAR_ARGS
+ SYSCFG_IPV4LL_CMD / ],
PKG_NCURSES => [ qw/PKG_NCURSES_WANT_REDUCED_SET/ ],
PKG_BASH => [ qw/PKG_BASH_WANT_NO_SH_SYMLINK/ ],
PKG_DHCP => [ qw/PKG_DHCP_WANT_SERVER PKG_DHCP_WANT_CLIENT/ ],
@@ -272,7 +273,8 @@
PKG_CAIRO_WANT_SVG
PKG_CAIRO_WANT_XLIB/ ],
PKG_BOOST => [ qw/PKG_BOOST_WANT_HEADER_ONLY/ ],
- PKG_BZIP2 => [ qw/PKG_BZIP2_WANT_SHARED/ ]
+ PKG_BZIP2 => [ qw/PKG_BZIP2_WANT_SHARED/ ],
+ PKG_AVAHI => [ qw/PKG_AVAHI_WANT_AUTOIPD/ ]
};
# package build dependencies
Index: config/userspace/network.lkc
===================================================================
RCS file: /sources/ltib/ltib/config/userspace/network.lkc,v
retrieving revision 1.1.1.4
diff -u -a -r1.1.1.4 network.lkc
--- config/userspace/network.lkc 27 Nov 2006 11:19:21 -0000 1.1.1.4
+++ config/userspace/network.lkc 7 Mar 2012 08:34:54 -0000
@@ -22,8 +22,11 @@
from the boot loader. When your lease expires (4 days) your
system will lose it's connection with the NFS server
+config SYSCFG_IPV4LL0
+ bool "get network parameters using ipv4ll"
+ depends PKG_AVAHI_WANT_AUTOIPD
-if ! SYSCFG_DHCPC0
+if !SYSCFG_DHCPC0 && !SYSCFG_IPV4LL0
config SYSCFG_IPADDR0
default "192.168.0.254"
@@ -64,7 +67,11 @@
help
Do not use this if you are booting using nfsroot
-if ! SYSCFG_DHCPC1
+config SYSCFG_IPV4LL1
+ bool "get network parameters using ipv4ll"
+ depends PKG_AVAHI_WANT_AUTOIPD
+
+if !SYSCFG_DHCPC1 && !SYSCFG_IPV4LL1
config SYSCFG_IPADDR1
default "192.168.1.254"
@@ -105,7 +112,11 @@
help
Do not use this if you are booting using nfsroot
-if ! SYSCFG_DHCPC2
+config SYSCFG_IPV4LL2
+ bool "get network parameters using ipv4ll"
+ depends PKG_AVAHI_WANT_AUTOIPD
+
+if !SYSCFG_DHCPC2 && !SYSCFG_IPV4LL2
config SYSCFG_IPADDR2
default "192.168.2.254"
@@ -141,7 +152,11 @@
help
Do not use this if you are booting using nfsroot
-if ! SYSCFG_DHCPC3
+config SYSCFG_IPV4LL3
+ bool "get network parameters using ipv4ll"
+ depends PKG_AVAHI_WANT_AUTOIPD
+
+if !SYSCFG_DHCPC3 && !SYSCFG_IPV4LL3
config SYSCFG_IPADDR3
default "192.168.3.254"
@@ -178,7 +193,11 @@
help
Do not use this if you are booting using nfsroot
-if ! SYSCFG_DHCPC4
+config SYSCFG_IPV4LL4
+ bool "get network parameters using ipv4ll"
+ depends PKG_AVAHI_WANT_AUTOIPD
+
+if !SYSCFG_DHCPC4 && !SYSCFG_IPV4LL4
config SYSCFG_IPADDR4
default "192.168.4.254"
@@ -198,6 +217,8 @@
endif
endif
+comment ""
+
if SYSCFG_DHCPC0 || SYSCFG_DHCPC1 || SYSCFG_DHCPC2 || SYSCFG_DHCPC3 || SYSCFG_DHCPC4
config SYSCFG_DHCPC_CMD
@@ -209,5 +230,15 @@
endif
+if SYSCFG_IPV4LL0 || SYSCFG_IPV4LL1 || SYSCFG_IPV4LL2 || SYSCFG_IPV4LL3 || SYSCFG_IPV4LL4
+
+config SYSCFG_IPV4LL_CMD
+ string "IPv4LL client startup"
+ default "avahi-autoipd --daemonize "
+ help
+ This entry specifies how to start the IPv4LL client
+
+endif
+
endmenu
Index: config/userspace/packages.lkc
===================================================================
RCS file: /sources/ltib/ltib/config/userspace/packages.lkc,v
retrieving revision 1.49
diff -u -a -r1.49 packages.lkc
--- config/userspace/packages.lkc 4 Mar 2012 18:24:30 -0000 1.49
+++ config/userspace/packages.lkc 7 Mar 2012 08:34:57 -0000
@@ -118,6 +118,16 @@
(branded Bonjour and sometimes Zeroconf).
Note: this package requires the host package: intltool
+config PKG_AVAHI_WANT_AUTOIPD
+ depends PKG_AVAHI
+ bool "include avahi-autoipd"
+ help
+ avahi-autoipd implements IPv4LL, "Dynamic Configuration of IPv4
+ Link-Local Addresses" (IETF RFC3927), a protoâ col for automatic IP
+ address configuration from the link-local 169.254.0.0/16 range
+ without the need for a central server. It is primarily intended to be
+ used in ad-hoc networks which lack a DHCP server.
+
config PKG_BASH
depends CAP_HAS_MMU
select PKG_LIBTERMCAP
Index: dist/lfs-5.1/avahi/avahi.spec
===================================================================
RCS file: /sources/ltib/ltib/dist/lfs-5.1/avahi/avahi.spec,v
retrieving revision 1.1
diff -u -a -r1.1 avahi.spec
--- dist/lfs-5.1/avahi/avahi.spec 4 Mar 2012 17:41:54 -0000 1.1
+++ dist/lfs-5.1/avahi/avahi.spec 7 Mar 2012 08:34:57 -0000
@@ -3,13 +3,14 @@
Summary : Avahi mDNS/DNS-SD service discovery suite
Name : avahi
Version : 0.6.30
-Release : 1
+Release : 2
License : LGPL
Vendor : Avid Technology
Packager : Fritz Mueller
Group : xxxx
URL : http://avahi.org
Source : %{name}-%{version}.tar.gz
+Patch1 : avahi-0.6.30-ipv4ll.patch
BuildRoot : %{_tmppath}/%{name}
Prefix : %{pfx}
@@ -17,10 +18,21 @@
%{summary}
%Prep
-%setup
+%setup
+%patch1 -p1
%Build
-./configure --prefix=%{_prefix} --host=$CFGHOST --build=%{_build} --with-distro=debian --disable-nls --disable-glib --disable-gobject --disable-qt3 --disable-qt4 --disable-gtk --disable-gtk3 --disable-gdbm --disable-mono --disable-monodoc --disable-autoipd --disable-python --disable-doxygen-doc --disable-manpages --enable-compat-libdns_sd
+
+XTRA_OPTS=""
+
+if [ "$PKG_AVAHI_WANT_AUTOIPD" = "y" ]
+then
+ XTRA_OPTS="$XTRA_OPTS --enable-autoipd --with-autoipd-user=avahi --with-autoipd-group=avahi"
+else
+ XTRA_OPTS="$XTRA_OPTS --disable-autoipd"
+fi
+
+./configure --prefix=%{_prefix} --host=$CFGHOST --build=%{_build} --with-distro=debian --disable-nls --disable-glib --disable-gobject --disable-qt3 --disable-qt4 --disable-gtk --disable-gtk3 --disable-gdbm --disable-mono --disable-monodoc --disable-python --disable-doxygen-doc --disable-manpages --enable-compat-libdns_sd --localstatedir=/var $XTRA_OPTS
make
%Install
Index: dist/lfs-5.1/skell/skell.spec
===================================================================
RCS file: /sources/ltib/ltib/dist/lfs-5.1/skell/skell.spec,v
retrieving revision 1.5
diff -u -a -r1.5 skell.spec
--- dist/lfs-5.1/skell/skell.spec 4 Mar 2012 17:41:54 -0000 1.5
+++ dist/lfs-5.1/skell/skell.spec 7 Mar 2012 08:34:57 -0000
@@ -3,7 +3,7 @@
Summary : Skelleton files for an embedded root filesystem
Name : skell
Version : 1.19
-Release : 2
+Release : 3
License : GPL
Vendor : Freescale
Packager : Steve Papacharalambous/Stuart Hughes
@@ -11,6 +11,7 @@
Source : %{name}-%{version}.tar.gz
Patch1 : skell-1.19-ipautoconf.patch
Patch2 : skell-1.19-avahi-dbus.patch
+Patch3 : skell-1.19-ipv4ll.patch
BuildRoot : %{_tmppath}/%{name}
Prefix : %{pfx}
@@ -21,6 +22,7 @@
%setup
%patch1 -p1
%patch2 -p1
+%patch3 -p1
%Build
Index: dist/lfs-5.1/sysconfig/sysconfig.spec
===================================================================
RCS file: /sources/ltib/ltib/dist/lfs-5.1/sysconfig/sysconfig.spec,v
retrieving revision 1.8
diff -u -a -r1.8 sysconfig.spec
--- dist/lfs-5.1/sysconfig/sysconfig.spec 4 Mar 2012 17:41:54 -0000 1.8
+++ dist/lfs-5.1/sysconfig/sysconfig.spec 7 Mar 2012 08:34:57 -0000
@@ -123,32 +123,43 @@
export DEPLOYMENT_STYLE="${SYSCFG_DEPLOYMENT_STYLE:-NFS}"
export SYSCFG_DHCPC_CMD="${SYSCFG_DHCPC_CMD:-udhcpc -b -i }"
export DROPBEAR_ARGS="${SYSCFG_DROPBEAR_ARGS}"
+export SYSCFG_IPV4LL_CMD="${SYSCFG_IPV4LL_CMD:-avahi-autoipd --daemonize }"
EOF
# network interfaces
for i in 0 1 2 3 4 5
do
- if [ "$(eval echo \$$(echo SYSCFG_IFACE$i))" = "y" ]
+ if [ "$(eval echo \$$(echo SYSCFG_IFACE$i))" = "y" ]
then
- if [ "$(eval echo \$$(echo SYSCFG_DHCPC$i))" = "y" ]
- then
- cat <<EOF >> $RPM_BUILD_ROOT/%{pfx}/etc/rc.d/rc.conf
+ IPSTATIC="y"
+ cat <<EOF >> $RPM_BUILD_ROOT/%{pfx}/etc/rc.d/rc.conf
# net interface $i
export $(echo SYSCFG_IFACE$i)=y
export $(echo INTERFACE$i)="$(eval echo \$$(echo SYSCFG_NET_INTERFACE$i))"
-export $(echo IPADDR$i)="dhcp"
EOF
- else
+ if [ "$(eval echo \$$(echo SYSCFG_DHCPC$i))" = "y" ]
+ then
+ IPSTATIC="n"
+ IPMETHOD="dhcp"
+ fi
+ if [ "$(eval echo \$$(echo SYSCFG_IPV4LL$i))" = "y" ]
+ then
+ IPSTATIC="n"
+ IPMETHOD="$IPMETHOD${IPMETHOD:+,}ipv4ll"
+ fi
+ if [ "$IPSTATIC" = "y" ]
+ then
cat <<EOF >> $RPM_BUILD_ROOT/%{pfx}/etc/rc.d/rc.conf
-# net interface $i
-export $(echo SYSCFG_IFACE$i)=y
-export $(echo INTERFACE$i)="$(eval echo \$$(echo SYSCFG_NET_INTERFACE$i))"
export $(echo IPADDR$i)="$(eval echo \$$(echo SYSCFG_IPADDR$i))"
export $(echo NETMASK$i)="$(eval echo \$$(echo SYSCFG_NET_MASK$i))"
export $(echo BROADCAST$i)="$(eval echo \$$(echo SYSCFG_NET_BROADCAST$i))"
export $(echo GATEWAY$i)="$(eval echo \$$(echo SYSCFG_NET_GATEWAY$i))"
export $(echo NAMESERVER$i)="$(eval echo \$$(echo SYSCFG_NAMESERVER$i))"
EOF
+ else
+ cat <<EOF >> $RPM_BUILD_ROOT/%{pfx}/etc/rc.d/rc.conf
+export $(echo IPADDR$i)="$IPMETHOD"
+EOF
fi
fi
done
diff --exclude CVS --exclude .git -uNr avahi-0.6.30/avahi-autoipd/avahi-autoipd.action.linux avahi-0.6.30.modified/avahi-autoipd/avahi-autoipd.action.linux
--- avahi-0.6.30/avahi-autoipd/avahi-autoipd.action.linux 2010-06-28 20:30:33.000000000 -0700
+++ avahi-0.6.30.modified/avahi-autoipd/avahi-autoipd.action.linux 2012-03-06 19:48:00.651375062 -0800
@@ -35,7 +35,10 @@
METRIC=$((1000 + `cat "/sys/class/net/$2/ifindex" 2>/dev/null || echo 0`))
-if [ -x /bin/ip -o -x /sbin/ip ] ; then
+IP_EXISTS=`[ -e /bin/ip -o -e /sbin/ip ] && echo y`
+IP_IS_BUSYBOX=`busybox ip route >/dev/null 2>&1 && echo y`
+
+if [ "$IP_EXISTS" = "y" -a "$IP_IS_BUSYBOX" != "y" ] ; then
# We have the Linux ip tool from the iproute package
3b19200ca33be35dbd55273f2c7cd334 avahi-0.6.30-ipv4ll.patch
diff --exclude CVS --exclude .git -uNr skell-1.19/etc/rc.d/init.d/network skell-1.19.modified/etc/rc.d/init.d/network
--- skell-1.19/etc/rc.d/init.d/network 2012-03-07 00:04:36.747854485 -0800
+++ skell-1.19.modified/etc/rc.d/init.d/network 2012-03-06 08:23:49.413600567 -0800
@@ -41,12 +41,13 @@
DEPLOYMENT_STYLE=NFS;
fi
-
if [ "$SYSCFG_IFACE0" = "y" ]
then
echo "Setting up networking on $INTERFACE0: "
- if [ "$IPADDR0" = "dhcp" ]
+ IPSTATIC="y"
+ if [ `expr match "$IPADDR0" ".*dhcp"` -ne 0 ]
then
+ IPSTATIC="n"
if [ "$DEPLOYMENT_STYLE" = "NFS" ]
then
if [ -f /proc/net/pnp ]
@@ -58,8 +59,15 @@
else
$SYSCFG_DHCPC_CMD $INTERFACE0
fi
- else
- # non-dhcp network startup
+ fi
+ if [ `expr match "$IPADDR0" ".*ipv4ll"` -ne 0 ]
+ then
+ IPSTATIC="n"
+ $SYSCFG_IPV4LL_CMD $INTERFACE0
+ fi
+ if [ "$IPSTATIC" = "y" ]
+ then
+ # static network startup
ifconfig $INTERFACE0 $IPADDR0 netmask $NETMASK0
sed -e 's,.*hostname,'$IPADDR0' '`hostname`',' /etc/hosts >/tmp/hosts
mv /tmp/hosts /etc/hosts
@@ -81,11 +89,20 @@
if [ "$SYSCFG_IFACE1" = "y" ]
then
echo "Setting up networking on $INTERFACE1: "
- if [ "$IPADDR1" = "dhcp" ]
+ IPSTATIC="y"
+ if [ `expr match "$IPADDR1" ".*dhcp"` -ne 0 ]
then
+ IPSTATIC="n"
$SYSCFG_DHCPC_CMD $INTERFACE1
- else
- # non-dhcp network startup
+ fi
+ if [ `expr match "$IPADDR1" ".*ipv4ll"` -ne 0 ]
+ then
+ IPSTATIC="n"
+ $SYSCFG_IPV4LL_CMD $INTERFACE1
+ fi
+ if [ "$IPSTATIC" = "y" ]
+ then
+ # static network startup
ifconfig $INTERFACE1 $IPADDR1 netmask $NETMASK1
if [ -n "$GATEWAY1" ]
@@ -105,11 +122,20 @@
if [ "$SYSCFG_IFACE2" = "y" ]
then
echo "Setting up networking on $INTERFACE2: "
- if [ "$IPADDR2" = "dhcp" ]
+ IPSTATIC="y"
+ if [ `expr match "$IPADDR2" ".*dhcp"` -ne 0 ]
then
+ IPSTATIC="n"
$SYSCFG_DHCPC_CMD $INTERFACE2
- else
- # non-dhcp network startup
+ fi
+ if [ `expr match "$IPADDR2" ".*ipv4ll"` -ne 0 ]
+ then
+ IPSTATIC="n"
+ $SYSCFG_IPV4LL_CMD $INTERFACE2
+ fi
+ if [ "$IPSTATIC" = "y" ]
+ then
+ # static network startup
ifconfig $INTERFACE2 $IPADDR2 netmask $NETMASK2
if [ -n "$GATEWAY2" ]
@@ -124,11 +150,20 @@
if [ "$SYSCFG_IFACE3" = "y" ]
then
echo "Setting up networking on $INTERFACE3: "
- if [ "$IPADDR3" = "dhcp" ]
+ IPSTATIC="y"
+ if [ `expr match "$IPADDR3" ".*dhcp"` -ne 0 ]
then
+ IPSTATIC="n"
$SYSCFG_DHCPC_CMD $INTERFACE3
- else
- # non-dhcp network startup
+ fi
+ if [ `expr match "$IPADDR3" ".*ipv4ll"` -ne 0 ]
+ then
+ IPSTATIC="n"
+ $SYSCFG_IPV4LL_CMD $INTERFACE3
+ fi
+ if [ "$IPSTATIC" = "y" ]
+ then
+ # static network startup
ifconfig $INTERFACE3 $IPADDR3 netmask $NETMASK3
if [ -n "$GATEWAY3" ]
@@ -143,11 +178,20 @@
if [ "$SYSCFG_IFACE4" = "y" ]
then
echo "Setting up networking on $INTERFACE4: "
- if [ "$IPADDR4" = "dhcp" ]
+ IPSTATIC="y"
+ if [ `expr match "$IPADDR4" ".*dhcp"` -ne 0 ]
then
+ IPSTATIC="n"
$SYSCFG_DHCPC_CMD $INTERFACE4
- else
- # non-dhcp network startup
+ fi
+ if [ `expr match "$IPADDR4" ".*ipv4ll"` -ne 0 ]
+ then
+ IPSTATIC="n"
+ $SYSCFG_IPV4LL_CMD $INTERFACE4
+ fi
+ if [ "$IPSTATIC" = "y" ]
+ then
+ # static network startup
ifconfig $INTERFACE4 $IPADDR4 netmask $NETMASK4
if [ -n "$GATEWAY4" ]
261c2e10fe7dbf55701992dc08c3432f skell-1.19-ipv4ll.patch
_______________________________________________
LTIB home page: http://ltib.org
Ltib mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/ltib