@@ -154,6 +154,23 @@ func validateFinal(config *model.PacketTransponder) error {
154
154
return fmt .Errorf ("invalid num-channels %d for port %s" , * bMode .NumChannels , k )
155
155
}
156
156
}
157
+ for k , v := range config .OpticalModule {
158
+ if err := sonic .FillTransportDefaultConfig (v , config ); err != nil {
159
+ return err
160
+ }
161
+ if * v .AllowOversubscription {
162
+ continue
163
+ }
164
+ for ch , s := range v .ChannelStats {
165
+ f , err := strconv .ParseFloat (* s .Occupancy , 64 )
166
+ if err != nil {
167
+ return err
168
+ }
169
+ if f > 100.0 {
170
+ return fmt .Errorf ("name: %s, channel: %s over-subscribed: %f%%" , k , ch , f )
171
+ }
172
+ }
173
+ }
157
174
return nil
158
175
}
159
176
@@ -266,12 +283,13 @@ const (
266
283
opticalModuleNum = 8
267
284
)
268
285
269
- func newInterface (t * model.PacketTransponder , name string ) error {
286
+ func newInterface (t * model.PacketTransponder , name string , speed model. E_OpenconfigIfEthernet_ETHERNET_SPEED ) error {
270
287
iface , err := t .NewInterface (name )
271
288
if err != nil {
272
289
return err
273
290
}
274
291
iface .Mtu = ygot .Uint16 (1500 )
292
+ iface .PortSpeed = speed
275
293
return nil
276
294
}
277
295
@@ -282,11 +300,12 @@ func defaultConfiguration() (*model.PacketTransponder, error) {
282
300
if err != nil {
283
301
return nil , fmt .Errorf ("failed to create port: %v" , err )
284
302
}
303
+ speed := model .OpenconfigIfEthernet_ETHERNET_SPEED_SPEED_100GB
285
304
port .BreakoutMode = & model.PacketTransponder_Port_BreakoutMode {
286
- ChannelSpeed : model . OpenconfigIfEthernet_ETHERNET_SPEED_SPEED_100GB ,
305
+ ChannelSpeed : speed ,
287
306
NumChannels : ygot .Uint8 (1 ),
288
307
}
289
- err = newInterface (d , fmt .Sprintf ("Ethernet%d" , i ))
308
+ err = newInterface (d , fmt .Sprintf ("Ethernet%d" , i ), speed )
290
309
if err != nil {
291
310
return nil , err
292
311
}
@@ -436,6 +455,19 @@ func NewPortCmd() *cobra.Command {
436
455
}
437
456
438
457
current .Port [name ].BreakoutMode .ChannelSpeed = speed
458
+
459
+ portNum , err := strconv .Atoi (name [len ("Port" ):])
460
+ if err != nil {
461
+ return err
462
+ }
463
+
464
+ ethName := fmt .Sprintf ("Ethernet%d" , portNum )
465
+
466
+ for k , v := range current .Interface {
467
+ if k == ethName || strings .HasPrefix (k , ethName + "_" ) {
468
+ v .PortSpeed = speed
469
+ }
470
+ }
439
471
return nil
440
472
},
441
473
}
@@ -469,14 +501,14 @@ func NewPortCmd() *cobra.Command {
469
501
for i := 1 ; i <= 4 ; i ++ {
470
502
delete (current .Interface , fmt .Sprintf ("Ethernet%d_%d" , portNum , i ))
471
503
}
472
- err = newInterface (current , fmt .Sprintf ("Ethernet%d" , portNum ))
504
+ err = newInterface (current , fmt .Sprintf ("Ethernet%d" , portNum ), current . Port [ name ]. BreakoutMode . ChannelSpeed )
473
505
if err != nil {
474
506
return err
475
507
}
476
508
case 4 :
477
509
delete (current .Interface , fmt .Sprintf ("Ethernet%d" , portNum ))
478
510
for i := 1 ; i <= 4 ; i ++ {
479
- err = newInterface (current , fmt .Sprintf ("Ethernet%d_%d" , portNum , i ))
511
+ err = newInterface (current , fmt .Sprintf ("Ethernet%d_%d" , portNum , i ), current . Port [ name ]. BreakoutMode . ChannelSpeed )
480
512
if err != nil {
481
513
return err
482
514
}
@@ -1123,6 +1155,9 @@ func commit(commitMessage string, reboot bool) error {
1123
1155
if err != nil {
1124
1156
return err
1125
1157
}
1158
+ if dry {
1159
+ return nil
1160
+ }
1126
1161
iter , err := repo .Log (& git.LogOptions {})
1127
1162
if err != nil {
1128
1163
return err
0 commit comments