...

Source file src/edge-infra.dev/pkg/lib/kernel/netlink/tc/tc.go

Documentation: edge-infra.dev/pkg/lib/kernel/netlink/tc

     1  //go:build linux
     2  
     3  package tc
     4  
     5  import (
     6  	"fmt"
     7  	"strings"
     8  
     9  	"github.com/hashicorp/go-multierror"
    10  	"github.com/vishvananda/netlink"
    11  )
    12  
    13  type Tc interface {
    14  	Add() error
    15  	Delete() error
    16  	Replace() error
    17  }
    18  
    19  func Adder() func(commandList ...Tc) error {
    20  	var err *multierror.Error
    21  	return func(commandList ...Tc) error {
    22  		for _, command := range commandList {
    23  			err = multierror.Append(err, command.Add())
    24  		}
    25  		return err.ErrorOrNil()
    26  	}
    27  }
    28  
    29  func Replacer() func(commandList ...Tc) error {
    30  	var err *multierror.Error
    31  	return func(commandList ...Tc) error {
    32  		for _, command := range commandList {
    33  			err = multierror.Append(err, command.Replace())
    34  		}
    35  		return err.ErrorOrNil()
    36  	}
    37  }
    38  
    39  func errorIsNotFound(err error) bool {
    40  	return strings.Contains(err.Error(), "not found") || strings.Contains(err.Error(), "no such file or directory")
    41  }
    42  
    43  func errorIsFileExists(err error) bool {
    44  	return strings.Contains(err.Error(), "file exists")
    45  }
    46  
    47  func formatTcError(prefix string, linkIndex int, parent, handle uint32, tcErr error) error {
    48  	link, err := netlink.LinkByIndex(linkIndex)
    49  	if err != nil {
    50  		return fmt.Errorf("failed to get link when handling err: %w", tcErr)
    51  	}
    52  	return fmt.Errorf(
    53  		"%s with parent %s and handle %s (dev %s): %w",
    54  		prefix,
    55  		netlink.HandleStr(parent),
    56  		netlink.HandleStr(handle),
    57  		link.Attrs().Name,
    58  		err,
    59  	)
    60  }
    61  

View as plain text