diff --git a/SAI b/SAI index 0788e82e8..be523777d 160000 --- a/SAI +++ b/SAI @@ -1 +1 @@ -Subproject commit 0788e82e8ca56b82eb8f8c0a3dee40edbc2ba9ba +Subproject commit be523777da96504758d3bb6b3696ae7d1129419d diff --git a/lib/Switch.cpp b/lib/Switch.cpp index 6777e747c..41358022f 100644 --- a/lib/Switch.cpp +++ b/lib/Switch.cpp @@ -59,85 +59,7 @@ void Switch::updateNotifications( { SWSS_LOG_ENTER(); - /* - * This function should only be called on CREATE/SET - * api when object is SWITCH. - */ - - for (uint32_t index = 0; index < attrCount; ++index) - { - auto &attr = attrList[index]; - - auto meta = sai_metadata_get_attr_metadata(SAI_OBJECT_TYPE_SWITCH, attr.id); - - if (meta == NULL) - SWSS_LOG_THROW("failed to find metadata for switch attr %d", attr.id); - - if (meta->attrvaluetype != SAI_ATTR_VALUE_TYPE_POINTER) - continue; - - switch (attr.id) - { - case SAI_SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY: - m_switchNotifications.on_switch_state_change = - (sai_switch_state_change_notification_fn)attr.value.ptr; - break; - - case SAI_SWITCH_ATTR_SWITCH_ASIC_SDK_HEALTH_EVENT_NOTIFY: - m_switchNotifications.on_switch_asic_sdk_health_event = - (sai_switch_asic_sdk_health_event_notification_fn)attr.value.ptr; - break; - - case SAI_SWITCH_ATTR_SHUTDOWN_REQUEST_NOTIFY: - m_switchNotifications.on_switch_shutdown_request = - (sai_switch_shutdown_request_notification_fn)attr.value.ptr; - break; - - case SAI_SWITCH_ATTR_FDB_EVENT_NOTIFY: - m_switchNotifications.on_fdb_event = - (sai_fdb_event_notification_fn)attr.value.ptr; - break; - - case SAI_SWITCH_ATTR_NAT_EVENT_NOTIFY: - m_switchNotifications.on_nat_event = - (sai_nat_event_notification_fn)attr.value.ptr; - break; - - case SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY: - m_switchNotifications.on_port_state_change = - (sai_port_state_change_notification_fn)attr.value.ptr; - break; - - case SAI_SWITCH_ATTR_PACKET_EVENT_NOTIFY: - m_switchNotifications.on_packet_event = - (sai_packet_event_notification_fn)attr.value.ptr; - break; - - case SAI_SWITCH_ATTR_QUEUE_PFC_DEADLOCK_NOTIFY: - m_switchNotifications.on_queue_pfc_deadlock = - (sai_queue_pfc_deadlock_notification_fn)attr.value.ptr; - break; - - case SAI_SWITCH_ATTR_BFD_SESSION_STATE_CHANGE_NOTIFY: - m_switchNotifications.on_bfd_session_state_change = - (sai_bfd_session_state_change_notification_fn)attr.value.ptr; - break; - - case SAI_SWITCH_ATTR_PORT_HOST_TX_READY_NOTIFY: - m_switchNotifications.on_port_host_tx_ready = - (sai_port_host_tx_ready_notification_fn)attr.value.ptr; - break; - - case SAI_SWITCH_ATTR_TWAMP_SESSION_EVENT_NOTIFY: - m_switchNotifications.on_twamp_session_event = - (sai_twamp_session_event_notification_fn)attr.value.ptr; - break; - - default: - SWSS_LOG_ERROR("pointer for %s is not handled, FIXME!", meta->attridname); - break; - } - } + sai_metadata_update_switch_notification_pointers(&m_switchNotifications, attrCount, attrList); } const sai_switch_notifications_t& Switch::getSwitchNotifications() const diff --git a/lib/VirtualObjectIdManager.cpp b/lib/VirtualObjectIdManager.cpp index ca88a0192..63cc09e89 100644 --- a/lib/VirtualObjectIdManager.cpp +++ b/lib/VirtualObjectIdManager.cpp @@ -25,13 +25,18 @@ static_assert(sizeof(sai_object_id_t) == sizeof(uint64_t), "SAI object ID size s #define SAI_REDIS_OBJECT_TYPE_MAX ( (1ULL << SAI_REDIS_OBJECT_TYPE_BITS_SIZE) - 1 ) #define SAI_REDIS_OBJECT_TYPE_MASK (SAI_REDIS_OBJECT_TYPE_MAX) -#define SAI_REDIS_OBJECT_INDEX_BITS_SIZE ( 40 ) +#define SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE ( 1 ) +#define SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_MAX ( (1ULL << SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE) - 1 ) +#define SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_MASK (SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_MAX) + +#define SAI_REDIS_OBJECT_INDEX_BITS_SIZE ( 39 ) #define SAI_REDIS_OBJECT_INDEX_MAX ( (1ULL << SAI_REDIS_OBJECT_INDEX_BITS_SIZE) - 1 ) #define SAI_REDIS_OBJECT_INDEX_MASK (SAI_REDIS_OBJECT_INDEX_MAX) #define SAI_REDIS_OBJECT_ID_BITS_SIZE ( \ SAI_REDIS_SWITCH_INDEX_BITS_SIZE + \ SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + \ + SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + \ SAI_REDIS_OBJECT_TYPE_BITS_SIZE + \ SAI_REDIS_OBJECT_INDEX_BITS_SIZE ) @@ -41,7 +46,9 @@ static_assert(SAI_REDIS_OBJECT_ID_BITS_SIZE == SAI_OBJECT_ID_BITS_SIZE, "redis o * This condition must be met, since we need to be able to encode SAI object * type in object id on defined number of bits. */ -static_assert(SAI_OBJECT_TYPE_EXTENSIONS_MAX < SAI_REDIS_OBJECT_TYPE_MAX, "redis max object type value must be greater than supported SAI max object type value"); +static_assert(SAI_OBJECT_TYPE_MAX < 256, "object type must be possible to encode on 1 byte"); +static_assert((SAI_OBJECT_TYPE_EXTENSIONS_RANGE_END - SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START) < 256, + "extensions object type must be possible to encode on 1 byte"); /* * Current OBJECT ID format: @@ -49,30 +56,42 @@ static_assert(SAI_OBJECT_TYPE_EXTENSIONS_MAX < SAI_REDIS_OBJECT_TYPE_MAX, "redis * bits 63..56 - switch index * bits 55..48 - SAI object type * bits 47..40 - global context - * bits 40..0 - object index + * bits 39..39 - object type extensions flag + * bits 38..0 - object index * * So large number of bits is required, otherwise we would need to have map of * OID to some struct that will have all those values. But having all this * information in OID itself is more convenient. + * + * To be backward compatible with previous sairedis, we will still encode base + * object type on bit's 55..48, and extensions which will now start from range + * 0x20000000, will be encoded from 0x0, but extensions flag will be set to 1. + * + * For example SAI_OBJECT_TYPE_VIRTUAL_ROUTER oid will be encoded as 0x0003000000000001, + * SAI_OBJECT_TYPE_DASH_ACL_GROUP oid will be encoded as 0x0003008000000001. */ #define SAI_REDIS_GET_OBJECT_INDEX(oid) \ ( ((uint64_t)oid) & ( SAI_REDIS_OBJECT_INDEX_MASK ) ) +#define SAI_REDIS_GET_OBJECT_TYPE_EXTENSIONS_FLAG(oid) \ + ( (((uint64_t)oid) >> (SAI_REDIS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_MAX ) ) + #define SAI_REDIS_GET_GLOBAL_CONTEXT(oid) \ - ( (((uint64_t)oid) >> (SAI_REDIS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_REDIS_GLOBAL_CONTEXT_MASK ) ) + ( (((uint64_t)oid) >> (SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_REDIS_GLOBAL_CONTEXT_MASK ) ) #define SAI_REDIS_GET_OBJECT_TYPE(oid) \ - ( (((uint64_t)oid) >> ( SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_REDIS_OBJECT_TYPE_MASK ) ) + ( (((uint64_t)oid) >> ( SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_REDIS_OBJECT_TYPE_MASK ) ) #define SAI_REDIS_GET_SWITCH_INDEX(oid) \ - ( (((uint64_t)oid) >> ( SAI_REDIS_OBJECT_TYPE_BITS_SIZE + SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_REDIS_SWITCH_INDEX_MASK ) ) + ( (((uint64_t)oid) >> ( SAI_REDIS_OBJECT_TYPE_BITS_SIZE + SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_REDIS_SWITCH_INDEX_MASK ) ) -#define SAI_REDIS_TEST_OID (0x0123456789abcdef) +#define SAI_REDIS_TEST_OID (0x012345e789abcdef) static_assert(SAI_REDIS_GET_SWITCH_INDEX(SAI_REDIS_TEST_OID) == 0x01, "test switch index"); static_assert(SAI_REDIS_GET_OBJECT_TYPE(SAI_REDIS_TEST_OID) == 0x23, "test object type"); static_assert(SAI_REDIS_GET_GLOBAL_CONTEXT(SAI_REDIS_TEST_OID) == 0x45, "test global context"); +static_assert(SAI_REDIS_GET_OBJECT_TYPE_EXTENSIONS_FLAG(SAI_REDIS_TEST_OID) == 0x1, "test object type extensions flag"); static_assert(SAI_REDIS_GET_OBJECT_INDEX(SAI_REDIS_TEST_OID) == 0x6789abcdef, "test object index"); using namespace sairedis; @@ -143,9 +162,11 @@ sai_object_type_t VirtualObjectIdManager::saiObjectTypeQuery( return SAI_OBJECT_TYPE_NULL; } - sai_object_type_t objectType = (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId)); + sai_object_type_t objectType = SAI_REDIS_GET_OBJECT_TYPE_EXTENSIONS_FLAG(objectId) + ? (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId) + SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START) + : (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId)); - if (objectType == SAI_OBJECT_TYPE_NULL || objectType >= SAI_OBJECT_TYPE_EXTENSIONS_MAX) + if (sai_metadata_is_object_type_valid(objectType) == false) { SWSS_LOG_ERROR("invalid object id %s", sai_serialize_object_id(objectId).c_str()); @@ -198,7 +219,7 @@ sai_object_id_t VirtualObjectIdManager::allocateNewObjectId( { SWSS_LOG_ENTER(); - if ((objectType <= SAI_OBJECT_TYPE_NULL) || (objectType >= SAI_OBJECT_TYPE_EXTENSIONS_MAX)) + if (sai_metadata_is_object_type_valid(objectType) == false) { SWSS_LOG_THROW("invalid object type: %d", objectType); } @@ -299,10 +320,22 @@ sai_object_id_t VirtualObjectIdManager::constructObjectId( { SWSS_LOG_ENTER(); + if (sai_metadata_is_object_type_valid(objectType) == false) + { + SWSS_LOG_THROW("FATAL: invalid object type (0x%x), logic error, this is a bug!", objectType); + } + + uint64_t extensionsFlag = (uint64_t)objectType >= SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START; + + objectType = extensionsFlag + ? (sai_object_type_t)(objectType - SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START) + : objectType; + return (sai_object_id_t)( - ((uint64_t)switchIndex << (SAI_REDIS_OBJECT_TYPE_BITS_SIZE + SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE)) | - ((uint64_t)objectType << (SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE)) | - ((uint64_t)globalContext << (SAI_REDIS_OBJECT_INDEX_BITS_SIZE)) | + ((uint64_t)switchIndex << (SAI_REDIS_OBJECT_TYPE_BITS_SIZE + SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE)) | + ((uint64_t)objectType << (SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE)) | + ((uint64_t)globalContext << (SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE)) | + ((uint64_t)extensionsFlag << (SAI_REDIS_OBJECT_INDEX_BITS_SIZE)) | objectIndex); } @@ -347,7 +380,9 @@ sai_object_type_t VirtualObjectIdManager::objectTypeQuery( return SAI_OBJECT_TYPE_NULL; } - sai_object_type_t objectType = (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId)); + sai_object_type_t objectType = SAI_REDIS_GET_OBJECT_TYPE_EXTENSIONS_FLAG(objectId) + ? (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId) + SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START) + : (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId)); if (!sai_metadata_is_object_type_valid(objectType)) { diff --git a/meta/DummySaiInterface.cpp b/meta/DummySaiInterface.cpp index 51e9e7d51..63a7d62d0 100644 --- a/meta/DummySaiInterface.cpp +++ b/meta/DummySaiInterface.cpp @@ -3,14 +3,32 @@ #include "swss/logger.h" #include +#include + +#define MUTEX() std::lock_guard _lock(m_mutex) using namespace saimeta; -DummySaiInterface::DummySaiInterface() +DummySaiInterface::DummySaiInterface(): + m_status(SAI_STATUS_SUCCESS), + m_apiInitialized(false), + m_runThread(false) { SWSS_LOG_ENTER(); - m_status = SAI_STATUS_SUCCESS; + memset(&m_sn, 0, sizeof(m_sn)); +} + +DummySaiInterface::~DummySaiInterface() +{ + SWSS_LOG_ENTER(); + + if (m_apiInitialized) + { + apiUninitialize(); + } + + stop(); } void DummySaiInterface::setStatus( @@ -27,36 +45,39 @@ sai_status_t DummySaiInterface::apiInitialize( { SWSS_LOG_ENTER(); - if (smt) + memset(&m_sn, 0, sizeof(m_sn)); + + if (smt && smt->profile_get_value) { - if (smt->profile_get_value) - { - SWSS_LOG_NOTICE("Dummy: profile_get_value(NULL): %s", smt->profile_get_value(0, NULL)); - SWSS_LOG_NOTICE("Dummy: profile_get_value(FOO): %s", smt->profile_get_value(0, "FOO")); - SWSS_LOG_NOTICE("Dummy: profile_get_value(FOO): %s", smt->profile_get_value(0, "CAR")); - } + SWSS_LOG_NOTICE("Dummy: profile_get_value(NULL): %s", smt->profile_get_value(0, NULL)); + SWSS_LOG_NOTICE("Dummy: profile_get_value(FOO): %s", smt->profile_get_value(0, "FOO")); + SWSS_LOG_NOTICE("Dummy: profile_get_value(CAR): %s", smt->profile_get_value(0, "CAR")); + } - if (smt->profile_get_next_value) - { + if (smt && smt->profile_get_next_value) + { - const char *var = NULL; - const char *val = NULL; + const char *var = NULL; + const char *val = NULL; - SWSS_LOG_NOTICE("Dummy: profile_get_next_value: %d", smt->profile_get_next_value(0, NULL, NULL)); - SWSS_LOG_NOTICE("Dummy: profile_get_next_value: %d", smt->profile_get_next_value(0, NULL, &val)); - SWSS_LOG_NOTICE("Dummy: profile_get_next_value: %d", smt->profile_get_next_value(0, &var, NULL)); - SWSS_LOG_NOTICE("Dummy: profile_get_next_value: %d", smt->profile_get_next_value(0, &var, &val)); - SWSS_LOG_NOTICE("Dummy: profile_get_next_value: %d", smt->profile_get_next_value(0, &var, &val)); - } + SWSS_LOG_NOTICE("Dummy: profile_get_next_value: %d", smt->profile_get_next_value(0, NULL, NULL)); + SWSS_LOG_NOTICE("Dummy: profile_get_next_value: %d", smt->profile_get_next_value(0, NULL, &val)); + SWSS_LOG_NOTICE("Dummy: profile_get_next_value: %d", smt->profile_get_next_value(0, &var, NULL)); + SWSS_LOG_NOTICE("Dummy: profile_get_next_value: %d", smt->profile_get_next_value(0, &var, &val)); + SWSS_LOG_NOTICE("Dummy: profile_get_next_value: %d", smt->profile_get_next_value(0, &var, &val)); } + m_apiInitialized = true; + return SAI_STATUS_SUCCESS; } -sai_status_t DummySaiInterface::apiUninitialize(void) +sai_status_t DummySaiInterface::apiUninitialize(void) { SWSS_LOG_ENTER(); + m_apiInitialized = false; + return SAI_STATUS_SUCCESS; } @@ -69,11 +90,18 @@ sai_status_t DummySaiInterface::create( { SWSS_LOG_ENTER(); + // TODO implement some dummy OID handling + if (objectId && m_status == SAI_STATUS_SUCCESS) { *objectId = (sai_object_id_t)1; } + if (m_status == SAI_STATUS_SUCCESS && objectType == SAI_OBJECT_TYPE_SWITCH) + { + updateNotificationPointers(attr_count, attr_list); + } + return m_status; } @@ -93,6 +121,11 @@ sai_status_t DummySaiInterface::set( { SWSS_LOG_ENTER(); + if (m_status == SAI_STATUS_SUCCESS && objectType == SAI_OBJECT_TYPE_SWITCH) + { + updateNotificationPointers(1, attr); + } + return m_status; } @@ -496,3 +529,348 @@ sai_status_t DummySaiInterface::queryApiVersion( return m_status; } + +void DummySaiInterface::updateNotificationPointers( + _In_ uint32_t count, + _In_ const sai_attribute_t* attrs) +{ + SWSS_LOG_ENTER(); + + sai_metadata_update_switch_notification_pointers(&m_sn, count, attrs); +} + +sai_status_t DummySaiInterface::start() +{ + SWSS_LOG_ENTER(); + + if (!m_apiInitialized) + { + SWSS_LOG_ERROR("api not initialized"); + + return SAI_STATUS_FAILURE; + } + + MUTEX(); + + if (m_runThread) + { + SWSS_LOG_NOTICE("thread already is running"); + + return SAI_STATUS_SUCCESS; + } + + m_runThread = true; + + m_thread = std::make_shared(&DummySaiInterface::run, this); + + return SAI_STATUS_SUCCESS; +} + +sai_status_t DummySaiInterface::stop() +{ + SWSS_LOG_ENTER(); + + MUTEX(); + + m_runThread = false; + + if (m_thread) + { + SWSS_LOG_NOTICE("joining thread"); + + m_thread->join(); + + m_thread = nullptr; + } + + return SAI_STATUS_SUCCESS; +} + +void DummySaiInterface::run() +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("starting dummy notification thread"); + + while(m_runThread) + { + sai_attr_id_t id; + + if (tryGetNotificationToSend(id)) + { + sendNotification(id); + continue; + } + + std::this_thread::sleep_for(std::chrono::milliseconds(64)); + } + + SWSS_LOG_NOTICE("ending dummy notification thread"); +} + +sai_status_t DummySaiInterface::enqueueNotificationToSend( + _In_ sai_attr_id_t id) +{ + SWSS_LOG_ENTER(); + + if (!m_apiInitialized) + { + SWSS_LOG_NOTICE("api not initialized"); + + return SAI_STATUS_FAILURE; + } + + MUTEX(); + + m_queue.push(id); + + return SAI_STATUS_SUCCESS; +} + +bool DummySaiInterface::tryGetNotificationToSend( + _Out_ sai_attr_id_t& id) +{ + SWSS_LOG_ENTER(); + + MUTEX(); + + if (m_queue.empty()) + return false; + + id = m_queue.front(); + + m_queue.pop(); + + return true; +} + +void DummySaiInterface::sendNotification( + _In_ sai_attr_id_t id) +{ + SWSS_LOG_ENTER(); + + // get local copy, in case m_sn will change + // this probably should be under separate mutex (m_sn) + + sai_switch_notifications_t sn = m_sn; + + auto* m = sai_metadata_get_attr_metadata(SAI_OBJECT_TYPE_SWITCH, id); + + switch (id) + { + case SAI_SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY: + + if (sn.on_switch_state_change) + { + SWSS_LOG_NOTICE("sending sn.on_switch_state_change"); + + sn.on_switch_state_change(0x1, SAI_SWITCH_OPER_STATUS_UP); + } + else + { + SWSS_LOG_WARN("pointer sn.on_switch_state_change is NULL"); + } + break; + + case SAI_SWITCH_ATTR_FDB_EVENT_NOTIFY: + + if (sn.on_fdb_event) + { + SWSS_LOG_NOTICE("sending sn.on_fdb_event"); + + sai_fdb_event_notification_data_t data; + + data.event_type = SAI_FDB_EVENT_LEARNED; + data.fdb_entry.switch_id = 0x1; + data.fdb_entry.mac_address[0] = 0x11; + data.fdb_entry.mac_address[1] = 0x22; + data.fdb_entry.mac_address[2] = 0x33; + data.fdb_entry.mac_address[3] = 0x44; + data.fdb_entry.mac_address[4] = 0x55; + data.fdb_entry.mac_address[5] = 0x66; + data.fdb_entry.bv_id = 0x2; + data.attr_count = 0; + data.attr = nullptr; + + sn.on_fdb_event(1, &data); + } + else + { + SWSS_LOG_WARN("pointer sn.on_fdb_event is NULL"); + } + break; + + + case SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY: + + if (sn.on_port_state_change) + { + SWSS_LOG_NOTICE("sending sn.on_port_state_change"); + + sai_port_oper_status_notification_t data; + + data.port_id = 0x2; + data.port_state = SAI_PORT_OPER_STATUS_UP; + + sn.on_port_state_change(1, &data); + } + else + { + SWSS_LOG_WARN("pointer sn.on_port_state_change is NULL"); + } + break; + + case SAI_SWITCH_ATTR_SHUTDOWN_REQUEST_NOTIFY: + + if (sn.on_switch_shutdown_request) + { + SWSS_LOG_NOTICE("sending sn.on_switch_shutdown_request"); + + sn.on_switch_shutdown_request(0x1); + } + else + { + SWSS_LOG_WARN("pointer sn.on_switch_shutdown_request is NULL"); + } + break; + + case SAI_SWITCH_ATTR_NAT_EVENT_NOTIFY: + + if (sn.on_nat_event) + { + SWSS_LOG_NOTICE("sending sn.on_nat_event"); + + sai_nat_event_notification_data_t data; + + data.event_type = SAI_NAT_EVENT_NONE; + data.nat_entry.switch_id = 0x1; + data.nat_entry.vr_id = 0x2; + data.nat_entry.nat_type = SAI_NAT_TYPE_NONE; + + memset(&data.nat_entry.data, 0, sizeof(data.nat_entry.data)); + + sn.on_nat_event(1, &data); + } + else + { + SWSS_LOG_WARN("pointer sn.on_nat_event is NULL"); + } + break; + + + case SAI_SWITCH_ATTR_PORT_HOST_TX_READY_NOTIFY: + + if (sn.on_nat_event) + { + SWSS_LOG_NOTICE("sending sn.on_port_host_tx_ready"); + + sn.on_port_host_tx_ready(0x1, 0x2, SAI_PORT_HOST_TX_READY_STATUS_NOT_READY); + } + else + { + SWSS_LOG_WARN("pointer sn.on_port_host_tx_readyis NULL"); + } + break; + + case SAI_SWITCH_ATTR_SWITCH_ASIC_SDK_HEALTH_EVENT_NOTIFY: + + if (sn.on_nat_event) + { + SWSS_LOG_NOTICE("sending sn.on_switch_asic_sdk_health_event"); + + sai_timespec_t timespec; + + timespec.tv_sec = 0; + timespec.tv_nsec = 0; + + sai_switch_health_data_t hd; + + hd.data_type = SAI_HEALTH_DATA_TYPE_GENERAL; + + sai_u8_list_t desc; + desc.count = 0; + desc.list = NULL; + + sn.on_switch_asic_sdk_health_event( + 0x1, + SAI_SWITCH_ASIC_SDK_HEALTH_SEVERITY_NOTICE, + timespec, + SAI_SWITCH_ASIC_SDK_HEALTH_CATEGORY_SW, + hd, + desc); + } + else + { + SWSS_LOG_WARN("pointer sn.sn.on_switch_asic_sdk_health_event"); + } + break; + + case SAI_SWITCH_ATTR_QUEUE_PFC_DEADLOCK_NOTIFY: + + if (sn.on_queue_pfc_deadlock) + { + SWSS_LOG_NOTICE("sending sn.on_queue_pfc_deadlock"); + + sai_queue_deadlock_notification_data_t data; + + data.queue_id = 0x2; + data.event = SAI_QUEUE_PFC_DEADLOCK_EVENT_TYPE_DETECTED; + data.app_managed_recovery = true; + + sn.on_queue_pfc_deadlock(1, &data); + } + else + { + SWSS_LOG_WARN("pointer sn.on_port_host_tx_readyis NULL"); + } + break; + + case SAI_SWITCH_ATTR_BFD_SESSION_STATE_CHANGE_NOTIFY: + + if (sn.on_bfd_session_state_change) + { + SWSS_LOG_NOTICE("sending sn.on_bfd_session_state_change"); + + sai_bfd_session_state_notification_t data; + + data.bfd_session_id = 0x2; + data.session_state = SAI_BFD_SESSION_STATE_ADMIN_DOWN; + + sn.on_bfd_session_state_change(1, &data); + } + else + { + SWSS_LOG_WARN("pointer sn.on_bfd_session_state_change"); + } + break; + + case SAI_SWITCH_ATTR_TWAMP_SESSION_EVENT_NOTIFY: + + if (sn.on_twamp_session_event) + { + SWSS_LOG_NOTICE("sending sn.on_twamp_session_event"); + + sai_twamp_session_event_notification_data_t data; + + data.twamp_session_id = 0x1; + data.session_state = SAI_TWAMP_SESSION_STATE_INACTIVE; + + data.session_stats.index = 0; + data.session_stats.number_of_counters = 0; + data.session_stats.counters_ids = nullptr; + data.session_stats.counters = nullptr; + + sn.on_twamp_session_event(1, &data); + } + else + { + SWSS_LOG_WARN("pointer sn.on_twamp_session_event"); + } + break; + + default: + + SWSS_LOG_WARN("notification for SWITCH attr id: %d (%s) is not supported, FIXME", id, (m ? m->attridname : "UNKNOWN")); + break; + } +} diff --git a/meta/DummySaiInterface.h b/meta/DummySaiInterface.h index d6e8d748d..0a61719d6 100644 --- a/meta/DummySaiInterface.h +++ b/meta/DummySaiInterface.h @@ -3,6 +3,9 @@ #include "SaiInterface.h" #include +#include +#include +#include namespace saimeta { @@ -18,7 +21,7 @@ namespace saimeta DummySaiInterface(); - virtual ~DummySaiInterface() = default; + virtual ~DummySaiInterface(); public: @@ -218,6 +221,71 @@ namespace saimeta protected: + void updateNotificationPointers( + _In_ uint32_t count, + _In_ const sai_attribute_t* attrs); + + public: + + /** + * @brief Will start sending notifications + */ + sai_status_t start(); + + /** + * @brief Will stop sending notifications + */ + sai_status_t stop(); + + /** + * @brief Enqueue notification to send. Will send specific dummy + * notification from notifications thread. + */ + + sai_status_t enqueueNotificationToSend( + _In_ sai_attr_id_t id); + + protected: + + /** + * @brief Try get notification to send. + * + * If notification queue is not empty, it will return true and + * set id to attribute of notification. + */ + bool tryGetNotificationToSend( + _Out_ sai_attr_id_t& id); + + /** + * @brief Send notification. + * + * Will actually send notification if expected pointer for + * notification is not null. + */ + void sendNotification( + _In_ sai_attr_id_t id); + + protected: + + void run(); + + protected: + + sai_switch_notifications_t m_sn; + sai_status_t m_status; + + bool m_apiInitialized; + + /** + * @brief Thread that will be used to send notifications + */ + std::shared_ptr m_thread; + + std::mutex m_mutex; + + bool m_runThread; + + std::queue m_queue; }; } diff --git a/meta/Makefile.am b/meta/Makefile.am index 0a6ac1887..f62d0cbd9 100644 --- a/meta/Makefile.am +++ b/meta/Makefile.am @@ -50,6 +50,7 @@ libsaimeta_la_SOURCES = \ SaiObjectCollection.cpp \ SaiSerialize.cpp \ SelectableChannel.cpp \ + DummySaiInterface.cpp \ ZeroMQSelectableChannel.cpp libsaimeta_la_CPPFLAGS = $(CODE_COVERAGE_CPPFLAGS) diff --git a/meta/Meta.cpp b/meta/Meta.cpp index d6a9f4526..bd3f1b010 100644 --- a/meta/Meta.cpp +++ b/meta/Meta.cpp @@ -1711,16 +1711,15 @@ sai_status_t Meta::meta_sai_validate_oid( { SWSS_LOG_ENTER(); - if (object_type <= SAI_OBJECT_TYPE_NULL || - object_type >= SAI_OBJECT_TYPE_EXTENSIONS_MAX) + auto info = sai_metadata_get_object_type_info(object_type); + + if (!info) { SWSS_LOG_ERROR("invalid object type specified: %d, FIXME", object_type); return SAI_STATUS_INVALID_PARAMETER; } - const char* otname = sai_metadata_get_enum_value_name(&sai_metadata_enum_sai_object_type_t, object_type); - - auto info = sai_metadata_get_object_type_info(object_type); + const char* otname = info->objecttypename; if (info->isnonobjectid) { diff --git a/proxylib/Makefile.am b/proxylib/Makefile.am index 5797451eb..3a712d76f 100644 --- a/proxylib/Makefile.am +++ b/proxylib/Makefile.am @@ -5,6 +5,7 @@ lib_LTLIBRARIES = libsaiproxy.la noinst_LIBRARIES = libSaiProxy.a libSaiProxy_a_SOURCES = \ + Options.cpp \ Proxy.cpp \ Sai.cpp diff --git a/proxylib/Options.cpp b/proxylib/Options.cpp new file mode 100644 index 000000000..c07365f71 --- /dev/null +++ b/proxylib/Options.cpp @@ -0,0 +1,30 @@ +#include "Options.h" + +#include "swss/logger.h" + +#include + +using namespace saiproxy; + +Options::Options() +{ + SWSS_LOG_ENTER(); + + m_config = "config.ini"; + + m_zmqChannel = "tcp://127.0.0.1:5555"; + m_zmqNtfChannel = "tcp://127.0.0.1:5556"; +} + +std::string Options::getString() const +{ + SWSS_LOG_ENTER(); + + std::stringstream ss; + + ss << " Config=" << m_config; + ss << " ZmqChannel=" << m_zmqChannel; + ss << " ZmqNtfChannel=" << m_zmqNtfChannel; + + return ss.str(); +} diff --git a/proxylib/Options.h b/proxylib/Options.h new file mode 100644 index 000000000..d332b8c47 --- /dev/null +++ b/proxylib/Options.h @@ -0,0 +1,25 @@ +#pragma once + +#include + +namespace saiproxy +{ + class Options + { + public: + + Options(); + + ~Options() = default; + + public: + + std::string getString() const; + + public: + + std::string m_config; + std::string m_zmqChannel; + std::string m_zmqNtfChannel; + }; +} diff --git a/proxylib/Proxy.cpp b/proxylib/Proxy.cpp index ff789c5fd..a844a4b2d 100644 --- a/proxylib/Proxy.cpp +++ b/proxylib/Proxy.cpp @@ -10,28 +10,39 @@ #include "syncd/ZeroMQNotificationProducer.h" +#include + #include #include using namespace saiproxy; using namespace std::placeholders; -// TODO we need pointers translation for receiving notifications // TODO handle diagnostic shell Proxy::Proxy( _In_ std::shared_ptr vendorSai): - m_vendorSai(vendorSai), - m_apiInitialized(false) + Proxy(vendorSai, std::make_shared()) { SWSS_LOG_ENTER(); - m_configFile = "config.ini"; // TODO to command line + SWSS_LOG_NOTICE("using default options"); +} + +Proxy::Proxy( + _In_ std::shared_ptr vendorSai, + _In_ std::shared_ptr options): + m_vendorSai(vendorSai), + m_options(options), + m_apiInitialized(false), + m_notificationsSentCount(0) +{ + SWSS_LOG_ENTER(); - // TODO to move hard coded addresses to config + SWSS_LOG_NOTICE("Options: %s", m_options->getString().c_str()); - m_selectableChannel = std::make_shared("tcp://127.0.0.1:5555"); - m_notifications = std::make_shared("tcp://127.0.0.1:5556"); + m_selectableChannel = std::make_shared(m_options->m_zmqChannel); + m_notifications = std::make_shared(m_options->m_zmqNtfChannel); loadProfileMap(); @@ -40,6 +51,21 @@ Proxy::Proxy( m_test_services = m_smt.getServiceMethodTable(); + memset(&m_sn, 0, sizeof(m_sn)); + + m_swNtf.onFdbEvent = std::bind(&Proxy::onFdbEvent, this, _1, _2); + m_swNtf.onNatEvent = std::bind(&Proxy::onNatEvent, this, _1, _2); + m_swNtf.onPortStateChange = std::bind(&Proxy::onPortStateChange, this, _1, _2); + m_swNtf.onQueuePfcDeadlock = std::bind(&Proxy::onQueuePfcDeadlock, this, _1, _2); + m_swNtf.onSwitchAsicSdkHealthEvent = std::bind(&Proxy::onSwitchAsicSdkHealthEvent, this, _1, _2, _3, _4, _5, _6); + m_swNtf.onSwitchShutdownRequest = std::bind(&Proxy::onSwitchShutdownRequest, this, _1); + m_swNtf.onSwitchStateChange = std::bind(&Proxy::onSwitchStateChange, this, _1, _2); + m_swNtf.onBfdSessionStateChange = std::bind(&Proxy::onBfdSessionStateChange, this, _1, _2); + m_swNtf.onPortHostTxReady = std::bind(&Proxy::onPortHostTxReady, this, _1, _2, _3); + m_swNtf.onTwampSessionEvent = std::bind(&Proxy::onTwampSessionEvent, this, _1, _2); + + m_sn = m_swNtf.getSwitchNotifications(); + sai_status_t status = m_vendorSai->apiInitialize(0, &m_test_services); if (status != SAI_STATUS_SUCCESS) @@ -83,12 +109,12 @@ void Proxy::loadProfileMap() { SWSS_LOG_ENTER(); - std::ifstream profile(m_configFile.c_str()); + std::ifstream profile(m_options->m_config); if (!profile.is_open()) { SWSS_LOG_WARN("failed to open profile map file: %s: %s", - m_configFile.c_str(), + m_options->m_config.c_str(), strerror(errno)); return; @@ -368,12 +394,10 @@ void Proxy::processCreate( if (metaKey.objecttype == SAI_OBJECT_TYPE_SWITCH) { /* - * TODO: translate notification pointers * TODO: must be done per switch, and switch may not exists yet */ - // TODO - // m_handler->updateNotificationsPointers(attr_count, attr_list); + updateAttributteNotificationPointers(attr_count, attr_list); } sai_object_id_t newObjectId = SAI_NULL_OBJECT_ID;; @@ -446,12 +470,10 @@ void Proxy::processSet( if (metaKey.objecttype == SAI_OBJECT_TYPE_SWITCH) { /* - * TODO: translate notification pointers * TODO: must be done per switch, and switch may not exists yet */ - // TODO - // m_handler->updateNotificationsPointers(attr_count, attr_list); + updateAttributteNotificationPointers(1, attr_list); } sai_status_t status = m_vendorSai->set(metaKey, attr_list); @@ -1051,3 +1073,152 @@ void Proxy::processClearStats( m_selectableChannel->set(strStatus, entry, "clear_stats_response"); } + +void Proxy::updateAttributteNotificationPointers( + _In_ uint32_t count, + _Inout_ sai_attribute_t* attr_list) +{ + SWSS_LOG_ENTER(); + + sai_metadata_update_attribute_notification_pointers(&m_sn, count, attr_list); +} + +// TODO move to notification handler class + +void Proxy::onFdbEvent( + _In_ uint32_t count, + _In_ const sai_fdb_event_notification_data_t *data) +{ + SWSS_LOG_ENTER(); + + std::string s = sai_serialize_fdb_event_ntf(count, data); + + sendNotification(SAI_SWITCH_NOTIFICATION_NAME_FDB_EVENT, s); +} + +void Proxy::onNatEvent( + _In_ uint32_t count, + _In_ const sai_nat_event_notification_data_t *data) +{ + SWSS_LOG_ENTER(); + + std::string s = sai_serialize_nat_event_ntf(count, data); + + sendNotification(SAI_SWITCH_NOTIFICATION_NAME_NAT_EVENT, s); +} + +void Proxy::onPortStateChange( + _In_ uint32_t count, + _In_ const sai_port_oper_status_notification_t *data) +{ + SWSS_LOG_ENTER(); + + auto s = sai_serialize_port_oper_status_ntf(count, data); + + sendNotification(SAI_SWITCH_NOTIFICATION_NAME_PORT_STATE_CHANGE, s); +} + +void Proxy::onPortHostTxReady( + _In_ sai_object_id_t switch_id, + _In_ sai_object_id_t port_id, + _In_ sai_port_host_tx_ready_status_t host_tx_ready_status) +{ + SWSS_LOG_ENTER(); + + auto s = sai_serialize_port_host_tx_ready_ntf(switch_id, port_id, host_tx_ready_status); + + sendNotification(SAI_SWITCH_NOTIFICATION_NAME_PORT_HOST_TX_READY, s); +} + +void Proxy::onQueuePfcDeadlock( + _In_ uint32_t count, + _In_ const sai_queue_deadlock_notification_data_t *data) +{ + SWSS_LOG_ENTER(); + + auto s = sai_serialize_queue_deadlock_ntf(count, data); + + sendNotification(SAI_SWITCH_NOTIFICATION_NAME_QUEUE_PFC_DEADLOCK, s); +} + +void Proxy::onSwitchShutdownRequest( + _In_ sai_object_id_t switch_id) +{ + SWSS_LOG_ENTER(); + + auto s = sai_serialize_switch_shutdown_request(switch_id); + + sendNotification(SAI_SWITCH_NOTIFICATION_NAME_SWITCH_SHUTDOWN_REQUEST, s); +} + +void Proxy::onSwitchAsicSdkHealthEvent( + _In_ sai_object_id_t switch_id, + _In_ sai_switch_asic_sdk_health_severity_t severity, + _In_ sai_timespec_t timestamp, + _In_ sai_switch_asic_sdk_health_category_t category, + _In_ sai_switch_health_data_t data, + _In_ const sai_u8_list_t description) +{ + SWSS_LOG_ENTER(); + + std::string s = sai_serialize_switch_asic_sdk_health_event(switch_id, severity, timestamp, category, data, description); + + sendNotification(SAI_SWITCH_NOTIFICATION_NAME_SWITCH_ASIC_SDK_HEALTH_EVENT, s); +} + +void Proxy::onSwitchStateChange( + _In_ sai_object_id_t switch_id, + _In_ sai_switch_oper_status_t switch_oper_status) +{ + SWSS_LOG_ENTER(); + + auto s = sai_serialize_switch_oper_status(switch_id, switch_oper_status); + + sendNotification(SAI_SWITCH_NOTIFICATION_NAME_SWITCH_STATE_CHANGE, s); +} + +void Proxy::onBfdSessionStateChange( + _In_ uint32_t count, + _In_ const sai_bfd_session_state_notification_t *data) +{ + SWSS_LOG_ENTER(); + + std::string s = sai_serialize_bfd_session_state_ntf(count, data); + + sendNotification(SAI_SWITCH_NOTIFICATION_NAME_BFD_SESSION_STATE_CHANGE, s); +} + +void Proxy::onTwampSessionEvent( + _In_ uint32_t count, + _In_ const sai_twamp_session_event_notification_data_t *data) +{ + SWSS_LOG_ENTER(); + + std::string s = sai_serialize_twamp_session_event_ntf(count, data); + + sendNotification(SAI_SWITCH_NOTIFICATION_NAME_TWAMP_SESSION_EVENT, s); +} + +void Proxy::sendNotification( + _In_ const std::string& op, + _In_ const std::string& data) +{ + SWSS_LOG_ENTER(); + + std::vector entry; + + swss::KeyOpFieldsValuesTuple item(op, data, entry); + + SWSS_LOG_INFO("%s %s", op.c_str(), data.c_str()); + + m_notificationsSentCount++; + + m_notifications->send(op, data, entry); +} + +uint64_t Proxy::getNotificationsSentCount() const +{ + SWSS_LOG_ENTER(); + + return m_notificationsSentCount; +} diff --git a/proxylib/Proxy.h b/proxylib/Proxy.h index 8fc3b6424..50aa302a9 100644 --- a/proxylib/Proxy.h +++ b/proxylib/Proxy.h @@ -7,6 +7,9 @@ #include "syncd/ServiceMethodTable.h" #include "syncd/NotificationProducerBase.h" +#include "syncd/SwitchNotifications.h" + +#include "Options.h" #include #include @@ -22,6 +25,10 @@ namespace saiproxy Proxy( _In_ std::shared_ptr vendorSai); + Proxy( + _In_ std::shared_ptr vendorSai, + _In_ std::shared_ptr options); + virtual ~Proxy(); public: @@ -99,10 +106,68 @@ namespace saiproxy void processClearStats( _In_ const swss::KeyOpFieldsValuesTuple &kco); + private: // notifications + + void onFdbEvent( + _In_ uint32_t count, + _In_ const sai_fdb_event_notification_data_t *data); + + void onNatEvent( + _In_ uint32_t count, + _In_ const sai_nat_event_notification_data_t *data); + + void onPortStateChange( + _In_ uint32_t count, + _In_ const sai_port_oper_status_notification_t *data); + + void onPortHostTxReady( + _In_ sai_object_id_t switch_id, + _In_ sai_object_id_t port_id, + _In_ sai_port_host_tx_ready_status_t host_tx_ready_status); + + void onQueuePfcDeadlock( + _In_ uint32_t count, + _In_ const sai_queue_deadlock_notification_data_t *data); + + void onSwitchShutdownRequest( + _In_ sai_object_id_t switch_id); + + void onSwitchAsicSdkHealthEvent( + _In_ sai_object_id_t switch_id, + _In_ sai_switch_asic_sdk_health_severity_t severity, + _In_ sai_timespec_t timestamp, + _In_ sai_switch_asic_sdk_health_category_t category, + _In_ sai_switch_health_data_t data, + _In_ const sai_u8_list_t description); + + void onSwitchStateChange( + _In_ sai_object_id_t switch_id, + _In_ sai_switch_oper_status_t switch_oper_status); + + void onBfdSessionStateChange( + _In_ uint32_t count, + _In_ const sai_bfd_session_state_notification_t *data); + + void onTwampSessionEvent( + _In_ uint32_t count, + _In_ const sai_twamp_session_event_notification_data_t *data); + + void sendNotification( + _In_ const std::string& op, + _In_ const std::string& data); + private: void loadProfileMap(); + void updateAttributteNotificationPointers( + _In_ uint32_t count, + _Inout_ sai_attribute_t* attr_list); + + public: + + uint64_t getNotificationsSentCount() const; + private: syncd::ServiceMethodTable m_smt; @@ -121,7 +186,7 @@ namespace saiproxy std::shared_ptr m_notifications; - std::string m_configFile; + std::shared_ptr m_options; /** * @brief Mutex for synchronizing api execution and notifications @@ -129,5 +194,17 @@ namespace saiproxy std::mutex m_mutex; bool m_apiInitialized; + + sai_switch_notifications_t m_sn; + + syncd::SwitchNotifications m_swNtf; + + /** + * @brief Notifications sent count. + * + * This value can be used to write unittests when testing + * notifications. + */ + uint64_t m_notificationsSentCount; }; } diff --git a/proxylib/Sai.cpp b/proxylib/Sai.cpp index e99c6989f..4654e5acd 100644 --- a/proxylib/Sai.cpp +++ b/proxylib/Sai.cpp @@ -3,6 +3,7 @@ #include "SaiInternal.h" #include "ZeroMQChannel.h" #include "SaiAttributeList.h" +#include "NotificationFactory.h" #include "meta/Meta.h" #include "meta/sai_serialize.h" @@ -71,11 +72,15 @@ sai_status_t Sai::apiInitialize( memcpy(&m_service_method_table, service_method_table, sizeof(m_service_method_table)); - // TODO move hard coded values to config + memset(&m_sn, 0, sizeof(m_sn)); + + m_options = std::make_shared(); // load default options + + // TODO options should be obtained from service method table m_communicationChannel = std::make_shared( - "tcp://127.0.0.1:5555", - "tcp://127.0.0.1:5556", + m_options->m_zmqChannel, + m_options->m_zmqNtfChannel, std::bind(&Sai::handleNotification, this, _1, _2, _3)); m_apiInitialized = true; @@ -90,6 +95,8 @@ sai_status_t Sai::apiUninitialize(void) SWSS_LOG_NOTICE("begin"); + m_communicationChannel = nullptr; // will stop the thread + m_apiInitialized = false; SWSS_LOG_NOTICE("end"); @@ -126,10 +133,13 @@ sai_status_t Sai::create( auto status = m_communicationChannel->wait("create_response", kco); - // TODO SAVE pointers for notifications - if (status == SAI_STATUS_SUCCESS) { + if (objectType == SAI_OBJECT_TYPE_SWITCH) + { + updateNotifications(attr_count, attr_list); // TODO should be per switch + } + auto& values = kfvFieldsValues(kco); if (values.size() == 0) @@ -267,8 +277,6 @@ sai_status_t Sai::create( std::string key = serializedObjectType + ":" + entry; - // TODO SAVE pointers for notifications - m_communicationChannel->set(key, vals, "create_entry"); swss::KeyOpFieldsValuesTuple kco; @@ -302,8 +310,6 @@ sai_status_t Sai::set( auto val = saimeta::SaiAttributeList::serialize_attr_list(objectType, 1, attr, false); - // TODO SAVE pointers for notifications - auto serializedObjectType = sai_serialize_object_type(objectType); std::string key = serializedObjectType + ":" + entry; @@ -312,7 +318,14 @@ sai_status_t Sai::set( swss::KeyOpFieldsValuesTuple kco; - return m_communicationChannel->wait("set_response", kco); + auto status = m_communicationChannel->wait("set_response", kco); + + if (objectType == SAI_OBJECT_TYPE_SWITCH && status == SAI_STATUS_SUCCESS) + { + updateNotifications(1, attr); + } + + return status; } sai_status_t Sai::get( @@ -1102,47 +1115,47 @@ sai_status_t Sai::queryApiVersion( return status; } +// TODO use function from SAI metadata to populate those + +void Sai::updateNotifications( + _In_ uint32_t attrCount, + _In_ const sai_attribute_t *attrList) +{ + SWSS_LOG_ENTER(); + + /* + * This function should only be called on CREATE/SET + * api when object is SWITCH. + */ + + sai_metadata_update_switch_notification_pointers(&m_sn, attrCount, attrList); +} + void Sai::handleNotification( _In_ const std::string &name, _In_ const std::string &serializedNotification, _In_ const std::vector &values) { + MUTEX(); SWSS_LOG_ENTER(); - SWSS_LOG_ERROR("FIXME"); -} + if (!m_apiInitialized) + { + SWSS_LOG_ERROR("%s: api not initialized", __PRETTY_FUNCTION__); -//sai_switch_notifications_t Sai::handle_notification( -// _In_ std::shared_ptr notification) -//{ -// MUTEX(); -// SWSS_LOG_ENTER(); -// -// if (!m_apiInitialized) -// { -// SWSS_LOG_ERROR("%s: api not initialized", __PRETTY_FUNCTION__); -// -// return { }; -// } -// -// return context->m_redisSai->syncProcessNotification(notification); -//} -// -//void Sai::handleNotification( -// _In_ const std::string &name, -// _In_ const std::string &serializedNotification, -// _In_ const std::vector &values) -//{ -// SWSS_LOG_ENTER(); -// -// auto notification = NotificationFactory::deserialize(name, serializedNotification); -// -// if (notification) -// { -// auto _sn = m_notificationCallback(notification); // will be synchronized to api mutex -// -// // execute callback from notification thread -// -// notification->executeCallback(_sn); -// } -//} + return; + } + + // TODO should be per switch, and we should know on which switch call notification + + auto notification = sairedis::NotificationFactory::deserialize(name, serializedNotification); + + if (notification) + { + SWSS_LOG_INFO("got notification: %s, executing callback!", serializedNotification.c_str()); + + // execute callback from notification thread + + notification->executeCallback(m_sn); + } +} diff --git a/proxylib/Sai.h b/proxylib/Sai.h index 889eb7b63..6208813a9 100644 --- a/proxylib/Sai.h +++ b/proxylib/Sai.h @@ -8,6 +8,8 @@ #include "swss/logger.h" +#include "Options.h" + #include #include #include @@ -213,14 +215,18 @@ namespace saiproxy private: - sai_switch_notifications_t handle_notification( - _In_ std::shared_ptr notification); + //sai_switch_notifications_t handle_notification( + // _In_ std::shared_ptr notification); void handleNotification( _In_ const std::string &name, _In_ const std::string &serializedNotification, _In_ const std::vector &values); + void updateNotifications( + _In_ uint32_t attrCount, + _In_ const sai_attribute_t *attrList); + private: bool m_apiInitialized; @@ -231,6 +237,10 @@ namespace saiproxy std::shared_ptr m_communicationChannel; - std::function)> m_notificationCallback; + //std::function)> m_notificationCallback; + + std::shared_ptr m_options; + + sai_switch_notifications_t m_sn; }; } diff --git a/proxylib/saiproxy.h b/proxylib/saiproxy.h new file mode 100644 index 000000000..a87d9f6db --- /dev/null +++ b/proxylib/saiproxy.h @@ -0,0 +1,9 @@ +#pragma once + +/** + * @brief Proxy config. + * + * Optional. Should point to a config.ini/profile.ini which will contain + * profile variables that should be put into service method table. + */ +#define SAI_PROXY_KEY_CONFIG "SAI_PROXY_CONFIG diff --git a/saiplayer/SaiPlayer.cpp b/saiplayer/SaiPlayer.cpp index 4437f2906..51b5cf13f 100644 --- a/saiplayer/SaiPlayer.cpp +++ b/saiplayer/SaiPlayer.cpp @@ -944,55 +944,9 @@ void SaiPlayer::update_notifications_pointers( * Sairedis is updating notifications pointers based on attribute, so when * we will do replay it will have invalid pointers from orchagent, so we * need to override them after create, and after set. - * - * NOTE: This needs to be updated every time new pointer will be added. */ - for (uint32_t index = 0; index < attr_count; ++index) - { - sai_attribute_t &attr = attr_list[index]; - - auto meta = sai_metadata_get_attr_metadata(SAI_OBJECT_TYPE_SWITCH, attr.id); - - if (meta->attrvaluetype != SAI_ATTR_VALUE_TYPE_POINTER) - { - continue; - } - - if (attr.value.ptr == nullptr) // allow nulls - continue; - - switch (attr.id) - { - case SAI_SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY: - attr.value.ptr = (void*)m_switchNotifications.on_switch_state_change; - break; - - case SAI_SWITCH_ATTR_SHUTDOWN_REQUEST_NOTIFY: - attr.value.ptr = (void*)m_switchNotifications.on_switch_shutdown_request; - break; - - case SAI_SWITCH_ATTR_FDB_EVENT_NOTIFY: - attr.value.ptr = (void*)m_switchNotifications.on_fdb_event; - break; - - case SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY: - attr.value.ptr = (void*)m_switchNotifications.on_port_state_change; - break; - - case SAI_SWITCH_ATTR_QUEUE_PFC_DEADLOCK_NOTIFY: - attr.value.ptr = (void*)m_switchNotifications.on_queue_pfc_deadlock; - break; - - case SAI_SWITCH_ATTR_BFD_SESSION_STATE_CHANGE_NOTIFY: - attr.value.ptr = (void*)m_switchNotifications.on_bfd_session_state_change; - break; - - default: - SWSS_LOG_ERROR("pointer for %s is not handled, FIXME!", meta->attridname); - break; - } - } + sai_metadata_update_attribute_notification_pointers(&m_switchNotifications, attr_count, attr_list); } sai_status_t SaiPlayer::handle_generic( diff --git a/stub.pl b/stub.pl index 208d8e9d0..237c62927 100755 --- a/stub.pl +++ b/stub.pl @@ -105,7 +105,7 @@ sub GetData sub SanitizeData { $DATA =~ s/SAI_OBJECT_TYPE_\w*(START|END|NULL|MAX)//gms; - $DATA =~ s/SAI_API_\w*(START|END|UNSPECIFIED|MAX)//gms; + $DATA =~ s/SAI_API_\w*(START|END|UNSPECIFIED|MAX|EXTENSIONS_RANGE_BASE)//gms; } sub ExtractData @@ -197,7 +197,7 @@ sub GetFunctionName elsif ($fun =~ /(create|remove|set|get)_(\w+)(_attribute)?/ and defined $objectTypes{$2}) { $OT = $objectTypes{$2}; - $fun = $1; + $fun = "$1"; } else { @@ -270,7 +270,7 @@ () Write ""; } - Write "const sai_${api}_api_t ${STUB}_${api} = {"; + Write "static sai_${api}_api_t ${STUB}_${api} = {"; while ($struct =~ /(sai_\w+_fn)\s+(\w+)/gms) { @@ -303,35 +303,13 @@ sub CreateHeader Write "" } -sub CreateApiStruct -{ - Write ""; - Write "/* ==== API STRUCTS === */"; - Write ""; - - Write "static sai_apis_t ${STUB}_apis = {"; - - for my $API (@APIS) - { - my $api = lc $API; - - Write " .${api}_api = const_cast(&${STUB}_${api}),"; - } - - Write "};"; - Write ""; -} - sub CreateApiQuery { Write ""; Write "/* ==== API QUERY === */"; Write ""; - - Write "static_assert((sizeof(sai_apis_t)/sizeof(void*)) == (SAI_API_EXTENSIONS_MAX - 1));"; - Write ""; Write "sai_status_t sai_api_query("; - Write " _In_ sai_api_t sai_api_id,"; + Write " _In_ sai_api_t api,"; Write " _Out_ void** api_method_table)"; Write "{"; Write " SWSS_LOG_ENTER();"; @@ -343,21 +321,30 @@ sub CreateApiQuery Write " return SAI_STATUS_INVALID_PARAMETER;"; Write " }"; Write ""; - Write " if (sai_api_id == SAI_API_UNSPECIFIED)"; + Write " if (api == SAI_API_UNSPECIFIED)"; Write " {"; Write " SWSS_LOG_ERROR(\"api ID is unspecified api\");"; Write ""; Write " return SAI_STATUS_INVALID_PARAMETER;"; Write " }"; Write ""; - Write " if (sai_metadata_get_enum_value_name(&sai_metadata_enum_sai_api_t, sai_api_id))"; + Write " switch((int)api)"; Write " {"; - Write " *api_method_table = ((void**)&${STUB}_apis)[sai_api_id - 1];"; - Write ""; - Write " return SAI_STATUS_SUCCESS;"; + + for my $API (@APIS) + { + my $api = lc $API; + + Write " case SAI_API_$API:"; + Write " *api_method_table = (void**)&${STUB}_${api};"; + Write " return SAI_STATUS_SUCCESS;"; + } + + Write " default:"; + Write " break;"; Write " }"; Write ""; - Write " SWSS_LOG_ERROR(\"Invalid API type %d\", sai_api_id);"; + Write " SWSS_LOG_ERROR(\"Invalid API type %d\", api);"; Write ""; Write " return SAI_STATUS_INVALID_PARAMETER;"; Write "}"; @@ -427,7 +414,6 @@ sub CreateGlobalApis ExtractData(); CreateHeader(); CreateApiStricts(); -CreateApiStruct(); CreateApiQuery(); CreateGlobalApis(); WriteFile($optionFileName,$SOURCE_CONTENT); diff --git a/syncd/ComparisonLogic.cpp b/syncd/ComparisonLogic.cpp index 674153e3d..f8691c074 100644 --- a/syncd/ComparisonLogic.cpp +++ b/syncd/ComparisonLogic.cpp @@ -3281,9 +3281,11 @@ void ComparisonLogic::logViewObjectCount( bool asic_changes = false; - for (int i = SAI_OBJECT_TYPE_NULL + 1; i < SAI_OBJECT_TYPE_EXTENSIONS_MAX; i++) + // skip null object type + + for (size_t i = 1; i < sai_metadata_enum_sai_object_type_t.valuescount; ++i) { - sai_object_type_t ot = (sai_object_type_t)i; + sai_object_type_t ot = (sai_object_type_t)sai_metadata_enum_sai_object_type_t.values[i]; size_t c = currentView.getObjectsByObjectType(ot).size(); size_t t = temporaryView.getObjectsByObjectType(ot).size(); diff --git a/syncd/NotificationHandler.cpp b/syncd/NotificationHandler.cpp index 06bcb7bd8..5a4fa5300 100644 --- a/syncd/NotificationHandler.cpp +++ b/syncd/NotificationHandler.cpp @@ -59,85 +59,7 @@ void NotificationHandler::updateNotificationsPointers( * Also notice that we are using the same pointers for ALL switches. */ - for (uint32_t index = 0; index < attr_count; ++index) - { - sai_attribute_t &attr = attr_list[index]; - - auto meta = sai_metadata_get_attr_metadata(SAI_OBJECT_TYPE_SWITCH, attr.id); - - if (meta->attrvaluetype != SAI_ATTR_VALUE_TYPE_POINTER) - { - continue; - } - - /* - * Does not matter if pointer is valid or not, we just want the - * previous value. - */ - - sai_pointer_t prev = attr.value.ptr; - - if (prev == NULL) - { - /* - * If pointer is NULL, then fine, let it be. - */ - - continue; - } - - switch (attr.id) - { - case SAI_SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY: - attr.value.ptr = (void*)m_switchNotifications.on_switch_state_change; - break; - - case SAI_SWITCH_ATTR_SHUTDOWN_REQUEST_NOTIFY: - attr.value.ptr = (void*)m_switchNotifications.on_switch_shutdown_request; - break; - - case SAI_SWITCH_ATTR_SWITCH_ASIC_SDK_HEALTH_EVENT_NOTIFY: - attr.value.ptr = (void*)m_switchNotifications.on_switch_asic_sdk_health_event; - break; - - case SAI_SWITCH_ATTR_FDB_EVENT_NOTIFY: - attr.value.ptr = (void*)m_switchNotifications.on_fdb_event; - break; - - case SAI_SWITCH_ATTR_NAT_EVENT_NOTIFY: - attr.value.ptr = (void*)m_switchNotifications.on_nat_event; - break; - - case SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY: - attr.value.ptr = (void*)m_switchNotifications.on_port_state_change; - break; - - case SAI_SWITCH_ATTR_PORT_HOST_TX_READY_NOTIFY: - attr.value.ptr = (void*)m_switchNotifications.on_port_host_tx_ready; - break; - - case SAI_SWITCH_ATTR_QUEUE_PFC_DEADLOCK_NOTIFY: - attr.value.ptr = (void*)m_switchNotifications.on_queue_pfc_deadlock; - break; - - case SAI_SWITCH_ATTR_BFD_SESSION_STATE_CHANGE_NOTIFY: - attr.value.ptr = (void*)m_switchNotifications.on_bfd_session_state_change; - break; - - case SAI_SWITCH_ATTR_TWAMP_SESSION_EVENT_NOTIFY: - attr.value.ptr = (void*)m_switchNotifications.on_twamp_session_event; - break; - - default: - - SWSS_LOG_ERROR("pointer for %s is not handled, FIXME!", meta->attridname); - continue; - } - - // Here we translated pointer, just log it. - - SWSS_LOG_INFO("%s: 0x%" PRIx64 " (orch) => 0x%" PRIx64 " (syncd)", meta->attridname, (uint64_t)prev, (uint64_t)attr.value.ptr); - } + sai_metadata_update_attribute_notification_pointers(&m_switchNotifications, attr_count, attr_list); } // TODO use same Notification class from sairedis lib diff --git a/syncd/SaiDiscovery.cpp b/syncd/SaiDiscovery.cpp index 7f88846d9..8615526bb 100644 --- a/syncd/SaiDiscovery.cpp +++ b/syncd/SaiDiscovery.cpp @@ -309,15 +309,15 @@ void SaiDiscovery::setApiLogLevel( // We start from 1 since 0 is SAI_API_UNSPECIFIED. - for (uint32_t api = 1; api < sai_metadata_enum_sai_api_t.valuescount; ++api) + for (uint32_t idx = 1; idx < sai_metadata_enum_sai_api_t.valuescount; ++idx) { - sai_status_t status = m_sai->logSet((sai_api_t)api, logLevel); + sai_status_t status = m_sai->logSet((sai_api_t)sai_metadata_enum_sai_api_t.values[idx], logLevel); if (status == SAI_STATUS_SUCCESS) { SWSS_LOG_INFO("setting SAI loglevel %s on %s", sai_serialize_log_level(logLevel).c_str(), - sai_serialize_api((sai_api_t)api).c_str()); + sai_serialize_api((sai_api_t)sai_metadata_enum_sai_api_t.values[idx]).c_str()); } else { @@ -333,19 +333,19 @@ void SaiDiscovery::setApiLogLevel( // We start from 1 since 0 is SAI_API_UNSPECIFIED. - for (uint32_t api = 1; api < sai_metadata_enum_sai_api_t.valuescount; ++api) + for (uint32_t idx = 1; idx < sai_metadata_enum_sai_api_t.valuescount; ++idx) { - auto it = levels.find((sai_api_t)api); + auto it = levels.find((sai_api_t)sai_metadata_enum_sai_api_t.values[idx]); sai_log_level_t logLevel = (it == levels.end()) ? SAI_LOG_LEVEL_NOTICE : it->second; - sai_status_t status = m_sai->logSet((sai_api_t)api, logLevel); + sai_status_t status = m_sai->logSet((sai_api_t)sai_metadata_enum_sai_api_t.values[idx], logLevel); if (status == SAI_STATUS_SUCCESS) { SWSS_LOG_INFO("setting SAI loglevel %s on %s", sai_serialize_log_level(logLevel).c_str(), - sai_serialize_api((sai_api_t)api).c_str()); + sai_serialize_api((sai_api_t)sai_metadata_enum_sai_api_t.values[idx]).c_str()); } else { @@ -362,9 +362,9 @@ std::map SaiDiscovery::getApiLogLevel() // We start from 1 since 0 is SAI_API_UNSPECIFIED. - for (uint32_t api = 1; api < sai_metadata_enum_sai_api_t.valuescount; ++api) + for (uint32_t idx = 1; idx < sai_metadata_enum_sai_api_t.valuescount; ++idx) { - levels[(sai_api_t)api] = m_sai->logGet((sai_api_t)api); + levels[(sai_api_t)sai_metadata_enum_sai_api_t.values[idx]] = m_sai->logGet((sai_api_t)sai_metadata_enum_sai_api_t.values[idx]); } return levels; diff --git a/tests/NVDAMBF2H536C/dashapis.rec b/tests/NVDAMBF2H536C/dashapis.rec index d0638864e..cd6d2dd68 100644 --- a/tests/NVDAMBF2H536C/dashapis.rec +++ b/tests/NVDAMBF2H536C/dashapis.rec @@ -11,44 +11,44 @@ 2022-11-17.15:01:04.189590|r|SAI_OBJECT_TYPE_DIRECTION_LOOKUP_ENTRY:{"switch_id":"oid:0x21000000000000","vni":"1"} 2022-11-17.15:01:04.190026|c|SAI_OBJECT_TYPE_DIRECTION_LOOKUP_ENTRY:{"switch_id":"oid:0x21000000000000","vni":"1"}|SAI_DIRECTION_LOOKUP_ENTRY_ATTR_ACTION=SAI_DIRECTION_LOOKUP_ENTRY_ACTION_SET_OUTBOUND_DIRECTION 2022-11-17.15:01:04.190408|r|SAI_OBJECT_TYPE_DIRECTION_LOOKUP_ENTRY:{"switch_id":"oid:0x21000000000000","vni":"1"} -2022-11-17.15:01:04.190857|c|SAI_OBJECT_TYPE_VNET:oid:0x71000000000067|SAI_VNET_ATTR_VNI=100 -2022-11-17.15:01:04.191389|c|SAI_OBJECT_TYPE_ENI:oid:0x6d000000000068|SAI_ENI_ATTR_VNET_ID=oid:0x71000000000067 -2022-11-17.15:01:04.191905|c|SAI_OBJECT_TYPE_VNET:oid:0x71000000000069|SAI_VNET_ATTR_VNI=200 -2022-11-17.15:01:04.192404|c|SAI_OBJECT_TYPE_ENI:oid:0x6d00000000006a|SAI_ENI_ATTR_VNET_ID=oid:0x71000000000069 -2022-11-17.15:01:04.192985|c|SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY:{"address":"00:01:02:03:04:05","switch_id":"oid:0x21000000000000"}|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x6d000000000068 +2022-11-17.15:01:04.190857|c|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000067|SAI_VNET_ATTR_VNI=100 +2022-11-17.15:01:04.191389|c|SAI_OBJECT_TYPE_ENI:oid:0x07008000000068|SAI_ENI_ATTR_VNET_ID=oid:0x0e008000000067 +2022-11-17.15:01:04.191905|c|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000069|SAI_VNET_ATTR_VNI=200 +2022-11-17.15:01:04.192404|c|SAI_OBJECT_TYPE_ENI:oid:0x0700800000006a|SAI_ENI_ATTR_VNET_ID=oid:0x0e008000000069 +2022-11-17.15:01:04.192985|c|SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY:{"address":"00:01:02:03:04:05","switch_id":"oid:0x21000000000000"}|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x07008000000068 2022-11-17.15:01:04.193406|g|SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY:{"address":"00:01:02:03:04:05","switch_id":"oid:0x21000000000000"}|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x0 -2022-11-17.15:01:04.193906|G|SAI_STATUS_SUCCESS|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x6d000000000068 -2022-11-17.15:01:04.193955|s|SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY:{"address":"00:01:02:03:04:05","switch_id":"oid:0x21000000000000"}|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x6d00000000006a +2022-11-17.15:01:04.193906|G|SAI_STATUS_SUCCESS|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x07008000000068 +2022-11-17.15:01:04.193955|s|SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY:{"address":"00:01:02:03:04:05","switch_id":"oid:0x21000000000000"}|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x0700800000006a 2022-11-17.15:01:04.194346|g|SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY:{"address":"00:01:02:03:04:05","switch_id":"oid:0x21000000000000"}|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x0 -2022-11-17.15:01:04.194823|G|SAI_STATUS_SUCCESS|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x6d00000000006a +2022-11-17.15:01:04.194823|G|SAI_STATUS_SUCCESS|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x0700800000006a 2022-11-17.15:01:04.194856|r|SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY:{"address":"00:01:02:03:04:05","switch_id":"oid:0x21000000000000"} -2022-11-17.15:01:04.195220|r|SAI_OBJECT_TYPE_ENI:oid:0x6d000000000068 -2022-11-17.15:01:04.195652|r|SAI_OBJECT_TYPE_ENI:oid:0x6d00000000006a -2022-11-17.15:01:04.196064|r|SAI_OBJECT_TYPE_VNET:oid:0x71000000000067 -2022-11-17.15:01:04.196471|r|SAI_OBJECT_TYPE_VNET:oid:0x71000000000069 -2022-11-17.15:01:04.196980|c|SAI_OBJECT_TYPE_VNET:oid:0x7100000000006b|SAI_VNET_ATTR_VNI=100 -2022-11-17.15:01:04.197476|c|SAI_OBJECT_TYPE_ENI:oid:0x6d00000000006c|SAI_ENI_ATTR_VNET_ID=oid:0x7100000000006b -2022-11-17.15:01:04.197971|c|SAI_OBJECT_TYPE_VNET:oid:0x7100000000006d|SAI_VNET_ATTR_VNI=200 -2022-11-17.15:01:04.198523|c|SAI_OBJECT_TYPE_ENI:oid:0x6d00000000006e|SAI_ENI_ATTR_VNET_ID=oid:0x7100000000006d -2022-11-17.15:01:04.199006|c|SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY:{"address":"00:01:02:03:04:05","switch_id":"oid:0x21000000000000"}|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x6d00000000006c +2022-11-17.15:01:04.195220|r|SAI_OBJECT_TYPE_ENI:oid:0x07008000000068 +2022-11-17.15:01:04.195652|r|SAI_OBJECT_TYPE_ENI:oid:0x0700800000006a +2022-11-17.15:01:04.196064|r|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000067 +2022-11-17.15:01:04.196471|r|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000069 +2022-11-17.15:01:04.196980|c|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000006b|SAI_VNET_ATTR_VNI=100 +2022-11-17.15:01:04.197476|c|SAI_OBJECT_TYPE_ENI:oid:0x0700800000006c|SAI_ENI_ATTR_VNET_ID=oid:0x0e00800000006b +2022-11-17.15:01:04.197971|c|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000006d|SAI_VNET_ATTR_VNI=200 +2022-11-17.15:01:04.198523|c|SAI_OBJECT_TYPE_ENI:oid:0x0700800000006e|SAI_ENI_ATTR_VNET_ID=oid:0x0e00800000006d +2022-11-17.15:01:04.199006|c|SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY:{"address":"00:01:02:03:04:05","switch_id":"oid:0x21000000000000"}|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x0700800000006c 2022-11-17.15:01:04.199395|r|SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY:{"address":"00:01:02:03:04:05","switch_id":"oid:0x21000000000000"} -2022-11-17.15:01:04.199777|r|SAI_OBJECT_TYPE_ENI:oid:0x6d00000000006c -2022-11-17.15:01:04.200183|r|SAI_OBJECT_TYPE_ENI:oid:0x6d00000000006e -2022-11-17.15:01:04.200596|r|SAI_OBJECT_TYPE_VNET:oid:0x7100000000006b -2022-11-17.15:01:04.201031|r|SAI_OBJECT_TYPE_VNET:oid:0x7100000000006d -2022-11-17.15:01:04.201524|c|SAI_OBJECT_TYPE_VNET:oid:0x7100000000006f|SAI_VNET_ATTR_VNI=101 -2022-11-17.15:01:04.202047|c|SAI_OBJECT_TYPE_ENI:oid:0x6d000000000070|SAI_ENI_ATTR_VNET_ID=oid:0x7100000000006f|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=123|SAI_ENI_ATTR_CPS=10|SAI_ENI_ATTR_FLOWS=30|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.0.1 -2022-11-17.15:01:04.202581|g|SAI_OBJECT_TYPE_ENI:oid:0x6d000000000070|SAI_ENI_ATTR_VNET_ID=oid:0x0|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=123|SAI_ENI_ATTR_CPS=10|SAI_ENI_ATTR_FLOWS=30|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.0.1 -2022-11-17.15:01:04.203367|G|SAI_STATUS_SUCCESS|SAI_ENI_ATTR_VNET_ID=oid:0x7100000000006f|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=123|SAI_ENI_ATTR_CPS=10|SAI_ENI_ATTR_FLOWS=30|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.0.1 -2022-11-17.15:01:04.203399|s|SAI_OBJECT_TYPE_ENI:oid:0x6d000000000070|SAI_ENI_ATTR_CPS=40 -2022-11-17.15:01:04.203768|g|SAI_OBJECT_TYPE_ENI:oid:0x6d000000000070|SAI_ENI_ATTR_VNET_ID=oid:0x0|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=123|SAI_ENI_ATTR_CPS=10|SAI_ENI_ATTR_FLOWS=30|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.0.1 -2022-11-17.15:01:04.204467|G|SAI_STATUS_SUCCESS|SAI_ENI_ATTR_VNET_ID=oid:0x7100000000006f|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=123|SAI_ENI_ATTR_CPS=40|SAI_ENI_ATTR_FLOWS=30|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.0.1 -2022-11-17.15:01:04.204491|r|SAI_OBJECT_TYPE_ENI:oid:0x6d000000000070 -2022-11-17.15:01:04.204992|r|SAI_OBJECT_TYPE_VNET:oid:0x7100000000006f -2022-11-17.15:01:04.205493|c|SAI_OBJECT_TYPE_VNET:oid:0x71000000000071|SAI_VNET_ATTR_VNI=101 -2022-11-17.15:01:04.206000|c|SAI_OBJECT_TYPE_ENI:oid:0x6d000000000072|SAI_ENI_ATTR_VNET_ID=oid:0x71000000000071|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=123|SAI_ENI_ATTR_CPS=10|SAI_ENI_ATTR_FLOWS=30|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.0.1 -2022-11-17.15:01:04.206501|r|SAI_OBJECT_TYPE_ENI:oid:0x6d000000000072 -2022-11-17.15:01:04.207013|r|SAI_OBJECT_TYPE_VNET:oid:0x71000000000071 +2022-11-17.15:01:04.199777|r|SAI_OBJECT_TYPE_ENI:oid:0x0700800000006c +2022-11-17.15:01:04.200183|r|SAI_OBJECT_TYPE_ENI:oid:0x0700800000006e +2022-11-17.15:01:04.200596|r|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000006b +2022-11-17.15:01:04.201031|r|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000006d +2022-11-17.15:01:04.201524|c|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000006f|SAI_VNET_ATTR_VNI=101 +2022-11-17.15:01:04.202047|c|SAI_OBJECT_TYPE_ENI:oid:0x07008000000070|SAI_ENI_ATTR_VNET_ID=oid:0x0e00800000006f|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=123|SAI_ENI_ATTR_CPS=10|SAI_ENI_ATTR_FLOWS=30|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.0.1 +2022-11-17.15:01:04.202581|g|SAI_OBJECT_TYPE_ENI:oid:0x07008000000070|SAI_ENI_ATTR_VNET_ID=oid:0x0|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=123|SAI_ENI_ATTR_CPS=10|SAI_ENI_ATTR_FLOWS=30|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.0.1 +2022-11-17.15:01:04.203367|G|SAI_STATUS_SUCCESS|SAI_ENI_ATTR_VNET_ID=oid:0x0e00800000006f|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=123|SAI_ENI_ATTR_CPS=10|SAI_ENI_ATTR_FLOWS=30|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.0.1 +2022-11-17.15:01:04.203399|s|SAI_OBJECT_TYPE_ENI:oid:0x07008000000070|SAI_ENI_ATTR_CPS=40 +2022-11-17.15:01:04.203768|g|SAI_OBJECT_TYPE_ENI:oid:0x07008000000070|SAI_ENI_ATTR_VNET_ID=oid:0x0|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=123|SAI_ENI_ATTR_CPS=10|SAI_ENI_ATTR_FLOWS=30|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.0.1 +2022-11-17.15:01:04.204467|G|SAI_STATUS_SUCCESS|SAI_ENI_ATTR_VNET_ID=oid:0x0e00800000006f|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=123|SAI_ENI_ATTR_CPS=40|SAI_ENI_ATTR_FLOWS=30|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.0.1 +2022-11-17.15:01:04.204491|r|SAI_OBJECT_TYPE_ENI:oid:0x07008000000070 +2022-11-17.15:01:04.204992|r|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000006f +2022-11-17.15:01:04.205493|c|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000071|SAI_VNET_ATTR_VNI=101 +2022-11-17.15:01:04.206000|c|SAI_OBJECT_TYPE_ENI:oid:0x07008000000072|SAI_ENI_ATTR_VNET_ID=oid:0x0e008000000071|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=123|SAI_ENI_ATTR_CPS=10|SAI_ENI_ATTR_FLOWS=30|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.0.1 +2022-11-17.15:01:04.206501|r|SAI_OBJECT_TYPE_ENI:oid:0x07008000000072 +2022-11-17.15:01:04.207013|r|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000071 2022-11-17.15:01:04.207479|c|SAI_OBJECT_TYPE_VIP_ENTRY:{"switch_id":"oid:0x21000000000000","vip":"192.168.0.1"}|SAI_VIP_ENTRY_ATTR_ACTION=SAI_VIP_ENTRY_ACTION_ACCEPT 2022-11-17.15:01:04.207891|g|SAI_OBJECT_TYPE_VIP_ENTRY:{"switch_id":"oid:0x21000000000000","vip":"192.168.0.1"}|SAI_VIP_ENTRY_ATTR_ACTION=SAI_VIP_ENTRY_ACTION_ACCEPT 2022-11-17.15:01:04.208331|G|SAI_STATUS_SUCCESS|SAI_VIP_ENTRY_ATTR_ACTION=SAI_VIP_ENTRY_ACTION_ACCEPT @@ -58,98 +58,98 @@ 2022-11-17.15:01:04.209234|r|SAI_OBJECT_TYPE_VIP_ENTRY:{"switch_id":"oid:0x21000000000000","vip":"192.168.0.1"} 2022-11-17.15:01:04.209637|c|SAI_OBJECT_TYPE_VIP_ENTRY:{"switch_id":"oid:0x21000000000000","vip":"192.168.0.1"}|SAI_VIP_ENTRY_ATTR_ACTION=SAI_VIP_ENTRY_ACTION_ACCEPT 2022-11-17.15:01:04.210020|r|SAI_OBJECT_TYPE_VIP_ENTRY:{"switch_id":"oid:0x21000000000000","vip":"192.168.0.1"} -2022-11-17.15:01:04.210521|c|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x69000000000073|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV4 -2022-11-17.15:01:04.210985|g|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x69000000000073|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV4 +2022-11-17.15:01:04.210521|c|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x03008000000073|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV4 +2022-11-17.15:01:04.210985|g|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x03008000000073|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV4 2022-11-17.15:01:04.211381|G|SAI_STATUS_SUCCESS|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV4 -2022-11-17.15:01:04.211409|s|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x69000000000073|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV6 -2022-11-17.15:01:04.211760|g|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x69000000000073|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV4 +2022-11-17.15:01:04.211409|s|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x03008000000073|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV6 +2022-11-17.15:01:04.211760|g|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x03008000000073|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV4 2022-11-17.15:01:04.212162|G|SAI_STATUS_SUCCESS|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV6 -2022-11-17.15:01:04.212184|r|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x69000000000073 -2022-11-17.15:01:04.212676|c|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x69000000000074|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV4 -2022-11-17.15:01:04.213141|r|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x69000000000074 -2022-11-17.15:01:04.213638|c|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x69000000000075|NULL=NULL -2022-11-17.15:01:04.214156|c|SAI_OBJECT_TYPE_DASH_ACL_RULE:oid:0x6a000000000076|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x69000000000075|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/16,100::ffff:ffff:ffff:ffff/28|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.1/16,100::ffff:ffff:ffff:ffff/28|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:170,187|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_PRIORITY=1 -2022-11-17.15:01:04.214932|g|SAI_OBJECT_TYPE_DASH_ACL_RULE:oid:0x6a000000000076|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x0|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/16,100::ffff:ffff:ffff:ffff/28|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.1/16,100::ffff:ffff:ffff:ffff/28|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:170,187|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_PRIORITY=1 -2022-11-17.15:01:04.215950|G|SAI_STATUS_SUCCESS|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x69000000000075|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/16,100::ffff:ffff:ffff:ffff/28|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.1/16,100::ffff:ffff:ffff:ffff/28|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:170,187|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_PRIORITY=1 -2022-11-17.15:01:04.215984|s|SAI_OBJECT_TYPE_DASH_ACL_RULE:oid:0x6a000000000076|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_DENY_AND_CONTINUE -2022-11-17.15:01:04.216353|g|SAI_OBJECT_TYPE_DASH_ACL_RULE:oid:0x6a000000000076|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT +2022-11-17.15:01:04.212184|r|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x03008000000073 +2022-11-17.15:01:04.212676|c|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x03008000000074|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV4 +2022-11-17.15:01:04.213141|r|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x03008000000074 +2022-11-17.15:01:04.213638|c|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x03008000000075|NULL=NULL +2022-11-17.15:01:04.214156|c|SAI_OBJECT_TYPE_DASH_ACL_RULE:oid:0x04008000000076|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x03008000000075|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/16,100::ffff:ffff:ffff:ffff/28|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.1/16,100::ffff:ffff:ffff:ffff/28|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:170,187|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_PRIORITY=1 +2022-11-17.15:01:04.214932|g|SAI_OBJECT_TYPE_DASH_ACL_RULE:oid:0x04008000000076|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x0|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/16,100::ffff:ffff:ffff:ffff/28|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.1/16,100::ffff:ffff:ffff:ffff/28|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:170,187|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_PRIORITY=1 +2022-11-17.15:01:04.215950|G|SAI_STATUS_SUCCESS|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x03008000000075|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/16,100::ffff:ffff:ffff:ffff/28|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.1/16,100::ffff:ffff:ffff:ffff/28|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:170,187|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_PRIORITY=1 +2022-11-17.15:01:04.215984|s|SAI_OBJECT_TYPE_DASH_ACL_RULE:oid:0x04008000000076|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_DENY_AND_CONTINUE +2022-11-17.15:01:04.216353|g|SAI_OBJECT_TYPE_DASH_ACL_RULE:oid:0x04008000000076|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT 2022-11-17.15:01:04.216753|G|SAI_STATUS_SUCCESS|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_DENY_AND_CONTINUE -2022-11-17.15:01:04.216786|r|SAI_OBJECT_TYPE_DASH_ACL_RULE:oid:0x6a000000000076 -2022-11-17.15:01:04.217280|r|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x69000000000075 -2022-11-17.15:01:04.217776|c|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x69000000000077|NULL=NULL -2022-11-17.15:01:04.218277|c|SAI_OBJECT_TYPE_DASH_ACL_RULE:oid:0x6a000000000078|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x69000000000077|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/16,100::ffff:ffff:ffff:ffff/28|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.1/16,100::ffff:ffff:ffff:ffff/28|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:170,187|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_PRIORITY=1 -2022-11-17.15:01:04.218968|r|SAI_OBJECT_TYPE_DASH_ACL_RULE:oid:0x6a000000000078 -2022-11-17.15:01:04.219520|r|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x69000000000077 -2022-11-17.15:01:04.220009|c|SAI_OBJECT_TYPE_VNET:oid:0x71000000000079|SAI_VNET_ATTR_VNI=10 -2022-11-17.15:01:04.220462|g|SAI_OBJECT_TYPE_VNET:oid:0x71000000000079|SAI_VNET_ATTR_VNI=10 +2022-11-17.15:01:04.216786|r|SAI_OBJECT_TYPE_DASH_ACL_RULE:oid:0x04008000000076 +2022-11-17.15:01:04.217280|r|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x03008000000075 +2022-11-17.15:01:04.217776|c|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x03008000000077|NULL=NULL +2022-11-17.15:01:04.218277|c|SAI_OBJECT_TYPE_DASH_ACL_RULE:oid:0x04008000000078|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x03008000000077|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/16,100::ffff:ffff:ffff:ffff/28|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.1/16,100::ffff:ffff:ffff:ffff/28|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:170,187|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_PRIORITY=1 +2022-11-17.15:01:04.218968|r|SAI_OBJECT_TYPE_DASH_ACL_RULE:oid:0x04008000000078 +2022-11-17.15:01:04.219520|r|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x03008000000077 +2022-11-17.15:01:04.220009|c|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000079|SAI_VNET_ATTR_VNI=10 +2022-11-17.15:01:04.220462|g|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000079|SAI_VNET_ATTR_VNI=10 2022-11-17.15:01:04.220882|G|SAI_STATUS_SUCCESS|SAI_VNET_ATTR_VNI=10 -2022-11-17.15:01:04.220912|s|SAI_OBJECT_TYPE_VNET:oid:0x71000000000079|SAI_VNET_ATTR_VNI=20 -2022-11-17.15:01:04.221276|g|SAI_OBJECT_TYPE_VNET:oid:0x71000000000079|SAI_VNET_ATTR_VNI=20 +2022-11-17.15:01:04.220912|s|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000079|SAI_VNET_ATTR_VNI=20 +2022-11-17.15:01:04.221276|g|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000079|SAI_VNET_ATTR_VNI=20 2022-11-17.15:01:04.221675|G|SAI_STATUS_SUCCESS|SAI_VNET_ATTR_VNI=20 -2022-11-17.15:01:04.221697|r|SAI_OBJECT_TYPE_VNET:oid:0x71000000000079 -2022-11-17.15:01:04.222193|c|SAI_OBJECT_TYPE_VNET:oid:0x7100000000007a|SAI_VNET_ATTR_VNI=10 -2022-11-17.15:01:04.222660|r|SAI_OBJECT_TYPE_VNET:oid:0x7100000000007a -2022-11-17.15:01:04.223220|c|SAI_OBJECT_TYPE_ENI:oid:0x6d00000000007b|NULL=NULL -2022-11-17.15:01:04.223690|c|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY:{"eni_id":"oid:0x6d00000000007b","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP -2022-11-17.15:01:04.224138|s|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY:{"eni_id":"oid:0x6d00000000007b","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP_PA_VALIDATE -2022-11-17.15:01:04.224560|g|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY:{"eni_id":"oid:0x6d00000000007b","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP +2022-11-17.15:01:04.221697|r|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000079 +2022-11-17.15:01:04.222193|c|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000007a|SAI_VNET_ATTR_VNI=10 +2022-11-17.15:01:04.222660|r|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000007a +2022-11-17.15:01:04.223220|c|SAI_OBJECT_TYPE_ENI:oid:0x0700800000007b|NULL=NULL +2022-11-17.15:01:04.223690|c|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY:{"eni_id":"oid:0x0700800000007b","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP +2022-11-17.15:01:04.224138|s|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY:{"eni_id":"oid:0x0700800000007b","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP_PA_VALIDATE +2022-11-17.15:01:04.224560|g|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY:{"eni_id":"oid:0x0700800000007b","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP 2022-11-17.15:01:04.225037|G|SAI_STATUS_SUCCESS|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP_PA_VALIDATE -2022-11-17.15:01:04.225075|r|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY:{"eni_id":"oid:0x6d00000000007b","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"} -2022-11-17.15:01:04.225461|r|SAI_OBJECT_TYPE_ENI:oid:0x6d00000000007b -2022-11-17.15:01:04.225958|c|SAI_OBJECT_TYPE_ENI:oid:0x6d00000000007c|NULL=NULL -2022-11-17.15:01:04.226413|c|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY:{"eni_id":"oid:0x6d00000000007c","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP -2022-11-17.15:01:04.226816|r|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY:{"eni_id":"oid:0x6d00000000007c","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"} -2022-11-17.15:01:04.227204|r|SAI_OBJECT_TYPE_ENI:oid:0x6d00000000007c -2022-11-17.15:01:04.227701|c|SAI_OBJECT_TYPE_VNET:oid:0x7100000000007d|SAI_VNET_ATTR_VNI=10 -2022-11-17.15:01:04.228179|c|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY:{"sip":"192.3.3.3","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x7100000000007d"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT -2022-11-17.15:01:04.228599|s|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY:{"sip":"192.3.3.3","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x7100000000007d"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT -2022-11-17.15:01:04.229083|g|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY:{"sip":"192.3.3.3","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x7100000000007d"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT +2022-11-17.15:01:04.225075|r|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY:{"eni_id":"oid:0x0700800000007b","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"} +2022-11-17.15:01:04.225461|r|SAI_OBJECT_TYPE_ENI:oid:0x0700800000007b +2022-11-17.15:01:04.225958|c|SAI_OBJECT_TYPE_ENI:oid:0x0700800000007c|NULL=NULL +2022-11-17.15:01:04.226413|c|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY:{"eni_id":"oid:0x0700800000007c","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP +2022-11-17.15:01:04.226816|r|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY:{"eni_id":"oid:0x0700800000007c","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"} +2022-11-17.15:01:04.227204|r|SAI_OBJECT_TYPE_ENI:oid:0x0700800000007c +2022-11-17.15:01:04.227701|c|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000007d|SAI_VNET_ATTR_VNI=10 +2022-11-17.15:01:04.228179|c|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY:{"sip":"192.3.3.3","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x0e00800000007d"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT +2022-11-17.15:01:04.228599|s|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY:{"sip":"192.3.3.3","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x0e00800000007d"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT +2022-11-17.15:01:04.229083|g|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY:{"sip":"192.3.3.3","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x0e00800000007d"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT 2022-11-17.15:01:04.229527|G|SAI_STATUS_SUCCESS|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT -2022-11-17.15:01:04.229560|r|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY:{"sip":"192.3.3.3","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x7100000000007d"} -2022-11-17.15:01:04.229928|r|SAI_OBJECT_TYPE_VNET:oid:0x7100000000007d -2022-11-17.15:01:04.230429|c|SAI_OBJECT_TYPE_VNET:oid:0x7100000000007e|SAI_VNET_ATTR_VNI=10 -2022-11-17.15:01:04.230903|c|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY:{"sip":"192.3.3.3","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x7100000000007e"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT -2022-11-17.15:01:04.231296|r|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY:{"sip":"192.3.3.3","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x7100000000007e"} -2022-11-17.15:01:04.231665|r|SAI_OBJECT_TYPE_VNET:oid:0x7100000000007e -2022-11-17.15:01:04.232160|c|SAI_OBJECT_TYPE_VNET:oid:0x7100000000007f|SAI_VNET_ATTR_VNI=101 -2022-11-17.15:01:04.232663|c|SAI_OBJECT_TYPE_ENI:oid:0x6d000000000080|SAI_ENI_ATTR_VNET_ID=oid:0x7100000000007f -2022-11-17.15:01:04.233159|c|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x6d000000000080","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x7100000000007f -2022-11-17.15:01:04.233627|g|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x6d000000000080","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0 -2022-11-17.15:01:04.234212|G|SAI_STATUS_SUCCESS|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x7100000000007f -2022-11-17.15:01:04.234260|s|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x6d000000000080","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_DIRECT -2022-11-17.15:01:04.234724|g|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x6d000000000080","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0 -2022-11-17.15:01:04.235311|G|SAI_STATUS_SUCCESS|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_DIRECT|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x7100000000007f -2022-11-17.15:01:04.235346|r|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x6d000000000080","switch_id":"oid:0x21000000000000"} -2022-11-17.15:01:04.235726|r|SAI_OBJECT_TYPE_ENI:oid:0x6d000000000080 -2022-11-17.15:01:04.236151|r|SAI_OBJECT_TYPE_VNET:oid:0x7100000000007f -2022-11-17.15:01:04.236650|c|SAI_OBJECT_TYPE_VNET:oid:0x71000000000081|SAI_VNET_ATTR_VNI=101 -2022-11-17.15:01:04.237179|c|SAI_OBJECT_TYPE_ENI:oid:0x6d000000000082|SAI_ENI_ATTR_VNET_ID=oid:0x71000000000081 -2022-11-17.15:01:04.237663|c|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x6d000000000082","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x71000000000081 -2022-11-17.15:01:04.238082|r|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x6d000000000082","switch_id":"oid:0x21000000000000"} -2022-11-17.15:01:04.238459|r|SAI_OBJECT_TYPE_ENI:oid:0x6d000000000082 -2022-11-17.15:01:04.238878|r|SAI_OBJECT_TYPE_VNET:oid:0x71000000000081 -2022-11-17.15:01:04.239377|c|SAI_OBJECT_TYPE_VNET:oid:0x71000000000083|SAI_VNET_ATTR_VNI=10 -2022-11-17.15:01:04.239866|c|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"192.168.0.1","dst_vnet_id":"oid:0x71000000000083","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=192.168.0.1|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:01:02:03:04:05|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=false -2022-11-17.15:01:04.240326|s|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"192.168.0.1","dst_vnet_id":"oid:0x71000000000083","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=true -2022-11-17.15:01:04.240798|g|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"192.168.0.1","dst_vnet_id":"oid:0x71000000000083","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=true +2022-11-17.15:01:04.229560|r|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY:{"sip":"192.3.3.3","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x0e00800000007d"} +2022-11-17.15:01:04.229928|r|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000007d +2022-11-17.15:01:04.230429|c|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000007e|SAI_VNET_ATTR_VNI=10 +2022-11-17.15:01:04.230903|c|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY:{"sip":"192.3.3.3","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x0e00800000007e"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT +2022-11-17.15:01:04.231296|r|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY:{"sip":"192.3.3.3","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x0e00800000007e"} +2022-11-17.15:01:04.231665|r|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000007e +2022-11-17.15:01:04.232160|c|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000007f|SAI_VNET_ATTR_VNI=101 +2022-11-17.15:01:04.232663|c|SAI_OBJECT_TYPE_ENI:oid:0x07008000000080|SAI_ENI_ATTR_VNET_ID=oid:0x0e00800000007f +2022-11-17.15:01:04.233159|c|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x07008000000080","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e00800000007f +2022-11-17.15:01:04.233627|g|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x07008000000080","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0 +2022-11-17.15:01:04.234212|G|SAI_STATUS_SUCCESS|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e00800000007f +2022-11-17.15:01:04.234260|s|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x07008000000080","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_DIRECT +2022-11-17.15:01:04.234724|g|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x07008000000080","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0 +2022-11-17.15:01:04.235311|G|SAI_STATUS_SUCCESS|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_DIRECT|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e00800000007f +2022-11-17.15:01:04.235346|r|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x07008000000080","switch_id":"oid:0x21000000000000"} +2022-11-17.15:01:04.235726|r|SAI_OBJECT_TYPE_ENI:oid:0x07008000000080 +2022-11-17.15:01:04.236151|r|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000007f +2022-11-17.15:01:04.236650|c|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000081|SAI_VNET_ATTR_VNI=101 +2022-11-17.15:01:04.237179|c|SAI_OBJECT_TYPE_ENI:oid:0x07008000000082|SAI_ENI_ATTR_VNET_ID=oid:0x0e008000000081 +2022-11-17.15:01:04.237663|c|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x07008000000082","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e008000000081 +2022-11-17.15:01:04.238082|r|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x07008000000082","switch_id":"oid:0x21000000000000"} +2022-11-17.15:01:04.238459|r|SAI_OBJECT_TYPE_ENI:oid:0x07008000000082 +2022-11-17.15:01:04.238878|r|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000081 +2022-11-17.15:01:04.239377|c|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000083|SAI_VNET_ATTR_VNI=10 +2022-11-17.15:01:04.239866|c|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"192.168.0.1","dst_vnet_id":"oid:0x0e008000000083","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=192.168.0.1|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:01:02:03:04:05|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=false +2022-11-17.15:01:04.240326|s|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"192.168.0.1","dst_vnet_id":"oid:0x0e008000000083","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=true +2022-11-17.15:01:04.240798|g|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"192.168.0.1","dst_vnet_id":"oid:0x0e008000000083","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=true 2022-11-17.15:01:04.241242|G|SAI_STATUS_SUCCESS|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=true -2022-11-17.15:01:04.241275|r|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"192.168.0.1","dst_vnet_id":"oid:0x71000000000083","switch_id":"oid:0x21000000000000"} -2022-11-17.15:01:04.241645|r|SAI_OBJECT_TYPE_VNET:oid:0x71000000000083 -2022-11-17.15:01:04.242149|c|SAI_OBJECT_TYPE_VNET:oid:0x71000000000084|SAI_VNET_ATTR_VNI=10 -2022-11-17.15:01:04.242628|c|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"192.168.0.1","dst_vnet_id":"oid:0x71000000000084","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=192.168.0.1|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:01:02:03:04:05|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=false -2022-11-17.15:01:04.243067|r|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"192.168.0.1","dst_vnet_id":"oid:0x71000000000084","switch_id":"oid:0x21000000000000"} -2022-11-17.15:01:04.243454|r|SAI_OBJECT_TYPE_VNET:oid:0x71000000000084 -2022-11-17.15:01:04.243961|c|SAI_OBJECT_TYPE_VNET:oid:0x71000000000085|SAI_VNET_ATTR_VNI=10 -2022-11-17.15:01:04.244441|c|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x71000000000085","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=fe80::886a:feff:fe31:bfe0|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:02:03:04:05:06|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=true -2022-11-17.15:01:04.244900|s|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x71000000000085","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=true -2022-11-17.15:01:04.245305|g|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x71000000000085","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=true +2022-11-17.15:01:04.241275|r|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"192.168.0.1","dst_vnet_id":"oid:0x0e008000000083","switch_id":"oid:0x21000000000000"} +2022-11-17.15:01:04.241645|r|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000083 +2022-11-17.15:01:04.242149|c|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000084|SAI_VNET_ATTR_VNI=10 +2022-11-17.15:01:04.242628|c|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"192.168.0.1","dst_vnet_id":"oid:0x0e008000000084","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=192.168.0.1|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:01:02:03:04:05|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=false +2022-11-17.15:01:04.243067|r|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"192.168.0.1","dst_vnet_id":"oid:0x0e008000000084","switch_id":"oid:0x21000000000000"} +2022-11-17.15:01:04.243454|r|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000084 +2022-11-17.15:01:04.243961|c|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000085|SAI_VNET_ATTR_VNI=10 +2022-11-17.15:01:04.244441|c|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x0e008000000085","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=fe80::886a:feff:fe31:bfe0|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:02:03:04:05:06|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=true +2022-11-17.15:01:04.244900|s|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x0e008000000085","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=true +2022-11-17.15:01:04.245305|g|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x0e008000000085","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=true 2022-11-17.15:01:04.245743|G|SAI_STATUS_SUCCESS|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=true -2022-11-17.15:01:04.245773|r|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x71000000000085","switch_id":"oid:0x21000000000000"} -2022-11-17.15:01:04.246207|r|SAI_OBJECT_TYPE_VNET:oid:0x71000000000085 -2022-11-17.15:01:04.246717|c|SAI_OBJECT_TYPE_VNET:oid:0x71000000000086|SAI_VNET_ATTR_VNI=10 -2022-11-17.15:01:04.247197|c|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x71000000000086","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=fe80::886a:feff:fe31:bfe0|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:02:03:04:05:06|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=true -2022-11-17.15:01:04.247631|r|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x71000000000086","switch_id":"oid:0x21000000000000"} -2022-11-17.15:01:04.248027|r|SAI_OBJECT_TYPE_VNET:oid:0x71000000000086 +2022-11-17.15:01:04.245773|r|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x0e008000000085","switch_id":"oid:0x21000000000000"} +2022-11-17.15:01:04.246207|r|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000085 +2022-11-17.15:01:04.246717|c|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000086|SAI_VNET_ATTR_VNI=10 +2022-11-17.15:01:04.247197|c|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x0e008000000086","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=fe80::886a:feff:fe31:bfe0|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:02:03:04:05:06|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=true +2022-11-17.15:01:04.247631|r|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x0e008000000086","switch_id":"oid:0x21000000000000"} +2022-11-17.15:01:04.248027|r|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000086 2022-11-17.15:01:04.248552|C|SAI_OBJECT_TYPE_DIRECTION_LOOKUP_ENTRY||{"switch_id":"oid:0x21000000000000","vni":"10"}|SAI_DIRECTION_LOOKUP_ENTRY_ATTR_ACTION=SAI_DIRECTION_LOOKUP_ENTRY_ACTION_SET_OUTBOUND_DIRECTION||{"switch_id":"oid:0x21000000000000","vni":"20"}|SAI_DIRECTION_LOOKUP_ENTRY_ATTR_ACTION=SAI_DIRECTION_LOOKUP_ENTRY_ACTION_SET_OUTBOUND_DIRECTION 2022-11-17.15:01:04.249058|g|SAI_OBJECT_TYPE_DIRECTION_LOOKUP_ENTRY:{"switch_id":"oid:0x21000000000000","vni":"10"}|SAI_DIRECTION_LOOKUP_ENTRY_ATTR_ACTION=SAI_DIRECTION_LOOKUP_ENTRY_ACTION_SET_OUTBOUND_DIRECTION 2022-11-17.15:01:04.249516|G|SAI_STATUS_SUCCESS|SAI_DIRECTION_LOOKUP_ENTRY_ATTR_ACTION=SAI_DIRECTION_LOOKUP_ENTRY_ACTION_SET_OUTBOUND_DIRECTION @@ -158,46 +158,46 @@ 2022-11-17.15:01:04.250018|R|SAI_OBJECT_TYPE_DIRECTION_LOOKUP_ENTRY||{"switch_id":"oid:0x21000000000000","vni":"10"}||{"switch_id":"oid:0x21000000000000","vni":"20"} 2022-11-17.15:01:04.250494|C|SAI_OBJECT_TYPE_DIRECTION_LOOKUP_ENTRY||{"switch_id":"oid:0x21000000000000","vni":"10"}|SAI_DIRECTION_LOOKUP_ENTRY_ATTR_ACTION=SAI_DIRECTION_LOOKUP_ENTRY_ACTION_SET_OUTBOUND_DIRECTION||{"switch_id":"oid:0x21000000000000","vni":"20"}|SAI_DIRECTION_LOOKUP_ENTRY_ATTR_ACTION=SAI_DIRECTION_LOOKUP_ENTRY_ACTION_SET_OUTBOUND_DIRECTION 2022-11-17.15:01:04.250955|R|SAI_OBJECT_TYPE_DIRECTION_LOOKUP_ENTRY||{"switch_id":"oid:0x21000000000000","vni":"10"}||{"switch_id":"oid:0x21000000000000","vni":"20"} -2022-11-17.15:01:04.251475|c|SAI_OBJECT_TYPE_VNET:oid:0x71000000000087|SAI_VNET_ATTR_VNI=100 -2022-11-17.15:01:04.251989|c|SAI_OBJECT_TYPE_ENI:oid:0x6d000000000088|SAI_ENI_ATTR_VNET_ID=oid:0x71000000000087 -2022-11-17.15:01:04.252562|c|SAI_OBJECT_TYPE_VNET:oid:0x71000000000089|SAI_VNET_ATTR_VNI=200 -2022-11-17.15:01:04.253077|c|SAI_OBJECT_TYPE_ENI:oid:0x6d00000000008a|SAI_ENI_ATTR_VNET_ID=oid:0x71000000000089 -2022-11-17.15:01:04.253561|C|SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY||{"address":"00:01:02:03:04:05","switch_id":"oid:0x21000000000000"}|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x6d000000000088||{"address":"00:01:02:03:04:06","switch_id":"oid:0x21000000000000"}|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x6d00000000008a +2022-11-17.15:01:04.251475|c|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000087|SAI_VNET_ATTR_VNI=100 +2022-11-17.15:01:04.251989|c|SAI_OBJECT_TYPE_ENI:oid:0x07008000000088|SAI_ENI_ATTR_VNET_ID=oid:0x0e008000000087 +2022-11-17.15:01:04.252562|c|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000089|SAI_VNET_ATTR_VNI=200 +2022-11-17.15:01:04.253077|c|SAI_OBJECT_TYPE_ENI:oid:0x0700800000008a|SAI_ENI_ATTR_VNET_ID=oid:0x0e008000000089 +2022-11-17.15:01:04.253561|C|SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY||{"address":"00:01:02:03:04:05","switch_id":"oid:0x21000000000000"}|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x07008000000088||{"address":"00:01:02:03:04:06","switch_id":"oid:0x21000000000000"}|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x0700800000008a 2022-11-17.15:01:04.254039|g|SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY:{"address":"00:01:02:03:04:05","switch_id":"oid:0x21000000000000"}|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x0 -2022-11-17.15:01:04.254534|G|SAI_STATUS_SUCCESS|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x6d000000000088 +2022-11-17.15:01:04.254534|G|SAI_STATUS_SUCCESS|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x07008000000088 2022-11-17.15:01:04.254576|g|SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY:{"address":"00:01:02:03:04:06","switch_id":"oid:0x21000000000000"}|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x0 -2022-11-17.15:01:04.255050|G|SAI_STATUS_SUCCESS|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x6d00000000008a +2022-11-17.15:01:04.255050|G|SAI_STATUS_SUCCESS|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x0700800000008a 2022-11-17.15:01:04.255091|R|SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY||{"address":"00:01:02:03:04:05","switch_id":"oid:0x21000000000000"}||{"address":"00:01:02:03:04:06","switch_id":"oid:0x21000000000000"} -2022-11-17.15:01:04.255529|r|SAI_OBJECT_TYPE_ENI:oid:0x6d000000000088 -2022-11-17.15:01:04.255965|r|SAI_OBJECT_TYPE_ENI:oid:0x6d00000000008a -2022-11-17.15:01:04.256370|r|SAI_OBJECT_TYPE_VNET:oid:0x71000000000087 -2022-11-17.15:01:04.256794|r|SAI_OBJECT_TYPE_VNET:oid:0x71000000000089 -2022-11-17.15:01:04.257299|c|SAI_OBJECT_TYPE_VNET:oid:0x7100000000008b|SAI_VNET_ATTR_VNI=100 -2022-11-17.15:01:04.257795|c|SAI_OBJECT_TYPE_ENI:oid:0x6d00000000008c|SAI_ENI_ATTR_VNET_ID=oid:0x7100000000008b -2022-11-17.15:01:04.258351|c|SAI_OBJECT_TYPE_VNET:oid:0x7100000000008d|SAI_VNET_ATTR_VNI=200 -2022-11-17.15:01:04.258843|c|SAI_OBJECT_TYPE_ENI:oid:0x6d00000000008e|SAI_ENI_ATTR_VNET_ID=oid:0x7100000000008d -2022-11-17.15:01:04.259321|C|SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY||{"address":"00:01:02:03:04:05","switch_id":"oid:0x21000000000000"}|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x6d00000000008c||{"address":"00:01:02:03:04:06","switch_id":"oid:0x21000000000000"}|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x6d00000000008e +2022-11-17.15:01:04.255529|r|SAI_OBJECT_TYPE_ENI:oid:0x07008000000088 +2022-11-17.15:01:04.255965|r|SAI_OBJECT_TYPE_ENI:oid:0x0700800000008a +2022-11-17.15:01:04.256370|r|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000087 +2022-11-17.15:01:04.256794|r|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000089 +2022-11-17.15:01:04.257299|c|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000008b|SAI_VNET_ATTR_VNI=100 +2022-11-17.15:01:04.257795|c|SAI_OBJECT_TYPE_ENI:oid:0x0700800000008c|SAI_ENI_ATTR_VNET_ID=oid:0x0e00800000008b +2022-11-17.15:01:04.258351|c|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000008d|SAI_VNET_ATTR_VNI=200 +2022-11-17.15:01:04.258843|c|SAI_OBJECT_TYPE_ENI:oid:0x0700800000008e|SAI_ENI_ATTR_VNET_ID=oid:0x0e00800000008d +2022-11-17.15:01:04.259321|C|SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY||{"address":"00:01:02:03:04:05","switch_id":"oid:0x21000000000000"}|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x0700800000008c||{"address":"00:01:02:03:04:06","switch_id":"oid:0x21000000000000"}|SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID=oid:0x0700800000008e 2022-11-17.15:01:04.259787|R|SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY||{"address":"00:01:02:03:04:05","switch_id":"oid:0x21000000000000"}||{"address":"00:01:02:03:04:06","switch_id":"oid:0x21000000000000"} -2022-11-17.15:01:04.260227|r|SAI_OBJECT_TYPE_ENI:oid:0x6d00000000008c -2022-11-17.15:01:04.260664|r|SAI_OBJECT_TYPE_ENI:oid:0x6d00000000008e -2022-11-17.15:01:04.261091|r|SAI_OBJECT_TYPE_VNET:oid:0x7100000000008b -2022-11-17.15:01:04.261501|r|SAI_OBJECT_TYPE_VNET:oid:0x7100000000008d -2022-11-17.15:01:04.261991|c|SAI_OBJECT_TYPE_VNET:oid:0x7100000000008f|SAI_VNET_ATTR_VNI=101 -2022-11-17.15:01:04.262483|c|SAI_OBJECT_TYPE_VNET:oid:0x71000000000090|SAI_VNET_ATTR_VNI=102 -2022-11-17.15:01:04.263040|C|SAI_OBJECT_TYPE_ENI||oid:0x6d000000000091|SAI_ENI_ATTR_VNET_ID=oid:0x7100000000008f|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=123|SAI_ENI_ATTR_CPS=10|SAI_ENI_ATTR_FLOWS=20|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.0.1||oid:0x6d000000000092|SAI_ENI_ATTR_VNET_ID=oid:0x71000000000090|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=124|SAI_ENI_ATTR_CPS=11|SAI_ENI_ATTR_FLOWS=21|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.1.1 -2022-11-17.15:01:04.263711|g|SAI_OBJECT_TYPE_ENI:oid:0x6d000000000091|SAI_ENI_ATTR_VNET_ID=oid:0x0 -2022-11-17.15:01:04.264183|G|SAI_STATUS_SUCCESS|SAI_ENI_ATTR_VNET_ID=oid:0x7100000000008f -2022-11-17.15:01:04.264213|g|SAI_OBJECT_TYPE_ENI:oid:0x6d000000000092|SAI_ENI_ATTR_VNET_ID=oid:0x0 -2022-11-17.15:01:04.264715|G|SAI_STATUS_SUCCESS|SAI_ENI_ATTR_VNET_ID=oid:0x71000000000090 -2022-11-17.15:01:04.264757|R|SAI_OBJECT_TYPE_ENI||oid:0x6d000000000091||oid:0x6d000000000092 -2022-11-17.15:01:04.265313|r|SAI_OBJECT_TYPE_VNET:oid:0x7100000000008f -2022-11-17.15:01:04.265761|r|SAI_OBJECT_TYPE_VNET:oid:0x71000000000090 -2022-11-17.15:01:04.266260|c|SAI_OBJECT_TYPE_VNET:oid:0x71000000000093|SAI_VNET_ATTR_VNI=101 -2022-11-17.15:01:04.266752|c|SAI_OBJECT_TYPE_VNET:oid:0x71000000000094|SAI_VNET_ATTR_VNI=102 -2022-11-17.15:01:04.267304|C|SAI_OBJECT_TYPE_ENI||oid:0x6d000000000095|SAI_ENI_ATTR_VNET_ID=oid:0x71000000000093|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=123|SAI_ENI_ATTR_CPS=10|SAI_ENI_ATTR_FLOWS=20|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.0.1||oid:0x6d000000000096|SAI_ENI_ATTR_VNET_ID=oid:0x71000000000094|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=124|SAI_ENI_ATTR_CPS=11|SAI_ENI_ATTR_FLOWS=21|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.1.1 -2022-11-17.15:01:04.267965|R|SAI_OBJECT_TYPE_ENI||oid:0x6d000000000095||oid:0x6d000000000096 -2022-11-17.15:01:04.268525|r|SAI_OBJECT_TYPE_VNET:oid:0x71000000000093 -2022-11-17.15:01:04.268989|r|SAI_OBJECT_TYPE_VNET:oid:0x71000000000094 +2022-11-17.15:01:04.260227|r|SAI_OBJECT_TYPE_ENI:oid:0x0700800000008c +2022-11-17.15:01:04.260664|r|SAI_OBJECT_TYPE_ENI:oid:0x0700800000008e +2022-11-17.15:01:04.261091|r|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000008b +2022-11-17.15:01:04.261501|r|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000008d +2022-11-17.15:01:04.261991|c|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000008f|SAI_VNET_ATTR_VNI=101 +2022-11-17.15:01:04.262483|c|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000090|SAI_VNET_ATTR_VNI=102 +2022-11-17.15:01:04.263040|C|SAI_OBJECT_TYPE_ENI||oid:0x07008000000091|SAI_ENI_ATTR_VNET_ID=oid:0x0e00800000008f|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=123|SAI_ENI_ATTR_CPS=10|SAI_ENI_ATTR_FLOWS=20|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.0.1||oid:0x07008000000092|SAI_ENI_ATTR_VNET_ID=oid:0x0e008000000090|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=124|SAI_ENI_ATTR_CPS=11|SAI_ENI_ATTR_FLOWS=21|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.1.1 +2022-11-17.15:01:04.263711|g|SAI_OBJECT_TYPE_ENI:oid:0x07008000000091|SAI_ENI_ATTR_VNET_ID=oid:0x0 +2022-11-17.15:01:04.264183|G|SAI_STATUS_SUCCESS|SAI_ENI_ATTR_VNET_ID=oid:0x0e00800000008f +2022-11-17.15:01:04.264213|g|SAI_OBJECT_TYPE_ENI:oid:0x07008000000092|SAI_ENI_ATTR_VNET_ID=oid:0x0 +2022-11-17.15:01:04.264715|G|SAI_STATUS_SUCCESS|SAI_ENI_ATTR_VNET_ID=oid:0x0e008000000090 +2022-11-17.15:01:04.264757|R|SAI_OBJECT_TYPE_ENI||oid:0x07008000000091||oid:0x07008000000092 +2022-11-17.15:01:04.265313|r|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000008f +2022-11-17.15:01:04.265761|r|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000090 +2022-11-17.15:01:04.266260|c|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000093|SAI_VNET_ATTR_VNI=101 +2022-11-17.15:01:04.266752|c|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000094|SAI_VNET_ATTR_VNI=102 +2022-11-17.15:01:04.267304|C|SAI_OBJECT_TYPE_ENI||oid:0x07008000000095|SAI_ENI_ATTR_VNET_ID=oid:0x0e008000000093|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=123|SAI_ENI_ATTR_CPS=10|SAI_ENI_ATTR_FLOWS=20|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.0.1||oid:0x07008000000096|SAI_ENI_ATTR_VNET_ID=oid:0x0e008000000094|SAI_ENI_ATTR_ADMIN_STATE=true|SAI_ENI_ATTR_VM_VNI=124|SAI_ENI_ATTR_CPS=11|SAI_ENI_ATTR_FLOWS=21|SAI_ENI_ATTR_VM_UNDERLAY_DIP=192.168.1.1 +2022-11-17.15:01:04.267965|R|SAI_OBJECT_TYPE_ENI||oid:0x07008000000095||oid:0x07008000000096 +2022-11-17.15:01:04.268525|r|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000093 +2022-11-17.15:01:04.268989|r|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000094 2022-11-17.15:01:04.269469|C|SAI_OBJECT_TYPE_VIP_ENTRY||{"switch_id":"oid:0x21000000000000","vip":"192.168.0.1"}|SAI_VIP_ENTRY_ATTR_ACTION=SAI_VIP_ENTRY_ACTION_ACCEPT||{"switch_id":"oid:0x21000000000000","vip":"192.168.1.1"}|SAI_VIP_ENTRY_ATTR_ACTION=SAI_VIP_ENTRY_ACTION_ACCEPT 2022-11-17.15:01:04.269937|g|SAI_OBJECT_TYPE_VIP_ENTRY:{"switch_id":"oid:0x21000000000000","vip":"192.168.0.1"}|SAI_VIP_ENTRY_ATTR_ACTION=SAI_VIP_ENTRY_ACTION_ACCEPT 2022-11-17.15:01:04.270372|G|SAI_STATUS_SUCCESS|SAI_VIP_ENTRY_ATTR_ACTION=SAI_VIP_ENTRY_ACTION_ACCEPT @@ -206,107 +206,107 @@ 2022-11-17.15:01:04.270928|R|SAI_OBJECT_TYPE_VIP_ENTRY||{"switch_id":"oid:0x21000000000000","vip":"192.168.0.1"}||{"switch_id":"oid:0x21000000000000","vip":"192.168.1.1"} 2022-11-17.15:01:04.271410|C|SAI_OBJECT_TYPE_VIP_ENTRY||{"switch_id":"oid:0x21000000000000","vip":"192.168.0.1"}|SAI_VIP_ENTRY_ATTR_ACTION=SAI_VIP_ENTRY_ACTION_ACCEPT||{"switch_id":"oid:0x21000000000000","vip":"192.168.1.1"}|SAI_VIP_ENTRY_ATTR_ACTION=SAI_VIP_ENTRY_ACTION_ACCEPT 2022-11-17.15:01:04.271868|R|SAI_OBJECT_TYPE_VIP_ENTRY||{"switch_id":"oid:0x21000000000000","vip":"192.168.0.1"}||{"switch_id":"oid:0x21000000000000","vip":"192.168.1.1"} -2022-11-17.15:01:04.272410|C|SAI_OBJECT_TYPE_DASH_ACL_GROUP||oid:0x69000000000097|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV4||oid:0x69000000000098|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV6 -2022-11-17.15:01:04.273012|g|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x69000000000097|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV4 +2022-11-17.15:01:04.272410|C|SAI_OBJECT_TYPE_DASH_ACL_GROUP||oid:0x03008000000097|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV4||oid:0x03008000000098|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV6 +2022-11-17.15:01:04.273012|g|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x03008000000097|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV4 2022-11-17.15:01:04.273432|G|SAI_STATUS_SUCCESS|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV4 -2022-11-17.15:01:04.273459|g|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x69000000000098|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV4 +2022-11-17.15:01:04.273459|g|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x03008000000098|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV4 2022-11-17.15:01:04.273843|G|SAI_STATUS_SUCCESS|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV6 -2022-11-17.15:01:04.273869|R|SAI_OBJECT_TYPE_DASH_ACL_GROUP||oid:0x69000000000097||oid:0x69000000000098 -2022-11-17.15:01:04.274512|C|SAI_OBJECT_TYPE_DASH_ACL_GROUP||oid:0x69000000000099|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV4||oid:0x6900000000009a|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV6 -2022-11-17.15:01:04.275089|R|SAI_OBJECT_TYPE_DASH_ACL_GROUP||oid:0x69000000000099||oid:0x6900000000009a -2022-11-17.15:01:04.275719|c|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x6900000000009b|NULL=NULL -2022-11-17.15:01:04.276197|c|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x6900000000009c|NULL=NULL -2022-11-17.15:01:04.276753|C|SAI_OBJECT_TYPE_DASH_ACL_RULE||oid:0x6a00000000009d|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT_AND_CONTINUE|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x6900000000009b|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/24,100::ffff:ffff:ffff:ffff/16|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.2/16,100::ffff:ffff:ffff:fffe/16|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:170,187|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:50,60,70,80|SAI_DASH_ACL_RULE_ATTR_PRIORITY=1||oid:0x6a00000000009e|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_DENY|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x6900000000009c|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/24,100::ffff:ffff:ffff:ffff/16|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.2/16,100::ffff:ffff:ffff:fffe/16|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:204,221|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:50,60,70,80|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_PRIORITY=2 -2022-11-17.15:01:04.277815|g|SAI_OBJECT_TYPE_DASH_ACL_RULE:oid:0x6a00000000009d|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x0|SAI_DASH_ACL_RULE_ATTR_DIP=2:0.0.0.0/0,0.0.0.0/0|SAI_DASH_ACL_RULE_ATTR_SIP=2:0.0.0.0/0,0.0.0.0/0|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:0,0|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:0,0,0,0|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:0,0,0,0|SAI_DASH_ACL_RULE_ATTR_PRIORITY=0 -2022-11-17.15:01:04.278838|G|SAI_STATUS_SUCCESS|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT_AND_CONTINUE|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x6900000000009b|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/24,100::ffff:ffff:ffff:ffff/16|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.2/16,100::ffff:ffff:ffff:fffe/16|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:170,187|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:50,60,70,80|SAI_DASH_ACL_RULE_ATTR_PRIORITY=1 -2022-11-17.15:01:04.278886|g|SAI_OBJECT_TYPE_DASH_ACL_RULE:oid:0x6a00000000009e|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x0|SAI_DASH_ACL_RULE_ATTR_DIP=2:0.0.0.0/0,0.0.0.0/0|SAI_DASH_ACL_RULE_ATTR_SIP=2:0.0.0.0/0,0.0.0.0/0|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:0,0|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:0,0,0,0|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:0,0,0,0|SAI_DASH_ACL_RULE_ATTR_PRIORITY=0 -2022-11-17.15:01:04.279797|G|SAI_STATUS_SUCCESS|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_DENY|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x6900000000009c|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/24,100::ffff:ffff:ffff:ffff/16|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.2/16,100::ffff:ffff:ffff:fffe/16|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:204,221|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:50,60,70,80|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_PRIORITY=2 -2022-11-17.15:01:04.279827|R|SAI_OBJECT_TYPE_DASH_ACL_RULE||oid:0x6a00000000009d||oid:0x6a00000000009e -2022-11-17.15:01:04.280381|r|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x6900000000009b -2022-11-17.15:01:04.280849|r|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x6900000000009c -2022-11-17.15:01:04.281342|c|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x6900000000009f|NULL=NULL -2022-11-17.15:01:04.281814|c|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x690000000000a0|NULL=NULL -2022-11-17.15:01:04.282359|C|SAI_OBJECT_TYPE_DASH_ACL_RULE||oid:0x6a0000000000a1|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT_AND_CONTINUE|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x6900000000009f|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/24,100::ffff:ffff:ffff:ffff/16|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.2/16,100::ffff:ffff:ffff:fffe/16|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:170,187|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:50,60,70,80|SAI_DASH_ACL_RULE_ATTR_PRIORITY=1||oid:0x6a0000000000a2|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_DENY|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x690000000000a0|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/24,100::ffff:ffff:ffff:ffff/16|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.2/16,100::ffff:ffff:ffff:fffe/16|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:204,221|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:50,60,70,80|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_PRIORITY=2 -2022-11-17.15:01:04.283376|R|SAI_OBJECT_TYPE_DASH_ACL_RULE||oid:0x6a0000000000a1||oid:0x6a0000000000a2 -2022-11-17.15:01:04.283949|r|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x6900000000009f -2022-11-17.15:01:04.284384|r|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x690000000000a0 -2022-11-17.15:01:04.284929|C|SAI_OBJECT_TYPE_VNET||oid:0x710000000000a3|SAI_VNET_ATTR_VNI=10||oid:0x710000000000a4|SAI_VNET_ATTR_VNI=20 -2022-11-17.15:01:04.285511|g|SAI_OBJECT_TYPE_VNET:oid:0x710000000000a3|SAI_VNET_ATTR_VNI=0 +2022-11-17.15:01:04.273869|R|SAI_OBJECT_TYPE_DASH_ACL_GROUP||oid:0x03008000000097||oid:0x03008000000098 +2022-11-17.15:01:04.274512|C|SAI_OBJECT_TYPE_DASH_ACL_GROUP||oid:0x03008000000099|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV4||oid:0x0300800000009a|SAI_DASH_ACL_GROUP_ATTR_IP_ADDR_FAMILY=SAI_IP_ADDR_FAMILY_IPV6 +2022-11-17.15:01:04.275089|R|SAI_OBJECT_TYPE_DASH_ACL_GROUP||oid:0x03008000000099||oid:0x0300800000009a +2022-11-17.15:01:04.275719|c|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x0300800000009b|NULL=NULL +2022-11-17.15:01:04.276197|c|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x0300800000009c|NULL=NULL +2022-11-17.15:01:04.276753|C|SAI_OBJECT_TYPE_DASH_ACL_RULE||oid:0x0400800000009d|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT_AND_CONTINUE|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x0300800000009b|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/24,100::ffff:ffff:ffff:ffff/16|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.2/16,100::ffff:ffff:ffff:fffe/16|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:170,187|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:50,60,70,80|SAI_DASH_ACL_RULE_ATTR_PRIORITY=1||oid:0x0400800000009e|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_DENY|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x0300800000009c|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/24,100::ffff:ffff:ffff:ffff/16|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.2/16,100::ffff:ffff:ffff:fffe/16|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:204,221|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:50,60,70,80|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_PRIORITY=2 +2022-11-17.15:01:04.277815|g|SAI_OBJECT_TYPE_DASH_ACL_RULE:oid:0x0400800000009d|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x0|SAI_DASH_ACL_RULE_ATTR_DIP=2:0.0.0.0/0,0.0.0.0/0|SAI_DASH_ACL_RULE_ATTR_SIP=2:0.0.0.0/0,0.0.0.0/0|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:0,0|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:0,0,0,0|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:0,0,0,0|SAI_DASH_ACL_RULE_ATTR_PRIORITY=0 +2022-11-17.15:01:04.278838|G|SAI_STATUS_SUCCESS|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT_AND_CONTINUE|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x0300800000009b|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/24,100::ffff:ffff:ffff:ffff/16|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.2/16,100::ffff:ffff:ffff:fffe/16|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:170,187|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:50,60,70,80|SAI_DASH_ACL_RULE_ATTR_PRIORITY=1 +2022-11-17.15:01:04.278886|g|SAI_OBJECT_TYPE_DASH_ACL_RULE:oid:0x0400800000009e|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x0|SAI_DASH_ACL_RULE_ATTR_DIP=2:0.0.0.0/0,0.0.0.0/0|SAI_DASH_ACL_RULE_ATTR_SIP=2:0.0.0.0/0,0.0.0.0/0|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:0,0|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:0,0,0,0|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:0,0,0,0|SAI_DASH_ACL_RULE_ATTR_PRIORITY=0 +2022-11-17.15:01:04.279797|G|SAI_STATUS_SUCCESS|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_DENY|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x0300800000009c|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/24,100::ffff:ffff:ffff:ffff/16|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.2/16,100::ffff:ffff:ffff:fffe/16|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:204,221|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:50,60,70,80|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_PRIORITY=2 +2022-11-17.15:01:04.279827|R|SAI_OBJECT_TYPE_DASH_ACL_RULE||oid:0x0400800000009d||oid:0x0400800000009e +2022-11-17.15:01:04.280381|r|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x0300800000009b +2022-11-17.15:01:04.280849|r|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x0300800000009c +2022-11-17.15:01:04.281342|c|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x0300800000009f|NULL=NULL +2022-11-17.15:01:04.281814|c|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x030080000000a0|NULL=NULL +2022-11-17.15:01:04.282359|C|SAI_OBJECT_TYPE_DASH_ACL_RULE||oid:0x040080000000a1|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_PERMIT_AND_CONTINUE|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x0300800000009f|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/24,100::ffff:ffff:ffff:ffff/16|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.2/16,100::ffff:ffff:ffff:fffe/16|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:170,187|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:50,60,70,80|SAI_DASH_ACL_RULE_ATTR_PRIORITY=1||oid:0x040080000000a2|SAI_DASH_ACL_RULE_ATTR_ACTION=SAI_DASH_ACL_RULE_ACTION_DENY|SAI_DASH_ACL_RULE_ATTR_DASH_ACL_GROUP_ID=oid:0x030080000000a0|SAI_DASH_ACL_RULE_ATTR_DIP=2:192.168.0.1/24,100::ffff:ffff:ffff:ffff/16|SAI_DASH_ACL_RULE_ATTR_SIP=2:192.168.0.2/16,100::ffff:ffff:ffff:fffe/16|SAI_DASH_ACL_RULE_ATTR_PROTOCOL=2:204,221|SAI_DASH_ACL_RULE_ATTR_SRC_PORT=2:50,60,70,80|SAI_DASH_ACL_RULE_ATTR_DST_PORT=2:10,20,30,40|SAI_DASH_ACL_RULE_ATTR_PRIORITY=2 +2022-11-17.15:01:04.283376|R|SAI_OBJECT_TYPE_DASH_ACL_RULE||oid:0x040080000000a1||oid:0x040080000000a2 +2022-11-17.15:01:04.283949|r|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x0300800000009f +2022-11-17.15:01:04.284384|r|SAI_OBJECT_TYPE_DASH_ACL_GROUP:oid:0x030080000000a0 +2022-11-17.15:01:04.284929|C|SAI_OBJECT_TYPE_VNET||oid:0x0e0080000000a3|SAI_VNET_ATTR_VNI=10||oid:0x0e0080000000a4|SAI_VNET_ATTR_VNI=20 +2022-11-17.15:01:04.285511|g|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000a3|SAI_VNET_ATTR_VNI=0 2022-11-17.15:01:04.285999|G|SAI_STATUS_SUCCESS|SAI_VNET_ATTR_VNI=10 -2022-11-17.15:01:04.286027|g|SAI_OBJECT_TYPE_VNET:oid:0x710000000000a4|SAI_VNET_ATTR_VNI=0 +2022-11-17.15:01:04.286027|g|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000a4|SAI_VNET_ATTR_VNI=0 2022-11-17.15:01:04.286418|G|SAI_STATUS_SUCCESS|SAI_VNET_ATTR_VNI=20 -2022-11-17.15:01:04.286444|R|SAI_OBJECT_TYPE_VNET||oid:0x710000000000a3||oid:0x710000000000a4 -2022-11-17.15:01:04.287168|C|SAI_OBJECT_TYPE_VNET||oid:0x710000000000a5|SAI_VNET_ATTR_VNI=10||oid:0x710000000000a6|SAI_VNET_ATTR_VNI=20 -2022-11-17.15:01:04.287755|R|SAI_OBJECT_TYPE_VNET||oid:0x710000000000a5||oid:0x710000000000a6 -2022-11-17.15:01:04.288377|c|SAI_OBJECT_TYPE_ENI:oid:0x6d0000000000a7|NULL=NULL -2022-11-17.15:01:04.288881|c|SAI_OBJECT_TYPE_ENI:oid:0x6d0000000000a8|NULL=NULL -2022-11-17.15:01:04.289355|C|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY||{"eni_id":"oid:0x6d0000000000a7","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP||{"eni_id":"oid:0x6d0000000000a8","priority":"2","sip":"192.168.0.2","sip_mask":"255.255.0.0","switch_id":"oid:0x21000000000000","vni":"11"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP_PA_VALIDATE -2022-11-17.15:01:04.289878|g|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY:{"eni_id":"oid:0x6d0000000000a7","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP +2022-11-17.15:01:04.286444|R|SAI_OBJECT_TYPE_VNET||oid:0x0e0080000000a3||oid:0x0e0080000000a4 +2022-11-17.15:01:04.287168|C|SAI_OBJECT_TYPE_VNET||oid:0x0e0080000000a5|SAI_VNET_ATTR_VNI=10||oid:0x0e0080000000a6|SAI_VNET_ATTR_VNI=20 +2022-11-17.15:01:04.287755|R|SAI_OBJECT_TYPE_VNET||oid:0x0e0080000000a5||oid:0x0e0080000000a6 +2022-11-17.15:01:04.288377|c|SAI_OBJECT_TYPE_ENI:oid:0x070080000000a7|NULL=NULL +2022-11-17.15:01:04.288881|c|SAI_OBJECT_TYPE_ENI:oid:0x070080000000a8|NULL=NULL +2022-11-17.15:01:04.289355|C|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY||{"eni_id":"oid:0x070080000000a7","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP||{"eni_id":"oid:0x070080000000a8","priority":"2","sip":"192.168.0.2","sip_mask":"255.255.0.0","switch_id":"oid:0x21000000000000","vni":"11"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP_PA_VALIDATE +2022-11-17.15:01:04.289878|g|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY:{"eni_id":"oid:0x070080000000a7","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP 2022-11-17.15:01:04.290355|G|SAI_STATUS_SUCCESS|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP -2022-11-17.15:01:04.290404|g|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY:{"eni_id":"oid:0x6d0000000000a8","priority":"2","sip":"192.168.0.2","sip_mask":"255.255.0.0","switch_id":"oid:0x21000000000000","vni":"11"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP +2022-11-17.15:01:04.290404|g|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY:{"eni_id":"oid:0x070080000000a8","priority":"2","sip":"192.168.0.2","sip_mask":"255.255.0.0","switch_id":"oid:0x21000000000000","vni":"11"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP 2022-11-17.15:01:04.290856|G|SAI_STATUS_SUCCESS|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP_PA_VALIDATE -2022-11-17.15:01:04.290905|R|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY||{"eni_id":"oid:0x6d0000000000a7","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"}||{"eni_id":"oid:0x6d0000000000a8","priority":"2","sip":"192.168.0.2","sip_mask":"255.255.0.0","switch_id":"oid:0x21000000000000","vni":"11"} -2022-11-17.15:01:04.291375|r|SAI_OBJECT_TYPE_ENI:oid:0x6d0000000000a7 -2022-11-17.15:01:04.291800|r|SAI_OBJECT_TYPE_ENI:oid:0x6d0000000000a8 -2022-11-17.15:01:04.292287|c|SAI_OBJECT_TYPE_ENI:oid:0x6d0000000000a9|NULL=NULL -2022-11-17.15:01:04.292853|c|SAI_OBJECT_TYPE_ENI:oid:0x6d0000000000aa|NULL=NULL -2022-11-17.15:01:04.293328|C|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY||{"eni_id":"oid:0x6d0000000000a9","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP||{"eni_id":"oid:0x6d0000000000aa","priority":"2","sip":"192.168.0.2","sip_mask":"255.255.0.0","switch_id":"oid:0x21000000000000","vni":"11"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP_PA_VALIDATE -2022-11-17.15:01:04.293821|R|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY||{"eni_id":"oid:0x6d0000000000a9","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"}||{"eni_id":"oid:0x6d0000000000aa","priority":"2","sip":"192.168.0.2","sip_mask":"255.255.0.0","switch_id":"oid:0x21000000000000","vni":"11"} -2022-11-17.15:01:04.294325|r|SAI_OBJECT_TYPE_ENI:oid:0x6d0000000000a9 -2022-11-17.15:01:04.294750|r|SAI_OBJECT_TYPE_ENI:oid:0x6d0000000000aa -2022-11-17.15:01:04.295244|c|SAI_OBJECT_TYPE_VNET:oid:0x710000000000ab|SAI_VNET_ATTR_VNI=10 -2022-11-17.15:01:04.295732|c|SAI_OBJECT_TYPE_VNET:oid:0x710000000000ac|SAI_VNET_ATTR_VNI=20 -2022-11-17.15:01:04.296208|C|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY||{"sip":"192.1.1.1","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x710000000000ab"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT||{"sip":"192.2.2.2","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x710000000000ac"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT -2022-11-17.15:01:04.296691|g|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY:{"sip":"192.1.1.1","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x710000000000ab"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT +2022-11-17.15:01:04.290905|R|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY||{"eni_id":"oid:0x070080000000a7","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"}||{"eni_id":"oid:0x070080000000a8","priority":"2","sip":"192.168.0.2","sip_mask":"255.255.0.0","switch_id":"oid:0x21000000000000","vni":"11"} +2022-11-17.15:01:04.291375|r|SAI_OBJECT_TYPE_ENI:oid:0x070080000000a7 +2022-11-17.15:01:04.291800|r|SAI_OBJECT_TYPE_ENI:oid:0x070080000000a8 +2022-11-17.15:01:04.292287|c|SAI_OBJECT_TYPE_ENI:oid:0x070080000000a9|NULL=NULL +2022-11-17.15:01:04.292853|c|SAI_OBJECT_TYPE_ENI:oid:0x070080000000aa|NULL=NULL +2022-11-17.15:01:04.293328|C|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY||{"eni_id":"oid:0x070080000000a9","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP||{"eni_id":"oid:0x070080000000aa","priority":"2","sip":"192.168.0.2","sip_mask":"255.255.0.0","switch_id":"oid:0x21000000000000","vni":"11"}|SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP_PA_VALIDATE +2022-11-17.15:01:04.293821|R|SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY||{"eni_id":"oid:0x070080000000a9","priority":"1","sip":"192.168.0.1","sip_mask":"255.255.255.0","switch_id":"oid:0x21000000000000","vni":"10"}||{"eni_id":"oid:0x070080000000aa","priority":"2","sip":"192.168.0.2","sip_mask":"255.255.0.0","switch_id":"oid:0x21000000000000","vni":"11"} +2022-11-17.15:01:04.294325|r|SAI_OBJECT_TYPE_ENI:oid:0x070080000000a9 +2022-11-17.15:01:04.294750|r|SAI_OBJECT_TYPE_ENI:oid:0x070080000000aa +2022-11-17.15:01:04.295244|c|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000ab|SAI_VNET_ATTR_VNI=10 +2022-11-17.15:01:04.295732|c|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000ac|SAI_VNET_ATTR_VNI=20 +2022-11-17.15:01:04.296208|C|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY||{"sip":"192.1.1.1","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x0e0080000000ab"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT||{"sip":"192.2.2.2","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x0e0080000000ac"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT +2022-11-17.15:01:04.296691|g|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY:{"sip":"192.1.1.1","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x0e0080000000ab"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT 2022-11-17.15:01:04.297159|G|SAI_STATUS_SUCCESS|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT -2022-11-17.15:01:04.297203|g|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY:{"sip":"192.2.2.2","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x710000000000ac"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT +2022-11-17.15:01:04.297203|g|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY:{"sip":"192.2.2.2","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x0e0080000000ac"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT 2022-11-17.15:01:04.297632|G|SAI_STATUS_SUCCESS|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT -2022-11-17.15:01:04.297675|R|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY||{"sip":"192.1.1.1","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x710000000000ab"}||{"sip":"192.2.2.2","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x710000000000ac"} -2022-11-17.15:01:04.298108|r|SAI_OBJECT_TYPE_VNET:oid:0x710000000000ab -2022-11-17.15:01:04.298604|r|SAI_OBJECT_TYPE_VNET:oid:0x710000000000ac -2022-11-17.15:01:04.299110|c|SAI_OBJECT_TYPE_VNET:oid:0x710000000000ad|SAI_VNET_ATTR_VNI=10 -2022-11-17.15:01:04.299600|c|SAI_OBJECT_TYPE_VNET:oid:0x710000000000ae|SAI_VNET_ATTR_VNI=20 -2022-11-17.15:01:04.300070|C|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY||{"sip":"192.1.1.1","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x710000000000ad"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT||{"sip":"192.2.2.2","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x710000000000ae"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT -2022-11-17.15:01:04.300539|R|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY||{"sip":"192.1.1.1","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x710000000000ad"}||{"sip":"192.2.2.2","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x710000000000ae"} -2022-11-17.15:01:04.301009|r|SAI_OBJECT_TYPE_VNET:oid:0x710000000000ad -2022-11-17.15:01:04.301434|r|SAI_OBJECT_TYPE_VNET:oid:0x710000000000ae -2022-11-17.15:01:04.301926|c|SAI_OBJECT_TYPE_VNET:oid:0x710000000000af|SAI_VNET_ATTR_VNI=101 -2022-11-17.15:01:04.302418|c|SAI_OBJECT_TYPE_VNET:oid:0x710000000000b0|SAI_VNET_ATTR_VNI=102 -2022-11-17.15:01:04.302911|c|SAI_OBJECT_TYPE_ENI:oid:0x6d0000000000b1|SAI_ENI_ATTR_VNET_ID=oid:0x710000000000af -2022-11-17.15:01:04.303405|c|SAI_OBJECT_TYPE_ENI:oid:0x6d0000000000b2|SAI_ENI_ATTR_VNET_ID=oid:0x710000000000b0 -2022-11-17.15:01:04.303897|C|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY||{"destination":"192.1.1.1/24","eni_id":"oid:0x6d0000000000b1","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x710000000000af||{"destination":"fe80::886a:feff:fe31:bfe0/32","eni_id":"oid:0x6d0000000000b2","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x710000000000b0 -2022-11-17.15:01:04.304429|g|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.1.1.1/24","eni_id":"oid:0x6d0000000000b1","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0 -2022-11-17.15:01:04.305140|G|SAI_STATUS_SUCCESS|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x710000000000af -2022-11-17.15:01:04.305194|g|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"fe80::886a:feff:fe31:bfe0/32","eni_id":"oid:0x6d0000000000b2","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0 -2022-11-17.15:01:04.305774|G|SAI_STATUS_SUCCESS|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x710000000000b0 -2022-11-17.15:01:04.305822|R|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY||{"destination":"192.1.1.1/24","eni_id":"oid:0x6d0000000000b1","switch_id":"oid:0x21000000000000"}||{"destination":"fe80::886a:feff:fe31:bfe0/32","eni_id":"oid:0x6d0000000000b2","switch_id":"oid:0x21000000000000"} -2022-11-17.15:01:04.306284|r|SAI_OBJECT_TYPE_ENI:oid:0x6d0000000000b1 -2022-11-17.15:01:04.306706|r|SAI_OBJECT_TYPE_ENI:oid:0x6d0000000000b2 -2022-11-17.15:01:04.307119|r|SAI_OBJECT_TYPE_VNET:oid:0x710000000000af -2022-11-17.15:01:04.307526|r|SAI_OBJECT_TYPE_VNET:oid:0x710000000000b0 -2022-11-17.15:01:04.308017|c|SAI_OBJECT_TYPE_VNET:oid:0x710000000000b3|SAI_VNET_ATTR_VNI=101 -2022-11-17.15:01:04.308505|c|SAI_OBJECT_TYPE_VNET:oid:0x710000000000b4|SAI_VNET_ATTR_VNI=102 -2022-11-17.15:01:04.309013|c|SAI_OBJECT_TYPE_ENI:oid:0x6d0000000000b5|SAI_ENI_ATTR_VNET_ID=oid:0x710000000000b3 -2022-11-17.15:01:04.309511|c|SAI_OBJECT_TYPE_ENI:oid:0x6d0000000000b6|SAI_ENI_ATTR_VNET_ID=oid:0x710000000000b4 -2022-11-17.15:01:04.310006|C|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY||{"destination":"192.1.1.1/24","eni_id":"oid:0x6d0000000000b5","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x710000000000b3||{"destination":"fe80::886a:feff:fe31:bfe0/32","eni_id":"oid:0x6d0000000000b6","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x710000000000b4 -2022-11-17.15:01:04.310513|R|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY||{"destination":"192.1.1.1/24","eni_id":"oid:0x6d0000000000b5","switch_id":"oid:0x21000000000000"}||{"destination":"fe80::886a:feff:fe31:bfe0/32","eni_id":"oid:0x6d0000000000b6","switch_id":"oid:0x21000000000000"} -2022-11-17.15:01:04.311049|r|SAI_OBJECT_TYPE_ENI:oid:0x6d0000000000b5 -2022-11-17.15:01:04.311483|r|SAI_OBJECT_TYPE_ENI:oid:0x6d0000000000b6 -2022-11-17.15:01:04.311891|r|SAI_OBJECT_TYPE_VNET:oid:0x710000000000b3 -2022-11-17.15:01:04.312295|r|SAI_OBJECT_TYPE_VNET:oid:0x710000000000b4 -2022-11-17.15:01:04.312788|c|SAI_OBJECT_TYPE_VNET:oid:0x710000000000b7|SAI_VNET_ATTR_VNI=10 -2022-11-17.15:01:04.313295|c|SAI_OBJECT_TYPE_VNET:oid:0x710000000000b8|SAI_VNET_ATTR_VNI=20 -2022-11-17.15:01:04.313783|C|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY||{"dip":"192.1.1.1","dst_vnet_id":"oid:0x710000000000b7","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=fe80::886a:feff:fe31:bfe1|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:11:22:33:44:55|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=true||{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x710000000000b8","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=192.1.1.2|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:11:22:33:44:56|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=false -2022-11-17.15:01:04.314326|g|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"192.1.1.1","dst_vnet_id":"oid:0x710000000000b7","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=0.0.0.0|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:00:00:00:00:00|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=false +2022-11-17.15:01:04.297675|R|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY||{"sip":"192.1.1.1","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x0e0080000000ab"}||{"sip":"192.2.2.2","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x0e0080000000ac"} +2022-11-17.15:01:04.298108|r|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000ab +2022-11-17.15:01:04.298604|r|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000ac +2022-11-17.15:01:04.299110|c|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000ad|SAI_VNET_ATTR_VNI=10 +2022-11-17.15:01:04.299600|c|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000ae|SAI_VNET_ATTR_VNI=20 +2022-11-17.15:01:04.300070|C|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY||{"sip":"192.1.1.1","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x0e0080000000ad"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT||{"sip":"192.2.2.2","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x0e0080000000ae"}|SAI_PA_VALIDATION_ENTRY_ATTR_ACTION=SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT +2022-11-17.15:01:04.300539|R|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY||{"sip":"192.1.1.1","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x0e0080000000ad"}||{"sip":"192.2.2.2","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x0e0080000000ae"} +2022-11-17.15:01:04.301009|r|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000ad +2022-11-17.15:01:04.301434|r|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000ae +2022-11-17.15:01:04.301926|c|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000af|SAI_VNET_ATTR_VNI=101 +2022-11-17.15:01:04.302418|c|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000b0|SAI_VNET_ATTR_VNI=102 +2022-11-17.15:01:04.302911|c|SAI_OBJECT_TYPE_ENI:oid:0x070080000000b1|SAI_ENI_ATTR_VNET_ID=oid:0x0e0080000000af +2022-11-17.15:01:04.303405|c|SAI_OBJECT_TYPE_ENI:oid:0x070080000000b2|SAI_ENI_ATTR_VNET_ID=oid:0x0e0080000000b0 +2022-11-17.15:01:04.303897|C|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY||{"destination":"192.1.1.1/24","eni_id":"oid:0x070080000000b1","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e0080000000af||{"destination":"fe80::886a:feff:fe31:bfe0/32","eni_id":"oid:0x070080000000b2","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e0080000000b0 +2022-11-17.15:01:04.304429|g|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.1.1.1/24","eni_id":"oid:0x070080000000b1","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0 +2022-11-17.15:01:04.305140|G|SAI_STATUS_SUCCESS|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e0080000000af +2022-11-17.15:01:04.305194|g|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"fe80::886a:feff:fe31:bfe0/32","eni_id":"oid:0x070080000000b2","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0 +2022-11-17.15:01:04.305774|G|SAI_STATUS_SUCCESS|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e0080000000b0 +2022-11-17.15:01:04.305822|R|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY||{"destination":"192.1.1.1/24","eni_id":"oid:0x070080000000b1","switch_id":"oid:0x21000000000000"}||{"destination":"fe80::886a:feff:fe31:bfe0/32","eni_id":"oid:0x070080000000b2","switch_id":"oid:0x21000000000000"} +2022-11-17.15:01:04.306284|r|SAI_OBJECT_TYPE_ENI:oid:0x070080000000b1 +2022-11-17.15:01:04.306706|r|SAI_OBJECT_TYPE_ENI:oid:0x070080000000b2 +2022-11-17.15:01:04.307119|r|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000af +2022-11-17.15:01:04.307526|r|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000b0 +2022-11-17.15:01:04.308017|c|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000b3|SAI_VNET_ATTR_VNI=101 +2022-11-17.15:01:04.308505|c|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000b4|SAI_VNET_ATTR_VNI=102 +2022-11-17.15:01:04.309013|c|SAI_OBJECT_TYPE_ENI:oid:0x070080000000b5|SAI_ENI_ATTR_VNET_ID=oid:0x0e0080000000b3 +2022-11-17.15:01:04.309511|c|SAI_OBJECT_TYPE_ENI:oid:0x070080000000b6|SAI_ENI_ATTR_VNET_ID=oid:0x0e0080000000b4 +2022-11-17.15:01:04.310006|C|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY||{"destination":"192.1.1.1/24","eni_id":"oid:0x070080000000b5","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e0080000000b3||{"destination":"fe80::886a:feff:fe31:bfe0/32","eni_id":"oid:0x070080000000b6","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e0080000000b4 +2022-11-17.15:01:04.310513|R|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY||{"destination":"192.1.1.1/24","eni_id":"oid:0x070080000000b5","switch_id":"oid:0x21000000000000"}||{"destination":"fe80::886a:feff:fe31:bfe0/32","eni_id":"oid:0x070080000000b6","switch_id":"oid:0x21000000000000"} +2022-11-17.15:01:04.311049|r|SAI_OBJECT_TYPE_ENI:oid:0x070080000000b5 +2022-11-17.15:01:04.311483|r|SAI_OBJECT_TYPE_ENI:oid:0x070080000000b6 +2022-11-17.15:01:04.311891|r|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000b3 +2022-11-17.15:01:04.312295|r|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000b4 +2022-11-17.15:01:04.312788|c|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000b7|SAI_VNET_ATTR_VNI=10 +2022-11-17.15:01:04.313295|c|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000b8|SAI_VNET_ATTR_VNI=20 +2022-11-17.15:01:04.313783|C|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY||{"dip":"192.1.1.1","dst_vnet_id":"oid:0x0e0080000000b7","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=fe80::886a:feff:fe31:bfe1|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:11:22:33:44:55|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=true||{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x0e0080000000b8","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=192.1.1.2|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:11:22:33:44:56|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=false +2022-11-17.15:01:04.314326|g|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"192.1.1.1","dst_vnet_id":"oid:0x0e0080000000b7","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=0.0.0.0|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:00:00:00:00:00|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=false 2022-11-17.15:01:04.314936|G|SAI_STATUS_SUCCESS|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=fe80::886a:feff:fe31:bfe1|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:11:22:33:44:55|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=true -2022-11-17.15:01:04.314997|g|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x710000000000b8","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=0.0.0.0|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:00:00:00:00:00|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=false +2022-11-17.15:01:04.314997|g|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x0e0080000000b8","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=0.0.0.0|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:00:00:00:00:00|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=false 2022-11-17.15:01:04.315593|G|SAI_STATUS_SUCCESS|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=192.1.1.2|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:11:22:33:44:56|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=false -2022-11-17.15:01:04.315635|R|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY||{"dip":"192.1.1.1","dst_vnet_id":"oid:0x710000000000b7","switch_id":"oid:0x21000000000000"}||{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x710000000000b8","switch_id":"oid:0x21000000000000"} -2022-11-17.15:01:04.316091|r|SAI_OBJECT_TYPE_VNET:oid:0x710000000000b7 -2022-11-17.15:01:04.316517|r|SAI_OBJECT_TYPE_VNET:oid:0x710000000000b8 -2022-11-17.15:01:04.317026|c|SAI_OBJECT_TYPE_VNET:oid:0x710000000000b9|SAI_VNET_ATTR_VNI=10 -2022-11-17.15:01:04.317585|c|SAI_OBJECT_TYPE_VNET:oid:0x710000000000ba|SAI_VNET_ATTR_VNI=20 -2022-11-17.15:01:04.318068|C|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY||{"dip":"192.1.1.1","dst_vnet_id":"oid:0x710000000000b9","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=fe80::886a:feff:fe31:bfe1|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:11:22:33:44:55|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=true||{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x710000000000ba","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=192.1.1.2|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:11:22:33:44:56|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=false -2022-11-17.15:01:04.318591|R|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY||{"dip":"192.1.1.1","dst_vnet_id":"oid:0x710000000000b9","switch_id":"oid:0x21000000000000"}||{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x710000000000ba","switch_id":"oid:0x21000000000000"} -2022-11-17.15:01:04.319049|r|SAI_OBJECT_TYPE_VNET:oid:0x710000000000b9 -2022-11-17.15:01:04.319471|r|SAI_OBJECT_TYPE_VNET:oid:0x710000000000ba +2022-11-17.15:01:04.315635|R|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY||{"dip":"192.1.1.1","dst_vnet_id":"oid:0x0e0080000000b7","switch_id":"oid:0x21000000000000"}||{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x0e0080000000b8","switch_id":"oid:0x21000000000000"} +2022-11-17.15:01:04.316091|r|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000b7 +2022-11-17.15:01:04.316517|r|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000b8 +2022-11-17.15:01:04.317026|c|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000b9|SAI_VNET_ATTR_VNI=10 +2022-11-17.15:01:04.317585|c|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000ba|SAI_VNET_ATTR_VNI=20 +2022-11-17.15:01:04.318068|C|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY||{"dip":"192.1.1.1","dst_vnet_id":"oid:0x0e0080000000b9","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=fe80::886a:feff:fe31:bfe1|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:11:22:33:44:55|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=true||{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x0e0080000000ba","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=192.1.1.2|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:11:22:33:44:56|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=false +2022-11-17.15:01:04.318591|R|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY||{"dip":"192.1.1.1","dst_vnet_id":"oid:0x0e0080000000b9","switch_id":"oid:0x21000000000000"}||{"dip":"fe80::886a:feff:fe31:bfe0","dst_vnet_id":"oid:0x0e0080000000ba","switch_id":"oid:0x21000000000000"} +2022-11-17.15:01:04.319049|r|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000b9 +2022-11-17.15:01:04.319471|r|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000ba diff --git a/tests/aspell.en.pws b/tests/aspell.en.pws index 86403451e..71268a351 100644 --- a/tests/aspell.en.pws +++ b/tests/aspell.en.pws @@ -475,3 +475,5 @@ ZMQ uncreated TWAMP saiproxy +submodule +Enqueue diff --git a/unittest/lib/TestSwitch.cpp b/unittest/lib/TestSwitch.cpp index 58a635b0a..d6ec9d9b3 100644 --- a/unittest/lib/TestSwitch.cpp +++ b/unittest/lib/TestSwitch.cpp @@ -26,7 +26,7 @@ TEST(Switch, updateNotifications) attrs[0].id = 10000; - EXPECT_THROW(s->updateNotifications(1, attrs), std::runtime_error); + EXPECT_NO_THROW(s->updateNotifications(1, attrs)); attrs[0].value.ptr = (void*)1; attrs[1].value.ptr = (void*)1; diff --git a/unittest/lib/TestVirtualObjectIdManager.cpp b/unittest/lib/TestVirtualObjectIdManager.cpp index 9832edf59..9edb676be 100644 --- a/unittest/lib/TestVirtualObjectIdManager.cpp +++ b/unittest/lib/TestVirtualObjectIdManager.cpp @@ -2,6 +2,10 @@ #include "meta/NumberOidIndexGenerator.h" +extern "C" { +#include "saimetadata.h" +} + #include "swss/logger.h" #include @@ -97,3 +101,14 @@ TEST(VirtualObjectIdManager, allocateNewObjectId) EXPECT_THROW(m->allocateNewObjectId(SAI_OBJECT_TYPE_PORT, 1), std::runtime_error); } + +TEST(VirtualObjectIdManager, extensions) +{ + auto m = createVirtualObjectIdManager(); + + auto sid = m->allocateNewSwitchObjectId(""); + + EXPECT_EQ(m->allocateNewObjectId((sai_object_type_t)SAI_OBJECT_TYPE_DASH_ACL_GROUP,sid), 0x0003008000000001); + + EXPECT_EQ(m->objectTypeQuery(0x0003008000000001), SAI_OBJECT_TYPE_DASH_ACL_GROUP); +} diff --git a/unittest/meta/Makefile.am b/unittest/meta/Makefile.am index f88d6ea1f..60f0cd508 100644 --- a/unittest/meta/Makefile.am +++ b/unittest/meta/Makefile.am @@ -6,7 +6,6 @@ LDADD_GTEST = -L/usr/src/gtest -lgtest -lgtest_main tests_SOURCES = \ main.cpp \ - ../../meta/DummySaiInterface.cpp \ ../../meta/MetaTestSaiInterface.cpp \ ../../lib/VirtualObjectIdManager.cpp \ ../../lib/SwitchConfig.cpp \ diff --git a/unittest/meta/TestDummySaiInterface.cpp b/unittest/meta/TestDummySaiInterface.cpp index c85294d57..4c8ca1ca5 100644 --- a/unittest/meta/TestDummySaiInterface.cpp +++ b/unittest/meta/TestDummySaiInterface.cpp @@ -1,5 +1,7 @@ #include "DummySaiInterface.h" +#include "swss/logger.h" + #include #include @@ -51,3 +53,234 @@ TEST(DummySaiInterface, create) EXPECT_NE(oid, SAI_NULL_OBJECT_ID); } + +TEST(DummySaiInterface, updateNotificationPointers) +{ + DummySaiInterface sai; + + sai.apiInitialize(0,0); + + for (uint32_t idx = 0 ; idx < sai_metadata_switch_notify_attr_count; idx++) + { + sai_attribute_t attr; + + attr.id = sai_metadata_switch_notify_attr[idx]->attrid; + attr.value.ptr = NULL; + + auto status = sai.set(SAI_OBJECT_TYPE_SWITCH, 0x0, &attr); + + EXPECT_EQ(status, SAI_STATUS_SUCCESS); + } +} + +TEST(DummySaiInterface, start_stop) +{ + DummySaiInterface sai; + + EXPECT_EQ(sai.start(), SAI_STATUS_FAILURE); // api not initialized + + EXPECT_EQ(sai.apiInitialize(0,0), SAI_STATUS_SUCCESS); + + EXPECT_EQ(sai.stop(), SAI_STATUS_SUCCESS); // not running + + EXPECT_EQ(sai.start(), SAI_STATUS_SUCCESS); // api initialized + + EXPECT_EQ(sai.start(), SAI_STATUS_SUCCESS); // 2nd time is ok to start, already running + + sleep(1); + + EXPECT_EQ(sai.stop(), SAI_STATUS_SUCCESS); +} + +static int ntfCounter = 0; + +static void onSwitchStateChange( + _In_ sai_object_id_t switch_id, + _In_ sai_switch_oper_status_t switch_oper_status) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received onSwitchStateChange"); + + ntfCounter++; +} + +static void onFdbEvent( + _In_ uint32_t count, + _In_ const sai_fdb_event_notification_data_t *data) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received onFdbEvent"); + + ntfCounter++; +} + +static void onPortStateChange( + _In_ uint32_t count, + _In_ const sai_port_oper_status_notification_t *data) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received onPortStateChange"); + + ntfCounter++; +} + +static void onSwitchShutdownRequest( + _In_ sai_object_id_t switch_id) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onSwitchShutdownRequest"); + + ntfCounter++; +} + +static void onNatEvent( + _In_ uint32_t count, + _In_ const sai_nat_event_notification_data_t *data) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onNatEvent"); + + ntfCounter++; +} + +static void onPortHostTxReady( + _In_ sai_object_id_t switch_id, + _In_ sai_object_id_t port_id, + _In_ sai_port_host_tx_ready_status_t host_tx_ready_status) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onPortHostTxReady"); + + ntfCounter++; +} + +static void onQueuePfcDeadlock( + _In_ uint32_t count, + _In_ const sai_queue_deadlock_notification_data_t *data) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onQueuePfcDeadlock"); + + ntfCounter++; +} + +static void onSwitchAsicSdkHealthEvent( + _In_ sai_object_id_t switch_id, + _In_ sai_switch_asic_sdk_health_severity_t severity, + _In_ sai_timespec_t timestamp, + _In_ sai_switch_asic_sdk_health_category_t category, + _In_ sai_switch_health_data_t data, + _In_ const sai_u8_list_t description) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onSwitchAsicSdkHealthEvent"); + + ntfCounter++; +} + +static void onBfdSessionStateChange( + _In_ uint32_t count, + _In_ const sai_bfd_session_state_notification_t *data) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onBfdSessionStateChange"); + + ntfCounter++; +} + +void onTwampSessionEvent( + _In_ uint32_t count, + _In_ const sai_twamp_session_event_notification_data_t *data) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onTwampSessionEvent"); + + ntfCounter++; +} + +TEST(DummySaiInterface, sendNotification) +{ + DummySaiInterface sai; + + ntfCounter = 0; + + // api not initialized + EXPECT_EQ(sai.enqueueNotificationToSend(SAI_SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY), SAI_STATUS_FAILURE); + + EXPECT_EQ(sai.apiInitialize(0,0), SAI_STATUS_SUCCESS); + + EXPECT_EQ(sai.enqueueNotificationToSend(SAI_SWITCH_ATTR_SWITCH_ASIC_SDK_HEALTH_EVENT_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(sai.enqueueNotificationToSend(SAI_SWITCH_ATTR_NAT_EVENT_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(sai.enqueueNotificationToSend(SAI_SWITCH_ATTR_PORT_HOST_TX_READY_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(sai.enqueueNotificationToSend(SAI_SWITCH_ATTR_QUEUE_PFC_DEADLOCK_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(sai.enqueueNotificationToSend(SAI_SWITCH_ATTR_BFD_SESSION_STATE_CHANGE_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(sai.enqueueNotificationToSend(SAI_SWITCH_ATTR_TWAMP_SESSION_EVENT_NOTIFY), SAI_STATUS_SUCCESS); + + EXPECT_EQ(sai.enqueueNotificationToSend(SAI_SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(sai.enqueueNotificationToSend(SAI_SWITCH_ATTR_FDB_EVENT_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(sai.enqueueNotificationToSend(SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(sai.enqueueNotificationToSend(SAI_SWITCH_ATTR_SHUTDOWN_REQUEST_NOTIFY), SAI_STATUS_SUCCESS); + + sai_attribute_t attr; + + sai_object_id_t switch_id = 0x1; + + attr.id = SAI_SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY; + attr.value.ptr = (void*)&onSwitchStateChange; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + attr.id = SAI_SWITCH_ATTR_FDB_EVENT_NOTIFY; + attr.value.ptr = (void*)&onFdbEvent; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + attr.id = SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY; + attr.value.ptr = (void*)&onPortStateChange; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + attr.id = SAI_SWITCH_ATTR_SHUTDOWN_REQUEST_NOTIFY; + attr.value.ptr = (void*)&onSwitchShutdownRequest; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + + attr.id = SAI_SWITCH_ATTR_SWITCH_ASIC_SDK_HEALTH_EVENT_NOTIFY; + attr.value.ptr = (void*)&onSwitchAsicSdkHealthEvent; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + attr.id = SAI_SWITCH_ATTR_NAT_EVENT_NOTIFY; + attr.value.ptr = (void*)&onNatEvent; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + attr.id = SAI_SWITCH_ATTR_PORT_HOST_TX_READY_NOTIFY; + attr.value.ptr = (void*)&onPortHostTxReady; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + attr.id = SAI_SWITCH_ATTR_QUEUE_PFC_DEADLOCK_NOTIFY; + attr.value.ptr = (void*)&onQueuePfcDeadlock; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + attr.id = SAI_SWITCH_ATTR_BFD_SESSION_STATE_CHANGE_NOTIFY; + attr.value.ptr = (void*)&onBfdSessionStateChange; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + attr.id = SAI_SWITCH_ATTR_TWAMP_SESSION_EVENT_NOTIFY; + attr.value.ptr = (void*)&onTwampSessionEvent; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + EXPECT_EQ(sai.start(), SAI_STATUS_SUCCESS); + + sleep(1); + + EXPECT_EQ(sai.stop(), SAI_STATUS_SUCCESS); + + EXPECT_EQ(ntfCounter, 4 + 6); +} diff --git a/unittest/meta/TestSaiSerialize.cpp b/unittest/meta/TestSaiSerialize.cpp index 563142075..b7e0c97d6 100644 --- a/unittest/meta/TestSaiSerialize.cpp +++ b/unittest/meta/TestSaiSerialize.cpp @@ -58,9 +58,9 @@ TEST(SaiSerialize, sai_serialize_object_meta_key) memset(&mk, 0, sizeof(mk)); - for (int32_t i = SAI_OBJECT_TYPE_NULL+1; i < SAI_OBJECT_TYPE_EXTENSIONS_MAX; i++) + for (size_t i = 1; i < sai_metadata_enum_sai_object_type_t.valuescount; ++i) { - mk.objecttype = (sai_object_type_t)i; + mk.objecttype = (sai_object_type_t)sai_metadata_enum_sai_object_type_t.values[i]; auto s = sai_serialize_object_meta_key(mk); diff --git a/unittest/proxylib/Makefile.am b/unittest/proxylib/Makefile.am index a7c5d8ac6..80024583d 100644 --- a/unittest/proxylib/Makefile.am +++ b/unittest/proxylib/Makefile.am @@ -5,7 +5,6 @@ bin_PROGRAMS = tests LDADD_GTEST = -L/usr/src/gtest -lgtest -lgtest_main tests_SOURCES = \ - ../../meta/DummySaiInterface.cpp \ main.cpp \ TestProxy.cpp \ TestSai.cpp diff --git a/unittest/proxylib/TestProxy.cpp b/unittest/proxylib/TestProxy.cpp index 00060593b..097b07a0c 100644 --- a/unittest/proxylib/TestProxy.cpp +++ b/unittest/proxylib/TestProxy.cpp @@ -23,3 +23,251 @@ TEST(Proxy, ctr) auto proxy = std::make_shared(dummy); } + +static void fun(std::shared_ptr proxy) +{ + SWSS_LOG_ENTER(); + + proxy->run(); +} + +static const char* profile_get_value( + _In_ sai_switch_profile_id_t profile_id, + _In_ const char* variable) +{ + SWSS_LOG_ENTER(); + + if (variable == NULL) + return NULL; + + return nullptr; +} + +static int profile_get_next_value( + _In_ sai_switch_profile_id_t profile_id, + _Out_ const char** variable, + _Out_ const char** value) +{ + SWSS_LOG_ENTER(); + + return 0; +} + +static sai_service_method_table_t test_services = { + profile_get_value, + profile_get_next_value +}; + +static int ntfCounter = 0; + +static void onSwitchStateChange( + _In_ sai_object_id_t switch_id, + _In_ sai_switch_oper_status_t switch_oper_status) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received onSwitchStateChange"); + + ntfCounter++; +} + +static void onFdbEvent( + _In_ uint32_t count, + _In_ const sai_fdb_event_notification_data_t *data) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received onFdbEvent"); + + ntfCounter++; +} + +static void onPortStateChange( + _In_ uint32_t count, + _In_ const sai_port_oper_status_notification_t *data) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received onPortStateChange"); + + ntfCounter++; +} + +static void onSwitchShutdownRequest( + _In_ sai_object_id_t switch_id) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onSwitchShutdownRequest"); + + ntfCounter++; +} + +static void onNatEvent( + _In_ uint32_t count, + _In_ const sai_nat_event_notification_data_t *data) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onNatEvent"); + + ntfCounter++; +} + +static void onPortHostTxReady( + _In_ sai_object_id_t switch_id, + _In_ sai_object_id_t port_id, + _In_ sai_port_host_tx_ready_status_t host_tx_ready_status) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onPortHostTxReady"); + + ntfCounter++; +} + +static void onQueuePfcDeadlock( + _In_ uint32_t count, + _In_ const sai_queue_deadlock_notification_data_t *data) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onQueuePfcDeadlock"); + + ntfCounter++; +} + +static void onSwitchAsicSdkHealthEvent( + _In_ sai_object_id_t switch_id, + _In_ sai_switch_asic_sdk_health_severity_t severity, + _In_ sai_timespec_t timestamp, + _In_ sai_switch_asic_sdk_health_category_t category, + _In_ sai_switch_health_data_t data, + _In_ const sai_u8_list_t description) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onSwitchAsicSdkHealthEvent"); + + ntfCounter++; +} + +static void onBfdSessionStateChange( + _In_ uint32_t count, + _In_ const sai_bfd_session_state_notification_t *data) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onBfdSessionStateChange"); + + ntfCounter++; +} + +static void onTwampSessionEvent( + _In_ uint32_t count, + _In_ const sai_twamp_session_event_notification_data_t *data) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onTwampSessionEvent"); + + ntfCounter++; +} + +TEST(Proxy, notifications) +{ + Sai sai; + + EXPECT_EQ(sai.apiInitialize(0, &test_services), SAI_STATUS_SUCCESS); + + std::shared_ptr dummy = std::make_shared(); + + auto proxy = std::make_shared(dummy); + + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_FDB_EVENT_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_SHUTDOWN_REQUEST_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_SWITCH_ASIC_SDK_HEALTH_EVENT_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_NAT_EVENT_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_PORT_HOST_TX_READY_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_QUEUE_PFC_DEADLOCK_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_BFD_SESSION_STATE_CHANGE_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_TWAMP_SESSION_EVENT_NOTIFY), SAI_STATUS_SUCCESS); + + auto thread = std::make_shared(fun,proxy); + + sai_object_id_t switch_id; + + sai_attribute_t attr; + + attr.id = SAI_SWITCH_ATTR_INIT_SWITCH; + attr.value.booldata = true; + + // create oid + auto status = sai.create( + SAI_OBJECT_TYPE_SWITCH, + &switch_id, + SAI_NULL_OBJECT_ID, // creating switch + 1, + &attr); + + EXPECT_EQ(status, SAI_STATUS_SUCCESS); + EXPECT_NE(switch_id, SAI_NULL_OBJECT_ID); + + // set notification pointer + + attr.id = SAI_SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY; + attr.value.ptr = (void*)&onSwitchStateChange; + EXPECT_EQ(sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr), SAI_STATUS_SUCCESS); + + attr.id = SAI_SWITCH_ATTR_FDB_EVENT_NOTIFY; + attr.value.ptr = (void*)&onFdbEvent; + EXPECT_EQ(sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr), SAI_STATUS_SUCCESS); + + attr.id = SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY; + attr.value.ptr = (void*)&onPortStateChange; + EXPECT_EQ(sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr), SAI_STATUS_SUCCESS); + + attr.id = SAI_SWITCH_ATTR_SHUTDOWN_REQUEST_NOTIFY; + attr.value.ptr = (void*)&onSwitchShutdownRequest; + EXPECT_EQ(sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr), SAI_STATUS_SUCCESS); + + attr.id = SAI_SWITCH_ATTR_SWITCH_ASIC_SDK_HEALTH_EVENT_NOTIFY; + attr.value.ptr = (void*)&onSwitchAsicSdkHealthEvent; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + attr.id = SAI_SWITCH_ATTR_NAT_EVENT_NOTIFY; + attr.value.ptr = (void*)&onNatEvent; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + attr.id = SAI_SWITCH_ATTR_PORT_HOST_TX_READY_NOTIFY; + attr.value.ptr = (void*)&onPortHostTxReady; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + attr.id = SAI_SWITCH_ATTR_QUEUE_PFC_DEADLOCK_NOTIFY; + attr.value.ptr = (void*)&onQueuePfcDeadlock; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + attr.id = SAI_SWITCH_ATTR_BFD_SESSION_STATE_CHANGE_NOTIFY; + attr.value.ptr = (void*)&onBfdSessionStateChange; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + attr.id = SAI_SWITCH_ATTR_TWAMP_SESSION_EVENT_NOTIFY; + attr.value.ptr = (void*)&onTwampSessionEvent; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + // dummy start sending notifications + EXPECT_EQ(dummy->start(), SAI_STATUS_SUCCESS); + + sleep(1); // give some time for proxy to receive notification + + // dummy stop sending notifications + EXPECT_EQ(dummy->stop(), SAI_STATUS_SUCCESS); + + EXPECT_EQ(proxy->getNotificationsSentCount(), 4+6); + + proxy->stop(); + + thread->join(); +} diff --git a/unittest/proxylib/TestSai.cpp b/unittest/proxylib/TestSai.cpp index 933cf2402..80f89b083 100644 --- a/unittest/proxylib/TestSai.cpp +++ b/unittest/proxylib/TestSai.cpp @@ -600,3 +600,220 @@ TEST(Sai, clearStats) thread->join(); } +static int ntfCounter = 0; + +static void onSwitchStateChange( + _In_ sai_object_id_t switch_id, + _In_ sai_switch_oper_status_t switch_oper_status) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received onSwitchStateChange"); + + ntfCounter++; +} + +static void onFdbEvent( + _In_ uint32_t count, + _In_ const sai_fdb_event_notification_data_t *data) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received onFdbEvent"); + + ntfCounter++; +} + +static void onPortStateChange( + _In_ uint32_t count, + _In_ const sai_port_oper_status_notification_t *data) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received onPortStateChange"); + + ntfCounter++; +} + +static void onSwitchShutdownRequest( + _In_ sai_object_id_t switch_id) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onSwitchShutdownRequest"); + + ntfCounter++; +} + +static void onNatEvent( + _In_ uint32_t count, + _In_ const sai_nat_event_notification_data_t *data) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onNatEvent"); + + ntfCounter++; +} + +static void onPortHostTxReady( + _In_ sai_object_id_t switch_id, + _In_ sai_object_id_t port_id, + _In_ sai_port_host_tx_ready_status_t host_tx_ready_status) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onPortHostTxReady"); + + ntfCounter++; +} + +static void onQueuePfcDeadlock( + _In_ uint32_t count, + _In_ const sai_queue_deadlock_notification_data_t *data) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onQueuePfcDeadlock"); + + ntfCounter++; +} + +static void onSwitchAsicSdkHealthEvent( + _In_ sai_object_id_t switch_id, + _In_ sai_switch_asic_sdk_health_severity_t severity, + _In_ sai_timespec_t timestamp, + _In_ sai_switch_asic_sdk_health_category_t category, + _In_ sai_switch_health_data_t data, + _In_ const sai_u8_list_t description) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onSwitchAsicSdkHealthEvent"); + + ntfCounter++; +} + +static void onBfdSessionStateChange( + _In_ uint32_t count, + _In_ const sai_bfd_session_state_notification_t *data) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onBfdSessionStateChange"); + + ntfCounter++; +} + +static void onTwampSessionEvent( + _In_ uint32_t count, + _In_ const sai_twamp_session_event_notification_data_t *data) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_NOTICE("received: onTwampSessionEvent"); + + ntfCounter++; +} + +TEST(Sai, handleNotification) +{ + Sai sai; + + EXPECT_EQ(sai.apiInitialize(0, &test_services), SAI_STATUS_SUCCESS); + + std::shared_ptr dummy = std::make_shared(); + + auto proxy = std::make_shared(dummy); + + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_FDB_EVENT_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_SHUTDOWN_REQUEST_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_SWITCH_ASIC_SDK_HEALTH_EVENT_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_NAT_EVENT_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_PORT_HOST_TX_READY_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_QUEUE_PFC_DEADLOCK_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_BFD_SESSION_STATE_CHANGE_NOTIFY), SAI_STATUS_SUCCESS); + EXPECT_EQ(dummy->enqueueNotificationToSend(SAI_SWITCH_ATTR_TWAMP_SESSION_EVENT_NOTIFY), SAI_STATUS_SUCCESS); + + auto thread = std::make_shared(fun, proxy); + + sai_object_id_t switch_id; + + sai_attribute_t attr; + + attr.id = SAI_SWITCH_ATTR_INIT_SWITCH; + attr.value.booldata = true; + + // create oid + auto status = sai.create( + SAI_OBJECT_TYPE_SWITCH, + &switch_id, + SAI_NULL_OBJECT_ID, // creating switch + 1, + &attr); + + EXPECT_EQ(status, SAI_STATUS_SUCCESS); + EXPECT_NE(switch_id, SAI_NULL_OBJECT_ID); + + // set notification pointer + + attr.id = SAI_SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY; + attr.value.ptr = (void*)&onSwitchStateChange; + EXPECT_EQ(sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr), SAI_STATUS_SUCCESS); + + attr.id = SAI_SWITCH_ATTR_FDB_EVENT_NOTIFY; + attr.value.ptr = (void*)&onFdbEvent; + EXPECT_EQ(sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr), SAI_STATUS_SUCCESS); + + attr.id = SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY; + attr.value.ptr = (void*)&onPortStateChange; + EXPECT_EQ(sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr), SAI_STATUS_SUCCESS); + + attr.id = SAI_SWITCH_ATTR_SHUTDOWN_REQUEST_NOTIFY; + attr.value.ptr = (void*)&onSwitchShutdownRequest; + EXPECT_EQ(sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr), SAI_STATUS_SUCCESS); + + attr.id = SAI_SWITCH_ATTR_SWITCH_ASIC_SDK_HEALTH_EVENT_NOTIFY; + attr.value.ptr = (void*)&onSwitchAsicSdkHealthEvent; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + attr.id = SAI_SWITCH_ATTR_NAT_EVENT_NOTIFY; + attr.value.ptr = (void*)&onNatEvent; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + attr.id = SAI_SWITCH_ATTR_PORT_HOST_TX_READY_NOTIFY; + attr.value.ptr = (void*)&onPortHostTxReady; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + attr.id = SAI_SWITCH_ATTR_QUEUE_PFC_DEADLOCK_NOTIFY; + attr.value.ptr = (void*)&onQueuePfcDeadlock; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + attr.id = SAI_SWITCH_ATTR_BFD_SESSION_STATE_CHANGE_NOTIFY; + attr.value.ptr = (void*)&onBfdSessionStateChange; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + attr.id = SAI_SWITCH_ATTR_TWAMP_SESSION_EVENT_NOTIFY; + attr.value.ptr = (void*)&onTwampSessionEvent; + sai.set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr); + + // dummy start sending notifications + EXPECT_EQ(dummy->start(), SAI_STATUS_SUCCESS); + + sleep(1); // give some time for proxy to receive notification + + // dummy stop sending notifications + EXPECT_EQ(dummy->stop(), SAI_STATUS_SUCCESS); + + EXPECT_EQ(proxy->getNotificationsSentCount(), 10); + + // important check, whether Sai class processed notifications correctly + EXPECT_EQ(ntfCounter, 10); + + proxy->stop(); + + thread->join(); +} + diff --git a/unittest/syncd/Makefile.am b/unittest/syncd/Makefile.am index 4c75d3672..b6c0cba94 100644 --- a/unittest/syncd/Makefile.am +++ b/unittest/syncd/Makefile.am @@ -5,7 +5,6 @@ bin_PROGRAMS = tests LDADD_GTEST = -L/usr/src/gtest -lgtest -lgtest_main tests_SOURCES = main.cpp \ - ../../meta/DummySaiInterface.cpp \ MockableSaiInterface.cpp \ MockHelper.cpp \ TestCommandLineOptions.cpp \ diff --git a/unittest/vslib/TestRealObjectIdManager.cpp b/unittest/vslib/TestRealObjectIdManager.cpp index 3bfef6e4b..77503dca2 100644 --- a/unittest/vslib/TestRealObjectIdManager.cpp +++ b/unittest/vslib/TestRealObjectIdManager.cpp @@ -1,5 +1,9 @@ #include "RealObjectIdManager.h" +extern "C" { +#include "saimetadata.h" +} + #include #include @@ -86,5 +90,21 @@ TEST(RealObjectIdManager, allocateNewObjectId) } +TEST(RealObjectIdManager, extensions) +{ + auto sc = std::make_shared(0,""); + + auto scc = std::make_shared(); + scc->insert(sc); + RealObjectIdManager mgr(0, scc); + + auto sid = mgr.allocateNewSwitchObjectId(""); + + EXPECT_NE(sid, SAI_NULL_OBJECT_ID); + + EXPECT_EQ(mgr.allocateNewObjectId((sai_object_type_t)SAI_OBJECT_TYPE_DASH_ACL_GROUP,sid), 0x0380000000); + + EXPECT_EQ(mgr.objectTypeQuery(0x0380000000), SAI_OBJECT_TYPE_DASH_ACL_GROUP); +} diff --git a/unittest/vslib/TestSwitch.cpp b/unittest/vslib/TestSwitch.cpp index 74e7acea8..17208ee6a 100644 --- a/unittest/vslib/TestSwitch.cpp +++ b/unittest/vslib/TestSwitch.cpp @@ -40,7 +40,7 @@ TEST(Switch, updateNotifications) attr.id = -1; - EXPECT_THROW(s.updateNotifications(1, &attr), std::runtime_error); + EXPECT_NO_THROW(s.updateNotifications(1, &attr)); attr.id = SAI_SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY; s.updateNotifications(1, &attr); diff --git a/vslib/RealObjectIdManager.cpp b/vslib/RealObjectIdManager.cpp index 71a4acfe2..52574eb26 100644 --- a/vslib/RealObjectIdManager.cpp +++ b/vslib/RealObjectIdManager.cpp @@ -26,7 +26,11 @@ static_assert(sizeof(sai_object_id_t) == sizeof(uint64_t), "SAI object ID size s #define SAI_VS_OBJECT_TYPE_MAX ( (1ULL << SAI_VS_OBJECT_TYPE_BITS_SIZE) - 1 ) #define SAI_VS_OBJECT_TYPE_MASK (SAI_VS_OBJECT_TYPE_MAX) -#define SAI_VS_OBJECT_INDEX_BITS_SIZE ( 32 ) +#define SAI_VS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE ( 1 ) +#define SAI_VS_OBJECT_TYPE_EXTENSIONS_FLAG_MAX ( (1ULL << SAI_VS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE) - 1 ) +#define SAI_VS_OBJECT_TYPE_EXTENSIONS_FLAG_MASK (SAI_VS_OBJECT_TYPE_EXTENSIONS_FLAG_MAX) + +#define SAI_VS_OBJECT_INDEX_BITS_SIZE ( 31 ) #define SAI_VS_OBJECT_INDEX_MAX ( (1ULL << SAI_VS_OBJECT_INDEX_BITS_SIZE) - 1 ) #define SAI_VS_OBJECT_INDEX_MASK (SAI_VS_OBJECT_INDEX_MAX) @@ -35,6 +39,7 @@ static_assert(sizeof(sai_object_id_t) == sizeof(uint64_t), "SAI object ID size s SAI_VS_GLOBAL_CONTEXT_BITS_SIZE + \ SAI_VS_SWITCH_INDEX_BITS_SIZE + \ SAI_VS_OBJECT_TYPE_BITS_SIZE + \ + SAI_VS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + \ SAI_VS_OBJECT_INDEX_BITS_SIZE ) static_assert(SAI_VS_OBJECT_ID_BITS_SIZE == SAI_OBJECT_ID_BITS_SIZE, "vs object id size must be equal to SAI object id size"); @@ -43,7 +48,9 @@ static_assert(SAI_VS_OBJECT_ID_BITS_SIZE == SAI_OBJECT_ID_BITS_SIZE, "vs object * This condition must be met, since we need to be able to encode SAI object * type in object id on defined number of bits. */ -static_assert(SAI_OBJECT_TYPE_EXTENSIONS_MAX < SAI_VS_OBJECT_TYPE_MAX, "vs max object type value must be greater than supported SAI max objeect type value"); +static_assert(SAI_OBJECT_TYPE_MAX < 256, "object type must be possible to encode on 1 byte"); +static_assert((SAI_OBJECT_TYPE_EXTENSIONS_RANGE_END - SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START) < 256, + "extensions object type must be possible to encode on 1 byte"); /* * Current OBJECT ID format: @@ -52,31 +59,43 @@ static_assert(SAI_OBJECT_TYPE_EXTENSIONS_MAX < SAI_VS_OBJECT_TYPE_MAX, "vs max o * bits 55..48 - global context * bits 47..40 - switch index * bits 49..32 - SAI object type - * bits 31..0 - object index + * bits 31..31 - object type extension flag + * bits 30..0 - object index * * So large number of bits is required, otherwise we would need to have map of * OID to some struct that will have all those values. But having all this * information in OID itself is more convenient. + * + * To be backward compatible with previous sairedis, we will still encode base + * object type on bit's 49..32, and extensions which will now start from range + * 0x20000000, will be encoded from 0x0, but extensions flag will be set to 1. + * + * For example SAI_OBJECT_TYPE_VIRTUAL_ROUTER oid will be encoded as 0x0300000001 + * SAI_OBJECT_TYPE_DASH_ACL_GROUP oid will be encoded as 0x000380000000 */ #define SAI_VS_GET_OBJECT_INDEX(oid) \ ( ((uint64_t)oid) & ( SAI_VS_OBJECT_INDEX_MASK ) ) +#define SAI_VS_GET_OBJECT_TYPE_EXTENSIONS_FLAG(oid) \ + ( (((uint64_t)oid) >> (SAI_VS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_VS_OBJECT_TYPE_EXTENSIONS_FLAG_MAX ) ) + #define SAI_VS_GET_OBJECT_TYPE(oid) \ - ( (((uint64_t)oid) >> ( SAI_VS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_VS_OBJECT_TYPE_MASK ) ) + ( (((uint64_t)oid) >> ( SAI_VS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_VS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_VS_OBJECT_TYPE_MASK ) ) #define SAI_VS_GET_SWITCH_INDEX(oid) \ - ( (((uint64_t)oid) >> ( SAI_VS_OBJECT_TYPE_BITS_SIZE + SAI_VS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_VS_SWITCH_INDEX_MASK ) ) + ( (((uint64_t)oid) >> ( SAI_VS_OBJECT_TYPE_BITS_SIZE + SAI_VS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_VS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_VS_SWITCH_INDEX_MASK ) ) #define SAI_VS_GET_GLOBAL_CONTEXT(oid) \ - ( (((uint64_t)oid) >> ( SAI_VS_SWITCH_INDEX_BITS_SIZE + SAI_VS_OBJECT_TYPE_BITS_SIZE + SAI_VS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_VS_GLOBAL_CONTEXT_MASK ) ) + ( (((uint64_t)oid) >> ( SAI_VS_SWITCH_INDEX_BITS_SIZE + SAI_VS_OBJECT_TYPE_BITS_SIZE + SAI_VS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_VS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_VS_GLOBAL_CONTEXT_MASK ) ) -#define SAI_VS_TEST_OID (0x0123456789abcdef) +#define SAI_VS_TEST_OID (0x01234567f9abcdef) static_assert(SAI_VS_GET_GLOBAL_CONTEXT(SAI_VS_TEST_OID) == 0x23, "test global context"); static_assert(SAI_VS_GET_SWITCH_INDEX(SAI_VS_TEST_OID) == 0x45, "test switch index"); static_assert(SAI_VS_GET_OBJECT_TYPE(SAI_VS_TEST_OID) == 0x67, "test object type"); -static_assert(SAI_VS_GET_OBJECT_INDEX(SAI_VS_TEST_OID) == 0x89abcdef, "test object index"); +static_assert(SAI_VS_GET_OBJECT_INDEX(SAI_VS_TEST_OID) == 0x79abcdef, "test object index"); +static_assert(SAI_VS_GET_OBJECT_TYPE_EXTENSIONS_FLAG(SAI_VS_TEST_OID) == 0x1, "test object type extensions flag"); using namespace saivs; @@ -144,9 +163,11 @@ sai_object_type_t RealObjectIdManager::saiObjectTypeQuery( return SAI_OBJECT_TYPE_NULL; } - sai_object_type_t objectType = (sai_object_type_t)(SAI_VS_GET_OBJECT_TYPE(objectId)); + sai_object_type_t objectType = SAI_VS_GET_OBJECT_TYPE_EXTENSIONS_FLAG(objectId) + ? (sai_object_type_t)(SAI_VS_GET_OBJECT_TYPE(objectId) + SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START) + : (sai_object_type_t)(SAI_VS_GET_OBJECT_TYPE(objectId)); - if (objectType == SAI_OBJECT_TYPE_NULL || objectType >= SAI_OBJECT_TYPE_EXTENSIONS_MAX) + if (sai_metadata_is_object_type_valid(objectType) == false) { SWSS_LOG_ERROR("invalid object id %s", sai_serialize_object_id(objectId).c_str()); @@ -201,7 +222,7 @@ sai_object_id_t RealObjectIdManager::allocateNewObjectId( { SWSS_LOG_ENTER(); - if ((objectType <= SAI_OBJECT_TYPE_NULL) || (objectType >= SAI_OBJECT_TYPE_EXTENSIONS_MAX)) + if (sai_metadata_is_object_type_valid(objectType) == false) { SWSS_LOG_THROW("invalid objct type: %d", objectType); } @@ -291,10 +312,22 @@ sai_object_id_t RealObjectIdManager::constructObjectId( { SWSS_LOG_ENTER(); + if (sai_metadata_is_object_type_valid(objectType) == false) + { + SWSS_LOG_THROW("FATAL: invalid object type (0x%x), logic error, this is a bug!", objectType); + } + + uint64_t extensionsFlag = (uint64_t)objectType >= SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START; + + objectType = extensionsFlag + ? (sai_object_type_t)(objectType - SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START) + : objectType; + return (sai_object_id_t)( - ((uint64_t)globalContext << ( SAI_VS_SWITCH_INDEX_BITS_SIZE + SAI_VS_OBJECT_TYPE_BITS_SIZE + SAI_VS_OBJECT_INDEX_BITS_SIZE )) | - ((uint64_t)switchIndex << ( SAI_VS_OBJECT_TYPE_BITS_SIZE + SAI_VS_OBJECT_INDEX_BITS_SIZE )) | - ((uint64_t)objectType << ( SAI_VS_OBJECT_INDEX_BITS_SIZE)) | + ((uint64_t)globalContext << ( SAI_VS_SWITCH_INDEX_BITS_SIZE + SAI_VS_OBJECT_TYPE_BITS_SIZE + SAI_VS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_VS_OBJECT_INDEX_BITS_SIZE )) | + ((uint64_t)switchIndex << ( SAI_VS_OBJECT_TYPE_BITS_SIZE + SAI_VS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_VS_OBJECT_INDEX_BITS_SIZE )) | + ((uint64_t)objectType << ( SAI_VS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_VS_OBJECT_INDEX_BITS_SIZE)) | + ((uint64_t)extensionsFlag << (SAI_VS_OBJECT_INDEX_BITS_SIZE)) | objectIndex); } @@ -339,7 +372,9 @@ sai_object_type_t RealObjectIdManager::objectTypeQuery( return SAI_OBJECT_TYPE_NULL; } - sai_object_type_t objectType = (sai_object_type_t)(SAI_VS_GET_OBJECT_TYPE(objectId)); + sai_object_type_t objectType = SAI_VS_GET_OBJECT_TYPE_EXTENSIONS_FLAG(objectId) + ? (sai_object_type_t)(SAI_VS_GET_OBJECT_TYPE(objectId) + SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START) + : (sai_object_type_t)(SAI_VS_GET_OBJECT_TYPE(objectId)); if (!sai_metadata_is_object_type_valid(objectType)) { diff --git a/vslib/SaiUnittests.cpp b/vslib/SaiUnittests.cpp index 6015a0d00..430623e8b 100644 --- a/vslib/SaiUnittests.cpp +++ b/vslib/SaiUnittests.cpp @@ -79,7 +79,7 @@ void Sai::channelOpSetReadOnlyAttribute( sai_object_type_t object_type; sai_deserialize_object_type(str_object_type, object_type); - if (object_type == SAI_OBJECT_TYPE_NULL || object_type >= SAI_OBJECT_TYPE_EXTENSIONS_MAX) + if (sai_metadata_is_object_type_valid(object_type) == false) { SWSS_LOG_ERROR("invalid object type: %d", object_type); return; diff --git a/vslib/Switch.cpp b/vslib/Switch.cpp index dc5165902..47151c1b6 100644 --- a/vslib/Switch.cpp +++ b/vslib/Switch.cpp @@ -61,69 +61,7 @@ void Switch::updateNotifications( SWSS_LOG_THROW("attrCount is %u, but attrList is nullptr", attrCount); } - for (uint32_t index = 0; index < attrCount; ++index) - { - auto &attr = attrList[index]; - - auto meta = sai_metadata_get_attr_metadata(SAI_OBJECT_TYPE_SWITCH, attr.id); - - if (meta == NULL) - SWSS_LOG_THROW("failed to find metadata for switch attr %d", attr.id); - - if (meta->attrvaluetype != SAI_ATTR_VALUE_TYPE_POINTER) - continue; - - switch (attr.id) - { - case SAI_SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY: - m_switchNotifications.on_switch_state_change = - (sai_switch_state_change_notification_fn)attr.value.ptr; - break; - - case SAI_SWITCH_ATTR_SWITCH_ASIC_SDK_HEALTH_EVENT_NOTIFY: - m_switchNotifications.on_switch_asic_sdk_health_event = - (sai_switch_asic_sdk_health_event_notification_fn)attr.value.ptr; - break; - - case SAI_SWITCH_ATTR_SHUTDOWN_REQUEST_NOTIFY: - m_switchNotifications.on_switch_shutdown_request = - (sai_switch_shutdown_request_notification_fn)attr.value.ptr; - break; - - case SAI_SWITCH_ATTR_FDB_EVENT_NOTIFY: - m_switchNotifications.on_fdb_event = - (sai_fdb_event_notification_fn)attr.value.ptr; - break; - - case SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY: - m_switchNotifications.on_port_state_change = - (sai_port_state_change_notification_fn)attr.value.ptr; - break; - - case SAI_SWITCH_ATTR_PORT_HOST_TX_READY_NOTIFY: - m_switchNotifications.on_port_host_tx_ready = - (sai_port_host_tx_ready_notification_fn)attr.value.ptr; - break; - - case SAI_SWITCH_ATTR_PACKET_EVENT_NOTIFY: - m_switchNotifications.on_packet_event = - (sai_packet_event_notification_fn)attr.value.ptr; - break; - - case SAI_SWITCH_ATTR_QUEUE_PFC_DEADLOCK_NOTIFY: - m_switchNotifications.on_queue_pfc_deadlock = - (sai_queue_pfc_deadlock_notification_fn)attr.value.ptr; - break; - - case SAI_SWITCH_ATTR_BFD_SESSION_STATE_CHANGE_NOTIFY: - m_switchNotifications.on_bfd_session_state_change = - (sai_bfd_session_state_change_notification_fn)attr.value.ptr; - break; - - default: - SWSS_LOG_THROW("pointer for %s is not handled, FIXME!", meta->attridname); - } - } + sai_metadata_update_switch_notification_pointers(&m_switchNotifications, attrCount, attrList); } const sai_switch_notifications_t& Switch::getSwitchNotifications() const diff --git a/vslib/SwitchState.cpp b/vslib/SwitchState.cpp index 1dfed4860..886c8a2f1 100644 --- a/vslib/SwitchState.cpp +++ b/vslib/SwitchState.cpp @@ -45,14 +45,14 @@ SwitchState::SwitchState( sai_serialize_object_type(RealObjectIdManager::objectTypeQuery(switch_id)).c_str()); } - for (int i = SAI_OBJECT_TYPE_NULL; i < (int)SAI_OBJECT_TYPE_EXTENSIONS_MAX; ++i) + for (size_t i = 0; i < sai_metadata_enum_sai_object_type_t.valuescount; ++i) { /* * Populate empty maps for each object to avoid checking if * objecttype exists. */ - m_objectHash[(sai_object_type_t)i] = { }; + m_objectHash[(sai_object_type_t)sai_metadata_enum_sai_object_type_t.values[i]] = { }; } /*