netconfig: move bridge creation into its own function
also don’t short-circuit the rest of the configuration if bridge config fails
This commit is contained in:
parent
cffd872346
commit
bfb94377f4
@ -240,30 +240,10 @@ func LinkAddress(dir, ifname string) (net.IP, error) {
|
|||||||
return ip, err
|
return ip, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyInterfaces(dir, root string) error {
|
func applyBridges(cfg *InterfaceConfig) error {
|
||||||
b, err := ioutil.ReadFile(filepath.Join(dir, "interfaces.json"))
|
|
||||||
if err != nil {
|
|
||||||
if os.IsNotExist(err) {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
var cfg InterfaceConfig
|
|
||||||
if err := json.Unmarshal(b, &cfg); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
byName := make(map[string]InterfaceDetails)
|
|
||||||
byHardwareAddr := make(map[string]InterfaceDetails)
|
|
||||||
for _, details := range cfg.Interfaces {
|
|
||||||
byHardwareAddr[details.HardwareAddr] = details
|
|
||||||
if spoof := details.SpoofHardwareAddr; spoof != "" {
|
|
||||||
byHardwareAddr[spoof] = details
|
|
||||||
}
|
|
||||||
byName[details.Name] = details
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, bridge := range cfg.Bridges {
|
for _, bridge := range cfg.Bridges {
|
||||||
if _, err := netlink.LinkByName(bridge.Name); err != nil {
|
if _, err := netlink.LinkByName(bridge.Name); err != nil {
|
||||||
|
log.Printf("creating bridge %s", bridge.Name)
|
||||||
link := &netlink.Bridge{LinkAttrs: netlink.LinkAttrs{Name: bridge.Name}}
|
link := &netlink.Bridge{LinkAttrs: netlink.LinkAttrs{Name: bridge.Name}}
|
||||||
if err := netlink.LinkAdd(link); err != nil {
|
if err := netlink.LinkAdd(link); err != nil {
|
||||||
return fmt.Errorf("netlink.LinkAdd: %v", err)
|
return fmt.Errorf("netlink.LinkAdd: %v", err)
|
||||||
@ -310,6 +290,34 @@ func applyInterfaces(dir, root string) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func applyInterfaces(dir, root string) error {
|
||||||
|
b, err := ioutil.ReadFile(filepath.Join(dir, "interfaces.json"))
|
||||||
|
if err != nil {
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
var cfg InterfaceConfig
|
||||||
|
if err := json.Unmarshal(b, &cfg); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
byName := make(map[string]InterfaceDetails)
|
||||||
|
byHardwareAddr := make(map[string]InterfaceDetails)
|
||||||
|
for _, details := range cfg.Interfaces {
|
||||||
|
byHardwareAddr[details.HardwareAddr] = details
|
||||||
|
if spoof := details.SpoofHardwareAddr; spoof != "" {
|
||||||
|
byHardwareAddr[spoof] = details
|
||||||
|
}
|
||||||
|
byName[details.Name] = details
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := applyBridges(&cfg); err != nil {
|
||||||
|
log.Printf("applyBridges: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
links, err := netlink.LinkList()
|
links, err := netlink.LinkList()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user