xref: /aosp_15_r20/external/libnl/python/netlink/route/qdisc/htb.py (revision 4dc78e53d49367fa8e61b07018507c90983a077d)
1*4dc78e53SAndroid Build Coastguard Worker#
2*4dc78e53SAndroid Build Coastguard Worker# Copyright (c) 2011 Thomas Graf <[email protected]>
3*4dc78e53SAndroid Build Coastguard Worker#
4*4dc78e53SAndroid Build Coastguard Worker
5*4dc78e53SAndroid Build Coastguard Worker"""HTB qdisc
6*4dc78e53SAndroid Build Coastguard Worker
7*4dc78e53SAndroid Build Coastguard Worker"""
8*4dc78e53SAndroid Build Coastguard Worker
9*4dc78e53SAndroid Build Coastguard Workerfrom __future__ import absolute_import
10*4dc78e53SAndroid Build Coastguard Worker
11*4dc78e53SAndroid Build Coastguard Workerfrom ... import core as netlink
12*4dc78e53SAndroid Build Coastguard Workerfrom ... import util as util
13*4dc78e53SAndroid Build Coastguard Workerfrom .. import capi as capi
14*4dc78e53SAndroid Build Coastguard Workerfrom .. import tc as tc
15*4dc78e53SAndroid Build Coastguard Worker
16*4dc78e53SAndroid Build Coastguard Worker
17*4dc78e53SAndroid Build Coastguard Workerclass HTBQdisc(object):
18*4dc78e53SAndroid Build Coastguard Worker    def __init__(self, qdisc):
19*4dc78e53SAndroid Build Coastguard Worker        self._qdisc = qdisc
20*4dc78e53SAndroid Build Coastguard Worker
21*4dc78e53SAndroid Build Coastguard Worker    @property
22*4dc78e53SAndroid Build Coastguard Worker    @netlink.nlattr(type=int)
23*4dc78e53SAndroid Build Coastguard Worker    def default_class(self):
24*4dc78e53SAndroid Build Coastguard Worker        return tc.Handle(capi.rtnl_htb_get_defcls(self._qdisc._rtnl_qdisc))
25*4dc78e53SAndroid Build Coastguard Worker
26*4dc78e53SAndroid Build Coastguard Worker    @default_class.setter
27*4dc78e53SAndroid Build Coastguard Worker    def default_class(self, value):
28*4dc78e53SAndroid Build Coastguard Worker        capi.rtnl_htb_set_defcls(self._qdisc._rtnl_qdisc, int(value))
29*4dc78e53SAndroid Build Coastguard Worker
30*4dc78e53SAndroid Build Coastguard Worker    @property
31*4dc78e53SAndroid Build Coastguard Worker    @netlink.nlattr(type=int)
32*4dc78e53SAndroid Build Coastguard Worker    def r2q(self):
33*4dc78e53SAndroid Build Coastguard Worker        return capi.rtnl_htb_get_rate2quantum(self._qdisc._rtnl_qdisc)
34*4dc78e53SAndroid Build Coastguard Worker
35*4dc78e53SAndroid Build Coastguard Worker    @r2q.setter
36*4dc78e53SAndroid Build Coastguard Worker    def r2q(self, value):
37*4dc78e53SAndroid Build Coastguard Worker        capi.rtnl_htb_get_rate2quantum(self._qdisc._rtnl_qdisc, int(value))
38*4dc78e53SAndroid Build Coastguard Worker
39*4dc78e53SAndroid Build Coastguard Worker    def brief(self):
40*4dc78e53SAndroid Build Coastguard Worker        fmt = util.MyFormatter(self)
41*4dc78e53SAndroid Build Coastguard Worker
42*4dc78e53SAndroid Build Coastguard Worker        ret = " {s|default-class!k} {a|default_class}"
43*4dc78e53SAndroid Build Coastguard Worker
44*4dc78e53SAndroid Build Coastguard Worker        if self.r2q:
45*4dc78e53SAndroid Build Coastguard Worker            ret += " {s|r2q!k} {a|r2q}"
46*4dc78e53SAndroid Build Coastguard Worker
47*4dc78e53SAndroid Build Coastguard Worker        return fmt.format(ret)
48*4dc78e53SAndroid Build Coastguard Worker
49*4dc78e53SAndroid Build Coastguard Worker
50*4dc78e53SAndroid Build Coastguard Workerclass HTBClass(object):
51*4dc78e53SAndroid Build Coastguard Worker    def __init__(self, cl):
52*4dc78e53SAndroid Build Coastguard Worker        self._class = cl
53*4dc78e53SAndroid Build Coastguard Worker
54*4dc78e53SAndroid Build Coastguard Worker    @property
55*4dc78e53SAndroid Build Coastguard Worker    @netlink.nlattr(type=str)
56*4dc78e53SAndroid Build Coastguard Worker    def rate(self):
57*4dc78e53SAndroid Build Coastguard Worker        rate = capi.rtnl_htb_get_rate(self._class._rtnl_class)
58*4dc78e53SAndroid Build Coastguard Worker        return util.Rate(rate)
59*4dc78e53SAndroid Build Coastguard Worker
60*4dc78e53SAndroid Build Coastguard Worker    @rate.setter
61*4dc78e53SAndroid Build Coastguard Worker    def rate(self, value):
62*4dc78e53SAndroid Build Coastguard Worker        capi.rtnl_htb_set_rate(self._class._rtnl_class, int(value))
63*4dc78e53SAndroid Build Coastguard Worker
64*4dc78e53SAndroid Build Coastguard Worker    @property
65*4dc78e53SAndroid Build Coastguard Worker    @netlink.nlattr(type=str)
66*4dc78e53SAndroid Build Coastguard Worker    def ceil(self):
67*4dc78e53SAndroid Build Coastguard Worker        ceil = capi.rtnl_htb_get_ceil(self._class._rtnl_class)
68*4dc78e53SAndroid Build Coastguard Worker        return util.Rate(ceil)
69*4dc78e53SAndroid Build Coastguard Worker
70*4dc78e53SAndroid Build Coastguard Worker    @ceil.setter
71*4dc78e53SAndroid Build Coastguard Worker    def ceil(self, value):
72*4dc78e53SAndroid Build Coastguard Worker        capi.rtnl_htb_set_ceil(self._class._rtnl_class, int(value))
73*4dc78e53SAndroid Build Coastguard Worker
74*4dc78e53SAndroid Build Coastguard Worker    @property
75*4dc78e53SAndroid Build Coastguard Worker    @netlink.nlattr(type=str)
76*4dc78e53SAndroid Build Coastguard Worker    def burst(self):
77*4dc78e53SAndroid Build Coastguard Worker        burst = capi.rtnl_htb_get_rbuffer(self._class._rtnl_class)
78*4dc78e53SAndroid Build Coastguard Worker        return util.Size(burst)
79*4dc78e53SAndroid Build Coastguard Worker
80*4dc78e53SAndroid Build Coastguard Worker    @burst.setter
81*4dc78e53SAndroid Build Coastguard Worker    def burst(self, value):
82*4dc78e53SAndroid Build Coastguard Worker        capi.rtnl_htb_set_rbuffer(self._class._rtnl_class, int(value))
83*4dc78e53SAndroid Build Coastguard Worker
84*4dc78e53SAndroid Build Coastguard Worker    @property
85*4dc78e53SAndroid Build Coastguard Worker    @netlink.nlattr(type=str)
86*4dc78e53SAndroid Build Coastguard Worker    def ceil_burst(self):
87*4dc78e53SAndroid Build Coastguard Worker        burst = capi.rtnl_htb_get_cbuffer(self._class._rtnl_class)
88*4dc78e53SAndroid Build Coastguard Worker        return util.Size(burst)
89*4dc78e53SAndroid Build Coastguard Worker
90*4dc78e53SAndroid Build Coastguard Worker    @ceil_burst.setter
91*4dc78e53SAndroid Build Coastguard Worker    def ceil_burst(self, value):
92*4dc78e53SAndroid Build Coastguard Worker        capi.rtnl_htb_set_cbuffer(self._class._rtnl_class, int(value))
93*4dc78e53SAndroid Build Coastguard Worker
94*4dc78e53SAndroid Build Coastguard Worker    @property
95*4dc78e53SAndroid Build Coastguard Worker    @netlink.nlattr(type=int)
96*4dc78e53SAndroid Build Coastguard Worker    def prio(self):
97*4dc78e53SAndroid Build Coastguard Worker        return capi.rtnl_htb_get_prio(self._class._rtnl_class)
98*4dc78e53SAndroid Build Coastguard Worker
99*4dc78e53SAndroid Build Coastguard Worker    @prio.setter
100*4dc78e53SAndroid Build Coastguard Worker    def prio(self, value):
101*4dc78e53SAndroid Build Coastguard Worker        capi.rtnl_htb_set_prio(self._class._rtnl_class, int(value))
102*4dc78e53SAndroid Build Coastguard Worker
103*4dc78e53SAndroid Build Coastguard Worker    @property
104*4dc78e53SAndroid Build Coastguard Worker    @netlink.nlattr(type=int)
105*4dc78e53SAndroid Build Coastguard Worker    def quantum(self):
106*4dc78e53SAndroid Build Coastguard Worker        return capi.rtnl_htb_get_quantum(self._class._rtnl_class)
107*4dc78e53SAndroid Build Coastguard Worker
108*4dc78e53SAndroid Build Coastguard Worker    @quantum.setter
109*4dc78e53SAndroid Build Coastguard Worker    def quantum(self, value):
110*4dc78e53SAndroid Build Coastguard Worker        capi.rtnl_htb_set_quantum(self._class._rtnl_class, int(value))
111*4dc78e53SAndroid Build Coastguard Worker
112*4dc78e53SAndroid Build Coastguard Worker    @property
113*4dc78e53SAndroid Build Coastguard Worker    @netlink.nlattr(type=int)
114*4dc78e53SAndroid Build Coastguard Worker    def level(self):
115*4dc78e53SAndroid Build Coastguard Worker        return capi.rtnl_htb_get_level(self._class._rtnl_class)
116*4dc78e53SAndroid Build Coastguard Worker
117*4dc78e53SAndroid Build Coastguard Worker    @level.setter
118*4dc78e53SAndroid Build Coastguard Worker    def level(self, value):
119*4dc78e53SAndroid Build Coastguard Worker        capi.rtnl_htb_set_level(self._class._rtnl_class, int(value))
120*4dc78e53SAndroid Build Coastguard Worker
121*4dc78e53SAndroid Build Coastguard Worker    def brief(self):
122*4dc78e53SAndroid Build Coastguard Worker        fmt = util.MyFormatter(self)
123*4dc78e53SAndroid Build Coastguard Worker
124*4dc78e53SAndroid Build Coastguard Worker        ret = " {t|prio} {t|rate}"
125*4dc78e53SAndroid Build Coastguard Worker
126*4dc78e53SAndroid Build Coastguard Worker        if self.rate != self.ceil:
127*4dc78e53SAndroid Build Coastguard Worker            ret += " {s|borrow-up-to!k} {a|ceil}"
128*4dc78e53SAndroid Build Coastguard Worker
129*4dc78e53SAndroid Build Coastguard Worker        ret += " {t|burst}"
130*4dc78e53SAndroid Build Coastguard Worker
131*4dc78e53SAndroid Build Coastguard Worker        return fmt.format(ret)
132*4dc78e53SAndroid Build Coastguard Worker
133*4dc78e53SAndroid Build Coastguard Worker    def details(self):
134*4dc78e53SAndroid Build Coastguard Worker        fmt = util.MyFormatter(self)
135*4dc78e53SAndroid Build Coastguard Worker
136*4dc78e53SAndroid Build Coastguard Worker        return fmt.nl("\t{t|level} {t|quantum}")
137*4dc78e53SAndroid Build Coastguard Worker
138*4dc78e53SAndroid Build Coastguard Worker
139*4dc78e53SAndroid Build Coastguard Workerdef init_qdisc(qdisc):
140*4dc78e53SAndroid Build Coastguard Worker    qdisc.htb = HTBQdisc(qdisc)
141*4dc78e53SAndroid Build Coastguard Worker    return qdisc.htb
142*4dc78e53SAndroid Build Coastguard Worker
143*4dc78e53SAndroid Build Coastguard Worker
144*4dc78e53SAndroid Build Coastguard Workerdef init_class(cl):
145*4dc78e53SAndroid Build Coastguard Worker    cl.htb = HTBClass(cl)
146*4dc78e53SAndroid Build Coastguard Worker    return cl.htb
147*4dc78e53SAndroid Build Coastguard Worker
148*4dc78e53SAndroid Build Coastguard Worker
149*4dc78e53SAndroid Build Coastguard Worker# extern void rtnl_htb_set_quantum(struct rtnl_class *, uint32_t quantum);
150