Skip to content

Commit 7703cb5

Browse files
committed
Fix Xmittime
1 parent e4f3615 commit 7703cb5

File tree

3 files changed

+7
-6
lines changed

3 files changed

+7
-6
lines changed

class_linux.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,12 @@ func NewHtbClass(attrs ClassAttrs, cattrs HtbClassAttrs) *HtbClass {
4343
if buffer == 0 {
4444
buffer = uint32(float64(rate)/Hz() + float64(mtu))
4545
}
46-
buffer = uint32(Xmittime(rate, buffer))
46+
buffer = Xmittime(rate, buffer)
4747

4848
if cbuffer == 0 {
4949
cbuffer = uint32(float64(ceil)/Hz() + float64(mtu))
5050
}
51-
cbuffer = uint32(Xmittime(ceil, cbuffer))
51+
cbuffer = Xmittime(ceil, cbuffer)
5252

5353
return &HtbClass{
5454
ClassAttrs: attrs,

filter_linux.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ func NewFw(attrs FilterAttrs, fattrs FilterFwAttrs) (*Fw, error) {
8989
if CalcRtable(&police.Rate, rtab[:], rcellLog, fattrs.Mtu, linklayer) < 0 {
9090
return nil, errors.New("TBF: failed to calculate rate table")
9191
}
92-
police.Burst = uint32(Xmittime(uint64(police.Rate.Rate), uint32(buffer)))
92+
police.Burst = Xmittime(uint64(police.Rate.Rate), uint32(buffer))
9393
}
9494
police.Mtu = fattrs.Mtu
9595
if police.PeakRate.Rate != 0 {
@@ -783,7 +783,7 @@ func CalcRtable(rate *nl.TcRateSpec, rtab []uint32, cellLog int, mtu uint32, lin
783783
}
784784
for i := 0; i < 256; i++ {
785785
sz = AdjustSize(uint((i+1)<<uint32(cellLog)), uint(mpu), linklayer)
786-
rtab[i] = uint32(Xmittime(uint64(bps), uint32(sz)))
786+
rtab[i] = Xmittime(uint64(bps), uint32(sz))
787787
}
788788
rate.CellAlign = -1
789789
rate.CellLog = uint8(cellLog)

qdisc_linux.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,7 @@ func latency(rate uint64, limit, buffer uint32) float64 {
668668
return TIME_UNITS_PER_SEC*(float64(limit)/float64(rate)) - float64(tick2Time(buffer))
669669
}
670670

671-
func Xmittime(rate uint64, size uint32) float64 {
672-
return TickInUsec() * TIME_UNITS_PER_SEC * (float64(size) / float64(rate))
671+
func Xmittime(rate uint64, size uint32) uint32 {
672+
// https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/tree/tc/tc_core.c#n62
673+
return time2Tick(uint32(TIME_UNITS_PER_SEC * (float64(size) / float64(rate))))
673674
}

0 commit comments

Comments
 (0)