//go:build linux package tc import "github.com/vishvananda/netlink" type Attrs struct { linkIndex int handle uint32 parent uint32 } type FilterAttrs struct { Attrs priority uint16 protocol uint16 } func NewFilterAttrs() *FilterAttrs { return &FilterAttrs{Attrs: Attrs{}} } func (fa *FilterAttrs) WithPriority(priority uint16) *FilterAttrs { fa.priority = priority return fa } func (fa *FilterAttrs) WithProtocol(protocol uint16) *FilterAttrs { fa.protocol = protocol return fa } func (fa *FilterAttrs) WithLinkIndex(linkIndex int) *FilterAttrs { fa.linkIndex = linkIndex return fa } func (fa *FilterAttrs) WithHandle(handle uint32) *FilterAttrs { fa.handle = handle return fa } func (fa *FilterAttrs) WithParent(parent uint32) *FilterAttrs { fa.parent = parent return fa } func (fa *FilterAttrs) WithMakeHandle(major, minor uint16) *FilterAttrs { fa.handle = netlink.MakeHandle(major, minor) return fa } func (fa *FilterAttrs) WithMakeParent(major, minor uint16) *FilterAttrs { fa.parent = netlink.MakeHandle(major, minor) return fa } func (fa *FilterAttrs) Build() netlink.FilterAttrs { filterAttrs := netlink.FilterAttrs{ LinkIndex: fa.Attrs.linkIndex, Parent: fa.Attrs.parent, Handle: fa.Attrs.handle, } filterAttrs.Priority = fa.priority filterAttrs.Protocol = fa.protocol return filterAttrs } type ActionAttrs struct { Attrs action netlink.TcAct } func NewActionAttrs() *ActionAttrs { return &ActionAttrs{Attrs: Attrs{}} } func (aa *ActionAttrs) WithAction(action netlink.TcAct) *ActionAttrs { aa.action = action return aa } func (aa *ActionAttrs) Build() netlink.ActionAttrs { actionAttrs := netlink.ActionAttrs{ Action: aa.action, } return actionAttrs } type QdiscAttrs struct { Attrs } func NewQdiscAttrs() *QdiscAttrs { return &QdiscAttrs{Attrs: Attrs{}} } func (qa *QdiscAttrs) WithLinkIndex(linkIndex int) *QdiscAttrs { qa.linkIndex = linkIndex return qa } func (qa *QdiscAttrs) WithHandle(handle uint32) *QdiscAttrs { qa.handle = handle return qa } func (qa *QdiscAttrs) WithParent(parent uint32) *QdiscAttrs { qa.parent = parent return qa } func (qa *QdiscAttrs) WithMakeHandle(major, minor uint16) *QdiscAttrs { qa.handle = netlink.MakeHandle(major, minor) return qa } func (qa *QdiscAttrs) WithMakeParent(major, minor uint16) *QdiscAttrs { qa.parent = netlink.MakeHandle(major, minor) return qa } func (qa *QdiscAttrs) Build() netlink.QdiscAttrs { qdiscAttrs := netlink.QdiscAttrs{ LinkIndex: qa.linkIndex, Parent: qa.parent, Handle: qa.handle, } return qdiscAttrs } type ClassAttrs struct { Attrs } func NewClassAttrs() *ClassAttrs { return &ClassAttrs{} } func (ca *ClassAttrs) WithLinkIndex(linkIndex int) *ClassAttrs { ca.linkIndex = linkIndex return ca } func (ca *ClassAttrs) WithHandle(handle uint32) *ClassAttrs { ca.handle = handle return ca } func (ca *ClassAttrs) WithParent(parent uint32) *ClassAttrs { ca.parent = parent return ca } func (ca *ClassAttrs) WithMakeHandle(major, minor uint16) *ClassAttrs { ca.handle = netlink.MakeHandle(major, minor) return ca } func (ca *ClassAttrs) WithMakeParent(major, minor uint16) *ClassAttrs { ca.parent = netlink.MakeHandle(major, minor) return ca } func (ca *ClassAttrs) Build() netlink.ClassAttrs { classAttrs := netlink.ClassAttrs{ LinkIndex: ca.linkIndex, Parent: ca.parent, Handle: ca.handle, } return classAttrs }