public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Q: use vlan in container
@ 2013-11-28  6:17 Libo Chen
  2013-11-29  5:05 ` Serge Hallyn
  0 siblings, 1 reply; 5+ messages in thread
From: Libo Chen @ 2013-11-28  6:17 UTC (permalink / raw)
  To: containers
  Cc: serge.hallyn, LKML, gaofeng, David Miller, Li Zefan, Huang Qiang,
	Wengmeiling

Hello LXC experts,

	I meet a problem. When using vlan as network device in suse11 system container,
I can not use halt to stop this container. It hung on "eth0 is still used from interfaces eth0" in cycle.

The config file:

lxc.network.type = vlan
lxc.network.flags = up
lxc.network.link = eth0
lxc.network.name = eth0
lxc.network.vlan.id = 1301
lxc.network.ipv4 = 128.5.131.100/24


The reason is in the shell command /sbin/ifdown, see below:

######################################################################
# Shut down depending interfaces
#
# Check if there are interfaces which depend on this interface. If yes these
# have to be shut down first.
# For example these might be bonding or vlan interfaces. Note that we don't
# catch all types of depending interfaces currently. See function
# 'get_depending_ifaces' in file 'functions' for details.
#
test "$SCRIPTNAME" = ifdown && DEP_IFACES=`get_depending_ifaces $INTERFACE`
if [ "$?" = 0 -a "$NODEPS" != yes ] ; then
        message "`printf "    %-9s is still used from interfaces %s" \
                         $INTERFACE "$DEP_IFACES"`"
        for DI in $DEP_IFACES; do
                ifdown $DI -o $OPTIONS
        done

        message "`printf "    %-9s now going down itself" $INTERFACE`"
        # check if iface is (still) avaliable
        # [bonding master may go down itself
        #  while the last slave gets removed]
        if ! is_iface_available $INTERFACE; then
                exit $R_SUCCESS
        fi
fi


$DEP_IFACES is also eth0 in this scene, so ifdown will call ifdown again and again.

if we set lxc.network.name = eth1, it will be ok, so can we add a judgment to make
lxc.network.link and lxc.network.name are not equal in lxc-start command.

simple implement like:

	if [ lxc.network.type == vlan ] ; then
		if [ lxc.network.link == lxc.network.name ] ; then
			return false
		fi
	fi


Is it reasonable?  or any other way to achieve this?




^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Q: use vlan in container
  2013-11-28  6:17 Q: use vlan in container Libo Chen
@ 2013-11-29  5:05 ` Serge Hallyn
  2013-11-29  6:40   ` Libo Chen
  0 siblings, 1 reply; 5+ messages in thread
From: Serge Hallyn @ 2013-11-29  5:05 UTC (permalink / raw)
  To: Libo Chen
  Cc: containers, LKML, gaofeng, David Miller, Li Zefan, Huang Qiang,
	Wengmeiling

Quoting Libo Chen (clbchenlibo.chen@huawei.com):
> Hello LXC experts,
> 
> 	I meet a problem. When using vlan as network device in suse11 system container,
> I can not use halt to stop this container. It hung on "eth0 is still used from interfaces eth0" in cycle.
> 
> The config file:
> 
> lxc.network.type = vlan
> lxc.network.flags = up
> lxc.network.link = eth0
> lxc.network.name = eth0
> lxc.network.vlan.id = 1301
> lxc.network.ipv4 = 128.5.131.100/24
> 
> 
> The reason is in the shell command /sbin/ifdown, see below:
> 
> ######################################################################
> # Shut down depending interfaces
> #
> # Check if there are interfaces which depend on this interface. If yes these
> # have to be shut down first.
> # For example these might be bonding or vlan interfaces. Note that we don't
> # catch all types of depending interfaces currently. See function
> # 'get_depending_ifaces' in file 'functions' for details.
> #
> test "$SCRIPTNAME" = ifdown && DEP_IFACES=`get_depending_ifaces $INTERFACE`
> if [ "$?" = 0 -a "$NODEPS" != yes ] ; then
>         message "`printf "    %-9s is still used from interfaces %s" \
>                          $INTERFACE "$DEP_IFACES"`"
>         for DI in $DEP_IFACES; do

Should the proper fix be to fix this script so that it doesn't call
ifdown recursively if $DI = $INTERFACE ?

>                 ifdown $DI -o $OPTIONS
>         done
> 
>         message "`printf "    %-9s now going down itself" $INTERFACE`"
>         # check if iface is (still) avaliable
>         # [bonding master may go down itself
>         #  while the last slave gets removed]
>         if ! is_iface_available $INTERFACE; then
>                 exit $R_SUCCESS
>         fi
> fi
> 
> 
> $DEP_IFACES is also eth0 in this scene, so ifdown will call ifdown again and again.
> 
> if we set lxc.network.name = eth1, it will be ok, so can we add a judgment to make
> lxc.network.link and lxc.network.name are not equal in lxc-start command.
> 
> simple implement like:
> 
> 	if [ lxc.network.type == vlan ] ; then
> 		if [ lxc.network.link == lxc.network.name ] ; then
> 			return false
> 		fi
> 	fi
> 
> 
> Is it reasonable?  or any other way to achieve this?
> 
> 
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Q: use vlan in container
  2013-11-29  5:05 ` Serge Hallyn
@ 2013-11-29  6:40   ` Libo Chen
  2013-11-29 14:18     ` Serge Hallyn
  0 siblings, 1 reply; 5+ messages in thread
From: Libo Chen @ 2013-11-29  6:40 UTC (permalink / raw)
  To: Serge Hallyn
  Cc: containers, LKML, gaofeng, David Miller, Li Zefan, Huang Qiang,
	Wengmeiling, zhangwei(Jovi)

On 2013/11/29 13:05, Serge Hallyn wrote:
> Quoting Libo Chen (clbchenlibo.chen@huawei.com):
>> Hello LXC experts,
>>
>> 	I meet a problem. When using vlan as network device in suse11 system container,
>> I can not use halt to stop this container. It hung on "eth0 is still used from interfaces eth0" in cycle.
>>
>> The config file:
>>
>> lxc.network.type = vlan
>> lxc.network.flags = up
>> lxc.network.link = eth0
>> lxc.network.name = eth0
>> lxc.network.vlan.id = 1301
>> lxc.network.ipv4 = 128.5.131.100/24
>>
>>
>> The reason is in the shell command /sbin/ifdown, see below:
>>
>> ######################################################################
>> # Shut down depending interfaces
>> #
>> # Check if there are interfaces which depend on this interface. If yes these
>> # have to be shut down first.
>> # For example these might be bonding or vlan interfaces. Note that we don't
>> # catch all types of depending interfaces currently. See function
>> # 'get_depending_ifaces' in file 'functions' for details.
>> #
>> test "$SCRIPTNAME" = ifdown && DEP_IFACES=`get_depending_ifaces $INTERFACE`
>> if [ "$?" = 0 -a "$NODEPS" != yes ] ; then
>>         message "`printf "    %-9s is still used from interfaces %s" \
>>                          $INTERFACE "$DEP_IFACES"`"
>>         for DI in $DEP_IFACES; do
> 
> Should the proper fix be to fix this script so that it doesn't call
> ifdown recursively if $DI = $INTERFACE ?

Hi Serge,

yes, I had try this way before as below:

        for DI in $DEP_IFACES; do
	         if [ "$DI" != "$INTERFACE" ] ; then
                       ifdown $DI -o $OPTIONS
	         fi
        done

It works well, but I have no idea it is safe enough and no side effects?

Thanks,
Libo

> 
>>                 ifdown $DI -o $OPTIONS
>>         done
>>
>>         message "`printf "    %-9s now going down itself" $INTERFACE`"
>>         # check if iface is (still) avaliable
>>         # [bonding master may go down itself
>>         #  while the last slave gets removed]
>>         if ! is_iface_available $INTERFACE; then
>>                 exit $R_SUCCESS
>>         fi
>> fi
>>
>>
>> $DEP_IFACES is also eth0 in this scene, so ifdown will call ifdown again and again.
>>
>> if we set lxc.network.name = eth1, it will be ok, so can we add a judgment to make
>> lxc.network.link and lxc.network.name are not equal in lxc-start command.
>>
>> simple implement like:
>>
>> 	if [ lxc.network.type == vlan ] ; then
>> 		if [ lxc.network.link == lxc.network.name ] ; then
>> 			return false
>> 		fi
>> 	fi
>>
>>
>> Is it reasonable?  or any other way to achieve this?
>>
>>
>>
> 
> .
> 



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Q: use vlan in container
  2013-11-29  6:40   ` Libo Chen
@ 2013-11-29 14:18     ` Serge Hallyn
  2013-11-30  1:46       ` Libo Chen
  0 siblings, 1 reply; 5+ messages in thread
From: Serge Hallyn @ 2013-11-29 14:18 UTC (permalink / raw)
  To: Libo Chen; +Cc: containers, LKML, David Miller, zhangwei(Jovi)

Quoting Libo Chen (clbchenlibo.chen@huawei.com):
> On 2013/11/29 13:05, Serge Hallyn wrote:
> > Quoting Libo Chen (clbchenlibo.chen@huawei.com):
> >> Hello LXC experts,
> >>
> >> 	I meet a problem. When using vlan as network device in suse11 system container,
> >> I can not use halt to stop this container. It hung on "eth0 is still used from interfaces eth0" in cycle.
> >>
> >> The config file:
> >>
> >> lxc.network.type = vlan
> >> lxc.network.flags = up
> >> lxc.network.link = eth0
> >> lxc.network.name = eth0
> >> lxc.network.vlan.id = 1301
> >> lxc.network.ipv4 = 128.5.131.100/24
> >>
> >>
> >> The reason is in the shell command /sbin/ifdown, see below:
> >>
> >> ######################################################################
> >> # Shut down depending interfaces
> >> #
> >> # Check if there are interfaces which depend on this interface. If yes these
> >> # have to be shut down first.
> >> # For example these might be bonding or vlan interfaces. Note that we don't
> >> # catch all types of depending interfaces currently. See function
> >> # 'get_depending_ifaces' in file 'functions' for details.
> >> #
> >> test "$SCRIPTNAME" = ifdown && DEP_IFACES=`get_depending_ifaces $INTERFACE`
> >> if [ "$?" = 0 -a "$NODEPS" != yes ] ; then
> >>         message "`printf "    %-9s is still used from interfaces %s" \
> >>                          $INTERFACE "$DEP_IFACES"`"
> >>         for DI in $DEP_IFACES; do
> > 
> > Should the proper fix be to fix this script so that it doesn't call
> > ifdown recursively if $DI = $INTERFACE ?
> 
> Hi Serge,
> 
> yes, I had try this way before as below:
> 
>         for DI in $DEP_IFACES; do
> 	         if [ "$DI" != "$INTERFACE" ] ; then
>                        ifdown $DI -o $OPTIONS
> 	         fi
>         done
> 
> It works well, but I have no idea it is safe enough and no side effects?

It's safe enough and should have no side effects itself.  But
I recommend you first look up how get_depending_ifaces() is
implemented.  That's where this really should be fixed, and if
it turns out that the proper fix for *that* is in the kernel
then that's ok.

-serge

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Q: use vlan in container
  2013-11-29 14:18     ` Serge Hallyn
@ 2013-11-30  1:46       ` Libo Chen
  0 siblings, 0 replies; 5+ messages in thread
From: Libo Chen @ 2013-11-30  1:46 UTC (permalink / raw)
  To: Serge Hallyn; +Cc: containers, LKML, David Miller, zhangwei(Jovi), dingtianhong

On 2013/11/29 22:18, Serge Hallyn wrote:
> Quoting Libo Chen (clbchenlibo.chen@huawei.com):
>> On 2013/11/29 13:05, Serge Hallyn wrote:
>>> Quoting Libo Chen (clbchenlibo.chen@huawei.com):
>>>> Hello LXC experts,
>>>>
>>>> 	I meet a problem. When using vlan as network device in suse11 system container,
>>>> I can not use halt to stop this container. It hung on "eth0 is still used from interfaces eth0" in cycle.
>>>>
>>>> The config file:
>>>>
>>>> lxc.network.type = vlan
>>>> lxc.network.flags = up
>>>> lxc.network.link = eth0
>>>> lxc.network.name = eth0
>>>> lxc.network.vlan.id = 1301
>>>> lxc.network.ipv4 = 128.5.131.100/24
>>>>
>>>>
>>>> The reason is in the shell command /sbin/ifdown, see below:
>>>>
>>>> ######################################################################
>>>> # Shut down depending interfaces
>>>> #
>>>> # Check if there are interfaces which depend on this interface. If yes these
>>>> # have to be shut down first.
>>>> # For example these might be bonding or vlan interfaces. Note that we don't
>>>> # catch all types of depending interfaces currently. See function
>>>> # 'get_depending_ifaces' in file 'functions' for details.
>>>> #
>>>> test "$SCRIPTNAME" = ifdown && DEP_IFACES=`get_depending_ifaces $INTERFACE`
>>>> if [ "$?" = 0 -a "$NODEPS" != yes ] ; then
>>>>         message "`printf "    %-9s is still used from interfaces %s" \
>>>>                          $INTERFACE "$DEP_IFACES"`"
>>>>         for DI in $DEP_IFACES; do
>>>
>>> Should the proper fix be to fix this script so that it doesn't call
>>> ifdown recursively if $DI = $INTERFACE ?
>>
>> Hi Serge,
>>
>> yes, I had try this way before as below:
>>
>>         for DI in $DEP_IFACES; do
>> 	         if [ "$DI" != "$INTERFACE" ] ; then
>>                        ifdown $DI -o $OPTIONS
>> 	         fi
>>         done
>>
>> It works well, but I have no idea it is safe enough and no side effects?
> 
> It's safe enough and should have no side effects itself.  But
> I recommend you first look up how get_depending_ifaces() is
> implemented.  That's where this really should be fixed, and if
> it turns out that the proper fix for *that* is in the kernel
> then that's ok.

thank you for your suggestion.

Libo


> 
> -serge
> 
> .
> 



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2013-11-30  1:47 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-28  6:17 Q: use vlan in container Libo Chen
2013-11-29  5:05 ` Serge Hallyn
2013-11-29  6:40   ` Libo Chen
2013-11-29 14:18     ` Serge Hallyn
2013-11-30  1:46       ` Libo Chen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox