Skip to content

Commit

Permalink
Revert to using gocni inbuilt bandwidth capability
Browse files Browse the repository at this point in the history
Signed-off-by: Yakul Garg <2000yeshu@gmail.com>
  • Loading branch information
2000yeshu committed Mar 28, 2024
1 parent e4fec44 commit 56c1793
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 25 deletions.
5 changes: 3 additions & 2 deletions cmd/ctr/commands/cni.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (

"github.com/containerd/containerd"
"github.com/containerd/containerd/namespaces"
gocni "github.com/containerd/go-cni"
"github.com/containerd/typeurl/v2"
)

Expand All @@ -38,8 +39,8 @@ const (

// ctr pass cni network metadata to containerd if ctr run use option of --cni
type NetworkMetaData struct {
EnableCni bool
CniBandwidthConfFile string
EnableCni bool
BandwidthConf gocni.BandWidth
}

func FullID(ctx context.Context, c containerd.Container) string {
Expand Down
51 changes: 38 additions & 13 deletions cmd/ctr/commands/run/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"encoding/csv"
"errors"
"fmt"
"math"
"strings"

"github.com/containerd/console"
Expand Down Expand Up @@ -123,9 +124,13 @@ var Command = cli.Command{
Name: "cni",
Usage: "Enable cni networking for the container",
},
cli.StringFlag{
Name: "cni-bandwidth-conf",
Usage: "Cni conf for bandwidth plugin",
cli.Uint64Flag{
Name: "ingress-rate",
Usage: "Ingress rate for bandwidth plugin",
},
cli.Uint64Flag{
Name: "egress-rate",
Usage: "Egress rate for bandwidth plugin",
},
}, append(platformRunFlags,
append(append(commands.SnapshotterFlags, []cli.Flag{commands.SnapshotterLabels}...),
Expand Down Expand Up @@ -186,14 +191,8 @@ var Command = cli.Command{
}
var network gocni.CNI
if enableCNI {
if context.String("cni-bandwidth-conf") == "" {
if network, err = gocni.New(gocni.WithDefaultConf); err != nil {
return err
}
} else {
if network, err = gocni.New(gocni.WithDefaultConf, gocni.WithConfFile(context.String("cni-bandwidth-conf"))); err != nil {
return err
}
if network, err = gocni.New(gocni.WithDefaultConf); err != nil {
return err
}
}

Expand All @@ -204,11 +203,17 @@ var Command = cli.Command{
return err
}

var namespaceOpts []gocni.NamespaceOpts
bandwidthConf := getBandwidthConf(context)
if bandwidthConf != nil {
namespaceOpts = append(namespaceOpts, gocni.WithCapabilityBandWidth(*bandwidthConf))
}

var statusC <-chan containerd.ExitStatus
if !detach {
defer func() {
if enableCNI {
if err := network.Remove(ctx, commands.FullID(ctx, container), ""); err != nil {
if err := network.Remove(ctx, commands.FullID(ctx, container), "", namespaceOpts...); err != nil {
logrus.WithError(err).Error("network review")
}
}
Expand All @@ -230,7 +235,7 @@ var Command = cli.Command{
return err
}

if _, err := network.Setup(ctx, commands.FullID(ctx, container), netNsPath); err != nil {
if _, err := network.Setup(ctx, commands.FullID(ctx, container), netNsPath, namespaceOpts...); err != nil {
return err
}
}
Expand Down Expand Up @@ -263,6 +268,26 @@ var Command = cli.Command{
},
}

func getBandwidthConf(context *cli.Context) *gocni.BandWidth {
if context.Uint64("ingress-rate") == 0 && context.Uint64("egress-rate") == 0 {
return nil
}

conf := &gocni.BandWidth{}

if ingressRate := context.Uint64("ingress-rate"); ingressRate > 0 {
conf.IngressRate = ingressRate
conf.IngressBurst = math.MaxUint64
}

if egressRate := context.Uint64("egress-rate"); egressRate > 0 {
conf.EgressRate = egressRate
conf.EgressBurst = math.MaxUint64
}

return conf
}

// buildLabel builds the labels from command line labels and the image labels
func buildLabels(cmdLabels, imageLabels map[string]string) map[string]string {
labels := make(map[string]string)
Expand Down
5 changes: 4 additions & 1 deletion cmd/ctr/commands/run/run_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,10 @@ func NewContainer(ctx gocontext.Context, client *containerd.Client, context *cli
if context.Bool("cni") {
cniMeta := &commands.NetworkMetaData{EnableCni: true}

cniMeta.CniBandwidthConfFile = context.String("cni-bandwidth-conf")
bandwidthConf := getBandwidthConf(context)
if bandwidthConf != nil {
cniMeta.BandwidthConf = *bandwidthConf
}

cOpts = append(cOpts, containerd.WithContainerExtension(commands.CtrCniMetadataExtension, cniMeta))
}
Expand Down
17 changes: 8 additions & 9 deletions cmd/ctr/commands/tasks/kill.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,17 +50,16 @@ func RemoveCniNetworkIfExist(ctx context.Context, container containerd.Container

var network gocni.CNI
if networkMetaData.EnableCni {
if networkMetaData.CniBandwidthConfFile == "" {
if network, err = gocni.New(gocni.WithDefaultConf); err != nil {
return err
}
} else {
if network, err = gocni.New(gocni.WithDefaultConf, gocni.WithConfFile(networkMetaData.CniBandwidthConfFile)); err != nil {
return err
}
if network, err = gocni.New(gocni.WithDefaultConf); err != nil {
return err
}

var namespaceOpts []gocni.NamespaceOpts
if networkMetaData.BandwidthConf != (gocni.BandWidth{}) {
namespaceOpts = append(namespaceOpts, gocni.WithCapabilityBandWidth(networkMetaData.BandwidthConf))
}

if err := network.Remove(ctx, commands.FullID(ctx, container), ""); err != nil {
if err := network.Remove(ctx, commands.FullID(ctx, container), "", namespaceOpts...); err != nil {
logrus.WithError(err).Error("network remove error")
return err
}
Expand Down

0 comments on commit 56c1793

Please sign in to comment.