package s6netdev import ( "net" "net/netip" ) type ( RouteTable uint16 Metric uint32 VLAN uint16 ) type Property struct { Key, Value, Default string } type Sysctl_IP struct { V4, V6 []Property } type DHCP_IP struct { V4, V6 bool // Should we start dhcp on this interface? } type Iface struct { Name string // Interface name Type *NetdevIfType // Type of interface Slaves []*Iface // Slaves for VRFs, Bridges and Bonds etc... VlanId VLAN // VLAN id for VLAN interfaces Parent *Iface // Parent interface for VLAN interfaces Table RouteTable // Routing table, for VRF MACAddr net.HardwareAddr // MAC address of interface (only valid for physical, bridges and VLAN) Addresses []netip.Prefix // Addresses to be assigned to interface Routes []Route // Routes to be assigned to interface DHCP DHCP_IP // Should we start dhcp on this interface? Properties []Property // List of properties of the interface, valid for many Sysctls Sysctl_IP // Sysctls associated with this interface } type Route struct { Default bool // VRF would be a field but it can be derived from parent Type string // unicast default, can be others IPver int // if 0, will guess based on Net Net netip.Prefix Via netip.Addr Vrf *Iface Table *RouteTable Metric Metric // Should be explicitly initialised to 1024 } type NetdevIfType struct { str string deps []S6SvcName } var NetdevIfTypes = struct { Phys, Loopback, Bridge, Vlan, Wireguard, Bond, Vrf NetdevIfType }{ Phys: NetdevIfType{"", []S6SvcName{"bundle.hw-coldplug"}}, Loopback: NetdevIfType{"loopback", []S6SvcName{}}, Bridge: NetdevIfType{"bridge", []S6SvcName{"module.bridge"}}, Vlan: NetdevIfType{"vlan", []S6SvcName{"module.8021q"}}, Wireguard: NetdevIfType{"wireguard", []S6SvcName{"module.wireguard"}}, Bond: NetdevIfType{"bond", []S6SvcName{"module.bonding"}}, Vrf: NetdevIfType{"vrf", []S6SvcName{"module.vrf"}}, }