@@ -368,8 +368,7 @@ struct SaiBulkerTraits<sai_next_hop_group_api_t>
368368 using set_entry_attribute_fn = sai_set_next_hop_group_member_attribute_fn;
369369 using bulk_create_entry_fn = sai_bulk_object_create_fn;
370370 using bulk_remove_entry_fn = sai_bulk_object_remove_fn;
371- // TODO: wait until available in SAI
372- // using bulk_set_entry_attribute_fn = sai_bulk_object_set_attribute_fn;
371+ using bulk_set_entry_attribute_fn = sai_bulk_object_set_attribute_fn;
373372};
374373
375374template <>
@@ -382,8 +381,7 @@ struct SaiBulkerTraits<sai_next_hop_api_t>
382381 using set_entry_attribute_fn = sai_set_next_hop_attribute_fn;
383382 using bulk_create_entry_fn = sai_bulk_object_create_fn;
384383 using bulk_remove_entry_fn = sai_bulk_object_remove_fn;
385- // TODO: wait until available in SAI
386- // using bulk_set_entry_attribute_fn = sai_bulk_object_set_attribute_fn;
384+ using bulk_set_entry_attribute_fn = sai_bulk_object_set_attribute_fn;
387385};
388386
389387template <>
@@ -422,6 +420,7 @@ struct SaiBulkerTraits<sai_dash_meter_api_t>
422420 using set_entry_attribute_fn = sai_set_meter_rule_attribute_fn;
423421 using bulk_create_entry_fn = sai_bulk_object_create_fn;
424422 using bulk_remove_entry_fn = sai_bulk_object_remove_fn;
423+ using bulk_set_entry_attribute_fn = sai_bulk_object_set_attribute_fn;
425424};
426425
427426template <>
@@ -434,6 +433,7 @@ struct SaiBulkerTraits<sai_dash_vnet_api_t>
434433 using set_entry_attribute_fn = sai_set_vnet_attribute_fn;
435434 using bulk_create_entry_fn = sai_bulk_object_create_fn;
436435 using bulk_remove_entry_fn = sai_bulk_object_remove_fn;
436+ using bulk_set_entry_attribute_fn = sai_bulk_object_set_attribute_fn;
437437};
438438
439439template <>
@@ -495,6 +495,7 @@ struct SaiBulkerTraits<sai_dash_tunnel_api_t>
495495 using api_t = sai_dash_tunnel_api_t ;
496496 using bulk_create_entry_fn = sai_bulk_object_create_fn;
497497 using bulk_remove_entry_fn = sai_bulk_object_remove_fn;
498+ using bulk_set_entry_attribute_fn = sai_bulk_object_set_attribute_fn;
498499};
499500
500501template <>
@@ -1071,8 +1072,6 @@ class ObjectBulker
10711072 return *object_status;
10721073 }
10731074
1074- // TODO: wait until available in SAI
1075- /*
10761075 sai_status_t set_entry_attribute (
10771076 _In_ sai_object_id_t object_id,
10781077 _In_ const sai_attribute_t *attr)
@@ -1086,14 +1085,15 @@ class ObjectBulker
10861085 else
10871086 {
10881087 // Create a new key if not exists in the map
1089- setting_entries.emplace(std::piecewise_construct,
1088+ auto & attrs = setting_entries.emplace (std::piecewise_construct,
10901089 std::forward_as_tuple (object_id),
1091- std::forward_as_tuple(1, *attr));
1090+ std::forward_as_tuple ()).first ->second ;
1091+
1092+ attrs.emplace_back (*attr);
10921093 }
10931094
10941095 return SAI_STATUS_SUCCESS;
10951096 }
1096- */
10971097
10981098 void flush ()
10991099 {
@@ -1149,9 +1149,6 @@ class ObjectBulker
11491149 creating_entries.clear ();
11501150 }
11511151
1152- // Setting
1153- // TODO: wait until available in SAI
1154- /*
11551152 if (!setting_entries.empty ())
11561153 {
11571154 std::vector<sai_object_id_t > rs;
@@ -1176,7 +1173,6 @@ class ObjectBulker
11761173
11771174 setting_entries.clear ();
11781175 }
1179- */
11801176 }
11811177
11821178 void clear ()
@@ -1228,11 +1224,8 @@ class ObjectBulker
12281224 >> creating_entries;
12291225
12301226 std::unordered_map< // A map of
1231- sai_object_id_t , // object_id -> (OUT object_status, attributes)
1232- std::pair<
1233- sai_status_t *,
1234- std::vector<sai_attribute_t >
1235- >
1227+ sai_object_id_t , // object_id -> attrs
1228+ std::vector<sai_attribute_t >
12361229 > setting_entries;
12371230
12381231 // A map of
@@ -1241,8 +1234,7 @@ class ObjectBulker
12411234
12421235 sai_bulk_object_create_fn create_entries;
12431236 sai_bulk_object_remove_fn remove_entries;
1244- // TODO: wait until available in SAI
1245- // typename Ts::bulk_set_entry_attribute_fn set_entries_attribute;
1237+ sai_bulk_object_set_attribute_fn set_entries_attribute;
12461238
12471239 std::unordered_map<sai_object_id_t , sai_status_t > create_statuses;
12481240
@@ -1316,8 +1308,6 @@ class ObjectBulker
13161308 return status;
13171309 }
13181310
1319- // TODO: wait until available in SAI
1320- /*
13211311 sai_status_t flush_setting_entries (
13221312 _Inout_ std::vector<sai_object_id_t > &rs,
13231313 _Inout_ std::vector<sai_attribute_t > &ts)
@@ -1328,8 +1318,8 @@ class ObjectBulker
13281318 }
13291319 size_t count = rs.size ();
13301320 std::vector<sai_status_t > statuses (count);
1331- sai_status_t status = (*set_entries_attribute)((uint32_t)count, rs.data(), ts.data()
1332- , SAI_BULK_OP_ERROR_MODE_STOP_ON_ERROR, statuses.data());
1321+ sai_status_t status = (*set_entries_attribute)((uint32_t )count, rs.data (), ts.data (),
1322+ SAI_BULK_OP_ERROR_MODE_STOP_ON_ERROR, statuses.data ());
13331323 if (status == SAI_STATUS_SUCCESS)
13341324 {
13351325 SWSS_LOG_INFO (" ObjectBulker.flush setting_entries %zu\n " , count);
@@ -1345,7 +1335,6 @@ class ObjectBulker
13451335
13461336 return status;
13471337 }
1348- */
13491338};
13501339
13511340template <>
@@ -1355,8 +1344,7 @@ inline ObjectBulker<sai_next_hop_group_api_t>::ObjectBulker(SaiBulkerTraits<sai_
13551344{
13561345 create_entries = api->create_next_hop_group_members ;
13571346 remove_entries = api->remove_next_hop_group_members ;
1358- // TODO: wait until available in SAI
1359- // set_entries_attribute = ;
1347+ set_entries_attribute = api->set_next_hop_group_members_attribute ;
13601348}
13611349
13621350template <>
@@ -1366,8 +1354,7 @@ inline ObjectBulker<sai_next_hop_api_t>::ObjectBulker(SaiBulkerTraits<sai_next_h
13661354{
13671355 create_entries = api->create_next_hops ;
13681356 remove_entries = api->remove_next_hops ;
1369- // TODO: wait until available in SAI
1370- // set_entries_attribute = ;
1357+ set_entries_attribute = api->set_next_hops_attribute ;
13711358}
13721359
13731360template <>
@@ -1377,6 +1364,7 @@ inline ObjectBulker<sai_dash_vnet_api_t>::ObjectBulker(SaiBulkerTraits<sai_dash_
13771364{
13781365 create_entries = api->create_vnets ;
13791366 remove_entries = api->remove_vnets ;
1367+ set_entries_attribute = nullptr ;
13801368}
13811369
13821370template <>
@@ -1386,6 +1374,7 @@ inline ObjectBulker<sai_dash_meter_api_t>::ObjectBulker(SaiBulkerTraits<sai_dash
13861374{
13871375 create_entries = api->create_meter_rules ;
13881376 remove_entries = api->remove_meter_rules ;
1377+ set_entries_attribute = nullptr ;
13891378}
13901379
13911380template <>
@@ -1398,14 +1387,17 @@ inline ObjectBulker<sai_dash_tunnel_api_t>::ObjectBulker(SaiBulkerTraits<sai_das
13981387 case SAI_OBJECT_TYPE_DASH_TUNNEL:
13991388 create_entries = api->create_dash_tunnels ;
14001389 remove_entries = api->remove_dash_tunnels ;
1390+ set_entries_attribute = nullptr ;
14011391 break ;
14021392 case SAI_OBJECT_TYPE_DASH_TUNNEL_MEMBER:
14031393 create_entries = api->create_dash_tunnel_members ;
14041394 remove_entries = api->remove_dash_tunnel_members ;
1395+ set_entries_attribute = nullptr ;
14051396 break ;
14061397 case SAI_OBJECT_TYPE_DASH_TUNNEL_NEXT_HOP:
14071398 create_entries = api->create_dash_tunnel_next_hops ;
14081399 remove_entries = api->remove_dash_tunnel_next_hops ;
1400+ set_entries_attribute = nullptr ;
14091401 break ;
14101402 default :
14111403 std::string type_str = sai_serialize_object_type ((sai_object_type_t ) object_type);
0 commit comments