More meaningful errors

This commit is contained in:
Bryan Boreham committed 2017-04-17 19:41:47 +00:00
1 parent c3a41286fd
commit 9494f0655d
1 file changed
+24 -20
+24 -20
View File
@@ -1,13 +1,13 @@
package net
import (
"errors"
"fmt"
"io/ioutil"
"net"
"github.com/Sirupsen/logrus"
"github.com/coreos/go-iptables/iptables"
"github.com/pkg/errors"
"github.com/vishvananda/netlink"
"github.com/weaveworks/weave/common/odp"
@@ -71,9 +71,10 @@ func DetectBridgeType(weaveBridgeName, datapathName string) BridgeType {
var ErrSetBridgeMac = errors.New("Setting $DOCKER_BRIDGE MAC (mitigate https://github.com/docker/docker/issues/14908)")
func EnforceAddrAssignType(bridgeName string) error {
addrAssignType, err := ioutil.ReadFile(fmt.Sprintf("/sys/class/net/%s/addr_assign_type", bridgeName))
sysctlFilename := fmt.Sprintf("/sys/class/net/%s/addr_assign_type", bridgeName)
addrAssignType, err := ioutil.ReadFile(sysctlFilename)
if err != nil {
return err
return errors.Wrapf(err, "reading %q", sysctlFilename)
}
// From include/uapi/linux/netdevice.h
@@ -85,16 +86,16 @@ func EnforceAddrAssignType(bridgeName string) error {
if addrAssignType[0] != '3' {
link, err := netlink.LinkByName(bridgeName)
if err != nil {
return err
return errors.Wrapf(err, "EnforceAddrAssignType finding bridge %s", bridgeName)
}
mac, err := RandomMAC()
if err != nil {
return err
return errors.Wrap(err, "creating random MAC")
}
if err := netlink.LinkSetHardwareAddr(link, mac); err != nil {
return err
return errors.Wrapf(err, "setting bridge %s address to %v", bridgeName, mac)
}
return ErrSetBridgeMac
}
@@ -198,7 +199,7 @@ func CreateBridge(config *BridgeConfig) (BridgeType, error) {
}
odpSupported, err := odp.CreateDatapath(config.DatapathName)
if err != nil {
return None, err
return None, errors.Wrapf(err, "creating datapath %q", config.DatapathName)
}
if !odpSupported {
bridgeType = Bridge
@@ -221,7 +222,7 @@ func CreateBridge(config *BridgeConfig) (BridgeType, error) {
}
if err = configureIPTables(config); err != nil {
return bridgeType, err
return bridgeType, errors.Wrap(err, "configuring iptables")
}
}
@@ -231,7 +232,7 @@ func CreateBridge(config *BridgeConfig) (BridgeType, error) {
if bridgeType == Bridge {
if err := EthtoolTXOff(config.WeaveBridgeName); err != nil {
return bridgeType, err
return bridgeType, errors.Wrap(err, "setting tx off")
}
}
@@ -240,7 +241,7 @@ func CreateBridge(config *BridgeConfig) (BridgeType, error) {
}
if err := ConfigureARPCache(config.WeaveBridgeName); err != nil {
return bridgeType, err
return bridgeType, errors.Wrapf(err, "configuring ARP cache on bridge %q", config.WeaveBridgeName)
}
return bridgeType, nil
@@ -249,7 +250,7 @@ func CreateBridge(config *BridgeConfig) (BridgeType, error) {
func initBridgePrep(config *BridgeConfig) error {
mac, err := net.ParseMAC(config.Mac)
if err != nil {
return err
return errors.Wrapf(err, "parsing bridge MAC %q", config.Mac)
}
linkAttrs := netlink.NewLinkAttrs()
@@ -260,7 +261,7 @@ func initBridgePrep(config *BridgeConfig) error {
}
linkAttrs.MTU = config.MTU // TODO this probably doesn't work - see weave script
if err = netlink.LinkAdd(&netlink.Bridge{LinkAttrs: linkAttrs}); err != nil {
return err
return errors.Wrapf(err, "creating bridge %q", config.WeaveBridgeName)
}
return nil
@@ -273,7 +274,7 @@ func initBridge(config *BridgeConfig) error {
if _, err := CreateAndAttachVeth(BridgeIfName, PcapIfaceName, config.WeaveBridgeName, config.MTU, true, func(veth netlink.Link) error {
return netlink.LinkSetUp(veth)
}); err != nil {
return err
return errors.Wrap(err, "creating pcap veth pair")
}
return nil
@@ -282,7 +283,7 @@ func initBridge(config *BridgeConfig) error {
func initFastdp(config *BridgeConfig) error {
datapath, err := netlink.LinkByName(config.DatapathName)
if err != nil {
return err
return errors.Wrapf(err, "finding datapath %q", config.DatapathName)
}
if config.MTU == 0 {
/* GCE has the lowest underlay network MTU we're likely to encounter on
@@ -293,7 +294,10 @@ func initFastdp(config *BridgeConfig) error {
which is needed for the vxlan encryption. */
config.MTU = 1376
}
return netlink.LinkSetMTU(datapath, config.MTU)
if err := netlink.LinkSetMTU(datapath, config.MTU); err != nil {
return errors.Wrapf(err, "setting datapath %q mtu %d", config.DatapathName, config.MTU)
}
return nil
}
func initBridgedFastdp(config *BridgeConfig) error {
@@ -305,14 +309,14 @@ func initBridgedFastdp(config *BridgeConfig) error {
}
if _, err := CreateAndAttachVeth("vethwe-bridge", "vethwe-datapath", config.WeaveBridgeName, config.MTU, true, func(veth netlink.Link) error {
if err := netlink.LinkSetUp(veth); err != nil {
return err
return errors.Wrapf(err, "setting link up on %q", veth.Attrs().Name)
}
if err := odp.AddDatapathInterface(config.DatapathName, veth.Attrs().Name); err != nil {
return err
return errors.Wrapf(err, "adding interface %q to datapath %q", veth.Attrs().Name, config.DatapathName)
}
return nil
}); err != nil {
return err
return errors.Wrap(err, "creating bridged fastdp veth pair")
}
if err := linkSetUpByName(config.DatapathName); err != nil {
@@ -325,7 +329,7 @@ func initBridgedFastdp(config *BridgeConfig) error {
func configureIPTables(config *BridgeConfig) error {
ipt, err := iptables.New()
if err != nil {
return err
return errors.Wrap(err, "creating iptables object")
}
if config.DockerBridgeName != "" {
if config.WeaveBridgeName != config.DockerBridgeName {
@@ -400,7 +404,7 @@ func configureIPTables(config *BridgeConfig) error {
func linkSetUpByName(linkName string) error {
link, err := netlink.LinkByName(linkName)
if err != nil {
return err
return errors.Wrapf(err, "setting link up on %q", linkName)
}
return netlink.LinkSetUp(link)
}