@@ -2,6 +2,7 @@ package netlink
22
33import (
44 "errors"
5+ "net"
56 "syscall"
67 "testing"
78
@@ -222,6 +223,88 @@ func TestVDPAGetDevConfigByName_Unknowm(t *testing.T) {
222223 }
223224}
224225
226+ func TestVDPASetMAC (t * testing.T ) {
227+ defer setupVDPATest (t , nl .VDPA_CMD_DEV_GET , nl .VDPA_CMD_DEV_CONFIG_GET , nl .VDPA_CMD_DEV_ATTR_SET )()
228+ firstMac , _ := net .ParseMAC ("02:11:22:33:44:68" )
229+ lastMacStr := "72:84:65:12:09:77"
230+ lastMac , _ := net .ParseMAC (lastMacStr )
231+ if err := createVDPATestDevWithParams (VDPANewDevParams {MACAddr : firstMac }); err != nil {
232+ t .Fatalf ("failed to create VDPA device: %v" , err )
233+ }
234+ if err := VDPASetAttr (vdpaTestDeviceName , VDPANewDevParams {MACAddr : lastMac }); err != nil {
235+ t .Fatalf ("failed to set mac to VDPA device: %v" , err )
236+ }
237+ dev , err := VDPAGetDevConfigByName (vdpaTestDeviceName )
238+ if err != nil {
239+ t .Fatalf ("VDPAGetDevConfigByName failed: %v" , err )
240+ }
241+ checkVDPADevConf (t , dev )
242+ if dev .Name != vdpaTestDeviceName {
243+ t .Fatalf ("Invalid device received for Get call, expected: %s, actual: %s" , vdpaTestDeviceName , dev .Name )
244+ }
245+ newMacStr := dev .Net .Cfg .MACAddr .String ()
246+ if newMacStr != lastMacStr {
247+ t .Fatalf ("mac address was not properly set. Expected: %s, actual: %s" , lastMac , newMacStr )
248+ }
249+ }
250+
251+ func TestVDPASetMACWrongName (t * testing.T ) {
252+ defer setupVDPATest (t , nl .VDPA_CMD_DEV_GET , nl .VDPA_CMD_DEV_CONFIG_GET , nl .VDPA_CMD_DEV_ATTR_SET )()
253+ mac , _ := net .ParseMAC ("72:84:65:12:09:77" )
254+ if err := createVDPATestDev (); err != nil {
255+ t .Fatalf ("failed to create VDPA device: %v" , err )
256+ }
257+ err := VDPASetAttr ("__unknown_device__" , VDPANewDevParams {MACAddr : mac })
258+ if ! errors .Is (err , syscall .ENODEV ) {
259+ t .Fatalf ("VDPASetAttr returned unexpected error setting mac to non existing device: %v" , err )
260+ }
261+ }
262+
263+ func TestVDPASetEmptyParams (t * testing.T ) {
264+ defer setupVDPATest (t , nl .VDPA_CMD_DEV_GET , nl .VDPA_CMD_DEV_CONFIG_GET , nl .VDPA_CMD_DEV_ATTR_SET )()
265+ if err := createVDPATestDev (); err != nil {
266+ t .Fatalf ("failed to create VDPA device: %v" , err )
267+ }
268+ err := VDPASetAttr (vdpaTestDeviceName , VDPANewDevParams {})
269+ if err == nil {
270+ t .Fatalf ("VDPASetAttr did not return an error when params were empty: %v" , err )
271+ }
272+ }
273+
274+ func TestVDPASetMTU (t * testing.T ) {
275+ defer setupVDPATest (t , nl .VDPA_CMD_DEV_GET , nl .VDPA_CMD_DEV_CONFIG_GET , nl .VDPA_CMD_DEV_ATTR_SET )()
276+ if err := createVDPATestDev (); err != nil {
277+ t .Fatalf ("failed to create VDPA device: %v" , err )
278+ }
279+ err := VDPASetAttr (vdpaTestDeviceName , VDPANewDevParams {MTU : 3000 })
280+ if ! errors .Is (err , syscall .ENOTSUP ) {
281+ t .Fatalf ("VDPASetAttr returned an unexpected error setting mtu to vdpa device: %v" , err )
282+ }
283+ }
284+
285+ func TestVDPASetMaxVQP (t * testing.T ) {
286+ defer setupVDPATest (t , nl .VDPA_CMD_DEV_GET , nl .VDPA_CMD_DEV_CONFIG_GET , nl .VDPA_CMD_DEV_ATTR_SET )()
287+ if err := createVDPATestDev (); err != nil {
288+ t .Fatalf ("failed to create VDPA device: %v" , err )
289+ }
290+ err := VDPASetAttr (vdpaTestDeviceName , VDPANewDevParams {MaxVQP : 3000 })
291+ if ! errors .Is (err , syscall .ENOTSUP ) {
292+ t .Fatalf ("VDPASetAttr returned an unexpected error setting maxvqp to vdpa device: %v" , err )
293+ }
294+ }
295+
296+ func TestVDPASetFeatures (t * testing.T ) {
297+ defer setupVDPATest (t , nl .VDPA_CMD_DEV_GET , nl .VDPA_CMD_DEV_CONFIG_GET , nl .VDPA_CMD_DEV_ATTR_SET )()
298+ if err := createVDPATestDev (); err != nil {
299+ t .Fatalf ("failed to create VDPA device: %v" , err )
300+ }
301+ // Default vdpa_sim_net features without VIRTIO_NET_F_CTRL_MAC_ADDR
302+ err := VDPASetAttr (vdpaTestDeviceName , VDPANewDevParams {Features : 13019316265 })
303+ if ! errors .Is (err , syscall .ENOTSUP ) {
304+ t .Fatalf ("VDPASetAttr returned an unexpected error setting features to vdpa device: %v" , err )
305+ }
306+ }
307+
225308func TestSetGetBits (t * testing.T ) {
226309 features := SetBits (0 , VIRTIO_NET_F_CSUM , VIRTIO_NET_F_MQ )
227310 if ! IsBitSet (features , VIRTIO_NET_F_CSUM ) || ! IsBitSet (features , VIRTIO_NET_F_MQ ) {
@@ -236,6 +319,10 @@ func createVDPATestDev() error {
236319 return VDPANewDev (vdpaTestDeviceName , "" , vdpaSimMGMTDev , VDPANewDevParams {})
237320}
238321
322+ func createVDPATestDevWithParams (params VDPANewDevParams ) error {
323+ return VDPANewDev (vdpaTestDeviceName , "" , vdpaSimMGMTDev , params )
324+ }
325+
239326func checkVDPAMGMTDev (t * testing.T , d * VDPAMGMTDev ) {
240327 if d == nil {
241328 t .Fatal ("VDPA MGMT dev is nil" )
0 commit comments