@@ -783,7 +783,7 @@ impl VhostUserMsgValidator for VhostUserVringAddr {
783783 if ( self . flags & !VhostUserVringAddrFlags :: all ( ) . bits ( ) ) != 0 {
784784 return false ;
785785 }
786-
786+
787787 // Check if packed ring format
788788 if self . flags & VhostUserVringAddrFlags :: VHOST_VRING_F_PACKED . bits ( ) != 0 {
789789 // Packed ring validation:
@@ -1438,4 +1438,57 @@ mod tests {
14381438 msg. flags |= 0x4 ;
14391439 assert ! ( !msg. is_valid( ) ) ;
14401440 }
1441+
1442+ #[ test]
1443+ fn test_packed_virtqueue_features ( ) {
1444+ let a = VhostUserVirtioFeatures :: RING_PACKED . bits ( ) ;
1445+ assert_eq ! ( a, 0x4_0000_0000 ) ;
1446+
1447+ let a = VhostUserVringAddrFlags :: VHOST_VRING_F_PACKED . bits ( ) ;
1448+ assert_eq ! ( a, 0x2 ) ;
1449+
1450+ let combined = VhostUserVringAddrFlags :: VHOST_VRING_F_LOG
1451+ | VhostUserVringAddrFlags :: VHOST_VRING_F_PACKED ;
1452+ let a = combined. bits ( ) ;
1453+ assert_eq ! ( a, 0x3 ) ;
1454+ }
1455+
1456+ #[ test]
1457+ fn test_packed_vring_addr_validation ( ) {
1458+ let mut addr = VhostUserVringAddr :: new (
1459+ 0 ,
1460+ VhostUserVringAddrFlags :: VHOST_VRING_F_PACKED ,
1461+ 0x1000 ,
1462+ 0x2000 ,
1463+ 0x3000 ,
1464+ 0x4000 ,
1465+ ) ;
1466+
1467+ let a = addr. index ;
1468+ assert_eq ! ( a, 0 ) ;
1469+ let a = addr. flags ;
1470+ assert_eq ! ( a, VhostUserVringAddrFlags :: VHOST_VRING_F_PACKED . bits( ) ) ;
1471+ let a = addr. descriptor ;
1472+ assert_eq ! ( a, 0x1000 ) ;
1473+ let a = addr. used ;
1474+ assert_eq ! ( a, 0x2000 ) ;
1475+ let a = addr. available ;
1476+ assert_eq ! ( a, 0x3000 ) ;
1477+ let a = addr. log ;
1478+ assert_eq ! ( a, 0x4000 ) ;
1479+ assert ! ( addr. is_valid( ) ) ;
1480+
1481+ addr. descriptor = 0x1001 ;
1482+ assert ! ( !addr. is_valid( ) ) ;
1483+ addr. descriptor = 0x1000 ;
1484+
1485+ addr. available = 0x3001 ;
1486+ assert ! ( !addr. is_valid( ) ) ;
1487+ addr. available = 0x3000 ;
1488+
1489+ addr. used = 0x2001 ;
1490+ assert ! ( !addr. is_valid( ) ) ;
1491+ addr. used = 0x2000 ;
1492+ assert ! ( addr. is_valid( ) ) ;
1493+ }
14411494}
0 commit comments