From 9494f0655d83e3b5466d34b846bb0f3128e4c260 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Tue, 11 Apr 2017 13:44:01 +0000 Subject: [PATCH] More meaningful errors --- net/bridge.go | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/net/bridge.go b/net/bridge.go index f883cc19..59077be8 100644 --- a/net/bridge.go +++ b/net/bridge.go @@ -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) }