Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implementation of System ports initialization, Interface & Neighbor Synchronization... #657

Merged
merged 4 commits into from
Oct 12, 2020
Merged
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
43 changes: 43 additions & 0 deletions meta/Meta.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3351,6 +3351,11 @@ void Meta::meta_generic_validation_post_remove(
// no special action required
break;

case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG:
case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG_LIST:
// no special action required
break;

default:
META_LOG_THROW(md, "serialization type is not supported yet FIXME");
}
Expand Down Expand Up @@ -4565,6 +4570,13 @@ sai_status_t Meta::meta_generic_validation_create(
break;
}

case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG_LIST:
VALIDATION_LIST(md, value.sysportconfiglist);
break;

case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG:
break;

default:

META_LOG_THROW(md, "serialization type is not supported yet FIXME");
Expand Down Expand Up @@ -5196,6 +5208,13 @@ sai_status_t Meta::meta_generic_validation_set(
VALIDATION_LIST(md, value.aclcapability.action_list);
break;

case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG_LIST:
VALIDATION_LIST(md, value.sysportconfiglist);
break;

case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG:
break;

default:

META_LOG_THROW(md, "serialization type is not supported yet FIXME");
Expand Down Expand Up @@ -5557,6 +5576,13 @@ sai_status_t Meta::meta_generic_validation_get(
VALIDATION_LIST(md, value.aclcapability.action_list);
break;

case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG:
break;

case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG_LIST:
VALIDATION_LIST(md, value.sysportconfiglist);
break;

default:

// acl capability will is more complex since is in/out we need to check stage
Expand Down Expand Up @@ -5798,6 +5824,13 @@ void Meta::meta_generic_validation_post_get(

break;

case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG:
break;

case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG_LIST:
VALIDATION_LIST_GET(md, value.sysportconfiglist);
break;

default:

META_LOG_THROW(md, "serialization type is not supported yet FIXME");
Expand Down Expand Up @@ -6679,6 +6712,11 @@ void Meta::meta_generic_validation_post_create(
// no special action required
break;

case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG:
case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG_LIST:
// no special action required
break;

default:

META_LOG_THROW(md, "serialization type is not supported yet FIXME");
Expand Down Expand Up @@ -6906,6 +6944,11 @@ void Meta::meta_generic_validation_post_set(
// no special action required
break;

case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG:
case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG_LIST:
// no special action required
break;

default:
META_LOG_THROW(md, "serialization type is not supported yet FIXME");
}
Expand Down
165 changes: 165 additions & 0 deletions meta/saiserialize.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,14 @@ sai_status_t transfer_attribute(
RETURN_ON_ERROR(transfer_list(src_attr.value.aclcapability.action_list, dst_attr.value.aclcapability.action_list, countOnly));
break;

case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG:
transfer_primitive(src_attr.value.sysportconfig, dst_attr.value.sysportconfig);
break;

case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.sysportconfiglist, dst_attr.value.sysportconfiglist, countOnly));
break;

default:
return SAI_STATUS_NOT_IMPLEMENTED;
}
Expand Down Expand Up @@ -1362,6 +1370,73 @@ std::string sai_serialize_acl_capability(
return mandatory + ":" + list;
}

std::string sai_serialize_system_port_config(
_In_ const sai_attr_metadata_t &meta,
_In_ const sai_system_port_config_t &sysportconfig)
{
SWSS_LOG_ENTER();

json j;

j["port_id"] = sai_serialize_number(sysportconfig.port_id, false);
j["attached_switch_id"] = sai_serialize_number(sysportconfig.attached_switch_id, false);
j["attached_core_index"] = sai_serialize_number(sysportconfig.attached_core_index, false);
j["attached_core_port_index"] = sai_serialize_number(sysportconfig.attached_core_port_index, false);
j["speed"] = sai_serialize_number(sysportconfig.speed, false);
j["num_voq"] = sai_serialize_number(sysportconfig.num_voq, false);

return j.dump();
}

json sai_serialize_system_port_cfg_list_item(
_In_ const sai_system_port_config_t &sysportconfig)
{
SWSS_LOG_ENTER();

json j;

j["port_id"] = sai_serialize_number(sysportconfig.port_id, false);
j["attached_switch_id"] = sai_serialize_number(sysportconfig.attached_switch_id, false);
j["attached_core_index"] = sai_serialize_number(sysportconfig.attached_core_index, false);
j["attached_core_port_index"] = sai_serialize_number(sysportconfig.attached_core_port_index, false);
j["speed"] = sai_serialize_number(sysportconfig.speed, false);
j["num_voq"] = sai_serialize_number(sysportconfig.num_voq, false);

return j;
}

std::string sai_serialize_system_port_config_list(
_In_ const sai_attr_metadata_t &meta,
_In_ const sai_system_port_config_list_t& sysportconfiglist,
_In_ bool countOnly)
{
SWSS_LOG_ENTER();

json j;

j["count"] = sysportconfiglist.count;

if (sysportconfiglist.list == NULL || countOnly)
{
j["list"] = nullptr;

return j.dump();
}

json arr = json::array();

for (uint32_t i = 0; i < sysportconfiglist.count; ++i)
{
json item = sai_serialize_system_port_cfg_list_item(sysportconfiglist.list[i]);

arr.push_back(item);
}

j["list"] = arr;

return j.dump();
}

std::string sai_serialize_attr_value(
_In_ const sai_attr_metadata_t& meta,
_In_ const sai_attribute_t &attr,
Expand Down Expand Up @@ -1497,6 +1572,12 @@ std::string sai_serialize_attr_value(
case SAI_ATTR_VALUE_TYPE_ACL_CAPABILITY:
return sai_serialize_acl_capability(meta, attr.value.aclcapability, countOnly);

case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG:
return sai_serialize_system_port_config(meta, attr.value.sysportconfig);

case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG_LIST:
return sai_serialize_system_port_config_list(meta, attr.value.sysportconfiglist, countOnly);

default:
SWSS_LOG_THROW("FATAL: invalid serialization type %d", meta.attrvaluetype);
}
Expand Down Expand Up @@ -2530,6 +2611,77 @@ void sai_deserialize_acl_capability(
sai_deserialize_enum_list(list, &sai_metadata_enum_sai_acl_action_type_t, cap.action_list, false);
}

void sai_deserialize_system_port_config(
_In_ const std::string& s,
_Out_ sai_system_port_config_t& sysportconfig)
{
SWSS_LOG_ENTER();

json j = json::parse(s);

sai_deserialize_number(j["port_id"], sysportconfig.port_id, false);
sai_deserialize_number(j["attached_switch_id"], sysportconfig.attached_switch_id, false);
sai_deserialize_number(j["attached_core_index"], sysportconfig.attached_core_index, false);
sai_deserialize_number(j["attached_core_port_index"], sysportconfig.attached_core_port_index, false);
sai_deserialize_number(j["speed"], sysportconfig.speed, false);
sai_deserialize_number(j["num_voq"], sysportconfig.num_voq, false);

}

void sai_deserialize_system_port_cfg_list_item(
_In_ const json& j,
_Out_ sai_system_port_config_t& sysportconfig)
{
SWSS_LOG_ENTER();

sai_deserialize_number(j["port_id"], sysportconfig.port_id, false);
sai_deserialize_number(j["attached_switch_id"], sysportconfig.attached_switch_id, false);
sai_deserialize_number(j["attached_core_index"], sysportconfig.attached_core_index, false);
sai_deserialize_number(j["attached_core_port_index"], sysportconfig.attached_core_port_index, false);
sai_deserialize_number(j["speed"], sysportconfig.speed, false);
sai_deserialize_number(j["num_voq"], sysportconfig.num_voq, false);
}

void sai_deserialize_system_port_config_list(
_In_ const std::string& s,
_Out_ sai_system_port_config_list_t& sysportconfiglist,
_In_ bool countOnly)
{
SWSS_LOG_ENTER();

json j = json::parse(s);

sysportconfiglist.count = j["count"];

if (countOnly)
{
return;
}

if (j["list"] == nullptr)
{
sysportconfiglist.list = NULL;
return;
}

json arr = j["list"];

if (arr.size() != (size_t)sysportconfiglist.count)
{
SWSS_LOG_ERROR("system port config list count mismatch %lu vs %u", arr.size(), sysportconfiglist.count);
throw std::runtime_error("system port config list count mismatch");
}

sysportconfiglist.list = sai_alloc_n_of_ptr_type(sysportconfiglist.count, sysportconfiglist.list);

for (uint32_t i = 0; i < sysportconfiglist.count; ++i)
{
const json& item = arr[i];

sai_deserialize_system_port_cfg_list_item(item, sysportconfiglist.list[i]);
}
}

void sai_deserialize_attr_value(
_In_ const std::string& s,
_In_ const sai_attr_metadata_t& meta,
Expand Down Expand Up @@ -2668,6 +2820,12 @@ void sai_deserialize_attr_value(
case SAI_ATTR_VALUE_TYPE_ACL_CAPABILITY:
return sai_deserialize_acl_capability(s, attr.value.aclcapability);

case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG:
return sai_deserialize_system_port_config(s, attr.value.sysportconfig);

case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG_LIST:
return sai_deserialize_system_port_config_list(s, attr.value.sysportconfiglist, countOnly);

default:
SWSS_LOG_THROW("deserialize type %d is not supportd yet FIXME", meta.attrvaluetype);
}
Expand Down Expand Up @@ -3173,6 +3331,13 @@ void sai_deserialize_free_attribute_value(
sai_free_list(attr.value.aclcapability.action_list);
break;

case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG:
break;

case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG_LIST:
sai_free_list(attr.value.sysportconfiglist);
break;

default:
SWSS_LOG_THROW("unsupported type %d on deserialize free, FIXME", type);
}
Expand Down