diff --git a/internal/netif/bridge.go b/internal/netif/bridge.go new file mode 100644 index 0000000..d6dea70 --- /dev/null +++ b/internal/netif/bridge.go @@ -0,0 +1,38 @@ +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) +}