Following are the drawbacks with the current logic: 1. If ip=dhcp in the boot command line, then the current code makes connman to ignore "eth0" network interface from managing internet connections. This can cause NFS boot failure, if the network interface used for NFS booting is other than "eth0".
2. If ip=bootp in the boot command line, then none of the network interfaces are ignored. This makes connman to manage internet connections on every active network interfaces (including the network interface used for NFS booting), resulting hang during NFS boot. This patch finds the network interface used for NFS booting via dmesg. It searches for "device=" string from dmesg output and finds name of network interface used for NFS. The "device=" string is printed from dmesg, if IPCONFIG_SILENT macro is disabled in the kernel, and this macro is disabled by default. If "device=" string is not found, then falls back to earlier logic. The earlier logic of detecting NFS network interface is retained, as we cannot determine the exact network interface name used during NFS bootup. Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjana...@mvista.com> --- meta/recipes-connectivity/connman/connman/connman | 35 +++++++++++++---------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/meta/recipes-connectivity/connman/connman/connman b/meta/recipes-connectivity/connman/connman/connman index c64fa0d..aae2ca6 100644 --- a/meta/recipes-connectivity/connman/connman/connman +++ b/meta/recipes-connectivity/connman/connman/connman @@ -29,23 +29,28 @@ done do_start() { EXTRA_PARAM="" if test $nfsroot -eq 1 ; then - NET_DEVS=`cat /proc/net/dev | sed -ne 's/^\([a-zA-Z0-9 ]*\):.*$/\1/p'` - NET_ADDR=`cat /proc/cmdline | sed -ne 's/^.*ip=\([^ :]*\).*$/\1/p'` + ethn_from_dmesg=`dmesg | grep "device="| sed "s|\(.*\)device=\(.*\), hwaddr=\(.*\)|\2|g"` + if [ ! -z "$ethn_from_dmesg" ]; then + EXTRA_PARAM="-I $ethn_from_dmesg" + else + NET_DEVS=`cat /proc/net/dev | sed -ne 's/^\([a-zA-Z0-9 ]*\):.*$/\1/p'` + NET_ADDR=`cat /proc/cmdline | sed -ne 's/^.*ip=\([^ :]*\).*$/\1/p'` - if [ ! -z "$NET_ADDR" ]; then - if [ "$NET_ADDR" = dhcp ]; then - ethn=`ifconfig | grep "^eth" | sed -e "s/\(eth[0-9]\)\(.*\)/\1/"` - if [ ! -z "$ethn" ]; then - EXTRA_PARAM="-I $ethn" - fi - else - for i in $NET_DEVS; do - ADDR=`ifconfig $i | sed 's/addr://g' | sed -ne 's/^.*inet \([0-9.]*\) .*$/\1/p'` - if [ "$NET_ADDR" = "$ADDR" ]; then - EXTRA_PARAM="-I $i" - break + if [ ! -z "$NET_ADDR" ]; then + if [ "$NET_ADDR" = dhcp ]; then + ethn=`ifconfig | grep "^eth" | sed -e "s/\(eth[0-9]\)\(.*\)/\1/"` + if [ ! -z "$ethn" ]; then + EXTRA_PARAM="-I $ethn" fi - done + else + for i in $NET_DEVS; do + ADDR=`ifconfig $i | sed 's/addr://g' | sed -ne 's/^.*inet \([0-9.]*\) .*$/\1/p'` + if [ "$NET_ADDR" = "$ADDR" ]; then + EXTRA_PARAM="-I $i" + break + fi + done + fi fi fi fi -- 2.7.4 -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core