Skip to content

Instantly share code, notes, and snippets.

@notchi590
Created March 17, 2021 01:39
Show Gist options
  • Save notchi590/9d404ca97f30fc11121afa3ddffcce0c to your computer and use it in GitHub Desktop.
Save notchi590/9d404ca97f30fc11121afa3ddffcce0c to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"log"
"time"
"github.com/vishvananda/netlink"
)
func main() {
l, err := netlink.LinkByName("lo")
if err != nil {
panic(err)
}
log.Println("Qdisc test start")
for {
var bw uint64
fmt.Scan(&bw)
bandwidth := bw // Kbits
rate := uint64(bandwidth) * 1000 / 8
buffer := uint32(bandwidth * 1000 / 250)
if buffer < 32000 {
buffer = uint32(32000)
}
limit := uint32(rate/10) + buffer
log.Printf("rate: %d\n", rate)
log.Printf("burst: %d\n", buffer)
log.Printf("buffer: %d\n", buffer*1000/8)
log.Printf("limit: %d\n", limit)
tbf := &netlink.Tbf{
QdiscAttrs: netlink.QdiscAttrs{
LinkIndex: l.Attrs().Index,
Handle: netlink.MakeHandle(1, 0),
Parent: netlink.HANDLE_ROOT,
},
Rate: rate,
Limit: limit,
Buffer: buffer * 1000 / 8, // buffer uint is millibyte...
Minburst: 1540,
}
err = netlink.QdiscAdd(tbf)
if err != nil {
log.Fatalf("QdiskAdd error: %s\n", err)
}
qdiscs, _ := netlink.QdiscList(l)
log.Println("Qdisk set done")
log.Printf("%#v\n", qdiscs[0])
time.Sleep(10 * time.Second)
err = netlink.QdiscDel(tbf)
if err != nil {
log.Fatalf("QdiskDel error: %s", err)
}
log.Println("Qdisc delete done")
}
log.Println("Qdisc test end")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment