Exemple #1
0
 def __init__(self, latency, limit=1000, loss=0, gap=0, duplicate=0, jitter=0):
     """Latency is in microseconds [us]"""
     latency_ticks = nl_us2ticks(latency)
     jitter_ticks = nl_us2ticks(jitter)
     data = self.data_format.pack(latency_ticks, limit, loss,
                                  gap, duplicate, jitter_ticks)
     Attr.__init__(self, TCA_OPTIONS, data)
Exemple #2
0
 def __init__(self,
              latency,
              limit=1000,
              loss=0,
              gap=0,
              duplicate=0,
              jitter=0):
     """Latency is in microseconds [us]"""
     latency_ticks = nl_us2ticks(latency)
     jitter_ticks = nl_us2ticks(jitter)
     data = self.data_format.pack(latency_ticks, limit, loss, gap,
                                  duplicate, jitter_ticks)
     Attr.__init__(self, TCA_OPTIONS, data)
Exemple #3
0
 def __init__(self, rate, ceil=0, mtu=1600, quantum=0, prio=0):
     """
     rate, ceil, mtu: bytes
     """
     if not ceil: ceil = rate
     r = self.tc_ratespec.pack(3, 0, -1, 0, rate)
     c = self.tc_ratespec.pack(3, 0, -1, 0, ceil)
     hz = os.sysconf('SC_CLK_TCK')
     buffer = tc_calc_xmittime(rate, (rate / hz) + mtu)
     cbuffer = tc_calc_xmittime(ceil, (rate / hz) + mtu)
     t = self.tc_htb_opt.pack(buffer, cbuffer, quantum, 0, prio)
     data = r + c + t
     Attr.__init__(self, TCA_HTB_PARMS, data)
Exemple #4
0
 def __init__(self, ifindex):
     tc_mirred_parms = Attr(TCA_MIRRED_PARMS,
                            self.data_format.pack(0, 0, TCA_INGRESS_MIRROR, 0, 0,
                                                  TCA_EGRESS_REDIR, ifindex))
     kind = Attr(TCA_ACT_KIND, "mirred\0")
     options = Attr(TCA_ACT_OPTIONS, tc_mirred_parms.pack())
     redir = Attr(TCA_EGRESS_REDIR, kind.pack()+options.pack())
     super(u32_mirred_action, self).__init__(TCA_U32_ACT, redir.pack())
Exemple #5
0
 def test_drop(self):
     self.assertEqual(os.getuid(), pwd.getpwnam("root").pw_uid,
                         "You have to be root to run this test")
     
     # import netlink a create a connection as root
     from shapy.framework import netlink
     
     # http://stackoverflow.com/questions/2699907/dropping-root-permissions-in-python
     # drop privileges to nobody
     os.setuid(pwd.getpwnam("nobody").pw_uid)
     #os.setgid(grp.getgrnam("nogroup").gr_gid)
     #os.setgroups([])
     
     # try to do operation on a netlink socket while being an unprivileged user
     from shapy.framework.netlink.message import Message, Attr
     from shapy.framework.netlink.tc import tcmsg
     
     tcm = tcmsg(socket.AF_UNSPEC, self.if_index, self.qhandle, TC_H_ROOT, 0,
                 [Attr(TCA_KIND, 'pfifo\0')])
     msg = Message(type=RTM_NEWQDISC,
                   flags=NLM_F_EXCL | NLM_F_CREATE | NLM_F_REQUEST | NLM_F_ACK,
                   service_template=tcm)
     
     netlink.connection.send(msg)
     
     # and observe we are out of luck :/
     self.assertRaisesRegexp(OSError, "Operation not permitted",
                             netlink.connection.recv)
Exemple #6
0
class IngressQdisc(QdiscClassless):
    attrs = [Attr(TCA_KIND, 'ingress\0')]
    
    def __init__(self, handle='ffff:', **kwargs):
        QdiscClassless.__init__(self, handle, **kwargs)
    
    def get_context(self):
        return {'interface': self.interface,
                'parent': TC_H_INGRESS}
Exemple #7
0
 def __init__(self, bands=3, priomap="1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1"):
     pm = [ int(p) for p in priomap.split() ]
     data = self.data_format.pack(bands, *pm)
     Attr.__init__(self, TCA_OPTIONS, data)
Exemple #8
0
 def unpack(cls, data):
     attr, rest = Attr.unpack(data)
     opts = cls.data_struct._make(cls.data_format.unpack(attr.payload))
     opts = opts._replace(latency=nl_ticks2us(opts.latency))
     return cls(*opts), rest
Exemple #9
0
 def unpack(cls, data):
     attr, rest = Attr.unpack(data)
     data = self.data_format.unpack(attr.payload)
     opts = cls.data_struct._make((data[0], data[1:]))
     return cls(opts.bands, opts.priomap), rest
Exemple #10
0
 def unpack(cls, data):
     attr, rest = Attr.unpack(data)
     data = self.data_format.unpack(attr.payload)
     opts = cls.data_struct._make((data[0], data[1:]))
     return cls(opts.bands, opts.priomap), rest
Exemple #11
0
 def __init__(self, bands=3, priomap="1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1"):
     pm = [int(p) for p in priomap.split()]
     data = self.data_format.pack(bands, *pm)
     Attr.__init__(self, TCA_OPTIONS, data)
Exemple #12
0
class HTBQdisc(QdiscClassful):
    attrs = [Attr(TCA_KIND, 'htb\0'),
             HTBQdiscAttr(defcls=settings.HTB_DEFAULT_CLASS)]
Exemple #13
0
class PRIOQdisc(QdiscClassful):
    attrs = [Attr(TCA_KIND, 'prio\0'), PrioQdiscAttr()]
Exemple #14
0
 def __init__(self, defcls, r2q=10):
     data = self.data_format.pack(0x20018, 3, r2q, defcls, 0, 0)
     Attr.__init__(self, TCA_OPTIONS, data)
Exemple #15
0
 def unpack(cls, data):
     attr, rest = Attr.unpack(data)
     opts = cls.data_struct._make(cls.data_format.unpack(attr.payload))
     opts = opts._replace(latency=nl_ticks2us(opts.latency))
     return cls(*opts), rest
Exemple #16
0
class pfifoQdisc(QdiscClassless):
    attrs = [Attr(TCA_KIND, 'pfifo\0')]
Exemple #17
0
 def __init__(self, rate, mtu, cell_log=3):
     rtab = tc_calc_rtable(rate, cell_log, mtu)
     data = self.data_format.pack(*rtab)
     Attr.__init__(self, TCA_HTB_CTAB, data)
Exemple #18
0
 def unpack(cls, data):
     attr, rest = Attr.unpack(data)
     d = cls.data_format.unpack(attr.data)
     return cls(d[0], d[1], d[5], d[7])
Exemple #19
0
 def __init__(self, handle, latency, jitter, **kwargs):
     self.attrs = [Attr(TCA_KIND, 'netem\0'),
                   NetemOptions(latency*1000, jitter=jitter*1000)]
     QdiscClassless.__init__(self, handle, **kwargs)
Exemple #20
0
 def __init__(self, ifindex):
     tc_mirred_parms = Attr(
         TCA_MIRRED_PARMS,
         self.data_format.pack(0, 0, TCA_INGRESS_MIRROR, 0, 0,
                               TCA_EGRESS_REDIR, ifindex))
     kind = Attr(TCA_ACT_KIND, "mirred\0")
     options = Attr(TCA_ACT_OPTIONS, tc_mirred_parms.pack())
     redir = Attr(TCA_EGRESS_REDIR, kind.pack() + options.pack())
     super(u32_mirred_action, self).__init__(TCA_U32_ACT, redir.pack())