diff options
Diffstat (limited to 'python/netlink/route/qdisc/htb.py')
-rw-r--r-- | python/netlink/route/qdisc/htb.py | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/python/netlink/route/qdisc/htb.py b/python/netlink/route/qdisc/htb.py new file mode 100644 index 0000000..13e10f2 --- /dev/null +++ b/python/netlink/route/qdisc/htb.py @@ -0,0 +1,161 @@ +# +# Copyright (c) 2011 Thomas Graf <tgraf@suug.ch> +# + +"""HTB qdisc + +""" + +import netlink.core as netlink +import netlink.util as util +import netlink.route.capi as capi +import netlink.route.tc as tc + +class HTBQdisc(object): + def __init__(self, qdisc): + self._qdisc = qdisc + + ################################################################### + # default class + @netlink.nlattr('qdisc.htb.default_class', type=int) + @property + def default_class(self): + return tc.Handle(capi.rtnl_htb_get_defcls(self._qdisc._rtnl_qdisc)) + + @default_class.setter + def default_class(self, value): + capi.rtnl_htb_set_defcls(self._qdisc._rtnl_qdisc, int(value)) + + ##################################################################### + # r2q + @netlink.nlattr('qdisc.htb.r2q', type=int) + @property + def r2q(self): + return capi.rtnl_htb_get_rate2quantum(self._qdisc._rtnl_qdisc) + + @r2q.setter + def r2q(self, value): + capi.rtnl_htb_get_rate2quantum(self._qdisc._rtnl_qdisc, + int(value)) + + def brief(self): + fmt = util.MyFormatter(self) + + ret = ' {s|default-class!k} {a|default_class}' + + if self.r2q: + ret += ' {s|r2q!k} {a|r2q}' + + return fmt.format(ret) + +class HTBClass(object): + def __init__(self, cl): + self._class = cl + + ##################################################################### + # rate + @netlink.nlattr('class.htb.rate', type=str) + @property + def rate(self): + rate = capi.rtnl_htb_get_rate(self._class._rtnl_class) + return util.Rate(rate) + + @rate.setter + def rate(self, value): + capi.rtnl_htb_set_rate(self._class._rtnl_class, int(value)) + + ##################################################################### + # ceil + @netlink.nlattr('class.htb.ceil', type=str) + @property + def ceil(self): + ceil = capi.rtnl_htb_get_ceil(self._class._rtnl_class) + return util.Rate(ceil) + + @ceil.setter + def ceil(self, value): + capi.rtnl_htb_set_ceil(self._class._rtnl_class, int(value)) + + ##################################################################### + # burst + @netlink.nlattr('class.htb.burst', type=str) + @property + def burst(self): + burst = capi.rtnl_htb_get_rbuffer(self._class._rtnl_class) + return util.Size(burst) + + @burst.setter + def burst(self, value): + capi.rtnl_htb_set_rbuffer(self._class._rtnl_class, int(value)) + + ##################################################################### + # ceil burst + @netlink.nlattr('class.htb.ceil_burst', type=str) + @property + def ceil_burst(self): + burst = capi.rtnl_htb_get_cbuffer(self._class._rtnl_class) + return util.Size(burst) + + @ceil_burst.setter + def ceil_burst(self, value): + capi.rtnl_htb_set_cbuffer(self._class._rtnl_class, int(value)) + + ##################################################################### + # priority + @netlink.nlattr('class.htb.prio', type=int) + @property + def prio(self): + return capi.rtnl_htb_get_prio(self._class._rtnl_class) + + @prio.setter + def prio(self, value): + capi.rtnl_htb_set_prio(self._class._rtnl_class, int(value)) + + ##################################################################### + # quantum + @netlink.nlattr('class.htb.quantum', type=int) + @property + def quantum(self): + return capi.rtnl_htb_get_quantum(self._class._rtnl_class) + + @quantum.setter + def quantum(self, value): + capi.rtnl_htb_set_quantum(self._class._rtnl_class, int(value)) + + ##################################################################### + # level + @netlink.nlattr('class.htb.level', type=int) + @property + def level(self): + level = capi.rtnl_htb_get_level(self._class._rtnl_class) + + @level.setter + def level(self, value): + capi.rtnl_htb_set_level(self._class._rtnl_class, int(value)) + + def brief(self): + fmt = util.MyFormatter(self) + + ret = ' {t|prio} {t|rate}' + + if self.rate != self.ceil: + ret += ' {s|borrow-up-to!k} {a|ceil}' + + ret += ' {t|burst}' + + return fmt.format(ret) + + def details(self): + fmt = util.MyFormatter(self) + + return fmt.nl('\t{t|level} {t|quantum}') + +def init_qdisc(qdisc): + qdisc.htb = HTBQdisc(qdisc) + return qdisc.htb + +def init_class(cl): + cl.htb = HTBClass(cl) + return cl.htb + +#extern void rtnl_htb_set_quantum(struct rtnl_class *, uint32_t quantum); |