OVS internal ports with veth create infinite port add loop

Solution In Progress - Updated -

Issue

OVS internal ports with veth create infinite port add loop

Version-Release number of OVS for the test:
openvswitch-2.5.0-14.git20160727.el7fdp.x86_64

How to reproduce this issue (note: TYPE=OVSIntPort and the veth part):

[root@overcloud-compute-0 network-scripts]# cat ifcfg-eth3
NAME=eth3
ONBOOT=yes
NETBOOT=yes
BOOTPROTO=static
DEVICE=eth3
DEVICETYPE=ovs
TYPE=OVSPort
OVS_OPTIONS="vlan_mode=native-untagged tag=1"
OVS_BRIDGE=br-eth3
MTU=9000
[root@overcloud-compute-0 network-scripts]# cat ifcfg-br-eth3
DEVICE=br-eth3
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSBridge
HOTPLUG=no
USERCTL=no
[root@overcloud-compute-0 network-scripts]# cat ifcfg-mgmt0-lldp
DEVICE=eth3_ll1
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSIntPort
OVS_BRIDGE=br-eth3
HOTPLUG=no
USERCTL=no
BOOTPROTO=static
MTU=9000
OVS_EXTRA="set bridge br-eth3 other-config:forward-bpdu=true"

Run manually

ip link add name eth3_ll1 type veth peer name eth3_ll2

Run

ifup br-eth3
ifup eth3
ifup mgmt0-lldp
ip link set dev eth3_ll2 up

The moment eth3_ll2 comes up, the following happens - this happens as
soon as one brings up the opposite end of the veth port:

[root@overcloud-compute-0 ~]# tail -f /var/log/openvswitch/ovs-vswitchd.log &
[1] 929479
[root@overcloud-compute-0 ~]#
2017-05-15T19:00:16.021Z|17950|bridge|INFO|bridge br-eth3: added
interface eth3_ll1 on port 17374
2017-05-15T19:00:16.027Z|17951|bridge|INFO|bridge br-eth3: added
interface eth3_ll1 on port 17375
2017-05-15T19:00:16.034Z|17952|bridge|INFO|bridge br-eth3: added
interface eth3_ll1 on port 17376
2017-05-15T19:00:16.042Z|17953|bridge|INFO|bridge br-eth3: added
interface eth3_ll1 on port 17377
2017-05-15T19:00:16.052Z|17954|bridge|INFO|bridge br-eth3: added
interface eth3_ll1 on port 17378
2017-05-15T19:00:16.060Z|17955|bridge|INFO|bridge br-eth3: added
interface eth3_ll1 on port 17379
2017-05-15T19:00:16.068Z|17956|bridge|INFO|bridge br-eth3: added
interface eth3_ll1 on port 17380
2017-05-15T19:00:16.074Z|17957|bridge|INFO|bridge br-eth3: added
interface eth3_ll1 on port 17381
2017-05-15T19:00:16.083Z|17958|bridge|INFO|bridge br-eth3: added
interface eth3_ll1 on port 17382
2017-05-15T19:00:16.092Z|17959|bridge|INFO|bridge br-eth3: added
interface eth3_ll1 on port 17383
[root@overcloud-compute-0 ~]#
(reverse-i-search)`id': journalctl | egrep 'eth3|mgmt0' | grep br^Cge
[root@overcloud-compute-0 ~]# ^C
[root@overcloud-compute-0 ~]# ifup mgmt0-lldp
2017-05-15T19:00:40.662Z|17960|dpif|WARN|Dropped 32 log messages in
last 25 seconds (most recently, 25 seconds ago) due to excessive rate
2017-05-15T19:00:40.662Z|17961|dpif|WARN|system@ovs-system: failed to
add eth3_ll1 as port: File exists
ovs-vsctl: Error detected while setting up 'eth3_ll1'.  See
ovs-vswitchd log for details.
2017-05-15T19:00:40.922Z|17962|dpif|WARN|system@ovs-system: failed to
add eth3_ll1 as port: File exists
[root@overcloud-compute-0 ~]#
[root@overcloud-compute-0 ~]#
[root@overcloud-compute-0 ~]#
[root@overcloud-compute-0 ~]# ip link ls | grep ll
28: eth3_ll2@eth3_ll1: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue
state DOWN mode DEFAULT qlen 1000
29: eth3_ll1@eth3_ll2: <NO-CARRIER,BROADCAST,MULTICAST,UP,M-DOWN> mtu
9000 qdisc noqueue state LOWERLAYERDOWN mode DEFAULT qlen 1000
[root@overcloud-compute-0 ~]# ip link set dev eth3_ll2 up
[root@overcloud-compute-0 ~]#
2017-05-15T19:00:56.849Z|17963|dpif|WARN|system@ovs-system: failed to
add eth3_ll1 as port: File exists
2017-05-15T19:00:56.851Z|17964|bridge|INFO|bridge br-eth3: added
interface eth3_ll1 on port 17384
2017-05-15T19:00:56.854Z|17965|dpif|WARN|system@ovs-system: failed to
add eth3_ll1 as port: File exists
2017-05-15T19:00:56.856Z|17966|bridge|INFO|bridge br-eth3: added
interface eth3_ll1 on port 17385
2017-05-15T19:00:56.859Z|17967|dpif|WARN|system@ovs-system: failed to
add eth3_ll1 as port: File exists
2017-05-15T19:00:56.861Z|17968|bridge|INFO|bridge br-eth3: added
interface eth3_ll1 on port 17386
2017-05-15T19:00:56.864Z|17969|dpif|WARN|system@ovs-system: failed to
add eth3_ll1 as port: File exists
2017-05-15T19:00:56.866Z|17970|bridge|INFO|bridge br-eth3: added
interface eth3_ll1 on port 17387
2017-05-15T19:00:56.869Z|17971|dpif|WARN|system@ovs-system: failed to
add eth3_ll1 as port: File exists
2017-05-15T19:00:56.873Z|17972|bridge|INFO|bridge br-eth3: added
interface eth3_ll1 on port 17388
2017-05-15T19:00:56.877Z|17973|dpif|WARN|system@ovs-system: failed to
add eth3_ll1 as port: File exists
2017-05-15T19:00:56.880Z|17974|bridge|INFO|bridge br-eth3: added
interface eth3_ll1 on port 17389

Note that the issue does not occur when one switches the port to a
non-internal port type TYPE=OVSPort

[root@overcloud-compute-0 ~]# cat
/etc/sysconfig/network-scripts/ifcfg-mgmt0-lldp
DEVICE=eth3_ll1
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=br-eth3
HOTPLUG=no
USERCTL=no
BOOTPROTO=static
MTU=9000
OVS_EXTRA="set bridge br-eth3 other-config:forward-bpdu=true"
[root@overcloud-compute-0 ~]# ovs-vsctl show | grep br-eth3 -A7
    Bridge "br-eth3"
        Port "eth3"
            tag: 1
            Interface "eth3"
        Port "eth3_ll1"
            Interface "eth3_ll1"
        Port "br-eth3"
            Interface "br-eth3"
                type: internal
    Bridge br-ex
        Controller "tcp:127.0.0.1:6633"
            is_connected: true
        fail_mode: secure
        Port "vlan902"
            tag: 902
[root@overcloud-compute-0 ~]# ifup br-eth3
ifu2017-05-15T19:03:49.036Z|30270|bridge|INFO|bridge br-eth3: added
interface br-eth3 on port 65534
2017-05-15T19:03:49.036Z|30271|bridge|INFO|bridge br-eth3: using
datapath ID 0000c2b7b41b0947
2017-05-15T19:03:49.036Z|30272|connmgr|INFO|br-eth3: added service
controller "punix:/var/run/openvswitch/br-eth3.mgmt"
p br-eth[root@overcloud-compute-0 ~]# ifup eth3
2017-05-15T19:03:54.990Z|30273|bridge|INFO|bridge br-eth3: added
interface eth3 on port 1
[root@overcloud-compute-0 ~]#
[root@overcloud-compute-0 ~]#
[root@overcloud-compute-0 ~]#
[root@overcloud-compute-0 ~]# ifup mgmt0-lldp
2017-05-15T19:04:02.071Z|30274|bridge|INFO|bridge br-eth3: added
interface eth3_ll1 on port 2
[root@overcloud-compute-0 ~]#
[root@overcloud-compute-0 ~]#
[root@overcloud-compute-0 ~]# ip link ls | grep ll
28: eth3_ll2@eth3_ll1: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue
state DOWN mode DEFAULT qlen 1000
29: eth3_ll1@eth3_ll2: <NO-CARRIER,BROADCAST,MULTICAST,UP,M-DOWN> mtu
9000 qdisc noqueue master ovs-system state LOWERLAYERDOWN mode DEFAULT
qlen 1000
[root@overcloud-compute-0 ~]# ip link set dev eth3_ll2 up
[root@overcloud-compute-0 ~]# ip link ls | grep ll
28: eth3_ll2@eth3_ll1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
qdisc noqueue state UP mode DEFAULT qlen 1000
29: eth3_ll1@eth3_ll2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000
qdisc noqueue master ovs-system state UP mode DEFAULT qlen 1000

About the difference between OVSPort and OVSIntPort

        OVSPort)
                ifup_ovs_bridge
                ${OTHERSCRIPT} ${CONFIG} ${2}
                # The port might be already in the database but not yet
                # in the datapath.  So, remove the stale interface first.
                ovs-vsctl -t ${TIMEOUT} \
                        -- --if-exists del-port "$OVS_BRIDGE" "$DEVICE" \
                        -- add-port "$OVS_BRIDGE" "$DEVICE"
$OVS_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA}
                OVSINTF=${DEVICE} /sbin/ifup "$OVS_BRIDGE"
                ;;
        OVSIntPort)
                ifup_ovs_bridge
                ovs-vsctl -t ${TIMEOUT} \
                        -- --if-exists del-port "$OVS_BRIDGE" "$DEVICE" \
                        -- add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS \
                        -- set Interface "$DEVICE" type=internal
${OVS_EXTRA+-- $OVS_EXTRA}
                if [ -n "${OVSDHCPINTERFACES}" ]; then
                        for _iface in ${OVSDHCPINTERFACES}; do
                                /sbin/ifup ${_iface}
                        done
                fi
                BOOTPROTO="${OVSBOOTPROTO}" ${OTHERSCRIPT} ${CONFIG} ${2}
                ;;

Environment

OVS 2.5 and 2.6

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content