From 322f70b1f90a9c7800a1589e2db1896db511eda6 Mon Sep 17 00:00:00 2001 From: weizhoublue <45163302+weizhoublue@users.noreply.github.com> Date: Wed, 22 Nov 2023 20:02:35 +0800 Subject: [PATCH] Merge pull request #2639 from cyclinder/ifacer/fix_bond ifacer: Fix the slave with bond was not set if vlanId was set to 0 --- cmd/ifacer/cmd/cmd_add.go | 48 +++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/cmd/ifacer/cmd/cmd_add.go b/cmd/ifacer/cmd/cmd_add.go index 1dfa861eb7..587ecb8753 100644 --- a/cmd/ifacer/cmd/cmd_add.go +++ b/cmd/ifacer/cmd/cmd_add.go @@ -55,25 +55,6 @@ func CmdAdd(args *skel.CmdArgs) error { return types.PrintResult(result, conf.CNIVersion) } - for _, slave := range conf.Interfaces { - link, err := netlink.LinkByName(slave) - if err != nil { - return fmt.Errorf("failed to InterfaceByName %s: %w", slave, err) - } - - if err = netlink.LinkSetDown(link); err != nil { - return fmt.Errorf("failed to set slave %s down: %w", slave, err) - } - - if err = networking.LinkSetBondSlave(slave, bond); err != nil { - return err - } - } - - if err = netlink.LinkSetUp(bond); err != nil { - return fmt.Errorf("failed to set %s up", bond.Name) - } - vlanName := getVlanIfaceName(conf.Bond.Name, conf.VlanID) if err := checkInterfaceWithSameVlan(conf.VlanID, vlanName); err != nil { return err @@ -150,8 +131,35 @@ func createBondDevice(conf *Ifacer) (*netlink.Bond, error) { } } + if err = netlink.LinkAdd(bond); err != nil { + return nil, err + } + + for _, slave := range conf.Interfaces { + link, err := netlink.LinkByName(slave) + if err != nil { + return nil, fmt.Errorf("failed to InterfaceByName %s: %w", slave, err) + } + + if err = netlink.LinkSetDown(link); err != nil { + return nil, fmt.Errorf("failed to set slave %s down: %w", slave, err) + } + + if err = networking.LinkSetBondSlave(slave, bond); err != nil { + return nil, err + } + + if err = netlink.LinkSetUp(link); err != nil { + return nil, err + } + } + + if err = netlink.LinkSetUp(bond); err != nil { + return nil, fmt.Errorf("failed to set %s up", bond.Name) + } + // create vlan interface base on bond - return bond, netlink.LinkAdd(bond) + return bond, nil } func createVlanDevice(conf *Ifacer) error {