Skip to content

Commit 26b2c90

Browse files
kcudnikstcheng
authored andcommitted
Add port lanes mapping and vlan member list for VS (sonic-net#59)
* Populate port hardware lanes for ports in virtual switch * Add static VLAN member list for all ports * Update Makefile for virtual switch
1 parent 2417121 commit 26b2c90

File tree

2 files changed

+98
-3
lines changed

2 files changed

+98
-3
lines changed

Makefile.am

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
SUBDIRS = lib syncd
1+
SUBDIRS = lib vslib syncd

vslib/src/sai_vs_switch.cpp

+97-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ sai_object_id_t switch_object_id = (sai_object_id_t)SAI_OBJECT_TYPE_SWITCH << 48
1111
if (status != SAI_STATUS_SUCCESS) \
1212
return status;
1313

14+
// should always be 1
15+
#define DEFAULT_VLAN_NUMBER 1
16+
1417
sai_status_t vs_initialize_default_objects()
1518
{
1619
SWSS_LOG_ENTER();
@@ -52,7 +55,7 @@ sai_status_t vs_initialize_default_objects()
5255
SWSS_LOG_INFO("create default vlan");
5356

5457
{
55-
status = vs_vlan_api.create_vlan(1);
58+
status = vs_vlan_api.create_vlan(DEFAULT_VLAN_NUMBER);
5659

5760
CHECK_STATUS(status);
5861
}
@@ -97,6 +100,41 @@ sai_status_t vs_initialize_default_objects()
97100

98101
SWSS_LOG_INFO("create ports");
99102

103+
sai_uint32_t lanes[] = {
104+
29,30,31,32,
105+
25,26,27,28,
106+
37,38,39,40,
107+
33,34,35,36,
108+
41,42,43,44,
109+
45,46,47,48,
110+
5,6,7,8,
111+
1,2,3,4,
112+
9,10,11,12,
113+
13,14,15,16,
114+
21,22,23,24,
115+
17,18,19,20,
116+
49,50,51,52,
117+
53,54,55,56,
118+
61,62,63,64,
119+
57,58,59,60,
120+
65,66,67,68,
121+
69,70,71,72,
122+
77,78,79,80,
123+
73,74,75,76,
124+
105,106,107,108,
125+
109,110,111,112,
126+
117,118,119,120,
127+
113,114,115,116,
128+
121,122,123,124,
129+
125,126,127,128,
130+
85,86,87,88,
131+
81,82,83,84,
132+
89,90,91,92,
133+
93,94,95,96,
134+
97,98,99,100,
135+
101,102,103,104
136+
};
137+
100138
// create ports
101139
{
102140
for (uint32_t i = 0; i < port_count; i++)
@@ -122,9 +160,18 @@ sai_status_t vs_initialize_default_objects()
122160

123161
CHECK_STATUS(status);
124162

163+
// populate lanes for each port
164+
165+
attr.id = SAI_PORT_ATTR_HW_LANE_LIST;
166+
attr.value.u32list.count = 4;
167+
attr.value.u32list.list = &lanes[4 * i];
168+
169+
status = vs_port_api.set_port_attribute(port_id, &attr);
170+
171+
CHECK_STATUS(status);
172+
125173
// TODO populate ports attributes
126174
// TODO populate vlan members
127-
// TODO populate port lanes
128175
}
129176
}
130177

@@ -168,6 +215,54 @@ sai_status_t vs_initialize_default_objects()
168215
CHECK_STATUS(status);
169216
}
170217

218+
SWSS_LOG_INFO("create vlan members for all ports");
219+
220+
std::vector<sai_object_id_t> vlan_member_list;
221+
222+
{
223+
for (auto &portId : port_list)
224+
{
225+
std::vector<sai_attribute_t> attrs;
226+
227+
sai_attribute_t attr_vlan_id;
228+
229+
attr_vlan_id.id = SAI_VLAN_MEMBER_ATTR_VLAN_ID;
230+
attr_vlan_id.value.u16 = DEFAULT_VLAN_NUMBER;
231+
attrs.push_back(attr_vlan_id);
232+
233+
sai_attribute_t attr_port_id;
234+
235+
attr_port_id.id = SAI_VLAN_MEMBER_ATTR_PORT_ID;
236+
attr_port_id.value.oid = portId;
237+
attrs.push_back(attr_port_id);
238+
239+
sai_object_id_t vlan_member_id;
240+
status = vs_vlan_api.create_vlan_member(&vlan_member_id, attrs.size() , attrs.data());
241+
242+
CHECK_STATUS(status);
243+
244+
vlan_member_list.push_back(vlan_member_id);
245+
}
246+
}
247+
248+
SWSS_LOG_INFO("create vlan member list");
249+
250+
{
251+
// TODO this list should be updated each time we modify any VLAN member
252+
// and it probably should be handled inside create/remove vlan member api
253+
// and not here
254+
255+
sai_attribute_t attr;
256+
257+
attr.id = SAI_VLAN_ATTR_MEMBER_LIST;
258+
attr.value.objlist.count = vlan_member_list.size();
259+
attr.value.objlist.list = vlan_member_list.data();
260+
261+
status = vs_vlan_api.set_vlan_attribute(DEFAULT_VLAN_NUMBER, &attr);
262+
263+
CHECK_STATUS(status);
264+
}
265+
171266
return status;
172267
}
173268

0 commit comments

Comments
 (0)