mirror of
https://github.com/vishvananda/netlink
synced 2025-02-18 05:07:11 +00:00
Return error as part of NewHtbClass
This commit is contained in:
parent
683203e227
commit
c68d0f3e3c
9
class.go
9
class.go
@ -1,6 +1,7 @@
|
|||||||
package netlink
|
package netlink
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/vishvananda/netlink/nl"
|
"github.com/vishvananda/netlink/nl"
|
||||||
@ -54,7 +55,7 @@ type HtbClass struct {
|
|||||||
Ctab [256]uint32
|
Ctab [256]uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewHtbClass(attrs ClassAttrs, cattrs HtbClassAttrs) *HtbClass {
|
func NewHtbClass(attrs ClassAttrs, cattrs HtbClassAttrs) (*HtbClass, error) {
|
||||||
var rtab [256]uint32
|
var rtab [256]uint32
|
||||||
var ctab [256]uint32
|
var ctab [256]uint32
|
||||||
cell_log := -1
|
cell_log := -1
|
||||||
@ -82,12 +83,12 @@ func NewHtbClass(attrs ClassAttrs, cattrs HtbClassAttrs) *HtbClass {
|
|||||||
|
|
||||||
tcrate := nl.TcRateSpec{Rate: uint32(rate)}
|
tcrate := nl.TcRateSpec{Rate: uint32(rate)}
|
||||||
if CalcRtable(&tcrate, rtab, cell_log, uint32(mtu), linklayer) < 0 {
|
if CalcRtable(&tcrate, rtab, cell_log, uint32(mtu), linklayer) < 0 {
|
||||||
return nil
|
return nil, errors.New("HTB: failed to calculate rate table.")
|
||||||
}
|
}
|
||||||
|
|
||||||
tcceil := nl.TcRateSpec{Rate: uint32(ceil)}
|
tcceil := nl.TcRateSpec{Rate: uint32(ceil)}
|
||||||
if CalcRtable(&tcceil, ctab, ccell_log, uint32(mtu), linklayer) < 0 {
|
if CalcRtable(&tcceil, ctab, ccell_log, uint32(mtu), linklayer) < 0 {
|
||||||
return nil
|
return nil, errors.New("HTB: failed to calculate ceil rate table.")
|
||||||
}
|
}
|
||||||
|
|
||||||
return &HtbClass{
|
return &HtbClass{
|
||||||
@ -101,7 +102,7 @@ func NewHtbClass(attrs ClassAttrs, cattrs HtbClassAttrs) *HtbClass {
|
|||||||
Prio: 0,
|
Prio: 0,
|
||||||
Rtab: rtab,
|
Rtab: rtab,
|
||||||
Ctab: ctab,
|
Ctab: ctab,
|
||||||
}
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q HtbClass) String() string {
|
func (q HtbClass) String() string {
|
||||||
|
@ -51,7 +51,7 @@ func TestClassAddDel(t *testing.T) {
|
|||||||
Rate: 1234000,
|
Rate: 1234000,
|
||||||
Cbuffer: 1690,
|
Cbuffer: 1690,
|
||||||
}
|
}
|
||||||
class := NewHtbClass(classattrs, htbclassattrs)
|
class, _ := NewHtbClass(classattrs, htbclassattrs)
|
||||||
if err := ClassAdd(class); err != nil {
|
if err := ClassAdd(class); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -214,7 +214,7 @@ func TestHtbClassAddHtbClassChangeDel(t *testing.T) {
|
|||||||
Rate: 1234000,
|
Rate: 1234000,
|
||||||
Cbuffer: 1690,
|
Cbuffer: 1690,
|
||||||
}
|
}
|
||||||
class := NewHtbClass(classattrs, htbclassattrs)
|
class, _ := NewHtbClass(classattrs, htbclassattrs)
|
||||||
if err := ClassAdd(class); err != nil {
|
if err := ClassAdd(class); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -271,14 +271,14 @@ func TestHtbClassAddHtbClassChangeDel(t *testing.T) {
|
|||||||
// First, test it fails if we change the Handle.
|
// First, test it fails if we change the Handle.
|
||||||
old_handle := classattrs.Handle
|
old_handle := classattrs.Handle
|
||||||
classattrs.Handle = MakeHandle(0xffff, 3)
|
classattrs.Handle = MakeHandle(0xffff, 3)
|
||||||
class = NewHtbClass(classattrs, htbclassattrs)
|
class, _ = NewHtbClass(classattrs, htbclassattrs)
|
||||||
if err := ClassChange(class); err == nil {
|
if err := ClassChange(class); err == nil {
|
||||||
t.Fatal("ClassChange should not work when using a different handle.")
|
t.Fatal("ClassChange should not work when using a different handle.")
|
||||||
}
|
}
|
||||||
// It should work with the same handle
|
// It should work with the same handle
|
||||||
classattrs.Handle = old_handle
|
classattrs.Handle = old_handle
|
||||||
htbclassattrs.Rate = 4321000
|
htbclassattrs.Rate = 4321000
|
||||||
class = NewHtbClass(classattrs, htbclassattrs)
|
class, _ = NewHtbClass(classattrs, htbclassattrs)
|
||||||
if err := ClassChange(class); err != nil {
|
if err := ClassChange(class); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -327,7 +327,7 @@ func TestHtbClassAddHtbClassChangeDel(t *testing.T) {
|
|||||||
// Then, replace by providing a new handle, n new class will be created.
|
// Then, replace by providing a new handle, n new class will be created.
|
||||||
|
|
||||||
// Replace acting as Change
|
// Replace acting as Change
|
||||||
class = NewHtbClass(classattrs, htbclassattrs)
|
class, _ = NewHtbClass(classattrs, htbclassattrs)
|
||||||
if err := ClassReplace(class); err != nil {
|
if err := ClassReplace(class); err != nil {
|
||||||
t.Fatal("Failed to replace class that is existing.")
|
t.Fatal("Failed to replace class that is existing.")
|
||||||
}
|
}
|
||||||
@ -354,7 +354,7 @@ func TestHtbClassAddHtbClassChangeDel(t *testing.T) {
|
|||||||
|
|
||||||
// It should work with the same handle
|
// It should work with the same handle
|
||||||
classattrs.Handle = MakeHandle(0xffff, 3)
|
classattrs.Handle = MakeHandle(0xffff, 3)
|
||||||
class = NewHtbClass(classattrs, htbclassattrs)
|
class, _ = NewHtbClass(classattrs, htbclassattrs)
|
||||||
if err := ClassReplace(class); err != nil {
|
if err := ClassReplace(class); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -146,7 +146,7 @@ func TestFilterFwAddDel(t *testing.T) {
|
|||||||
Rate: 1234000,
|
Rate: 1234000,
|
||||||
Cbuffer: 1690,
|
Cbuffer: 1690,
|
||||||
}
|
}
|
||||||
class := NewHtbClass(classattrs, htbclassattrs)
|
class, _ := NewHtbClass(classattrs, htbclassattrs)
|
||||||
if err := ClassAdd(class); err != nil {
|
if err := ClassAdd(class); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user