52 lines
840 B
Go
52 lines
840 B
Go
package netif
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/vishvananda/netlink"
|
|
)
|
|
|
|
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,
|
|
MTU: mtu,
|
|
},
|
|
}
|
|
|
|
if err := netlink.LinkAdd(br); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := netlink.LinkSetUp(br); err != nil {
|
|
return err
|
|
}
|
|
|
|
return setBridgeSTP(name, stp)
|
|
}
|
|
|
|
func BridgeSetMaster(iface, bridge string) error {
|
|
link, err := netlink.LinkByName(iface)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
br, err := netlink.LinkByName(bridge)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return netlink.LinkSetMaster(link, br)
|
|
}
|