diff --git a/internal/netif/bridge.go b/internal/netif/bridge.go index a4754a3..daf21ec 100644 --- a/internal/netif/bridge.go +++ b/internal/netif/bridge.go @@ -1,10 +1,24 @@ package netif import ( + "fmt" + "os" + "github.com/vishvananda/netlink" ) -func CreateBridge(name string, mtu int) error { +func setBridgeSTP(bridge string, enable bool) error { + path := fmt.Sprintf("/sys/class/net/%s/bridge/stp_state", bridge) + + val := "0" + if enable { + val = "1" + } + + return os.WriteFile(path, []byte(val), 0644) +} + +func CreateBridge(name string, mtu int, stp bool) error { br := &netlink.Bridge{ LinkAttrs: netlink.LinkAttrs{ Name: name, @@ -20,7 +34,7 @@ func CreateBridge(name string, mtu int) error { return err } - return nil + return setBridgeSTP(name, stp) } func BridgeSetMaster(iface, bridge string) error { diff --git a/internal/vpc/create.go b/internal/vpc/create.go index 5ff5fa5..55896ba 100644 --- a/internal/vpc/create.go +++ b/internal/vpc/create.go @@ -16,36 +16,42 @@ func CreateVPC(name string) error { } // create veth public for this netns - if err := netif.CreateVethToNetns("veth"+name+"ext", "vethpublicint", "/var/run/netns/"+name, 9000); err != nil { + if err := netif.CreateVethToNetns(name+"-ext", "veth-"+name+"-int", "/var/run/netns/"+name, 9000); err != nil { return err } // create public bridge in netns if err := netns.Call(name, func() error { - return netif.CreateBridge("br-public", 1500) + return netif.CreateBridge("br-public", 1500, false) }); err != nil { return err } // set veth to ext public bridge - if err := netif.BridgeSetMaster("veth"+name+"ext", "br-public"); err != nil { + if err := netif.BridgeSetMaster(name+"-ext", "br-public"); err != nil { return err } // set veth to int public bridge if err := netns.Call(name, func() error { - return netif.BridgeSetMaster("vethpublicint", "br-public") + return netif.BridgeSetMaster("veth-"+name+"-int", "br-public") }); err != nil { return err } // set set ext veth up - if err := netif.LinkSetUp("veth" + name + "ext"); err != nil { + if err := netif.LinkSetUp(name + "-ext"); err != nil { return nil } // set set int veth up if err := netns.Call(name, func() error { - return netif.LinkSetUp("vethpublicint") + return netif.LinkSetUp("veth-" + name + "-int") + }); err != nil { + return err + } + // set set int bridge up + if err := netns.Call(name, func() error { + return netif.LinkSetUp("br-public") }); err != nil { return err }