Skip to content

Commit d257ef0

Browse files
author
Shuotian Cheng
authored
[orchagent]: Separate global SAI API pointers and initialization function (sonic-net#237)
- To lighten the weight of main.cpp and make it easier for future refactor
1 parent d246efe commit d257ef0

File tree

4 files changed

+149
-129
lines changed

4 files changed

+149
-129
lines changed

orchagent/Makefile.am

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ else
1010
DBGFLAGS = -g -DNDEBUG
1111
endif
1212

13-
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
13+
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
1414

1515
orchagent_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
1616
orchagent_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)

orchagent/main.cpp

+6-128
Original file line numberDiff line numberDiff line change
@@ -13,42 +13,22 @@ extern "C" {
1313
#include <unistd.h>
1414

1515
#include <sairedis.h>
16+
#include <logger.h>
17+
1618
#include "orchdaemon.h"
17-
#include "logger.h"
19+
#include "saihelper.h"
1820

1921
using namespace std;
2022
using namespace swss;
2123

2224
extern sai_switch_notification_t switch_notifications;
2325

24-
#define UNREFERENCED_PARAMETER(P) (P)
26+
extern sai_switch_api_t *sai_switch_api;
27+
extern sai_router_interface_api_t *sai_router_intfs_api;
2528

26-
/* Initialize all global api pointers */
27-
sai_switch_api_t* sai_switch_api;
28-
sai_virtual_router_api_t* sai_virtual_router_api;
29-
sai_port_api_t* sai_port_api;
30-
sai_vlan_api_t* sai_vlan_api;
31-
sai_router_interface_api_t* sai_router_intfs_api;
32-
sai_hostif_api_t* sai_hostif_api;
33-
sai_neighbor_api_t* sai_neighbor_api;
34-
sai_next_hop_api_t* sai_next_hop_api;
35-
sai_next_hop_group_api_t* sai_next_hop_group_api;
36-
sai_route_api_t* sai_route_api;
37-
sai_lag_api_t* sai_lag_api;
38-
sai_policer_api_t* sai_policer_api;
39-
sai_tunnel_api_t* sai_tunnel_api;
40-
sai_queue_api_t* sai_queue_api;
41-
sai_scheduler_api_t* sai_scheduler_api;
42-
sai_scheduler_group_api_t* sai_scheduler_group_api;
43-
sai_wred_api_t* sai_wred_api;
44-
sai_qos_map_api_t* sai_qos_map_api;
45-
sai_buffer_api_t* sai_buffer_api;
46-
sai_acl_api_t* sai_acl_api;
47-
sai_mirror_api_t* sai_mirror_api;
48-
sai_fdb_api_t* sai_fdb_api;
29+
#define UNREFERENCED_PARAMETER(P) (P)
4930

5031
/* Global variables */
51-
map<string, string> gProfileMap;
5232
sai_object_id_t gVirtualRouterId;
5333
sai_object_id_t gUnderlayIfId;
5434
MacAddress gMacAddress;
@@ -64,108 +44,6 @@ string gRecordFile;
6444
/* Global database mutex */
6545
mutex gDbMutex;
6646

67-
const char *test_profile_get_value (
68-
_In_ sai_switch_profile_id_t profile_id,
69-
_In_ const char *variable)
70-
{
71-
SWSS_LOG_ENTER();
72-
73-
auto it = gProfileMap.find(variable);
74-
75-
if (it == gProfileMap.end())
76-
return NULL;
77-
return it->second.c_str();
78-
}
79-
80-
int test_profile_get_next_value (
81-
_In_ sai_switch_profile_id_t profile_id,
82-
_Out_ const char **variable,
83-
_Out_ const char **value)
84-
{
85-
SWSS_LOG_ENTER();
86-
87-
static auto it = gProfileMap.begin();
88-
89-
if (value == NULL)
90-
{
91-
// Restarts enumeration
92-
it = gProfileMap.begin();
93-
}
94-
else if (it == gProfileMap.end())
95-
{
96-
return -1;
97-
}
98-
else
99-
{
100-
*variable = it->first.c_str();
101-
*value = it->second.c_str();
102-
it++;
103-
}
104-
105-
if (it != gProfileMap.end())
106-
return 0;
107-
else
108-
return -1;
109-
}
110-
111-
const service_method_table_t test_services = {
112-
test_profile_get_value,
113-
test_profile_get_next_value
114-
};
115-
116-
void initSaiApi()
117-
{
118-
SWSS_LOG_ENTER();
119-
120-
sai_api_initialize(0, (service_method_table_t *)&test_services);
121-
122-
sai_api_query(SAI_API_SWITCH, (void **)&sai_switch_api);
123-
sai_api_query(SAI_API_VIRTUAL_ROUTER, (void **)&sai_virtual_router_api);
124-
sai_api_query(SAI_API_PORT, (void **)&sai_port_api);
125-
sai_api_query(SAI_API_FDB, (void **)&sai_fdb_api);
126-
sai_api_query(SAI_API_VLAN, (void **)&sai_vlan_api);
127-
sai_api_query(SAI_API_HOST_INTERFACE, (void **)&sai_hostif_api);
128-
sai_api_query(SAI_API_MIRROR, (void **)&sai_mirror_api);
129-
sai_api_query(SAI_API_ROUTER_INTERFACE, (void **)&sai_router_intfs_api);
130-
sai_api_query(SAI_API_NEIGHBOR, (void **)&sai_neighbor_api);
131-
sai_api_query(SAI_API_NEXT_HOP, (void **)&sai_next_hop_api);
132-
sai_api_query(SAI_API_NEXT_HOP_GROUP, (void **)&sai_next_hop_group_api);
133-
sai_api_query(SAI_API_ROUTE, (void **)&sai_route_api);
134-
sai_api_query(SAI_API_LAG, (void **)&sai_lag_api);
135-
sai_api_query(SAI_API_POLICER, (void **)&sai_policer_api);
136-
sai_api_query(SAI_API_TUNNEL, (void **)&sai_tunnel_api);
137-
sai_api_query(SAI_API_QUEUE, (void **)&sai_queue_api);
138-
sai_api_query(SAI_API_SCHEDULER, (void **)&sai_scheduler_api);
139-
sai_api_query(SAI_API_WRED, (void **)&sai_wred_api);
140-
sai_api_query(SAI_API_QOS_MAPS, (void **)&sai_qos_map_api);
141-
sai_api_query(SAI_API_BUFFERS, (void **)&sai_buffer_api);
142-
sai_api_query(SAI_API_SCHEDULER_GROUP, (void **)&sai_scheduler_group_api);
143-
sai_api_query(SAI_API_ACL, (void **)&sai_acl_api);
144-
145-
sai_log_set(SAI_API_SWITCH, SAI_LOG_NOTICE);
146-
sai_log_set(SAI_API_VIRTUAL_ROUTER, SAI_LOG_NOTICE);
147-
sai_log_set(SAI_API_PORT, SAI_LOG_NOTICE);
148-
sai_log_set(SAI_API_FDB, SAI_LOG_NOTICE);
149-
sai_log_set(SAI_API_VLAN, SAI_LOG_NOTICE);
150-
sai_log_set(SAI_API_HOST_INTERFACE, SAI_LOG_NOTICE);
151-
sai_log_set(SAI_API_MIRROR, SAI_LOG_NOTICE);
152-
sai_log_set(SAI_API_ROUTER_INTERFACE, SAI_LOG_NOTICE);
153-
sai_log_set(SAI_API_NEIGHBOR, SAI_LOG_NOTICE);
154-
sai_log_set(SAI_API_NEXT_HOP, SAI_LOG_NOTICE);
155-
sai_log_set(SAI_API_NEXT_HOP_GROUP, SAI_LOG_NOTICE);
156-
sai_log_set(SAI_API_ROUTE, SAI_LOG_NOTICE);
157-
sai_log_set(SAI_API_LAG, SAI_LOG_NOTICE);
158-
sai_log_set(SAI_API_POLICER, SAI_LOG_NOTICE);
159-
sai_log_set(SAI_API_TUNNEL, SAI_LOG_NOTICE);
160-
sai_log_set(SAI_API_QUEUE, SAI_LOG_NOTICE);
161-
sai_log_set(SAI_API_SCHEDULER, SAI_LOG_NOTICE);
162-
sai_log_set(SAI_API_WRED, SAI_LOG_NOTICE);
163-
sai_log_set(SAI_API_QOS_MAPS, SAI_LOG_NOTICE);
164-
sai_log_set(SAI_API_BUFFERS, SAI_LOG_NOTICE);
165-
sai_log_set(SAI_API_SCHEDULER_GROUP, SAI_LOG_NOTICE);
166-
sai_log_set(SAI_API_ACL, SAI_LOG_NOTICE);
167-
}
168-
16947
string getTimestamp()
17048
{
17149
char buffer[64];

orchagent/saihelper.cpp

+139
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
extern "C" {
2+
#include "sai.h"
3+
#include "saistatus.h"
4+
}
5+
6+
#include <map>
7+
#include <logger.h>
8+
#include "saihelper.h"
9+
10+
using namespace std;
11+
using namespace swss;
12+
13+
/* Initialize all global api pointers */
14+
sai_switch_api_t* sai_switch_api;
15+
sai_virtual_router_api_t* sai_virtual_router_api;
16+
sai_port_api_t* sai_port_api;
17+
sai_vlan_api_t* sai_vlan_api;
18+
sai_router_interface_api_t* sai_router_intfs_api;
19+
sai_hostif_api_t* sai_hostif_api;
20+
sai_neighbor_api_t* sai_neighbor_api;
21+
sai_next_hop_api_t* sai_next_hop_api;
22+
sai_next_hop_group_api_t* sai_next_hop_group_api;
23+
sai_route_api_t* sai_route_api;
24+
sai_lag_api_t* sai_lag_api;
25+
sai_policer_api_t* sai_policer_api;
26+
sai_tunnel_api_t* sai_tunnel_api;
27+
sai_queue_api_t* sai_queue_api;
28+
sai_scheduler_api_t* sai_scheduler_api;
29+
sai_scheduler_group_api_t* sai_scheduler_group_api;
30+
sai_wred_api_t* sai_wred_api;
31+
sai_qos_map_api_t* sai_qos_map_api;
32+
sai_buffer_api_t* sai_buffer_api;
33+
sai_acl_api_t* sai_acl_api;
34+
sai_mirror_api_t* sai_mirror_api;
35+
sai_fdb_api_t* sai_fdb_api;
36+
37+
map<string, string> gProfileMap;
38+
39+
const char *test_profile_get_value (
40+
_In_ sai_switch_profile_id_t profile_id,
41+
_In_ const char *variable)
42+
{
43+
SWSS_LOG_ENTER();
44+
45+
auto it = gProfileMap.find(variable);
46+
47+
if (it == gProfileMap.end())
48+
return NULL;
49+
return it->second.c_str();
50+
}
51+
52+
int test_profile_get_next_value (
53+
_In_ sai_switch_profile_id_t profile_id,
54+
_Out_ const char **variable,
55+
_Out_ const char **value)
56+
{
57+
SWSS_LOG_ENTER();
58+
59+
static auto it = gProfileMap.begin();
60+
61+
if (value == NULL)
62+
{
63+
// Restarts enumeration
64+
it = gProfileMap.begin();
65+
}
66+
else if (it == gProfileMap.end())
67+
{
68+
return -1;
69+
}
70+
else
71+
{
72+
*variable = it->first.c_str();
73+
*value = it->second.c_str();
74+
it++;
75+
}
76+
77+
if (it != gProfileMap.end())
78+
return 0;
79+
else
80+
return -1;
81+
}
82+
83+
const service_method_table_t test_services = {
84+
test_profile_get_value,
85+
test_profile_get_next_value
86+
};
87+
88+
void initSaiApi()
89+
{
90+
SWSS_LOG_ENTER();
91+
92+
sai_api_initialize(0, (service_method_table_t *)&test_services);
93+
94+
sai_api_query(SAI_API_SWITCH, (void **)&sai_switch_api);
95+
sai_api_query(SAI_API_VIRTUAL_ROUTER, (void **)&sai_virtual_router_api);
96+
sai_api_query(SAI_API_PORT, (void **)&sai_port_api);
97+
sai_api_query(SAI_API_FDB, (void **)&sai_fdb_api);
98+
sai_api_query(SAI_API_VLAN, (void **)&sai_vlan_api);
99+
sai_api_query(SAI_API_HOST_INTERFACE, (void **)&sai_hostif_api);
100+
sai_api_query(SAI_API_MIRROR, (void **)&sai_mirror_api);
101+
sai_api_query(SAI_API_ROUTER_INTERFACE, (void **)&sai_router_intfs_api);
102+
sai_api_query(SAI_API_NEIGHBOR, (void **)&sai_neighbor_api);
103+
sai_api_query(SAI_API_NEXT_HOP, (void **)&sai_next_hop_api);
104+
sai_api_query(SAI_API_NEXT_HOP_GROUP, (void **)&sai_next_hop_group_api);
105+
sai_api_query(SAI_API_ROUTE, (void **)&sai_route_api);
106+
sai_api_query(SAI_API_LAG, (void **)&sai_lag_api);
107+
sai_api_query(SAI_API_POLICER, (void **)&sai_policer_api);
108+
sai_api_query(SAI_API_TUNNEL, (void **)&sai_tunnel_api);
109+
sai_api_query(SAI_API_QUEUE, (void **)&sai_queue_api);
110+
sai_api_query(SAI_API_SCHEDULER, (void **)&sai_scheduler_api);
111+
sai_api_query(SAI_API_WRED, (void **)&sai_wred_api);
112+
sai_api_query(SAI_API_QOS_MAPS, (void **)&sai_qos_map_api);
113+
sai_api_query(SAI_API_BUFFERS, (void **)&sai_buffer_api);
114+
sai_api_query(SAI_API_SCHEDULER_GROUP, (void **)&sai_scheduler_group_api);
115+
sai_api_query(SAI_API_ACL, (void **)&sai_acl_api);
116+
117+
sai_log_set(SAI_API_SWITCH, SAI_LOG_NOTICE);
118+
sai_log_set(SAI_API_VIRTUAL_ROUTER, SAI_LOG_NOTICE);
119+
sai_log_set(SAI_API_PORT, SAI_LOG_NOTICE);
120+
sai_log_set(SAI_API_FDB, SAI_LOG_NOTICE);
121+
sai_log_set(SAI_API_VLAN, SAI_LOG_NOTICE);
122+
sai_log_set(SAI_API_HOST_INTERFACE, SAI_LOG_NOTICE);
123+
sai_log_set(SAI_API_MIRROR, SAI_LOG_NOTICE);
124+
sai_log_set(SAI_API_ROUTER_INTERFACE, SAI_LOG_NOTICE);
125+
sai_log_set(SAI_API_NEIGHBOR, SAI_LOG_NOTICE);
126+
sai_log_set(SAI_API_NEXT_HOP, SAI_LOG_NOTICE);
127+
sai_log_set(SAI_API_NEXT_HOP_GROUP, SAI_LOG_NOTICE);
128+
sai_log_set(SAI_API_ROUTE, SAI_LOG_NOTICE);
129+
sai_log_set(SAI_API_LAG, SAI_LOG_NOTICE);
130+
sai_log_set(SAI_API_POLICER, SAI_LOG_NOTICE);
131+
sai_log_set(SAI_API_TUNNEL, SAI_LOG_NOTICE);
132+
sai_log_set(SAI_API_QUEUE, SAI_LOG_NOTICE);
133+
sai_log_set(SAI_API_SCHEDULER, SAI_LOG_NOTICE);
134+
sai_log_set(SAI_API_WRED, SAI_LOG_NOTICE);
135+
sai_log_set(SAI_API_QOS_MAPS, SAI_LOG_NOTICE);
136+
sai_log_set(SAI_API_BUFFERS, SAI_LOG_NOTICE);
137+
sai_log_set(SAI_API_SCHEDULER_GROUP, SAI_LOG_NOTICE);
138+
sai_log_set(SAI_API_ACL, SAI_LOG_NOTICE);
139+
}

orchagent/saihelper.h

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#pragma once
2+
3+
void initSaiApi();

0 commit comments

Comments
 (0)