ifupdown-ng / ifupdown-ng

flexible ifup/ifdown implementation

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

BUG: bridge adds VRF interface in IF_BRIDGE_PORTS

EasyNetDev opened this issue · comments

I notice a strange behavior of the bridge configuration.
Until a specific moment the IF_BRIDGE_PORTS and PORTS are correct. But then I notice that VRF interface is added in IF_BRIDGE_PORTS and PORTS!

Config:

cat /etc/network/interfaces.d/15-bridge
auto br0
iface br0
    use bridge
    bridge-stp on
    #bridge-bridgeprio 36864
    bridge-vlan-aware yes
    bridge-fd 2
    bridge-ports eth2
#    bridge-ports none
    bridge-vids 1,50,100
    bridge-pvid 1
    bridge-allow-untagged yes
    post-up   echo "1" > /sys/class/net/$IFACE/queues/tx-0/xps_rxqs
    post-up   echo "f" > /sys/class/net/$IFACE/queues/rx-0/rps_cpus
    address 192.168.1.2/24
    address 192.168.2.2/24
    address fc00:192:168:1::2/64
    address fc00:192:168:2::2/64
    vrf red
    vrrp-id 10 20
    vrrp-address 10,192.168.1.1/24,fc00:192:168:1::1/64 20,192.168.2.1/24,fc00:192:168:1::1/64
#    vrrp-ipv4
#    vrrp-ipv6

iface eth2
    bridge-vids 100
    bridge-pvid 1

Output with some export variables:

ifupdown: lo: attempting to run link executor for phase depend
/usr/libexec/ifupdown-ng/link
+ is_vlan
+ [ -z  ]
+ return 1
+ [  = veth -a  ]
ifupdown: lo: attempting to run loopback executor for phase depend
ifupdown: eth0: attempting to run link executor for phase depend
/usr/libexec/ifupdown-ng/link
+ is_vlan
+ [ -z  ]
+ return 1
+ [  = veth -a  ]
ifupdown: eth0: attempting to run static executor for phase depend
/usr/libexec/ifupdown-ng/static
+ [ -z  ]
+ IF_METRIC=1
+ [ -n  ]
+ [ -n  ]
+ [ -n 1 ]
+ METRIC=metric 1
+ exit 0
ifupdown: eth0: attempting to run name executor for phase depend
ifupdown: red: attempting to run link executor for phase depend
/usr/libexec/ifupdown-ng/link
+ is_vlan
+ [ -z  ]
+ return 1
+ [  = veth -a  ]
ifupdown: red: attempting to run vrf executor for phase depend
/usr/libexec/ifupdown-ng/vrf
+ echo
+ exit 0
ifupdown: br0: attempting to run link executor for phase depend
/usr/libexec/ifupdown-ng/link
+ is_vlan
+ [ -z  ]
+ return 1
+ [  = veth -a  ]
ifupdown: br0: attempting to run bridge executor for phase depend
/usr/libexec/ifupdown-ng/bridge
+ export
+ PORTS=eth2
+ [ eth2 ]
+ echo eth2
ifupdown: br0: attempting to run post executor for phase depend
ifupdown: br0: attempting to run static executor for phase depend
/usr/libexec/ifupdown-ng/static
+ [ -z  ]
+ IF_METRIC=1
+ [ -n  ]
+ [ -n red ]
+ VRF_TABLE=vrf red
+ [ -n 1 ]
+ METRIC=metric 1
+ exit 0
ifupdown: br0: attempting to run vrf executor for phase depend
/usr/libexec/ifupdown-ng/vrf
+ echo red
+ exit 0
ifupdown: br0: attempting to run vrrp executor for phase depend
/usr/libexec/ifupdown-ng/vrrp
+ exit 0
ifupdown: eth2: attempting to run link executor for phase depend
/usr/libexec/ifupdown-ng/link
+ is_vlan
+ [ -z  ]
+ return 1
+ [  = veth -a  ]
ifupdown: eth2: attempting to run bridge executor for phase depend
/usr/libexec/ifupdown-ng/bridge
+ export
+ [  ]
ifupdown: red: attempting to run link executor for phase depend
/usr/libexec/ifupdown-ng/link
+ is_vlan
+ [ -z  ]
+ return 1
+ [  = veth -a  ]
ifupdown: red: attempting to run vrf executor for phase depend
/usr/libexec/ifupdown-ng/vrf
+ echo
+ exit 0
ifupdown: eth2: attempting to run link executor for phase depend
/usr/libexec/ifupdown-ng/link
+ is_vlan
+ [ -z  ]
+ return 1
+ [  = veth -a  ]
ifupdown: eth2: attempting to run bridge executor for phase depend
/usr/libexec/ifupdown-ng/bridge
+ export
+ [  ]
ifup: acquiring lock on /run/ifstate.br0.lock
ifup: changing state of interface br0 to 'up'
ifupdown: skipping dependent interface eth2 (of br0) -- already configured
ifupdown: skipping dependent interface red (of br0) -- already configured
ifupdown: br0: attempting to run link executor for phase create
/usr/libexec/ifupdown-ng/link
+ [  = dummy ]
+ [  = veth ]
+ is_vlan
+ [ -z  ]
+ return 1
ifupdown: br0: attempting to run bridge executor for phase create
/usr/libexec/ifupdown-ng/bridge
+ export
+ PORTS=eth2 red
+ [ eth2 red  -a ! -d /sys/class/net/br0 ]
+ ip link add br0 type bridge
ifupdown: br0: attempting to run post executor for phase create
ifupdown: br0: attempting to run static executor for phase create
/usr/libexec/ifupdown-ng/static
+ [ -z  ]
+ IF_METRIC=1
+ [ -n  ]
+ [ -n red ]
+ VRF_TABLE=vrf red
+ [ -n 1 ]
+ METRIC=metric 1
+ exit 0
ifupdown: br0: attempting to run vrf executor for phase create
/usr/libexec/ifupdown-ng/vrf
+ [ -n  ]
+ exit 0
ifupdown: br0: attempting to run vrrp executor for phase create
/usr/libexec/ifupdown-ng/vrrp
+ export
export IFACE='br0'
export IF_ADDRESS='192.168.1.2/24'
export IF_ADDRESSES='192.168.1.2/24 192.168.2.2/24 fc00:192:168:1::2/64 fc00:192:168:2::2/64 '
export IF_BRIDGE_ALLOW_UNTAGGED='yes'
export IF_BRIDGE_FD='2'
export IF_BRIDGE_PORTS='eth2 red '
export IF_BRIDGE_PVID='1'
export IF_BRIDGE_STP='on'
export IF_BRIDGE_VIDS='1,50,100'
export IF_BRIDGE_VLAN_AWARE='yes'
export IF_GATEWAYS=''
export IF_POST_UP='echo "f" > /sys/class/net/$IFACE/queues/rx-0/rps_cpus'
export IF_REQUIRES='eth2 red '
export IF_USE='vrrp'
export IF_VRF_MEMBER='red'
export IF_VRRP_ADDRESS='10,192.168.1.1/24,fc00:192:168:1::1/64 20,192.168.2.1/24,fc00:192:168:1::1/64'
export IF_VRRP_ID='10 20'
export INTERFACES_FILE='/etc/network/interfaces'
export METHOD='none'
export MODE='start'
export PHASE='create'
export PWD='/opt/devel/ifupdown-ng/vrrp/executor-scripts/linux'
export VERBOSE='1'
+ init_vrrp
+ which cksum
+ _cksum=/usr/bin/cksum
+ [ ! /usr/bin/cksum ]
+ [ ! 10 20 ]
+ [ !  -a ! -d /sys/class/net/br0 ]
+ vrrp_gen_name
+ crc32_hex br0-10 20
+ echo br0-10
+ /usr/bin/cksum
+ cut -f1 -d
+ printf %08x 2883066180
+ IFACE_CRC32=abd81944
+ IFACE_VRRP_4=vrrp-abd81944-4
+ IFACE_VRRP_6=vrrp-abd81944-6
+ [ !  -a -d /sys/class/net/vrrp-abd81944-4 ]
+ [ !  -a -d /sys/class/net/vrrp-abd81944-6 ]
+ VRRP_MAC_4=
+ VRRP_MAC_6=
+ get_vrrp_mac 10 20
+ printf %02x\n 10
+ VRRP_MAC_6=00:00:5e:00:02:0a
+ printf %02x\n 10
+ VRRP_MAC_4=00:00:5e:00:01:0a
+ return
+ ifquery -p vrf-member br0
+ head -1
+ VRRP_VRF=red
+ [ !  -a ! -d /sys/class/net/br0 ]
+ exit 0
ifupdown: br0: attempting to run link executor for phase pre-up
/usr/libexec/ifupdown-ng/link
ifupdown: br0: attempting to run bridge executor for phase pre-up
/usr/libexec/ifupdown-ng/bridge
+ export
+ PORTS=eth2 red
+ [ eth2 red  ]
+ wait_ports
+ local timeout= waitports=
+ [ -z  ]
+ return 0
+ set_bridge_opts
+ [ -x /sbin/bridge ]
+ set_bridge_opts_iproute2
+ [ -n  ]
+ [ -n  ]
+ [ -n 2 ]
+ ip link set dev br0 type bridge forward_delay 2
+ [ -n  ]
+ [ -n  ]
+ [ -n  ]
+ [ -n  ]
+ [ -n on ]
+ yesno on
+ echo 0
+ ip link set dev br0 type bridge stp 0
+ [ -n yes ]
+ yesno yes
+ echo 1
+ ip link set dev br0 type bridge vlan_filtering 1
+ return 0
+ set_bridge_vlans
+ [  ]
+ configure_trunk_port br0 self
+ port=br0
+ self=self
+ [ self ]
+ allow_untagged=yes
+ pvid=1
+ vids=1,50,100
+ yesno yes
+ echo 1
+ [ yes -a 1 = 0 ]
+ [ 1 ]
+ bridge vlan show dev br0
+ tail -n +2
+ grep -v ^$
+ sed -e s/^br0//
+ awk /PVID/ { print $1 }
+ cur_pvid=1
+ [ 1 ]
+ bridge vlan del vid 1 dev br0 self
+ bridge vlan add vid 1 dev br0 pvid untagged self
+ bridge vlan add vid 1,50,100 dev br0 self
+ add_ports
+ local port=
+ [ -n  ]
+ ip link set dev eth2 master br0
+ ip link set dev eth2 up
+ [ -n  ]
+ ip link set dev red master br0
RTNETLINK answers: Invalid argument
+ set_bridge_port_vlans
+ ifquery -p bridge-access eth2
+ access_vlan=
+ [  ]
+ configure_trunk_port eth2
+ port=eth2
+ self=
+ [  ]
+ ifquery -p bridge-allow-untagged eth2
+ allow_untagged=
+ ifquery -p bridge-pvid eth2
+ pvid=1
+ ifquery -p bridge-vids eth2
+ vids=100
+ yesno
+ echo 0
+ [  -a 0 = 0 ]
+ [ 1 ]
+ bridge vlan show dev eth2
+ tail -n +2
+ grep -v ^$
+ sed -e s/^eth2//
+ awk /PVID/ { print $1 }
+ cur_pvid=1
+ [ 1 ]
+ bridge vlan del vid 1 dev eth2
+ bridge vlan add vid 1 dev eth2 pvid untagged
+ bridge vlan add vid 100 dev eth2
+ ifquery -p bridge-access red
+ access_vlan=
+ [  ]
+ configure_trunk_port red
+ port=red
+ self=
+ [  ]
+ ifquery -p bridge-allow-untagged red
+ allow_untagged=
+ ifquery -p bridge-pvid red
+ pvid=
+ ifquery -p bridge-vids red
+ vids=
+ yesno
+ echo 0
+ [  -a 0 = 0 ]
+ [  ]
+ wait_bridge
+ local timeout=
+ [ -z  ]
+ find_maxwait
+ awk {printf("%.f\n", 2 * $0 / 100); } /sys/class/net/br0/bridge/forward_delay
+ timeout=0
+ ip link set dev br0 up
+ all_ports_ready
+ local port=
+ cat /sys/class/net/br0/brif/eth2/state
+ cat /sys/class/net/br0/brif/red/state
cat: /sys/class/net/br0/brif/red/state: No such file or directory
+ return 0
ifupdown: br0: attempting to run post executor for phase pre-up
ifupdown: br0: attempting to run static executor for phase pre-up
/usr/libexec/ifupdown-ng/static
+ [ -z  ]
+ IF_METRIC=1
+ [ -n  ]
+ [ -n red ]
+ VRF_TABLE=vrf red
+ [ -n 1 ]
+ METRIC=metric 1
+ exit 0
ifupdown: br0: attempting to run vrf executor for phase pre-up
/usr/libexec/ifupdown-ng/vrf
+ [ -n red ]
+ handle_member
+ /sbin/ip link set br0 master red
+ exit 0
ifupdown: br0: attempting to run vrrp executor for phase pre-up
/usr/libexec/ifupdown-ng/vrrp
ifupdown: br0: attempting to run link executor for phase up
/usr/libexec/ifupdown-ng/link
+ IF_LINK_OPTIONS=
+ [ -n  ]
+ [ -n  ]
+ ip link set up dev br0
+ [  ]
ifupdown: br0: attempting to run bridge executor for phase up
/usr/libexec/ifupdown-ng/bridge
+ export
+ PORTS=eth2 red
ifupdown: br0: attempting to run post executor for phase up
ifupdown: br0: attempting to run static executor for phase up
/usr/libexec/ifupdown-ng/static
+ [ -z  ]
+ IF_METRIC=1
+ [ -n  ]
+ [ -n red ]
+ VRF_TABLE=vrf red
+ [ -n 1 ]
+ METRIC=metric 1
+ configure_addresses add
+ addr_family 192.168.1.2/24
+ [ 192.168.1.2/24 != 68.1.2/24 ]
+ echo -4
+ addrfam=-4
+ [  -a -4 = -4 ]
+ PEER=
+ ip -4 addr add 192.168.1.2/24 dev br0
+ addr_family 192.168.2.2/24
+ [ 192.168.2.2/24 != 68.2.2/24 ]
+ echo -4
+ addrfam=-4
+ [  -a -4 = -4 ]
+ PEER=
+ ip -4 addr add 192.168.2.2/24 dev br0
+ addr_family fc00:192:168:1::2/64
+ [ fc00:192:168:1::2/64 != fc00:192:168:1::2/64 ]
+ [ fc00:192:168:1::2/64 != 92:168:1::2/64 ]
+ echo -6
+ addrfam=-6
+ [  -a -6 = -4 ]
+ PEER=
+ ip -6 addr add fc00:192:168:1::2/64 dev br0
+ addr_family fc00:192:168:2::2/64
+ [ fc00:192:168:2::2/64 != fc00:192:168:2::2/64 ]
+ [ fc00:192:168:2::2/64 != 92:168:2::2/64 ]
+ echo -6
+ addrfam=-6
+ [  -a -6 = -4 ]
+ PEER=
+ ip -6 addr add fc00:192:168:2::2/64 dev br0
+ configure_gateways add
ifupdown: br0: attempting to run vrf executor for phase up
/usr/libexec/ifupdown-ng/vrf
+ exit 0
ifupdown: br0: attempting to run vrrp executor for phase up
/usr/libexec/ifupdown-ng/vrrp
ifupdown: br0: attempting to run link executor for phase post-up
/usr/libexec/ifupdown-ng/link
ifupdown: br0: attempting to run bridge executor for phase post-up
/usr/libexec/ifupdown-ng/bridge
+ export
+ PORTS=eth2 red
ifupdown: br0: attempting to run post executor for phase post-up
ifupdown: br0: attempting to run static executor for phase post-up
/usr/libexec/ifupdown-ng/static
+ [ -z  ]
+ IF_METRIC=1
+ [ -n  ]
+ [ -n red ]
+ VRF_TABLE=vrf red
+ [ -n 1 ]
+ METRIC=metric 1
+ exit 0
ifupdown: br0: attempting to run vrf executor for phase post-up
/usr/libexec/ifupdown-ng/vrf
+ exit 0
ifupdown: br0: attempting to run vrrp executor for phase post-up
/usr/libexec/ifupdown-ng/vrrp
echo "1" > /sys/class/net/$IFACE/queues/tx-0/xps_rxqs
echo "f" > /sys/class/net/$IFACE/queues/rx-0/rps_cpus
root@RouterFW:/opt/devel/ifupdown-ng/vrrp/executor-scripts/linux#