diff --git a/syncd/AsicView.cpp b/syncd/AsicView.cpp index c5c35cc41..a5a954f54 100644 --- a/syncd/AsicView.cpp +++ b/syncd/AsicView.cpp @@ -506,7 +506,7 @@ std::vector> AsicView::getAllNotProcessedObjects() const * @param[in] rid Real ID * @param[in] vid Virtual ID */ -void AsicView::createDummyExistingObject( +std::shared_ptr AsicView::createDummyExistingObject( _In_ sai_object_id_t rid, _In_ sai_object_id_t vid) { @@ -540,6 +540,8 @@ void AsicView::createDummyExistingObject( m_ridToVid[rid] = vid; m_vidToRid[vid] = rid; + + return o; } /** @@ -1289,10 +1291,10 @@ void AsicView::checkObjectsStatus() const { const auto &o = *p.second; - SWSS_LOG_ERROR("object was not processed: %s %s, status: %d (ref: %d)", + SWSS_LOG_ERROR("object was not processed: %s %s, status: %s (ref: %d)", o.m_str_object_type.c_str(), o.m_str_object_id.c_str(), - o.getObjectStatus(), + ObjectStatus::sai_serialize_object_status(o.getObjectStatus()).c_str(), o.isOidObject() ? getVidReferenceCount(o.getVid()): -1); count++; diff --git a/syncd/AsicView.h b/syncd/AsicView.h index 89102b954..2aeb4d28e 100644 --- a/syncd/AsicView.h +++ b/syncd/AsicView.h @@ -188,7 +188,7 @@ namespace syncd * @param[in] rid Real ID * @param[in] vid Virtual ID */ - void createDummyExistingObject( + std::shared_ptr createDummyExistingObject( _In_ sai_object_id_t rid, _In_ sai_object_id_t vid); diff --git a/syncd/ComparisonLogic.cpp b/syncd/ComparisonLogic.cpp index af69bd596..99f45c239 100644 --- a/syncd/ComparisonLogic.cpp +++ b/syncd/ComparisonLogic.cpp @@ -122,6 +122,13 @@ void ComparisonLogic::compareViews() applyViewTransition(current, temp); + transferNotProcessed(current, temp); + + // TODO have a method to check for not processed objects + // and maybe add them to list on processing attributes + // and move note processed objects to temporary view as well + // we need to check oid attributes as well + SWSS_LOG_NOTICE("ASIC operations to execute: %zu", current.asicGetOperationsCount()); temp.checkObjectsStatus(); @@ -183,6 +190,8 @@ void ComparisonLogic::matchOids( { SWSS_LOG_ENTER(); + auto coldBootDiscoveredVids = m_switch->getColdBootDiscoveredVids(); + for (const auto &temporaryIt: temporaryView.m_oOids) { sai_object_id_t temporaryVid = temporaryIt.first; @@ -211,6 +220,37 @@ void ComparisonLogic::matchOids( currentIt->second->m_str_object_type.c_str(), sai_serialize_object_id(rid).c_str(), sai_serialize_object_id(vid).c_str()); + + if (coldBootDiscoveredVids.find(vid) == coldBootDiscoveredVids.end()) + { + auto ot = currentIt->second->getObjectType(); + + switch (ot) + { + case SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP: + case SAI_OBJECT_TYPE_SCHEDULER_GROUP: + case SAI_OBJECT_TYPE_QUEUE: + case SAI_OBJECT_TYPE_PORT: + break; + + default: + + // Should we also add check if also not in removed? + // This is for case of only GET: + // 1. cold boot: + // - OA assigns buffer profile to Queue + // 2. warm boot: + // - OA do GET on Queue and got previous buffer profile + // - OA assigns new buffer profile on Queue + // + // Question: what should happen to old buffer profile? should it be removed? + // No, since OA still hold's the reference to that VID and may use it later. + SWSS_LOG_INFO("matched %s VID %s was not in cold boot, possible only GET?", + sai_serialize_object_id(vid).c_str(), + currentIt->second->m_str_object_type.c_str()); + break; + } + } } SWSS_LOG_NOTICE("matched oids"); @@ -1125,8 +1165,8 @@ void ComparisonLogic::updateObjectStatus( bool ComparisonLogic::performObjectSetTransition( _In_ AsicView ¤tView, _In_ AsicView &temporaryView, - _In_ const std::shared_ptr ¤tBestMatch, - _In_ const std::shared_ptr &temporaryObj, + _In_ const std::shared_ptr currentBestMatch, + _In_ std::shared_ptr temporaryObj, _In_ bool performTransition) { SWSS_LOG_ENTER(); @@ -1386,6 +1426,8 @@ bool ComparisonLogic::performObjectSetTransition( return false; } + const bool beginTempSizeZero = temporaryObj->getAllAttributes().size() == 0; + /* * Current best match can have more attributes than temporary object. * let see if we can bring them to default value if possible. @@ -1530,14 +1572,38 @@ bool ComparisonLogic::performObjectSetTransition( continue; } - // SAI_QUEUE_ATTR_PARENT_SCHEDULER_NODE - // SAI_SCHEDULER_GROUP_ATTR_SCHEDULER_PROFILE_ID* - // SAI_SCHEDULER_GROUP_ATTR_PARENT_NODE - // SAI_BRIDGE_PORT_ATTR_BRIDGE_ID - // - // TODO matched by ID (MATCHED state) should always be updatable - // except those 4 above (at least for those above since they can have - // default value present after switch creation + // current best match is MATCHED + + //auto vid = currentBestMatch->getVid(); + + // TODO don't transfer oid attributes, we don't know how to handle this yet + // If OA did GET on any attributes, snoop in syncd should catch that and write + // to database so we would have some attributes here. + + if (beginTempSizeZero && !meta->isoidattribute) + { + SWSS_LOG_WARN("current attr is MoC|CaS and object is MATCHED: %s transferring %s:%s to temp object (was empty)", + currentBestMatch->m_str_object_id.c_str(), + meta->attridname, + currentAttr->getStrAttrValue().c_str()); + + std::shared_ptr transferedAttr = std::make_shared( + currentAttr->getStrAttrId(), + currentAttr->getStrAttrValue()); + + temporaryObj->setAttr(transferedAttr); + + continue; + } + + // SAI_QUEUE_ATTR_PARENT_SCHEDULER_NODE + // SAI_SCHEDULER_GROUP_ATTR_SCHEDULER_PROFILE_ID* + // SAI_SCHEDULER_GROUP_ATTR_PARENT_NODE + // SAI_BRIDGE_PORT_ATTR_BRIDGE_ID + // + // TODO matched by ID (MATCHED state) should always be updatable + // except those 4 above (at least for those above since they can have + // default value present after switch creation // TODO SAI_SCHEDULER_GROUP_ATTR_SCHEDULER_PROFILE_ID is mandatory on create but also SET // if attribute is set we and object is in MATCHED state then that means we are able to @@ -1571,6 +1637,21 @@ bool ComparisonLogic::performObjectSetTransition( meta->attridname, currentAttr->getStrAttrValue().c_str()); + // don't produce too much noise for queues + if (currentAttr->getStrAttrId() != "SAI_QUEUE_ATTR_TYPE") + { + SWSS_LOG_WARN("current attr is CREATE_ONLY and object is MATCHED: %s transferring %s:%s to temp object", + currentBestMatch->m_str_object_id.c_str(), + meta->attridname, + currentAttr->getStrAttrValue().c_str()); + } + + std::shared_ptr transferedAttr = std::make_shared( + currentAttr->getStrAttrId(), + currentAttr->getStrAttrValue()); + + temporaryObj->setAttr(transferedAttr); + continue; } } @@ -1709,7 +1790,7 @@ bool ComparisonLogic::performObjectSetTransition( void ComparisonLogic::processObjectForViewTransition( _In_ AsicView ¤tView, _In_ AsicView &temporaryView, - _In_ const std::shared_ptr &temporaryObj) + _Inout_ std::shared_ptr temporaryObj) { SWSS_LOG_ENTER(); @@ -2273,6 +2354,10 @@ void ComparisonLogic::populateExistingObjects( if (temporaryView.hasRid(rid)) { + SWSS_LOG_INFO("temporary view has existing %s RID %s", + sai_serialize_object_type(m_vendorSai->objectTypeQuery(rid)).c_str(), + sai_serialize_object_id(rid).c_str()); + continue; } @@ -2295,6 +2380,11 @@ void ComparisonLogic::populateExistingObjects( * from current view as well. */ + SWSS_LOG_INFO("object was removed in init view: %s RID %s VID %s", + sai_serialize_object_type(m_vendorSai->objectTypeQuery(rid)).c_str(), + sai_serialize_object_id(rid).c_str(), + sai_serialize_object_id(vid).c_str()); + continue; } @@ -2730,6 +2820,79 @@ void ComparisonLogic::createPreMatchMap( count); } +void ComparisonLogic::transferNotProcessed( + _In_ AsicView& current, + _In_ AsicView& temp) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("calling transferNotProcessed"); + + /* + * It may happen that after performing view transition, some objects will + * not be processed. This may happen is scenario where buffer pool is + * assigned to buffer profile, and then buffer profile is assigned to + * queue. If OA will query only for oid for that buffer profile, then + * buffer pool will not be processed. Normally if it would be removed by + * comparison logic. More on this issue can be found on github: + * https://github.com/Azure/sonic-sairedis/issues/899 + * + * So what we will do, we will transfer all not processed objects to + * temporary view with the same RID and VID. If nothing will happen to them, + * they will stay there until next warm boot where they will be removed. + */ + + /* + * We need a loop (or recursion) since not processed objects may have oid + * attributes as well. + */ + + while (current.getAllNotProcessedObjects().size()) + { + SWSS_LOG_WARN("we have %zu not processed objects on current view, moving to temp view", current.getAllNotProcessedObjects().size()); + + for (const auto& obj: current.getAllNotProcessedObjects()) + { + auto vid = obj->getVid(); + + auto rid = current.m_vidToRid.at(vid); + + /* + * We should have only oid objects here, since all non oid objects + * are leafs in graph and has been removed. + */ + + auto tmp = temp.createDummyExistingObject(rid, vid); + + /* + * Move both objects to matched state since match oids was already + * called, and here we created some new objects that should be matched. + */ + + current.m_oOids.at(vid)->setObjectStatus(SAI_OBJECT_STATUS_FINAL); + temp.m_oOids.at(vid)->setObjectStatus(SAI_OBJECT_STATUS_FINAL); + + SWSS_LOG_WARN("moved %s VID %s RID %s to temporary view, and marked FINAL", + obj->m_str_object_type.c_str(), + obj->m_str_object_id.c_str(), + sai_serialize_object_id(rid).c_str()); + + for (auto& kvp: obj->getAllAttributes()) + { + auto& sh = kvp.second; + + auto attr = std::make_shared(sh->getStrAttrId(), sh->getStrAttrValue()); + + tmp->setAttr(attr); + + SWSS_LOG_WARN(" * with attr: %s: %s", + sh->getStrAttrId().c_str(), + sh->getStrAttrValue().c_str()); + } + + } + } +} void ComparisonLogic::applyViewTransition( _In_ AsicView ¤t, diff --git a/syncd/ComparisonLogic.h b/syncd/ComparisonLogic.h index 2255f0062..8b8b5b5e0 100644 --- a/syncd/ComparisonLogic.h +++ b/syncd/ComparisonLogic.h @@ -58,6 +58,10 @@ namespace syncd _In_ AsicView& current, _In_ AsicView& temp); + void transferNotProcessed( + _In_ AsicView& current, + _In_ AsicView& temp); + void checkInternalObjects( _In_ const AsicView& cv, _In_ const AsicView& tv); @@ -136,8 +140,8 @@ namespace syncd bool performObjectSetTransition( _In_ AsicView& currentView, _In_ AsicView& temporaryView, - _In_ const std::shared_ptr& currentBestMatch, - _In_ const std::shared_ptr& temporaryObj, + _In_ const std::shared_ptr currentBestMatch, + _In_ const std::shared_ptr temporaryObj, _In_ bool performTransition); void breakBeforeMake( @@ -154,7 +158,7 @@ namespace syncd void processObjectForViewTransition( _In_ AsicView& currentView, _In_ AsicView& temporaryView, - _In_ const std::shared_ptr& temporaryObj); + _Inout_ std::shared_ptr temporaryObj); void checkSwitch( _In_ const AsicView& currentView, diff --git a/syncd/SaiObj.cpp b/syncd/SaiObj.cpp index 27ecec4fa..6695743d0 100644 --- a/syncd/SaiObj.cpp +++ b/syncd/SaiObj.cpp @@ -4,6 +4,30 @@ using namespace syncd; +std::string ObjectStatus::sai_serialize_object_status( + _In_ sai_object_status_t os) +{ + SWSS_LOG_ENTER(); + + switch (os) + { + case SAI_OBJECT_STATUS_NOT_PROCESSED: + return "not-processed"; + + case SAI_OBJECT_STATUS_MATCHED: + return "matched"; + + case SAI_OBJECT_STATUS_REMOVED: + return "removed"; + + case SAI_OBJECT_STATUS_FINAL: + return "final"; + + default: + SWSS_LOG_THROW("unknown object status: %d", os); + } +} + SaiObj::SaiObj(): m_createdObject(false), m_objectStatus(SAI_OBJECT_STATUS_NOT_PROCESSED) diff --git a/syncd/SaiObj.h b/syncd/SaiObj.h index 81618b52e..6d2e4c3b3 100644 --- a/syncd/SaiObj.h +++ b/syncd/SaiObj.h @@ -55,6 +55,19 @@ namespace syncd } sai_object_status_t; + class ObjectStatus + { + private: + + ObjectStatus() = delete; + ~ObjectStatus() = delete; + + public: + + static std::string sai_serialize_object_status( + _In_ sai_object_status_t os); + }; + class SaiObj { private: diff --git a/tests/BCM56850.pl b/tests/BCM56850.pl index 9ec2eccc7..842b19bf7 100755 --- a/tests/BCM56850.pl +++ b/tests/BCM56850.pl @@ -697,8 +697,17 @@ sub test_multi_switch_key play("-p", "$utils::DIR/vsprofile_ctx_multi.ini", "multi_switch_key.rec"); } +sub test_buffer_profile_get +{ + fresh_start; + + play "buffer_profile_get_A.rec"; + play "buffer_profile_get_B.rec"; +} + # RUN TESTS +test_buffer_profile_get; test_multi_switch_key; test_ignore_attributes; test_sairedis_client; diff --git a/tests/BCM56850/buffer_profile_get_A.rec b/tests/BCM56850/buffer_profile_get_A.rec new file mode 100644 index 000000000..c28e15986 --- /dev/null +++ b/tests/BCM56850/buffer_profile_get_A.rec @@ -0,0 +1,12 @@ +2021-08-17.04:02:06.218382|a|INIT_VIEW +2021-08-17.04:02:06.219002|A|SAI_STATUS_SUCCESS +2021-08-17.04:02:06.220179|c|SAI_OBJECT_TYPE_SWITCH:oid:0x21000000000000|SAI_SWITCH_ATTR_INIT_SWITCH=true|SAI_SWITCH_ATTR_SRC_MAC_ADDRESS=18:17:25:55:17:67 +2021-08-17.04:02:10.063326|g|SAI_OBJECT_TYPE_SWITCH:oid:0x21000000000000|SAI_SWITCH_ATTR_PORT_LIST=32:oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0 +2021-08-17.04:02:10.066144|G|SAI_STATUS_SUCCESS|SAI_SWITCH_ATTR_PORT_LIST=32:oid:0x1000000000124,oid:0x1000000000125,oid:0x1000000000126,oid:0x1000000000127,oid:0x1000000000128,oid:0x1000000000129,oid:0x100000000012a,oid:0x100000000012b,oid:0x100000000012c,oid:0x100000000012d,oid:0x100000000012e,oid:0x100000000012f,oid:0x1000000000130,oid:0x1000000000131,oid:0x1000000000132,oid:0x1000000000133,oid:0x1000000000134,oid:0x1000000000135,oid:0x1000000000136,oid:0x1000000000137,oid:0x1000000000138,oid:0x1000000000139,oid:0x100000000013a,oid:0x100000000013b,oid:0x100000000013c,oid:0x100000000013d,oid:0x100000000013e,oid:0x100000000013f,oid:0x1000000000140,oid:0x1000000000141,oid:0x1000000000142,oid:0x1000000000143 +2021-08-17.04:02:10.788257|g|SAI_OBJECT_TYPE_PORT:oid:0x100000000013b|SAI_PORT_ATTR_INGRESS_PRIORITY_GROUP_LIST=8:oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0 +2021-08-17.04:02:10.789514|G|SAI_STATUS_SUCCESS|SAI_PORT_ATTR_INGRESS_PRIORITY_GROUP_LIST=8:oid:0x1a000000000039,oid:0x1a000000000059,oid:0x1a000000000079,oid:0x1a000000000099,oid:0x1a0000000000b9,oid:0x1a0000000000d9,oid:0x1a0000000000f9,oid:0x1a000000000119 +2021-08-17.04:02:12.427282|c|SAI_OBJECT_TYPE_BUFFER_POOL:oid:0x1800000000038a|SAI_BUFFER_POOL_ATTR_THRESHOLD_MODE=SAI_BUFFER_POOL_THRESHOLD_MODE_DYNAMIC|SAI_BUFFER_POOL_ATTR_SIZE=47218432|SAI_BUFFER_POOL_ATTR_TYPE=SAI_BUFFER_POOL_TYPE_INGRESS|SAI_BUFFER_POOL_ATTR_XOFF_SIZE=17708800 +2021-08-17.04:11:48.564269|c|SAI_OBJECT_TYPE_BUFFER_PROFILE:oid:0x1900000000044a|SAI_BUFFER_PROFILE_ATTR_POOL_ID=oid:0x1800000000038a|SAI_BUFFER_PROFILE_ATTR_THRESHOLD_MODE=SAI_BUFFER_PROFILE_THRESHOLD_MODE_DYNAMIC|SAI_BUFFER_PROFILE_ATTR_RESERVED_BUFFER_SIZE=6755399441055744|SAI_BUFFER_PROFILE_ATTR_SHARED_DYNAMIC_TH=-8 +2021-08-17.04:13:43.975909|s|SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP:oid:0x1a0000000000b9|SAI_INGRESS_PRIORITY_GROUP_ATTR_BUFFER_PROFILE=oid:0x1900000000044a +2021-08-17.04:02:10.210537|a|APPLY_VIEW +2021-08-17.04:02:10.211307|A|SAI_STATUS_SUCCESS diff --git a/tests/BCM56850/buffer_profile_get_B.rec b/tests/BCM56850/buffer_profile_get_B.rec new file mode 100644 index 000000000..303fe4690 --- /dev/null +++ b/tests/BCM56850/buffer_profile_get_B.rec @@ -0,0 +1,13 @@ +2021-08-17.04:19:21.957051|a|INIT_VIEW +2021-08-17.04:19:28.152399|A|SAI_STATUS_SUCCESS +2021-08-17.04:19:28.154608|c|SAI_OBJECT_TYPE_SWITCH:oid:0x21000000000000|SAI_SWITCH_ATTR_INIT_SWITCH=true|SAI_SWITCH_ATTR_SRC_MAC_ADDRESS=18:17:25:55:17:67 +2021-08-17.04:19:28.171193|g|SAI_OBJECT_TYPE_SWITCH:oid:0x21000000000000|SAI_SWITCH_ATTR_PORT_LIST=32:oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0 +2021-08-17.04:19:28.175104|G|SAI_STATUS_SUCCESS|SAI_SWITCH_ATTR_PORT_LIST=32:oid:0x1000000000124,oid:0x1000000000125,oid:0x1000000000126,oid:0x1000000000127,oid:0x1000000000128,oid:0x1000000000129,oid:0x100000000012a,oid:0x100000000012b,oid:0x100000000012c,oid:0x100000000012d,oid:0x100000000012e,oid:0x100000000012f,oid:0x1000000000130,oid:0x1000000000131,oid:0x1000000000132,oid:0x1000000000133,oid:0x1000000000134,oid:0x1000000000135,oid:0x1000000000136,oid:0x1000000000137,oid:0x1000000000138,oid:0x1000000000139,oid:0x100000000013a,oid:0x100000000013b,oid:0x100000000013c,oid:0x100000000013d,oid:0x100000000013e,oid:0x100000000013f,oid:0x1000000000140,oid:0x1000000000141,oid:0x1000000000142,oid:0x1000000000143 +2021-08-17.04:19:29.456685|g|SAI_OBJECT_TYPE_PORT:oid:0x100000000013b|SAI_PORT_ATTR_INGRESS_PRIORITY_GROUP_LIST=8:oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0 +2021-08-17.04:19:29.457560|G|SAI_STATUS_SUCCESS|SAI_PORT_ATTR_INGRESS_PRIORITY_GROUP_LIST=8:oid:0x1a000000000039,oid:0x1a000000000059,oid:0x1a000000000079,oid:0x1a000000000099,oid:0x1a0000000000b9,oid:0x1a0000000000d9,oid:0x1a0000000000f9,oid:0x1a000000000119 +2021-08-17.04:19:31.376976|g|SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP:oid:0x1a0000000000b9|SAI_INGRESS_PRIORITY_GROUP_ATTR_BUFFER_PROFILE=oid:0x0 +2021-08-17.04:19:31.379199|G|SAI_STATUS_SUCCESS|SAI_INGRESS_PRIORITY_GROUP_ATTR_BUFFER_PROFILE=oid:0x1900000000044a +2021-08-17.04:19:31.380341|c|SAI_OBJECT_TYPE_BUFFER_PROFILE:oid:0x1900000000051c|SAI_BUFFER_PROFILE_ATTR_POOL_ID=oid:0x0|SAI_BUFFER_PROFILE_ATTR_THRESHOLD_MODE=SAI_BUFFER_PROFILE_THRESHOLD_MODE_DYNAMIC|SAI_BUFFER_PROFILE_ATTR_RESERVED_BUFFER_SIZE=6755399441055744|SAI_BUFFER_PROFILE_ATTR_SHARED_DYNAMIC_TH=-8 +2021-08-17.04:19:31.382246|s|SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP:oid:0x1a0000000000b9|SAI_INGRESS_PRIORITY_GROUP_ATTR_BUFFER_PROFILE=oid:0x1900000000051c +2021-08-17.04:19:31.415208|a|APPLY_VIEW +2021-08-17.04:19:32.331089|A|SAI_STATUS_SUCCESS diff --git a/tests/BCM56850/full_ntf.rec b/tests/BCM56850/full_ntf.rec new file mode 100644 index 000000000..436589379 --- /dev/null +++ b/tests/BCM56850/full_ntf.rec @@ -0,0 +1,15 @@ +2017-06-14.01:55:46.543987|a|INIT_VIEW +2017-06-14.01:55:46.551164|A|SAI_STATUS_SUCCESS +2017-06-14.01:55:46.555975|c|SAI_OBJECT_TYPE_SWITCH:oid:0x21000000000000|SAI_SWITCH_ATTR_INIT_SWITCH=true|SAI_SWITCH_ATTR_FDB_EVENT_NOTIFY=0x417890|SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY=0x4179f0|SAI_SWITCH_ATTR_SWITCH_SHUTDOWN_REQUEST_NOTIFY=0x417b50 +2017-06-14.01:55:46.558259|s|SAI_OBJECT_TYPE_SWITCH:oid:0x21000000000000|SAI_SWITCH_ATTR_SRC_MAC_ADDRESS=00:11:11:11:11:11 +2017-06-14.01:55:46.559177|g|SAI_OBJECT_TYPE_SWITCH:oid:0x21000000000000|SAI_SWITCH_ATTR_DEFAULT_VIRTUAL_ROUTER_ID=oid:0x0 +2017-06-14.01:56:05.500382|G|SAI_STATUS_SUCCESS|SAI_SWITCH_ATTR_DEFAULT_VIRTUAL_ROUTER_ID=oid:0x3000000000022 +2017-06-14.01:56:05.501109|c|SAI_OBJECT_TYPE_ROUTER_INTERFACE:oid:0x60000000005a3|SAI_ROUTER_INTERFACE_ATTR_VIRTUAL_ROUTER_ID=oid:0x3000000000022|SAI_ROUTER_INTERFACE_ATTR_TYPE=SAI_ROUTER_INTERFACE_TYPE_LOOPBACK +2017-06-14.01:56:05.508992|g|SAI_OBJECT_TYPE_SWITCH:oid:0x21000000000000|SAI_SWITCH_ATTR_CPU_PORT=oid:0x0 +2017-06-14.01:56:05.516398|G|SAI_STATUS_SUCCESS|SAI_SWITCH_ATTR_CPU_PORT=oid:0x1000000000001 +2017-06-14.01:56:05.516767|g|SAI_OBJECT_TYPE_SWITCH:oid:0x21000000000000|SAI_SWITCH_ATTR_NUMBER_OF_ACTIVE_PORTS=1 +2017-06-14.01:56:05.519973|G|SAI_STATUS_SUCCESS|SAI_SWITCH_ATTR_NUMBER_OF_ACTIVE_PORTS=32 +2017-06-14.01:56:05.520538|g|SAI_OBJECT_TYPE_SWITCH:oid:0x21000000000000|SAI_SWITCH_ATTR_PORT_LIST=32:oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0 +2017-06-14.01:56:05.525938|G|SAI_STATUS_SUCCESS|SAI_SWITCH_ATTR_PORT_LIST=32:oid:0x1000000000002,oid:0x1000000000003,oid:0x1000000000004,oid:0x1000000000005,oid:0x1000000000006,oid:0x1000000000007,oid:0x1000000000008,oid:0x1000000000009,oid:0x100000000000a,oid:0x100000000000b,oid:0x100000000000c,oid:0x100000000000d,oid:0x100000000000e,oid:0x100000000000f,oid:0x1000000000010,oid:0x1000000000011,oid:0x1000000000012,oid:0x1000000000013,oid:0x1000000000014,oid:0x1000000000015,oid:0x1000000000016,oid:0x1000000000017,oid:0x1000000000018,oid:0x1000000000019,oid:0x100000000001a,oid:0x100000000001b,oid:0x100000000001c,oid:0x100000000001d,oid:0x100000000001e,oid:0x100000000001f,oid:0x1000000000020,oid:0x1000000000021 +2017-06-14.01:56:06.151337|a|APPLY_VIEW +2017-06-14.01:56:06.156740|A|SAI_STATUS_SUCCESS diff --git a/tests/aspell.en.pws b/tests/aspell.en.pws index e0de14fd1..93c1fef79 100644 --- a/tests/aspell.en.pws +++ b/tests/aspell.en.pws @@ -1,4 +1,5 @@ personal_ws-1.1 en 0 +acl ACL ACLs AES @@ -102,34 +103,50 @@ aclfield addr apache api +API apis +APIs +ApplyView arp asic +ASIC asicCreateObject -asicSet asics +ASICs +asicSet asicview +AsicView async attr +ATTR +ATTR +AttrHash attrid attridname attrs attrvalue +BCM bool +Bool booldata brcm broadcom bv candidateObjects +CHARDATA childs +COLDVIDS config const +CONST consts -countOnly counterName +countOnly cout cpp cpu +CreateObject +CRM currentObj currentObject currentView @@ -138,18 +155,24 @@ dbg deallocate decap decrement +Decrement +DEI del deserialize deserialized deserializer dest destructor +Destructor dev didn doesn dscp +EAPOL ecn +ECN eg +EIO encap encodingsa endif @@ -157,48 +180,71 @@ endl enum epoll errno +ETERM eth -ethX ethernet +ethX extern fastfast fd fdb +FDB fdbs +FDBs filename -gSwitchId +FIXME +FlexCounter +GCM genetlink getInstance getQueueSize getSwitchId getVid github +GRE +gSwitchId +GUID hardcoded hasEqualAttribute hostif hpp +HSV htonl http https hw hwinfo +ICV +ICV idx ifdef +IFF ifindex inattr ini init +INIT inout inseg +Inseg +INSEG insegs ip +IP ipc +ipg +IPG +IPG ipgs +IPGs ipmc +IPv isobjectid isoidattribute json kco +KEYs +KEYs lck lgtm librediscommon @@ -206,31 +252,42 @@ libsairedis libswsscommon linux loadMACsecAttr +LOGLEVEL logrotate lookup +LOOPBACK lua macsec +MACsec +MCAST md +Mellanox memcpy metadata mlnx mpls +MTU multicast mutex mutexes namespace namespaces netdev +NHG nhgm nlog ntf nullptr +OA +ObjectAttrHash objectHash +ObjectHash objectid objectkey objecttype oid oids +OIDs ok orch orchagent @@ -240,59 +297,83 @@ performTransition pfc plaintext pn +PN policer +PORTs pre printf ptr qos queueCounterIds queueId +QUEUEs queueStats rc readonly recv redis +Redis refactor refactored refactoring reimplement reinit removedVidToRid +REQ +RID +RIDs +RIDTOVID rif +RIF rifCounterIds rifId rifStats +RO +RPC runtime rx +RXSC sa sai -saiDiscovery +SaiAttr saibuffer +saiDiscovery +SaiObj sairedis saiswitch +SaiSwitch +SAITHRIFT saivs +SAK sanitycheck +SAs sc scb +SCs sdk +SDK selectable setBuffered setMinPrio setPortCounterList setQueueCounterList sg +SGs shm shmem sleeptime soAll +SONiC splitted src +SRC ss stateful stdint stdlib stdout stp +STP str struct structs @@ -300,22 +381,29 @@ structure subport sw swid +Switch switchid +SwitchState swss swsscommon syncd sys syslog tapfd +TCI tcp temporaryObj temporaryVid temporaryView +TestCase timestamp tmp +TODO torvalds +TPID ttl tx +TXSC typedef uint uncomment @@ -330,23 +418,34 @@ updatable upgradable util utils -vEthernetX versa veth +vEthernetX vid +VID +VIDCOUNTER vidReference -vidToRid vids +VIDs +vidToRid +VIDTORID vlan vlans +VLANS +VOQ vr vslib vxlan +VXLAN +Werror wikipedia workaroung +WRED www xoff xon zero zeromq zmq +ZMQ +ZMQ