Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 35 additions & 7 deletions meta/Meta.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1953,7 +1953,9 @@ void Meta::meta_generic_validation_post_remove(
}
break;

// case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
// no object references to decrement for uint8 list
break;

// ACL ACTION

Expand Down Expand Up @@ -3620,7 +3622,13 @@ sai_status_t Meta::meta_generic_validation_create(
break;
}

// case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
// Used by UDF-backed ACL match fields (byte pattern + mask).
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
if (value.aclfield.enable)
{
VALIDATION_LIST(md, value.aclfield.data.u8list);
}
break;

// ACL ACTION

Expand Down Expand Up @@ -4273,7 +4281,12 @@ sai_status_t Meta::meta_generic_validation_set(
break;
}

// case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
if (value.aclfield.enable)
{
VALIDATION_LIST(md, value.aclfield.data.u8list);
}
break;

// ACL ACTION

Expand Down Expand Up @@ -4748,7 +4761,9 @@ sai_status_t Meta::meta_generic_validation_get(
VALIDATION_LIST(md, value.aclfield.data.objlist);
break;

// case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
VALIDATION_LIST(md, value.aclfield.data.u8list);
break;

// ACL ACTION

Expand Down Expand Up @@ -5017,7 +5032,12 @@ void Meta::meta_generic_validation_post_get(
meta_generic_validation_post_get_objlist(meta_key, md, switch_id, value.aclfield.data.objlist.count, value.aclfield.data.objlist.list);
break;

// case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST: (2 lists)
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
if (value.aclfield.enable)
{
VALIDATION_LIST_GET(md, value.aclfield.data.u8list);
}
break;

// ACL ACTION

Expand Down Expand Up @@ -5995,7 +6015,9 @@ void Meta::meta_generic_validation_post_create(
}
break;

// case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
// no object references to increment for uint8 list
break;

// ACL ACTION

Expand Down Expand Up @@ -6222,7 +6244,9 @@ void Meta::meta_generic_validation_post_set(
break;
}

// case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
// no object references to handle for uint8 list
break;

// ACL ACTION

Expand Down Expand Up @@ -7528,6 +7552,10 @@ void Meta::populate(
}
break;

case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
// no object references in uint8 list
break;

case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_OBJECT_ID:
if (value.aclaction.enable)
{
Expand Down
1 change: 1 addition & 0 deletions tests/aspell.en.pws
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ TODO
TPID
TXSC
TestCase
UDF
tokenize
VID
VIDCOUNTER
Expand Down
47 changes: 47 additions & 0 deletions unittest/meta/TestLegacyOther.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1040,3 +1040,50 @@ TEST(Legacy, bulk_route_entry_create)
std::cout << "ms: " << (double)us.count()/1000 << " / " << n << "/" << object_count << std::endl;
}

TEST(Legacy, acl_entry_udf_uint8_list_field)
{
SWSS_LOG_ENTER();

clear_local();

sai_object_id_t switch_id = create_switch();
sai_object_id_t aclentry;
sai_object_id_t table_id = insert_dummy_object(SAI_OBJECT_TYPE_ACL_TABLE, switch_id);

uint8_t data[4] = {0x11, 0x22, 0x33, 0x44};
uint8_t mask[4] = {0xff, 0xff, 0xff, 0xff};

std::vector<sai_attribute_t> vattrs;

sai_attribute_t a_table;
memset(&a_table, 0, sizeof(a_table));
a_table.id = SAI_ACL_ENTRY_ATTR_TABLE_ID;
a_table.value.oid = table_id;
vattrs.push_back(a_table);

sai_attribute_t a_udf;
memset(&a_udf, 0, sizeof(a_udf));
a_udf.id = SAI_ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN;
a_udf.value.aclfield.enable = true;
a_udf.value.aclfield.data.u8list.count = 4;
a_udf.value.aclfield.data.u8list.list = data;
a_udf.value.aclfield.mask.u8list.count = 4;
a_udf.value.aclfield.mask.u8list.list = mask;
vattrs.push_back(a_udf);

auto status = g_meta->create(SAI_OBJECT_TYPE_ACL_ENTRY, &aclentry, switch_id,
(uint32_t)vattrs.size(), vattrs.data());
EXPECT_EQ(SAI_STATUS_SUCCESS, status);

status = g_meta->set(SAI_OBJECT_TYPE_ACL_ENTRY, aclentry, &a_udf);
EXPECT_EQ(SAI_STATUS_SUCCESS, status);

status = g_meta->get(SAI_OBJECT_TYPE_ACL_ENTRY, aclentry, 1, &a_udf);
EXPECT_EQ(SAI_STATUS_SUCCESS, status);

status = g_meta->remove(SAI_OBJECT_TYPE_ACL_ENTRY, aclentry);
EXPECT_EQ(SAI_STATUS_SUCCESS, status);

remove_switch(switch_id);
}

14 changes: 14 additions & 0 deletions unittest/meta/TestMeta.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1739,6 +1739,20 @@ TEST(Meta, populate)
m.populate(dump);
}

TEST(Meta, populate_acl_entry_udf_uint8_list)
{
Meta m(std::make_shared<MetaTestSaiInterface>());

swss::TableDump dump;

dump["SAI_OBJECT_TYPE_ACL_TABLE:oid:0x7000000000700"]["SAI_ACL_TABLE_ATTR_FIELD_ACL_IP_TYPE"] = "true";
dump["SAI_OBJECT_TYPE_ACL_ENTRY:oid:0x8000000000701"]["SAI_ACL_ENTRY_ATTR_TABLE_ID"] = "oid:0x7000000000700";
dump["SAI_OBJECT_TYPE_ACL_ENTRY:oid:0x8000000000701"]["SAI_ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN"] =
"4:17,34,51,68&mask:4:0xff,0xff,0xff,0xff";

m.populate(dump);
}

TEST(Meta, bulkGetClearStats)
{
Meta m(std::make_shared<MetaTestSaiInterface>());
Expand Down
Loading