@@ -11,6 +11,9 @@ sai_object_id_t switch_object_id = (sai_object_id_t)SAI_OBJECT_TYPE_SWITCH << 48
11
11
if (status != SAI_STATUS_SUCCESS) \
12
12
return status;
13
13
14
+ // should always be 1
15
+ #define DEFAULT_VLAN_NUMBER 1
16
+
14
17
sai_status_t vs_initialize_default_objects ()
15
18
{
16
19
SWSS_LOG_ENTER ();
@@ -52,7 +55,7 @@ sai_status_t vs_initialize_default_objects()
52
55
SWSS_LOG_INFO (" create default vlan" );
53
56
54
57
{
55
- status = vs_vlan_api.create_vlan (1 );
58
+ status = vs_vlan_api.create_vlan (DEFAULT_VLAN_NUMBER );
56
59
57
60
CHECK_STATUS (status);
58
61
}
@@ -97,6 +100,41 @@ sai_status_t vs_initialize_default_objects()
97
100
98
101
SWSS_LOG_INFO (" create ports" );
99
102
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
+
100
138
// create ports
101
139
{
102
140
for (uint32_t i = 0 ; i < port_count; i++)
@@ -122,9 +160,18 @@ sai_status_t vs_initialize_default_objects()
122
160
123
161
CHECK_STATUS (status);
124
162
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
+
125
173
// TODO populate ports attributes
126
174
// TODO populate vlan members
127
- // TODO populate port lanes
128
175
}
129
176
}
130
177
@@ -168,6 +215,54 @@ sai_status_t vs_initialize_default_objects()
168
215
CHECK_STATUS (status);
169
216
}
170
217
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
+
171
266
return status;
172
267
}
173
268
0 commit comments