setup restarts the network.
(oldConfig map[string]string)
| 991 | |
| 992 | // setup restarts the network. |
| 993 | func (n *bridge) setup(oldConfig map[string]string) error { |
| 994 | // If we are in mock mode, just no-op. |
| 995 | if n.state.OS.MockMode { |
| 996 | return nil |
| 997 | } |
| 998 | |
| 999 | n.logger.Debug("Setting up network") |
| 1000 | |
| 1001 | reverter := revert.New() |
| 1002 | defer reverter.Fail() |
| 1003 | |
| 1004 | // Create directory. |
| 1005 | if !util.PathExists(internalUtil.VarPath("networks", n.name)) { |
| 1006 | err := os.MkdirAll(internalUtil.VarPath("networks", n.name), 0o711) |
| 1007 | if err != nil { |
| 1008 | return err |
| 1009 | } |
| 1010 | } |
| 1011 | |
| 1012 | var err error |
| 1013 | |
| 1014 | // Build up the bridge interface's settings. |
| 1015 | bridge := ip.Bridge{ |
| 1016 | Link: ip.Link{ |
| 1017 | Name: n.name, |
| 1018 | MTU: bridgeMTUDefault, |
| 1019 | }, |
| 1020 | } |
| 1021 | |
| 1022 | // Get a list of tunnels. |
| 1023 | tunnels := n.getTunnels() |
| 1024 | |
| 1025 | // Decide the MTU for the bridge interface. |
| 1026 | if n.config["bridge.mtu"] != "" { |
| 1027 | mtuInt, err := strconv.ParseUint(n.config["bridge.mtu"], 10, 32) |
| 1028 | if err != nil { |
| 1029 | return fmt.Errorf("Invalid MTU %q: %w", n.config["bridge.mtu"], err) |
| 1030 | } |
| 1031 | |
| 1032 | bridge.MTU = uint32(mtuInt) |
| 1033 | } else if len(tunnels) > 0 { |
| 1034 | bridge.MTU = 1400 |
| 1035 | } |
| 1036 | |
| 1037 | // Decide the MAC address of bridge interface. |
| 1038 | if n.config["bridge.hwaddr"] != "" { |
| 1039 | bridge.Address, err = net.ParseMAC(n.config["bridge.hwaddr"]) |
| 1040 | if err != nil { |
| 1041 | return fmt.Errorf("Failed parsing MAC address %q: %w", n.config["bridge.hwaddr"], err) |
| 1042 | } |
| 1043 | } else { |
| 1044 | // If no cluster wide static MAC address set, then generate one. |
| 1045 | var seedNodeID int64 |
| 1046 | |
| 1047 | if n.checkClusterWideMACSafe(n.config) != nil { |
| 1048 | // If not safe to use a cluster wide MAC, then use cluster node's ID to |
| 1049 | // generate a stable per-node & network derived random MAC. |
| 1050 | seedNodeID = n.state.DB.Cluster.GetNodeID() |
no test coverage detected