netlink/class.go

79 lines
1.6 KiB
Go
Raw Normal View History

2015-09-10 23:20:18 +00:00
package netlink
import (
"fmt"
)
type Class interface {
Attrs() *ClassAttrs
Type() string
}
2016-03-20 00:12:26 +00:00
// ClassAttrs represents a netlink class. A filter is associated with a link,
2015-09-10 23:20:18 +00:00
// has a handle and a parent. The root filter of a device should have a
// parent == HANDLE_ROOT.
type ClassAttrs struct {
LinkIndex int
Handle uint32
Parent uint32
Leaf uint32
}
func (q ClassAttrs) String() string {
2016-03-20 00:12:26 +00:00
return fmt.Sprintf("{LinkIndex: %d, Handle: %s, Parent: %s, Leaf: %d}", q.LinkIndex, HandleStr(q.Handle), HandleStr(q.Parent), q.Leaf)
2015-09-10 23:20:18 +00:00
}
type HtbClassAttrs struct {
// TODO handle all attributes
Rate uint64
Ceil uint64
Buffer uint32
Cbuffer uint32
Quantum uint32
Level uint32
Prio uint32
}
func (q HtbClassAttrs) String() string {
return fmt.Sprintf("{Rate: %d, Ceil: %d, Buffer: %d, Cbuffer: %d}", q.Rate, q.Ceil, q.Buffer, q.Cbuffer)
}
2016-03-20 00:12:26 +00:00
// HtbClass represents an Htb class
2015-09-10 23:20:18 +00:00
type HtbClass struct {
ClassAttrs
Rate uint64
Ceil uint64
2015-09-10 23:20:18 +00:00
Buffer uint32
Cbuffer uint32
Quantum uint32
Level uint32
Prio uint32
}
func (q HtbClass) String() string {
return fmt.Sprintf("{Rate: %d, Ceil: %d, Buffer: %d, Cbuffer: %d}", q.Rate, q.Ceil, q.Buffer, q.Cbuffer)
}
2016-03-20 00:12:26 +00:00
func (q *HtbClass) Attrs() *ClassAttrs {
return &q.ClassAttrs
2015-09-10 23:20:18 +00:00
}
2016-03-20 00:12:26 +00:00
func (q *HtbClass) Type() string {
2015-09-10 23:20:18 +00:00
return "htb"
}
// GenericClass classes represent types that are not currently understood
// by this netlink library.
type GenericClass struct {
ClassAttrs
ClassType string
}
func (class *GenericClass) Attrs() *ClassAttrs {
return &class.ClassAttrs
}
func (class *GenericClass) Type() string {
return class.ClassType
}