github.com/k8snetworkplumbingwg/sriov-network-operator@v1.2.1-0.20240408194816-2d2e5a45d453/pkg/host/internal/lib/netlink/netlink.go (about) 1 package netlink 2 3 import ( 4 "net" 5 6 "github.com/vishvananda/netlink" 7 ) 8 9 func New() NetlinkLib { 10 return &libWrapper{} 11 } 12 13 type Link interface { 14 netlink.Link 15 } 16 17 //go:generate ../../../../../bin/mockgen -destination mock/mock_netlink.go -source netlink.go 18 type NetlinkLib interface { 19 // LinkSetVfNodeGUID sets the node GUID of a vf for the link. 20 // Equivalent to: `ip link set dev $link vf $vf node_guid $nodeguid` 21 LinkSetVfNodeGUID(link Link, vf int, nodeguid net.HardwareAddr) error 22 // LinkSetVfPortGUID sets the port GUID of a vf for the link. 23 // Equivalent to: `ip link set dev $link vf $vf port_guid $portguid` 24 LinkSetVfPortGUID(link Link, vf int, portguid net.HardwareAddr) error 25 // LinkByName finds a link by name and returns a pointer to the object. 26 LinkByName(name string) (Link, error) 27 // LinkSetVfHardwareAddr sets the hardware address of a vf for the link. 28 // Equivalent to: `ip link set $link vf $vf mac $hwaddr` 29 LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error 30 // LinkSetUp enables the link device. 31 // Equivalent to: `ip link set $link up` 32 LinkSetUp(link Link) error 33 // LinkSetMTU sets the mtu of the link device. 34 // Equivalent to: `ip link set $link mtu $mtu` 35 LinkSetMTU(link Link, mtu int) error 36 // DevlinkGetDeviceByName provides a pointer to devlink device and nil error, 37 // otherwise returns an error code. 38 DevLinkGetDeviceByName(bus string, device string) (*netlink.DevlinkDevice, error) 39 // DevLinkSetEswitchMode sets eswitch mode if able to set successfully or 40 // returns an error code. 41 // Equivalent to: `devlink dev eswitch set $dev mode switchdev` 42 // Equivalent to: `devlink dev eswitch set $dev mode legacy` 43 DevLinkSetEswitchMode(dev *netlink.DevlinkDevice, newMode string) error 44 // VDPAGetDevByName returns VDPA device selected by name 45 // Equivalent to: `vdpa dev show <name>` 46 VDPAGetDevByName(name string) (*netlink.VDPADev, error) 47 // VDPADelDev removes VDPA device 48 // Equivalent to: `vdpa dev del <name>` 49 VDPADelDev(name string) error 50 // VDPANewDev adds new VDPA device 51 // Equivalent to: `vdpa dev add name <name> mgmtdev <mgmtBus>/mgmtName [params]` 52 VDPANewDev(name, mgmtBus, mgmtName string, params netlink.VDPANewDevParams) error 53 // DevlinkGetDeviceParamByName returns specific parameter for devlink device 54 // Equivalent to: `devlink dev param show <bus>/<device> name <param>` 55 DevlinkGetDeviceParamByName(bus string, device string, param string) (*netlink.DevlinkParam, error) 56 // DevlinkSetDeviceParam set specific parameter for devlink device 57 // Equivalent to: `devlink dev param set <bus>/<device> name <param> cmode <cmode> value <value>` 58 // cmode argument should contain valid cmode value as uint8, modes are define in nl.DEVLINK_PARAM_CMODE_* constants 59 // value argument should have one of the following types: uint8, uint16, uint32, string, bool 60 DevlinkSetDeviceParam(bus string, device string, param string, cmode uint8, value interface{}) error 61 } 62 63 type libWrapper struct{} 64 65 // LinkSetVfNodeGUID sets the node GUID of a vf for the link. 66 // Equivalent to: `ip link set dev $link vf $vf node_guid $nodeguid` 67 func (w *libWrapper) LinkSetVfNodeGUID(link Link, vf int, nodeguid net.HardwareAddr) error { 68 return netlink.LinkSetVfNodeGUID(link, vf, nodeguid) 69 } 70 71 // LinkSetVfPortGUID sets the port GUID of a vf for the link. 72 // Equivalent to: `ip link set dev $link vf $vf port_guid $portguid` 73 func (w *libWrapper) LinkSetVfPortGUID(link Link, vf int, portguid net.HardwareAddr) error { 74 return netlink.LinkSetVfPortGUID(link, vf, portguid) 75 } 76 77 // LinkByName finds a link by name and returns a pointer to the object.// LinkByName finds a link by name and returns a pointer to the object. 78 func (w *libWrapper) LinkByName(name string) (Link, error) { 79 return netlink.LinkByName(name) 80 } 81 82 // LinkSetVfHardwareAddr sets the hardware address of a vf for the link. 83 // Equivalent to: `ip link set $link vf $vf mac $hwaddr` 84 func (w *libWrapper) LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error { 85 return netlink.LinkSetVfHardwareAddr(link, vf, hwaddr) 86 } 87 88 // LinkSetUp enables the link device. 89 // Equivalent to: `ip link set $link up` 90 func (w *libWrapper) LinkSetUp(link Link) error { 91 return netlink.LinkSetUp(link) 92 } 93 94 // LinkSetMTU sets the mtu of the link device. 95 // Equivalent to: `ip link set $link mtu $mtu` 96 func (w *libWrapper) LinkSetMTU(link Link, mtu int) error { 97 return netlink.LinkSetMTU(link, mtu) 98 } 99 100 // DevlinkGetDeviceByName provides a pointer to devlink device and nil error, 101 // otherwise returns an error code. 102 func (w *libWrapper) DevLinkGetDeviceByName(bus string, device string) (*netlink.DevlinkDevice, error) { 103 return netlink.DevLinkGetDeviceByName(bus, device) 104 } 105 106 // DevLinkSetEswitchMode sets eswitch mode if able to set successfully or 107 // returns an error code. 108 // Equivalent to: `devlink dev eswitch set $dev mode switchdev` 109 // Equivalent to: `devlink dev eswitch set $dev mode legacy` 110 func (w *libWrapper) DevLinkSetEswitchMode(dev *netlink.DevlinkDevice, newMode string) error { 111 return netlink.DevLinkSetEswitchMode(dev, newMode) 112 } 113 114 // VDPAGetDevByName returns VDPA device selected by name 115 // Equivalent to: `vdpa dev show <name>` 116 func (w *libWrapper) VDPAGetDevByName(name string) (*netlink.VDPADev, error) { 117 return netlink.VDPAGetDevByName(name) 118 } 119 120 // VDPADelDev removes VDPA device 121 // Equivalent to: `vdpa dev del <name>` 122 func (w *libWrapper) VDPADelDev(name string) error { 123 return netlink.VDPADelDev(name) 124 } 125 126 // VDPANewDev adds new VDPA device 127 // Equivalent to: `vdpa dev add name <name> mgmtdev <mgmtBus>/mgmtName [params]` 128 func (w *libWrapper) VDPANewDev(name, mgmtBus, mgmtName string, params netlink.VDPANewDevParams) error { 129 return netlink.VDPANewDev(name, mgmtBus, mgmtName, params) 130 } 131 132 // DevlinkGetDeviceParamByName returns specific parameter for devlink device 133 // Equivalent to: `devlink dev param show <bus>/<device> name <param>` 134 func (w *libWrapper) DevlinkGetDeviceParamByName(bus string, device string, param string) (*netlink.DevlinkParam, error) { 135 return netlink.DevlinkGetDeviceParamByName(bus, device, param) 136 } 137 138 // DevlinkSetDeviceParam set specific parameter for devlink device 139 // Equivalent to: `devlink dev param set <bus>/<device> name <param> cmode <cmode> value <value>` 140 // cmode argument should contain valid cmode value as uint8, modes are define in nl.DEVLINK_PARAM_CMODE_* constants 141 // value argument should have one of the following types: uint8, uint16, uint32, string, bool 142 func (w *libWrapper) DevlinkSetDeviceParam(bus string, device string, param string, cmode uint8, value interface{}) error { 143 return netlink.DevlinkSetDeviceParam(bus, device, param, cmode, value) 144 }