123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- #
- # Copyright (c) 2011 Thomas Graf <tgraf@suug.ch>
- #
- """HTB qdisc
- """
- from __future__ import absolute_import
- from ... import core as netlink
- from ... import util as util
- from .. import capi as capi
- from .. import tc as tc
- class HTBQdisc(object):
- def __init__(self, qdisc):
- self._qdisc = qdisc
- @property
- @netlink.nlattr(type=int)
- 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))
- @property
- @netlink.nlattr('r2q', type=int)
- 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
- @property
- @netlink.nlattr(type=str)
- 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))
- @property
- @netlink.nlattr(type=str)
- 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))
- @property
- @netlink.nlattr(type=str)
- 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))
- @property
- @netlink.nlattr(type=str)
- 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))
- @property
- @netlink.nlattr(type=int)
- 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))
- @property
- @netlink.nlattr(type=int)
- 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))
- @property
- @netlink.nlattr(type=int)
- def level(self):
- return 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);
|