Skip to content

Commit 2350104

Browse files
author
Wataru Ishida
committed
oopt: forbid over-subscription by default
Signed-off-by: Wataru Ishida <[email protected]>
1 parent 32f8888 commit 2350104

File tree

5 files changed

+1321
-1104
lines changed

5 files changed

+1321
-1104
lines changed

cmd/oopt/main.go

+40-5
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)