implement dummy device operation by netlink

This commit is contained in:
m1093782566
2017-10-17 16:33:12 +08:00
parent d7e56d5330
commit fa94105866
4 changed files with 48 additions and 0 deletions

View File

@@ -22,4 +22,8 @@ type NetLinkHandle interface {
EnsureAddressBind(address, devName string) (exist bool, err error)
// UnbindAddress unbind address from the interface
UnbindAddress(address, devName string) error
// EnsureDummyDevice checks if dummy device is exist and, if not, create one. If the dummy device is already exist, return true.
EnsureDummyDevice(devName string) (exist bool, err error)
// DeleteDummyDevice deletes the given dummy device by name.
DeleteDummyDevice(devName string) error
}

View File

@@ -70,3 +70,27 @@ func (h *netlinkHandle) UnbindAddress(address, devName string) error {
}
return nil
}
// EnsureDummyDevice is part of interface
func (h *netlinkHandle) EnsureDummyDevice(devName string) (bool, error) {
_, err := h.LinkByName(devName)
if err == nil {
// found dummy device
return true, nil
}
dummy := &netlink.Dummy{netlink.LinkAttrs{Name: devName}}
return false, h.LinkAdd(dummy)
}
// DeleteDummyDevice is part of interface.
func (h *netlinkHandle) DeleteDummyDevice(devName string) error {
link, err := h.LinkByName(devName)
if err != nil {
return fmt.Errorf("error deleting a non-exist dummy device: %s", devName)
}
dummy, ok := link.(*netlink.Dummy)
if !ok {
return fmt.Errorf("expect dummy device, got device type: %s", link.Type())
}
return h.LinkDel(dummy)
}

View File

@@ -39,3 +39,13 @@ func (h *emptyHandle) EnsureAddressBind(address, devName string) (exist bool, er
func (h *emptyHandle) UnbindAddress(address, devName string) error {
return fmt.Errorf("netlink not supported for this platform")
}
// EnsureDummyDevice is part of interface
func (h *emptyHandle) EnsureDummyDevice(devName string) (bool, error) {
return false, fmt.Errorf("netlink is not supported in this platform")
}
// DeleteDummyDevice is part of interface.
func (h *emptyHandle) DeleteDummyDevice(devName string) error {
return fmt.Errorf("netlink is not supported in this platform")
}

View File

@@ -36,3 +36,13 @@ func (h *FakeNetlinkHandle) EnsureAddressBind(address, devName string) (exist bo
func (h *FakeNetlinkHandle) UnbindAddress(address, devName string) error {
return nil
}
// EnsureDummyDevice is a mock implementation
func (h *FakeNetlinkHandle) EnsureDummyDevice(devName string) (bool, error) {
return false, nil
}
// DeleteDummyDevice is a mock implementation
func (h *FakeNetlinkHandle) DeleteDummyDevice(devName string) error {
return nil
}