mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-14 05:36:12 +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)
|
||||
// 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
|
||||
}
|
||||
|
@@ -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)
|
||||
}
|
||||
|
@@ -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")
|
||||
}
|
||||
|
@@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user