@@ -1477,4 +1477,69 @@ TEST_F(VendorSaiTest, bulk_meter_bucket_entry)
1477
1477
1478
1478
EXPECT_EQ (SAI_STATUS_NOT_SUPPORTED,
1479
1479
m_vsai->bulkSet (0 , e, nullptr , SAI_BULK_OP_ERROR_MODE_STOP_ON_ERROR, nullptr ));
1480
- }
1480
+ }
1481
+
1482
+ TEST (VendorSai, bulk_meter_rules)
1483
+ {
1484
+ VendorSai sai;
1485
+ sai.apiInitialize (0 , &test_services);
1486
+
1487
+ sai_object_id_t switchid = create_switch (sai);
1488
+
1489
+ sai_attribute_t attr;
1490
+ sai_object_id_t meter_policy0, meter_policy1;
1491
+ attr.id = SAI_METER_POLICY_ATTR_IP_ADDR_FAMILY;
1492
+ attr.value .s32 = SAI_IP_ADDR_FAMILY_IPV4;
1493
+ EXPECT_EQ (SAI_STATUS_SUCCESS, sai.create ((sai_object_type_t )SAI_OBJECT_TYPE_METER_POLICY, &meter_policy0, switchid, 1 , &attr));
1494
+ EXPECT_EQ (SAI_STATUS_SUCCESS, sai.create ((sai_object_type_t )SAI_OBJECT_TYPE_METER_POLICY, &meter_policy1, switchid, 1 , &attr));
1495
+
1496
+ sai_ip_address_t dst0 = {};
1497
+ sai_ip_address_t mask0 = {};
1498
+ sai_ip_address_t dst1 = {};
1499
+ sai_ip_address_t mask1 = {};
1500
+ dst0.addr_family = dst1.addr_family = mask0.addr_family = mask1.addr_family = SAI_IP_ADDR_FAMILY_IPV4;
1501
+ inet_pton (AF_INET, " 192.1.1.0" , &dst0.addr .ip4 );
1502
+ inet_pton (AF_INET, " 255.255.255.0" , &mask0.addr .ip4 );
1503
+ inet_pton (AF_INET, " 192.15.0.0" , &dst1.addr .ip4 );
1504
+ inet_pton (AF_INET, " 255.255.0.0" , &mask1.addr .ip4 );
1505
+
1506
+ sai_attribute_t attrs0[] = {
1507
+ {.id = SAI_METER_RULE_ATTR_METER_POLICY_ID, .value = (sai_attribute_value_t ){.oid = meter_policy0}},
1508
+ {.id = SAI_METER_RULE_ATTR_DIP, .value = (sai_attribute_value_t ){.ipaddr = dst0}},
1509
+ {.id = SAI_METER_RULE_ATTR_DIP_MASK, .value = (sai_attribute_value_t ){.ipaddr = mask0}},
1510
+ {.id = SAI_METER_RULE_ATTR_METER_CLASS, .value = (sai_attribute_value_t ){.u32 = 100 }},
1511
+ {.id = SAI_METER_RULE_ATTR_PRIORITY, .value = (sai_attribute_value_t ){.u32 = 1 }},
1512
+ };
1513
+
1514
+ sai_attribute_t attrs1[] = {
1515
+ {.id = SAI_METER_RULE_ATTR_METER_POLICY_ID, .value = (sai_attribute_value_t ){.oid = meter_policy1}},
1516
+ {.id = SAI_METER_RULE_ATTR_DIP, .value = (sai_attribute_value_t ){.ipaddr = dst1}},
1517
+ {.id = SAI_METER_RULE_ATTR_DIP_MASK, .value = (sai_attribute_value_t ){.ipaddr = mask1}},
1518
+ {.id = SAI_METER_RULE_ATTR_METER_CLASS, .value = (sai_attribute_value_t ){.u32 = 200 }},
1519
+ {.id = SAI_METER_RULE_ATTR_PRIORITY, .value = (sai_attribute_value_t ){.u32 = 2 }},
1520
+ };
1521
+
1522
+ const sai_attribute_t *attr_list[] = {
1523
+ attrs0,
1524
+ attrs1,
1525
+ };
1526
+ constexpr uint32_t meter_rules_count = sizeof (attr_list) / sizeof (sai_attribute_t *);
1527
+ constexpr uint32_t meter_rule_attrs_count = sizeof (attrs0) / sizeof (sai_attribute_t );
1528
+
1529
+ uint32_t attr_count[meter_rules_count] = {meter_rule_attrs_count, meter_rule_attrs_count};
1530
+ sai_object_id_t meter_rules[meter_rules_count];
1531
+ sai_status_t statuses[meter_rules_count] = {};
1532
+
1533
+ EXPECT_EQ (SAI_STATUS_SUCCESS, sai.bulkCreate ((sai_object_type_t )SAI_OBJECT_TYPE_METER_RULE, switchid, meter_rules_count, attr_count, attr_list, SAI_BULK_OP_ERROR_MODE_STOP_ON_ERROR, meter_rules, statuses));
1534
+ for (uint32_t i = 0 ; i < meter_rules_count; i++) {
1535
+ EXPECT_EQ (SAI_STATUS_SUCCESS, statuses[i]);
1536
+ }
1537
+
1538
+ EXPECT_EQ (SAI_STATUS_SUCCESS, sai.bulkRemove ((sai_object_type_t )SAI_OBJECT_TYPE_METER_RULE, meter_rules_count, meter_rules, SAI_BULK_OP_ERROR_MODE_STOP_ON_ERROR, statuses));
1539
+ for (uint32_t i = 0 ; i < meter_rules_count; i++) {
1540
+ EXPECT_EQ (SAI_STATUS_SUCCESS, statuses[i]);
1541
+ }
1542
+
1543
+ EXPECT_EQ (SAI_STATUS_SUCCESS, sai.remove ((sai_object_type_t )SAI_OBJECT_TYPE_METER_POLICY, meter_policy0));
1544
+ EXPECT_EQ (SAI_STATUS_SUCCESS, sai.remove ((sai_object_type_t )SAI_OBJECT_TYPE_METER_POLICY, meter_policy1));
1545
+ }
0 commit comments