1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
package ip
import (
"errors"
"fmt"
"github.com/vishvananda/netlink"
)
// QdiscIngress represents an ingress qdisc object.
type QdiscIngress struct {
Qdisc
}
// Add adds an ingress qdisc to a device.
func (q *QdiscIngress) Add() error {
attrs, err := q.netlinkAttrs()
if err != nil {
return err
}
if q.Parent != "" {
return errors.New("Ingress qdisc cannot have parent")
}
attrs.Parent = netlink.HANDLE_INGRESS
ingress := &netlink.Ingress{
QdiscAttrs: attrs,
}
err = netlink.QdiscAdd(ingress)
if err != nil {
return fmt.Errorf("Failed to add ingress qdisc %v: %w", ingress, mapQdiscErr(err))
}
return nil
}
// Delete deletes an ingress qdisc from a device.
func (q *QdiscIngress) Delete() error {
attrs, err := q.netlinkAttrs()
if err != nil {
return err
}
attrs.Parent = netlink.HANDLE_INGRESS
ingress := &netlink.Ingress{
QdiscAttrs: attrs,
}
err = netlink.QdiscDel(ingress)
if err != nil {
return fmt.Errorf("Failed to delete ingress qdisc %v: %w", ingress, mapQdiscErr(err))
}
return nil
}
|