package main import ( "log" "os" "git.redxen.eu/nnd/s6-netdev" ) func main() { var ( err error l = log.New(os.Stderr, "s6-netdev: ", log.Ltime|log.Lshortfile|log.Lmsgprefix) ifs = make(s6netdev.IfMap) ) t := s6netdev.S6NewTree() // Loopback ifs.AddIf(&s6netdev.Iface{ Name: "lo", Type: &s6netdev.NetdevIfTypes.Loopback, }) // Physical interfaces ifs.AddIf(&s6netdev.Iface{ Name: "eth0", Type: &s6netdev.NetdevIfTypes.Phys, }) // Bridge interfaces ifs.AddIf(&s6netdev.Iface{ Name: "br0", Type: &s6netdev.NetdevIfTypes.Bridge, DHCP: s6netdev.DHCP_IP{V4: true}, Properties: []s6netdev.Property{ {Key: "stp_state", Value: "0", Default: "0"}, {Key: "mcast_snooping", Value: "0", Default: "1"}, }, }) for _, m := range []struct { Master string Slaves []string }{ { Master: "br0", Slaves: []string{ "eth0", }, }, } { master := ifs[m.Master] for _, slave := range m.Slaves { master.Slaves = append(master.Slaves, ifs[slave]) } ifs[m.Master] = master } for _, v := range ifs { t.Services(*v) } for _, v := range t.S6Services() { if s6netdev.NetdevIsDummy(v.Name) { continue } l.Printf("Commiting %s\n", v.Name) if err = t.S6CommitService(v); err != nil { l.Fatalf("Failed to commit %s, %s\n", v.Name, err) } } }