@@ -154,6 +154,23 @@ func validateFinal(config *model.PacketTransponder) error {
154154 return fmt .Errorf ("invalid num-channels %d for port %s" , * bMode .NumChannels , k )
155155 }
156156 }
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+ }
157174 return nil
158175}
159176
@@ -266,12 +283,13 @@ const (
266283 opticalModuleNum = 8
267284)
268285
269- func newInterface (t * model.PacketTransponder , name string ) error {
286+ func newInterface (t * model.PacketTransponder , name string , speed model. E_OpenconfigIfEthernet_ETHERNET_SPEED ) error {
270287 iface , err := t .NewInterface (name )
271288 if err != nil {
272289 return err
273290 }
274291 iface .Mtu = ygot .Uint16 (1500 )
292+ iface .PortSpeed = speed
275293 return nil
276294}
277295
@@ -282,11 +300,12 @@ func defaultConfiguration() (*model.PacketTransponder, error) {
282300 if err != nil {
283301 return nil , fmt .Errorf ("failed to create port: %v" , err )
284302 }
303+ speed := model .OpenconfigIfEthernet_ETHERNET_SPEED_SPEED_100GB
285304 port .BreakoutMode = & model.PacketTransponder_Port_BreakoutMode {
286- ChannelSpeed : model . OpenconfigIfEthernet_ETHERNET_SPEED_SPEED_100GB ,
305+ ChannelSpeed : speed ,
287306 NumChannels : ygot .Uint8 (1 ),
288307 }
289- err = newInterface (d , fmt .Sprintf ("Ethernet%d" , i ))
308+ err = newInterface (d , fmt .Sprintf ("Ethernet%d" , i ), speed )
290309 if err != nil {
291310 return nil , err
292311 }
@@ -436,6 +455,19 @@ func NewPortCmd() *cobra.Command {
436455 }
437456
438457 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+ }
439471 return nil
440472 },
441473 }
@@ -469,14 +501,14 @@ func NewPortCmd() *cobra.Command {
469501 for i := 1 ; i <= 4 ; i ++ {
470502 delete (current .Interface , fmt .Sprintf ("Ethernet%d_%d" , portNum , i ))
471503 }
472- err = newInterface (current , fmt .Sprintf ("Ethernet%d" , portNum ))
504+ err = newInterface (current , fmt .Sprintf ("Ethernet%d" , portNum ), current . Port [ name ]. BreakoutMode . ChannelSpeed )
473505 if err != nil {
474506 return err
475507 }
476508 case 4 :
477509 delete (current .Interface , fmt .Sprintf ("Ethernet%d" , portNum ))
478510 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 )
480512 if err != nil {
481513 return err
482514 }
@@ -1123,6 +1155,9 @@ func commit(commitMessage string, reboot bool) error {
11231155 if err != nil {
11241156 return err
11251157 }
1158+ if dry {
1159+ return nil
1160+ }
11261161 iter , err := repo .Log (& git.LogOptions {})
11271162 if err != nil {
11281163 return err
0 commit comments