mirror of
https://github.com/weaveworks/scope.git
synced 2026-07-21 06:20:31 +00:00
``` $ gvt delete github.com/weaveworks/weave/common $ gvt fetch --revision 4da998ab4507b6a4852bf341b5df68eb7fca8a57 github.com/weaveworks/weave/common 2018/07/23 17:21:52 Fetching: github.com/weaveworks/weave/common 2018/07/23 17:22:05 · Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/fsouza/go-dockerclient 2018/07/23 17:22:05 ·· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/docker/docker/pkg/archive 2018/07/23 17:22:05 ··· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/docker/docker/pkg/system 2018/07/23 17:22:05 ···· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/opencontainers/image-spec/specs-go/v1 2018/07/23 17:22:05 ····· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/opencontainers/go-digest 2018/07/23 17:22:05 ····· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/opencontainers/image-spec/specs-go 2018/07/23 17:22:05 ···· Fetching recursive dependency: github.com/weaveworks/weave/vendor/golang.org/x/sys/unix 2018/07/23 17:22:05 ···· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/docker/go-units 2018/07/23 17:22:05 ···· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/containerd/continuity/pathdriver 2018/07/23 17:22:05 ···· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/Microsoft/go-winio 2018/07/23 17:22:05 ····· Fetching recursive dependency: github.com/weaveworks/weave/vendor/golang.org/x/sys/windows 2018/07/23 17:22:05 ···· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/docker/docker/pkg/mount 2018/07/23 17:22:05 ····· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/sirupsen/logrus 2018/07/23 17:22:05 ······ Fetching recursive dependency: github.com/weaveworks/weave/vendor/golang.org/x/crypto/ssh/terminal 2018/07/23 17:22:06 ···· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/pkg/errors 2018/07/23 17:22:06 ··· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/docker/docker/pkg/longpath 2018/07/23 17:22:06 ··· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/docker/docker/pkg/idtools 2018/07/23 17:22:06 ···· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/opencontainers/runc/libcontainer/user 2018/07/23 17:22:06 ··· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/docker/docker/pkg/fileutils 2018/07/23 17:22:06 ··· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/docker/docker/pkg/pools 2018/07/23 17:22:06 ···· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/docker/docker/pkg/ioutils 2018/07/23 17:22:06 ····· Fetching recursive dependency: github.com/weaveworks/weave/vendor/golang.org/x/net/context 2018/07/23 17:22:06 ··· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/opencontainers/runc/libcontainer/system 2018/07/23 17:22:06 ·· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/docker/docker/opts 2018/07/23 17:22:06 ··· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/docker/docker/api/types 2018/07/23 17:22:06 ···· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/gogo/protobuf/proto 2018/07/23 17:22:06 ···· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/docker/go-connections/nat 2018/07/23 17:22:06 ·· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/docker/docker/pkg/stdcopy 2018/07/23 17:22:06 ·· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/docker/docker/pkg/homedir 2018/07/23 17:22:06 ·· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/docker/docker/pkg/jsonmessage 2018/07/23 17:22:06 ··· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/Nvveen/Gotty 2018/07/23 17:22:06 ··· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/docker/docker/pkg/term 2018/07/23 17:22:06 ···· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/Azure/go-ansiterm/winterm 2018/07/23 17:22:06 ····· Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/Azure/go-ansiterm 2018/07/23 17:22:06 · Fetching recursive dependency: github.com/weaveworks/weave/vendor/github.com/weaveworks/go-odp/odp ```
104 lines
2.2 KiB
Go
104 lines
2.2 KiB
Go
package odp
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"syscall"
|
|
|
|
"github.com/weaveworks/go-odp/odp"
|
|
)
|
|
|
|
// ODP admin functionality
|
|
|
|
func CreateDatapath(dpname string) (supported bool, err error) {
|
|
dpif, err := odp.NewDpif()
|
|
if err != nil {
|
|
if odp.IsKernelLacksODPError(err) {
|
|
return false, nil
|
|
}
|
|
return true, err
|
|
}
|
|
defer dpif.Close()
|
|
|
|
dp, err := dpif.CreateDatapath(dpname)
|
|
if err != nil {
|
|
if !odp.IsDatapathNameAlreadyExistsError(err) {
|
|
return true, err
|
|
}
|
|
if dp, err = dpif.LookupDatapath(dpname); err != nil {
|
|
return true, err
|
|
}
|
|
}
|
|
|
|
// Pick an ephemeral port number to use in probing for vxlan
|
|
// support.
|
|
udpconn, err := net.ListenUDP("udp4", nil)
|
|
if err != nil {
|
|
return true, err
|
|
}
|
|
defer udpconn.Close()
|
|
|
|
// we leave the UDP socket open, so creating a vxlan vport on
|
|
// the same port number should fail. But that's fine: It's
|
|
// still sufficient to probe for support.
|
|
portno := uint16(udpconn.LocalAddr().(*net.UDPAddr).Port)
|
|
vpid, err := dp.CreateVport(odp.NewVxlanVportSpec(fmt.Sprintf("vxlan-%d", portno), portno))
|
|
if nlerr, ok := err.(odp.NetlinkError); ok {
|
|
if syscall.Errno(nlerr) == syscall.EAFNOSUPPORT {
|
|
dp.Delete()
|
|
return false, fmt.Errorf("kernel does not have Open vSwitch VXLAN support")
|
|
}
|
|
}
|
|
if err == nil {
|
|
dp.DeleteVport(vpid)
|
|
}
|
|
|
|
return true, nil
|
|
}
|
|
|
|
func DeleteDatapath(dpname string) error {
|
|
dpif, err := odp.NewDpif()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer dpif.Close()
|
|
|
|
dp, err := dpif.LookupDatapath(dpname)
|
|
if err != nil {
|
|
if odp.IsNoSuchDatapathError(err) {
|
|
return nil
|
|
}
|
|
return err
|
|
}
|
|
|
|
return dp.Delete()
|
|
}
|
|
|
|
func AddDatapathInterface(dpname string, ifname string) error {
|
|
return addDatapathInterface(dpname, ifname, false)
|
|
}
|
|
|
|
func AddDatapathInterfaceIfNotExist(dpname string, ifname string) error {
|
|
return addDatapathInterface(dpname, ifname, true)
|
|
}
|
|
|
|
func addDatapathInterface(dpname, ifname string, ignoreIfExist bool) error {
|
|
dpif, err := odp.NewDpif()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer dpif.Close()
|
|
|
|
dp, err := dpif.LookupDatapath(dpname)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = dp.CreateVport(odp.NewNetdevVportSpec(ifname))
|
|
if ignoreIfExist && err == odp.NetlinkError(syscall.EEXIST) {
|
|
return nil
|
|
}
|
|
|
|
return err
|
|
}
|