import (
"crypto/rand"
+ "errors"
"fmt"
"net"
"os"
"github.com/vishvananda/netlink"
)
+var (
+ ErrLinkNotFound = errors.New("link not found")
+)
+
func makeVethPair(name, peer string, mtu int) (netlink.Link, error) {
veth := &netlink.Veth{
LinkAttrs: netlink.LinkAttrs{
func DelLinkByNameAddr(ifName string, family int) (*net.IPNet, error) {
iface, err := netlink.LinkByName(ifName)
if err != nil {
+ if err != nil && err.Error() == "Link not found" {
+ return nil, ErrLinkNotFound
+ }
return nil, fmt.Errorf("failed to lookup %q: %v", ifName, err)
}
})
})
+ Context("deleting an non-existent device", func() {
+ It("returns known error", func() {
+ _ = containerNetNS.Do(func(ns.NetNS) error {
+ defer GinkgoRecover()
+
+ // This string should match the expected error codes in the cmdDel functions of some of the plugins
+ _, err := ip.DelLinkByNameAddr("THIS_DONT_EXIST", netlink.FAMILY_V4)
+ Expect(err).To(Equal(ip.ErrLinkNotFound))
+
+ return nil
+ })
+ })
+ })
+
Context("when there is no name available for the host-side", func() {
BeforeEach(func() {
//adding different interface to container ns