mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-15 14:14:39 +00:00
implement dummy device operation by netlink
This commit is contained in:
@@ -22,4 +22,8 @@ type NetLinkHandle interface {
|
|||||||
EnsureAddressBind(address, devName string) (exist bool, err error)
|
EnsureAddressBind(address, devName string) (exist bool, err error)
|
||||||
// UnbindAddress unbind address from the interface
|
// UnbindAddress unbind address from the interface
|
||||||
UnbindAddress(address, devName string) error
|
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
|
||||||
}
|
}
|
||||||
|
@@ -70,3 +70,27 @@ func (h *netlinkHandle) UnbindAddress(address, devName string) error {
|
|||||||
}
|
}
|
||||||
return nil
|
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)
|
||||||
|
}
|
||||||
|
@@ -39,3 +39,13 @@ func (h *emptyHandle) EnsureAddressBind(address, devName string) (exist bool, er
|
|||||||
func (h *emptyHandle) UnbindAddress(address, devName string) error {
|
func (h *emptyHandle) UnbindAddress(address, devName string) error {
|
||||||
return fmt.Errorf("netlink not supported for this platform")
|
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")
|
||||||
|
}
|
||||||
|
@@ -36,3 +36,13 @@ func (h *FakeNetlinkHandle) EnsureAddressBind(address, devName string) (exist bo
|
|||||||
func (h *FakeNetlinkHandle) UnbindAddress(address, devName string) error {
|
func (h *FakeNetlinkHandle) UnbindAddress(address, devName string) error {
|
||||||
return nil
|
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
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user