diff --git a/cmd/network/network.go b/cmd/network/network.go index 49a1a031..09012fcf 100644 --- a/cmd/network/network.go +++ b/cmd/network/network.go @@ -29,21 +29,25 @@ func Main() { } func applyNetworkConfigs(cfg *config.Config) error { - links, err := netlink.LinkList() + links, err := netlink.LinkList() if err != nil { return err } - + //apply network config - for _, netConf := range cfg.Network.Interfaces { + for _, netConf := range cfg.Network.Interfaces { for _, link := range links { err := applyNetConf(link, netConf) if err != nil { - log.Fatal(err) + log.Errorf("Failed to apply settings to %s : %v", link.Attrs().Name, err) } } } + if err != nil { + return err + } + //post run if cfg.Network.PostRun != nil { return docker.StartAndWait(config.DOCKER_HOST, cfg.Network.PostRun) @@ -54,7 +58,8 @@ func applyNetworkConfigs(cfg *config.Config) error { func applyNetConf(link netlink.Link, netConf config.InterfaceConfig) error { if matches(link.Attrs().Name, netConf.Match) { if netConf.DHCP { - cmd := exec.Command("udhcpc", "-i", link.Attrs().Name) + log.Infof("Running DHCP on %s", link.Attrs().Name) + cmd := exec.Command("udhcpc", "-i", link.Attrs().Name, "-t", "20", "-n") cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { @@ -72,23 +77,37 @@ func applyNetConf(link netlink.Link, netConf config.InterfaceConfig) error { log.Error("addr add failed") return err } + log.Infof("Set %s on %s", netConf.Address, link.Attrs().Name) } + if netConf.MTU > 0 { if err := netlink.LinkSetMTU(link, netConf.MTU); err != nil { log.Error("set MTU Failed") - return err + return err } } + + if err := netlink.LinkSetUp(link); err != nil { + log.Error("failed to setup link") + return err + } + if netConf.Gateway != "" { - route := netlink.Route{LinkIndex: link.Attrs().Index, Scope: netlink.SCOPE_LINK, Gw: net.ParseIP(netConf.Gateway)} + gatewayIp := net.ParseIP(netConf.Gateway) + if gatewayIp == nil { + return errors.New("Invalid gateway address " + netConf.Gateway) + } + + route := netlink.Route{ + Scope: netlink.SCOPE_UNIVERSE, + Gw: net.ParseIP(netConf.Gateway), + } if err := netlink.RouteAdd(&route); err != nil { log.Error("gateway set failed") return err } - } - if err := netlink.LinkSetUp(link); err != nil { - log.Error("failed to setup link") - return err + + log.Infof("Set default gateway %s", netConf.Gateway) } } return nil @@ -97,4 +116,3 @@ func applyNetConf(link netlink.Link, netConf config.InterfaceConfig) error { func matches(link, conf string) bool { return glob.Glob(conf, link) } - diff --git a/config/default.go b/config/default.go index 2205bf65..74e743ea 100644 --- a/config/default.go +++ b/config/default.go @@ -17,11 +17,15 @@ func NewConfig() *Config { Userdocker: UserDockerInfo{ UseTLS: true, }, - Network: NetworkConfig { - Interfaces: []InterfaceConfig { + Network: NetworkConfig{ + Interfaces: []InterfaceConfig{ { - Match: "*", - DHCP: true, + Match: "eth*", + DHCP: true, + }, + { + Match: "lo", + Address: "127.0.0.1/8", }, }, }, @@ -80,9 +84,11 @@ func NewConfig() *Config { { Id: "network", Cmd: "--name=network " + + "--rm " + "--cap-add=NET_ADMIN " + "--net=host " + - "--rm " + + "--volumes-from=command-volumes " + + "--volumes-from=system-volumes " + "network", }, { diff --git a/scripts/dockerimages/03-network b/scripts/dockerimages/03-network index 742cc413..23bf0dbf 100644 --- a/scripts/dockerimages/03-network +++ b/scripts/dockerimages/03-network @@ -1,3 +1,2 @@ FROM base -COPY scripts/dockerimages/scripts/network.sh / -CMD ["/network.sh"] +CMD ["netconf"] diff --git a/scripts/dockerimages/scripts/network.sh b/scripts/dockerimages/scripts/network.sh deleted file mode 100755 index 83f7ffb1..00000000 --- a/scripts/dockerimages/scripts/network.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -/sbin/ip addr add 127.0.0.1/8 dev lo -/sbin/ip link set up dev lo -udhcpc -i eth0