[OE-core] [PATCH] connman: get the correct network interface name from dmesg during NFS booting

Andreas Oberritter obi at opendreambox.org
Wed Oct 12 07:00:17 UTC 2016


Hi Jagadeesh,

On 11.10.2016 14:11, Jagadeesh Krishnanjanappa wrote:
> Hi Andreas,
> 
> Thanks for reviewing the patch.
> 
> 
>     I think this is too fragile to land in OE-Core. What happens if a
>     network driver prints "device=eth0"? Or if other kernel messages make
>     the string disappear from dmesg and connman gets restarted later?
> 
>  
> True. If device=eth0 gets disappeared/corrupted, then we may have problem.
> 
> 
>     FWIW, I'm attaching my current wrapper script for connmand. I don't
>     think it's perfect, but at least it doesn't depend on any init manager
>     and works across restarts.
> 
> The wrapper script attached by you, takes care of the missing scenarios.
> Seems to be more complete.
> 
>      
> 
>     Add these lines to connman's do_install, in case you'd like to test
>     and/or submit it:
> 
>     mv ${D}${sbindir}/connmand ${D}${sbindir}/connmand.real
>     install -m 755 ${WORKDIR}/connmand-nfsroot.in
>     <http://connmand-nfsroot.in> ${D}${sbindir}/connmand
>     sed -e 's, at sbindir@,${sbindir},g' -i ${D}${sbindir}/connmand
> 
> I think it would be good idea to integrate your changes into the already
> existing OE-core's connman script, instead of a calling original connman
> script from the wrapper script.

please keep in mind that you'd need to implement the same logic for systemd.

Considering that the execution of connman on nfsroots without
appropriate parameters immediately hangs the system, a wrapper script
offers an additional level of protection compared to an init script or
systemd unit, especially for people debugging connman.

Regards,
Andreas

> 
> Regards,
> Jagadeesh
> 
>     >
>     > Signed-off-by: Jagadeesh Krishnanjanappa
>     <jkrishnanjanappa at mvista.com <mailto:jkrishnanjanappa at 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
>     >
> 
> 
>     --
>     _______________________________________________
>     Openembedded-core mailing list
>     Openembedded-core at lists.openembedded.org
>     <mailto:Openembedded-core at lists.openembedded.org>
>     http://lists.openembedded.org/mailman/listinfo/openembedded-core
>     <http://lists.openembedded.org/mailman/listinfo/openembedded-core>
> 
> 




More information about the Openembedded-core mailing list