diff --git a/orchagent/Makefile.am b/orchagent/Makefile.am index 38713f7768fc..42577988e90d 100644 --- a/orchagent/Makefile.am +++ b/orchagent/Makefile.am @@ -10,7 +10,7 @@ else DBGFLAGS = -g -DNDEBUG endif -orchagent_SOURCES = main.cpp orchdaemon.cpp orch.cpp notifications.cpp routeorch.cpp neighorch.cpp intfsorch.cpp portsorch.cpp copporch.cpp tunneldecaporch.cpp qosorch.cpp bufferorch.cpp mirrororch.cpp fdborch.cpp aclorch.cpp +orchagent_SOURCES = main.cpp orchdaemon.cpp orch.cpp notifications.cpp routeorch.cpp neighorch.cpp intfsorch.cpp portsorch.cpp copporch.cpp tunneldecaporch.cpp qosorch.cpp bufferorch.cpp mirrororch.cpp fdborch.cpp aclorch.cpp saihelper.cpp orchagent_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI) orchagent_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI) diff --git a/orchagent/main.cpp b/orchagent/main.cpp index 913810b8f4d3..07355d52ac8d 100644 --- a/orchagent/main.cpp +++ b/orchagent/main.cpp @@ -13,42 +13,22 @@ extern "C" { #include #include +#include + #include "orchdaemon.h" -#include "logger.h" +#include "saihelper.h" using namespace std; using namespace swss; extern sai_switch_notification_t switch_notifications; -#define UNREFERENCED_PARAMETER(P) (P) +extern sai_switch_api_t *sai_switch_api; +extern sai_router_interface_api_t *sai_router_intfs_api; -/* Initialize all global api pointers */ -sai_switch_api_t* sai_switch_api; -sai_virtual_router_api_t* sai_virtual_router_api; -sai_port_api_t* sai_port_api; -sai_vlan_api_t* sai_vlan_api; -sai_router_interface_api_t* sai_router_intfs_api; -sai_hostif_api_t* sai_hostif_api; -sai_neighbor_api_t* sai_neighbor_api; -sai_next_hop_api_t* sai_next_hop_api; -sai_next_hop_group_api_t* sai_next_hop_group_api; -sai_route_api_t* sai_route_api; -sai_lag_api_t* sai_lag_api; -sai_policer_api_t* sai_policer_api; -sai_tunnel_api_t* sai_tunnel_api; -sai_queue_api_t* sai_queue_api; -sai_scheduler_api_t* sai_scheduler_api; -sai_scheduler_group_api_t* sai_scheduler_group_api; -sai_wred_api_t* sai_wred_api; -sai_qos_map_api_t* sai_qos_map_api; -sai_buffer_api_t* sai_buffer_api; -sai_acl_api_t* sai_acl_api; -sai_mirror_api_t* sai_mirror_api; -sai_fdb_api_t* sai_fdb_api; +#define UNREFERENCED_PARAMETER(P) (P) /* Global variables */ -map gProfileMap; sai_object_id_t gVirtualRouterId; sai_object_id_t gUnderlayIfId; MacAddress gMacAddress; @@ -64,108 +44,6 @@ string gRecordFile; /* Global database mutex */ mutex gDbMutex; -const char *test_profile_get_value ( - _In_ sai_switch_profile_id_t profile_id, - _In_ const char *variable) -{ - SWSS_LOG_ENTER(); - - auto it = gProfileMap.find(variable); - - if (it == gProfileMap.end()) - return NULL; - return it->second.c_str(); -} - -int test_profile_get_next_value ( - _In_ sai_switch_profile_id_t profile_id, - _Out_ const char **variable, - _Out_ const char **value) -{ - SWSS_LOG_ENTER(); - - static auto it = gProfileMap.begin(); - - if (value == NULL) - { - // Restarts enumeration - it = gProfileMap.begin(); - } - else if (it == gProfileMap.end()) - { - return -1; - } - else - { - *variable = it->first.c_str(); - *value = it->second.c_str(); - it++; - } - - if (it != gProfileMap.end()) - return 0; - else - return -1; -} - -const service_method_table_t test_services = { - test_profile_get_value, - test_profile_get_next_value -}; - -void initSaiApi() -{ - SWSS_LOG_ENTER(); - - sai_api_initialize(0, (service_method_table_t *)&test_services); - - sai_api_query(SAI_API_SWITCH, (void **)&sai_switch_api); - sai_api_query(SAI_API_VIRTUAL_ROUTER, (void **)&sai_virtual_router_api); - sai_api_query(SAI_API_PORT, (void **)&sai_port_api); - sai_api_query(SAI_API_FDB, (void **)&sai_fdb_api); - sai_api_query(SAI_API_VLAN, (void **)&sai_vlan_api); - sai_api_query(SAI_API_HOST_INTERFACE, (void **)&sai_hostif_api); - sai_api_query(SAI_API_MIRROR, (void **)&sai_mirror_api); - sai_api_query(SAI_API_ROUTER_INTERFACE, (void **)&sai_router_intfs_api); - sai_api_query(SAI_API_NEIGHBOR, (void **)&sai_neighbor_api); - sai_api_query(SAI_API_NEXT_HOP, (void **)&sai_next_hop_api); - sai_api_query(SAI_API_NEXT_HOP_GROUP, (void **)&sai_next_hop_group_api); - sai_api_query(SAI_API_ROUTE, (void **)&sai_route_api); - sai_api_query(SAI_API_LAG, (void **)&sai_lag_api); - sai_api_query(SAI_API_POLICER, (void **)&sai_policer_api); - sai_api_query(SAI_API_TUNNEL, (void **)&sai_tunnel_api); - sai_api_query(SAI_API_QUEUE, (void **)&sai_queue_api); - sai_api_query(SAI_API_SCHEDULER, (void **)&sai_scheduler_api); - sai_api_query(SAI_API_WRED, (void **)&sai_wred_api); - sai_api_query(SAI_API_QOS_MAPS, (void **)&sai_qos_map_api); - sai_api_query(SAI_API_BUFFERS, (void **)&sai_buffer_api); - sai_api_query(SAI_API_SCHEDULER_GROUP, (void **)&sai_scheduler_group_api); - sai_api_query(SAI_API_ACL, (void **)&sai_acl_api); - - sai_log_set(SAI_API_SWITCH, SAI_LOG_NOTICE); - sai_log_set(SAI_API_VIRTUAL_ROUTER, SAI_LOG_NOTICE); - sai_log_set(SAI_API_PORT, SAI_LOG_NOTICE); - sai_log_set(SAI_API_FDB, SAI_LOG_NOTICE); - sai_log_set(SAI_API_VLAN, SAI_LOG_NOTICE); - sai_log_set(SAI_API_HOST_INTERFACE, SAI_LOG_NOTICE); - sai_log_set(SAI_API_MIRROR, SAI_LOG_NOTICE); - sai_log_set(SAI_API_ROUTER_INTERFACE, SAI_LOG_NOTICE); - sai_log_set(SAI_API_NEIGHBOR, SAI_LOG_NOTICE); - sai_log_set(SAI_API_NEXT_HOP, SAI_LOG_NOTICE); - sai_log_set(SAI_API_NEXT_HOP_GROUP, SAI_LOG_NOTICE); - sai_log_set(SAI_API_ROUTE, SAI_LOG_NOTICE); - sai_log_set(SAI_API_LAG, SAI_LOG_NOTICE); - sai_log_set(SAI_API_POLICER, SAI_LOG_NOTICE); - sai_log_set(SAI_API_TUNNEL, SAI_LOG_NOTICE); - sai_log_set(SAI_API_QUEUE, SAI_LOG_NOTICE); - sai_log_set(SAI_API_SCHEDULER, SAI_LOG_NOTICE); - sai_log_set(SAI_API_WRED, SAI_LOG_NOTICE); - sai_log_set(SAI_API_QOS_MAPS, SAI_LOG_NOTICE); - sai_log_set(SAI_API_BUFFERS, SAI_LOG_NOTICE); - sai_log_set(SAI_API_SCHEDULER_GROUP, SAI_LOG_NOTICE); - sai_log_set(SAI_API_ACL, SAI_LOG_NOTICE); -} - string getTimestamp() { char buffer[64]; diff --git a/orchagent/saihelper.cpp b/orchagent/saihelper.cpp new file mode 100644 index 000000000000..3e39dc3a0ad6 --- /dev/null +++ b/orchagent/saihelper.cpp @@ -0,0 +1,139 @@ +extern "C" { +#include "sai.h" +#include "saistatus.h" +} + +#include +#include +#include "saihelper.h" + +using namespace std; +using namespace swss; + +/* Initialize all global api pointers */ +sai_switch_api_t* sai_switch_api; +sai_virtual_router_api_t* sai_virtual_router_api; +sai_port_api_t* sai_port_api; +sai_vlan_api_t* sai_vlan_api; +sai_router_interface_api_t* sai_router_intfs_api; +sai_hostif_api_t* sai_hostif_api; +sai_neighbor_api_t* sai_neighbor_api; +sai_next_hop_api_t* sai_next_hop_api; +sai_next_hop_group_api_t* sai_next_hop_group_api; +sai_route_api_t* sai_route_api; +sai_lag_api_t* sai_lag_api; +sai_policer_api_t* sai_policer_api; +sai_tunnel_api_t* sai_tunnel_api; +sai_queue_api_t* sai_queue_api; +sai_scheduler_api_t* sai_scheduler_api; +sai_scheduler_group_api_t* sai_scheduler_group_api; +sai_wred_api_t* sai_wred_api; +sai_qos_map_api_t* sai_qos_map_api; +sai_buffer_api_t* sai_buffer_api; +sai_acl_api_t* sai_acl_api; +sai_mirror_api_t* sai_mirror_api; +sai_fdb_api_t* sai_fdb_api; + +map gProfileMap; + +const char *test_profile_get_value ( + _In_ sai_switch_profile_id_t profile_id, + _In_ const char *variable) +{ + SWSS_LOG_ENTER(); + + auto it = gProfileMap.find(variable); + + if (it == gProfileMap.end()) + return NULL; + return it->second.c_str(); +} + +int test_profile_get_next_value ( + _In_ sai_switch_profile_id_t profile_id, + _Out_ const char **variable, + _Out_ const char **value) +{ + SWSS_LOG_ENTER(); + + static auto it = gProfileMap.begin(); + + if (value == NULL) + { + // Restarts enumeration + it = gProfileMap.begin(); + } + else if (it == gProfileMap.end()) + { + return -1; + } + else + { + *variable = it->first.c_str(); + *value = it->second.c_str(); + it++; + } + + if (it != gProfileMap.end()) + return 0; + else + return -1; +} + +const service_method_table_t test_services = { + test_profile_get_value, + test_profile_get_next_value +}; + +void initSaiApi() +{ + SWSS_LOG_ENTER(); + + sai_api_initialize(0, (service_method_table_t *)&test_services); + + sai_api_query(SAI_API_SWITCH, (void **)&sai_switch_api); + sai_api_query(SAI_API_VIRTUAL_ROUTER, (void **)&sai_virtual_router_api); + sai_api_query(SAI_API_PORT, (void **)&sai_port_api); + sai_api_query(SAI_API_FDB, (void **)&sai_fdb_api); + sai_api_query(SAI_API_VLAN, (void **)&sai_vlan_api); + sai_api_query(SAI_API_HOST_INTERFACE, (void **)&sai_hostif_api); + sai_api_query(SAI_API_MIRROR, (void **)&sai_mirror_api); + sai_api_query(SAI_API_ROUTER_INTERFACE, (void **)&sai_router_intfs_api); + sai_api_query(SAI_API_NEIGHBOR, (void **)&sai_neighbor_api); + sai_api_query(SAI_API_NEXT_HOP, (void **)&sai_next_hop_api); + sai_api_query(SAI_API_NEXT_HOP_GROUP, (void **)&sai_next_hop_group_api); + sai_api_query(SAI_API_ROUTE, (void **)&sai_route_api); + sai_api_query(SAI_API_LAG, (void **)&sai_lag_api); + sai_api_query(SAI_API_POLICER, (void **)&sai_policer_api); + sai_api_query(SAI_API_TUNNEL, (void **)&sai_tunnel_api); + sai_api_query(SAI_API_QUEUE, (void **)&sai_queue_api); + sai_api_query(SAI_API_SCHEDULER, (void **)&sai_scheduler_api); + sai_api_query(SAI_API_WRED, (void **)&sai_wred_api); + sai_api_query(SAI_API_QOS_MAPS, (void **)&sai_qos_map_api); + sai_api_query(SAI_API_BUFFERS, (void **)&sai_buffer_api); + sai_api_query(SAI_API_SCHEDULER_GROUP, (void **)&sai_scheduler_group_api); + sai_api_query(SAI_API_ACL, (void **)&sai_acl_api); + + sai_log_set(SAI_API_SWITCH, SAI_LOG_NOTICE); + sai_log_set(SAI_API_VIRTUAL_ROUTER, SAI_LOG_NOTICE); + sai_log_set(SAI_API_PORT, SAI_LOG_NOTICE); + sai_log_set(SAI_API_FDB, SAI_LOG_NOTICE); + sai_log_set(SAI_API_VLAN, SAI_LOG_NOTICE); + sai_log_set(SAI_API_HOST_INTERFACE, SAI_LOG_NOTICE); + sai_log_set(SAI_API_MIRROR, SAI_LOG_NOTICE); + sai_log_set(SAI_API_ROUTER_INTERFACE, SAI_LOG_NOTICE); + sai_log_set(SAI_API_NEIGHBOR, SAI_LOG_NOTICE); + sai_log_set(SAI_API_NEXT_HOP, SAI_LOG_NOTICE); + sai_log_set(SAI_API_NEXT_HOP_GROUP, SAI_LOG_NOTICE); + sai_log_set(SAI_API_ROUTE, SAI_LOG_NOTICE); + sai_log_set(SAI_API_LAG, SAI_LOG_NOTICE); + sai_log_set(SAI_API_POLICER, SAI_LOG_NOTICE); + sai_log_set(SAI_API_TUNNEL, SAI_LOG_NOTICE); + sai_log_set(SAI_API_QUEUE, SAI_LOG_NOTICE); + sai_log_set(SAI_API_SCHEDULER, SAI_LOG_NOTICE); + sai_log_set(SAI_API_WRED, SAI_LOG_NOTICE); + sai_log_set(SAI_API_QOS_MAPS, SAI_LOG_NOTICE); + sai_log_set(SAI_API_BUFFERS, SAI_LOG_NOTICE); + sai_log_set(SAI_API_SCHEDULER_GROUP, SAI_LOG_NOTICE); + sai_log_set(SAI_API_ACL, SAI_LOG_NOTICE); +} diff --git a/orchagent/saihelper.h b/orchagent/saihelper.h new file mode 100644 index 000000000000..ead18c69ced6 --- /dev/null +++ b/orchagent/saihelper.h @@ -0,0 +1,3 @@ +#pragma once + +void initSaiApi(); \ No newline at end of file