Work on libnl-python
Changes too numerous to describe them
This commit is contained in:
parent
09210d9619
commit
e56eb065b2
20 changed files with 21477 additions and 323 deletions
BIN
python/netlink/__init__.pyc
Normal file
BIN
python/netlink/__init__.pyc
Normal file
Binary file not shown.
|
@ -120,6 +120,8 @@ extern const char *nl_geterror(int);
|
|||
|
||||
extern double nl_cancel_down_bytes(unsigned long long, char **);
|
||||
extern double nl_cancel_down_bits(unsigned long long, char **);
|
||||
%cstring_output_maxsize(char *buf, size_t len)
|
||||
extern int nl_rate2str(unsigned long long rate, int type, char *buf, size_t len);
|
||||
extern double nl_cancel_down_us(uint32_t, char **);
|
||||
|
||||
extern long nl_size2int(const char *);
|
||||
|
|
773
python/netlink/capi.py
Normal file
773
python/netlink/capi.py
Normal file
|
@ -0,0 +1,773 @@
|
|||
# This file was automatically generated by SWIG (http://www.swig.org).
|
||||
# Version 1.3.40
|
||||
#
|
||||
# Do not make changes to this file unless you know what you are doing--modify
|
||||
# the SWIG interface file instead.
|
||||
|
||||
from sys import version_info
|
||||
if version_info >= (3,0,0):
|
||||
new_instancemethod = lambda func, inst, cls: _capi.SWIG_PyInstanceMethod_New(func)
|
||||
else:
|
||||
from new import instancemethod as new_instancemethod
|
||||
if version_info >= (2,6,0):
|
||||
def swig_import_helper():
|
||||
from os.path import dirname
|
||||
import imp
|
||||
fp = None
|
||||
try:
|
||||
fp, pathname, description = imp.find_module('_capi', [dirname(__file__)])
|
||||
except ImportError:
|
||||
import _capi
|
||||
return _capi
|
||||
if fp is not None:
|
||||
try:
|
||||
_mod = imp.load_module('_capi', fp, pathname, description)
|
||||
finally:
|
||||
fp.close()
|
||||
return _mod
|
||||
_capi = swig_import_helper()
|
||||
del swig_import_helper
|
||||
else:
|
||||
import _capi
|
||||
del version_info
|
||||
try:
|
||||
_swig_property = property
|
||||
except NameError:
|
||||
pass # Python < 2.2 doesn't have 'property'.
|
||||
def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
|
||||
if (name == "thisown"): return self.this.own(value)
|
||||
if (name == "this"):
|
||||
if type(value).__name__ == 'SwigPyObject':
|
||||
self.__dict__[name] = value
|
||||
return
|
||||
method = class_type.__swig_setmethods__.get(name,None)
|
||||
if method: return method(self,value)
|
||||
if (not static) or hasattr(self,name):
|
||||
self.__dict__[name] = value
|
||||
else:
|
||||
raise AttributeError("You cannot add attributes to %s" % self)
|
||||
|
||||
def _swig_setattr(self,class_type,name,value):
|
||||
return _swig_setattr_nondynamic(self,class_type,name,value,0)
|
||||
|
||||
def _swig_getattr(self,class_type,name):
|
||||
if (name == "thisown"): return self.this.own()
|
||||
method = class_type.__swig_getmethods__.get(name,None)
|
||||
if method: return method(self)
|
||||
raise AttributeError(name)
|
||||
|
||||
def _swig_repr(self):
|
||||
try: strthis = "proxy of " + self.this.__repr__()
|
||||
except: strthis = ""
|
||||
return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
|
||||
|
||||
try:
|
||||
_object = object
|
||||
_newclass = 1
|
||||
except AttributeError:
|
||||
class _object : pass
|
||||
_newclass = 0
|
||||
|
||||
|
||||
def _swig_setattr_nondynamic_method(set):
|
||||
def set_attr(self,name,value):
|
||||
if (name == "thisown"): return self.this.own(value)
|
||||
if hasattr(self,name) or (name == "this"):
|
||||
set(self,name,value)
|
||||
else:
|
||||
raise AttributeError("You cannot add attributes to %s" % self)
|
||||
return set_attr
|
||||
|
||||
|
||||
|
||||
def alloc_dump_params():
|
||||
return _capi.alloc_dump_params()
|
||||
alloc_dump_params = _capi.alloc_dump_params
|
||||
|
||||
def free_dump_params(*args):
|
||||
return _capi.free_dump_params(*args)
|
||||
free_dump_params = _capi.free_dump_params
|
||||
NL_DUMP_LINE = _capi.NL_DUMP_LINE
|
||||
NL_DUMP_DETAILS = _capi.NL_DUMP_DETAILS
|
||||
NL_DUMP_STATS = _capi.NL_DUMP_STATS
|
||||
__NL_DUMP_MAX = _capi.__NL_DUMP_MAX
|
||||
class nl_dump_params(object):
|
||||
thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
|
||||
def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
|
||||
__repr__ = _swig_repr
|
||||
dp_type = _swig_property(_capi.nl_dump_params_dp_type_get, _capi.nl_dump_params_dp_type_set)
|
||||
dp_prefix = _swig_property(_capi.nl_dump_params_dp_prefix_get, _capi.nl_dump_params_dp_prefix_set)
|
||||
dp_print_index = _swig_property(_capi.nl_dump_params_dp_print_index_get, _capi.nl_dump_params_dp_print_index_set)
|
||||
dp_dump_msgtype = _swig_property(_capi.nl_dump_params_dp_dump_msgtype_get, _capi.nl_dump_params_dp_dump_msgtype_set)
|
||||
dp_cb = _swig_property(_capi.nl_dump_params_dp_cb_get, _capi.nl_dump_params_dp_cb_set)
|
||||
dp_nl_cb = _swig_property(_capi.nl_dump_params_dp_nl_cb_get, _capi.nl_dump_params_dp_nl_cb_set)
|
||||
dp_data = _swig_property(_capi.nl_dump_params_dp_data_get, _capi.nl_dump_params_dp_data_set)
|
||||
dp_fd = _swig_property(_capi.nl_dump_params_dp_fd_get, _capi.nl_dump_params_dp_fd_set)
|
||||
dp_buf = _swig_property(_capi.nl_dump_params_dp_buf_get, _capi.nl_dump_params_dp_buf_set)
|
||||
dp_buflen = _swig_property(_capi.nl_dump_params_dp_buflen_get, _capi.nl_dump_params_dp_buflen_set)
|
||||
dp_pre_dump = _swig_property(_capi.nl_dump_params_dp_pre_dump_get, _capi.nl_dump_params_dp_pre_dump_set)
|
||||
dp_ivar = _swig_property(_capi.nl_dump_params_dp_ivar_get, _capi.nl_dump_params_dp_ivar_set)
|
||||
dp_line = _swig_property(_capi.nl_dump_params_dp_line_get, _capi.nl_dump_params_dp_line_set)
|
||||
__swig_destroy__ = _capi.delete_nl_dump_params
|
||||
nl_dump_params_swigregister = _capi.nl_dump_params_swigregister
|
||||
nl_dump_params_swigregister(nl_dump_params)
|
||||
|
||||
|
||||
def nl_geterror(*args):
|
||||
return _capi.nl_geterror(*args)
|
||||
nl_geterror = _capi.nl_geterror
|
||||
|
||||
def nl_cancel_down_bytes(*args):
|
||||
return _capi.nl_cancel_down_bytes(*args)
|
||||
nl_cancel_down_bytes = _capi.nl_cancel_down_bytes
|
||||
|
||||
def nl_cancel_down_bits(*args):
|
||||
return _capi.nl_cancel_down_bits(*args)
|
||||
nl_cancel_down_bits = _capi.nl_cancel_down_bits
|
||||
|
||||
def nl_rate2str(*args):
|
||||
return _capi.nl_rate2str(*args)
|
||||
nl_rate2str = _capi.nl_rate2str
|
||||
|
||||
def nl_cancel_down_us(*args):
|
||||
return _capi.nl_cancel_down_us(*args)
|
||||
nl_cancel_down_us = _capi.nl_cancel_down_us
|
||||
|
||||
def nl_size2int(*args):
|
||||
return _capi.nl_size2int(*args)
|
||||
nl_size2int = _capi.nl_size2int
|
||||
|
||||
def nl_size2str(*args):
|
||||
return _capi.nl_size2str(*args)
|
||||
nl_size2str = _capi.nl_size2str
|
||||
|
||||
def nl_prob2int(*args):
|
||||
return _capi.nl_prob2int(*args)
|
||||
nl_prob2int = _capi.nl_prob2int
|
||||
|
||||
def nl_get_user_hz():
|
||||
return _capi.nl_get_user_hz()
|
||||
nl_get_user_hz = _capi.nl_get_user_hz
|
||||
|
||||
def nl_us2ticks(*args):
|
||||
return _capi.nl_us2ticks(*args)
|
||||
nl_us2ticks = _capi.nl_us2ticks
|
||||
|
||||
def nl_ticks2us(*args):
|
||||
return _capi.nl_ticks2us(*args)
|
||||
nl_ticks2us = _capi.nl_ticks2us
|
||||
|
||||
def nl_str2msec(*args):
|
||||
return _capi.nl_str2msec(*args)
|
||||
nl_str2msec = _capi.nl_str2msec
|
||||
|
||||
def nl_msec2str(*args):
|
||||
return _capi.nl_msec2str(*args)
|
||||
nl_msec2str = _capi.nl_msec2str
|
||||
|
||||
def nl_llproto2str(*args):
|
||||
return _capi.nl_llproto2str(*args)
|
||||
nl_llproto2str = _capi.nl_llproto2str
|
||||
|
||||
def nl_str2llproto(*args):
|
||||
return _capi.nl_str2llproto(*args)
|
||||
nl_str2llproto = _capi.nl_str2llproto
|
||||
|
||||
def nl_ether_proto2str(*args):
|
||||
return _capi.nl_ether_proto2str(*args)
|
||||
nl_ether_proto2str = _capi.nl_ether_proto2str
|
||||
|
||||
def nl_str2ether_proto(*args):
|
||||
return _capi.nl_str2ether_proto(*args)
|
||||
nl_str2ether_proto = _capi.nl_str2ether_proto
|
||||
|
||||
def nl_ip_proto2str(*args):
|
||||
return _capi.nl_ip_proto2str(*args)
|
||||
nl_ip_proto2str = _capi.nl_ip_proto2str
|
||||
|
||||
def nl_str2ip_proto(*args):
|
||||
return _capi.nl_str2ip_proto(*args)
|
||||
nl_str2ip_proto = _capi.nl_str2ip_proto
|
||||
|
||||
def nl_new_line(*args):
|
||||
return _capi.nl_new_line(*args)
|
||||
nl_new_line = _capi.nl_new_line
|
||||
|
||||
def nl_dump(*args):
|
||||
return _capi.nl_dump(*args)
|
||||
nl_dump = _capi.nl_dump
|
||||
|
||||
def nl_dump_line(*args):
|
||||
return _capi.nl_dump_line(*args)
|
||||
nl_dump_line = _capi.nl_dump_line
|
||||
|
||||
def nl_connect(*args):
|
||||
return _capi.nl_connect(*args)
|
||||
nl_connect = _capi.nl_connect
|
||||
|
||||
def nl_close(*args):
|
||||
return _capi.nl_close(*args)
|
||||
nl_close = _capi.nl_close
|
||||
|
||||
def nl_pickup(*args):
|
||||
return _capi.nl_pickup(*args)
|
||||
nl_pickup = _capi.nl_pickup
|
||||
|
||||
def nl_socket_alloc():
|
||||
return _capi.nl_socket_alloc()
|
||||
nl_socket_alloc = _capi.nl_socket_alloc
|
||||
|
||||
def nl_socket_alloc_cb(*args):
|
||||
return _capi.nl_socket_alloc_cb(*args)
|
||||
nl_socket_alloc_cb = _capi.nl_socket_alloc_cb
|
||||
|
||||
def nl_socket_free(*args):
|
||||
return _capi.nl_socket_free(*args)
|
||||
nl_socket_free = _capi.nl_socket_free
|
||||
|
||||
def nl_socket_get_local_port(*args):
|
||||
return _capi.nl_socket_get_local_port(*args)
|
||||
nl_socket_get_local_port = _capi.nl_socket_get_local_port
|
||||
|
||||
def nl_socket_set_local_port(*args):
|
||||
return _capi.nl_socket_set_local_port(*args)
|
||||
nl_socket_set_local_port = _capi.nl_socket_set_local_port
|
||||
|
||||
def nl_socket_get_peer_port(*args):
|
||||
return _capi.nl_socket_get_peer_port(*args)
|
||||
nl_socket_get_peer_port = _capi.nl_socket_get_peer_port
|
||||
|
||||
def nl_socket_set_peer_port(*args):
|
||||
return _capi.nl_socket_set_peer_port(*args)
|
||||
nl_socket_set_peer_port = _capi.nl_socket_set_peer_port
|
||||
|
||||
def nl_socket_get_peer_groups(*args):
|
||||
return _capi.nl_socket_get_peer_groups(*args)
|
||||
nl_socket_get_peer_groups = _capi.nl_socket_get_peer_groups
|
||||
|
||||
def nl_socket_set_peer_groups(*args):
|
||||
return _capi.nl_socket_set_peer_groups(*args)
|
||||
nl_socket_set_peer_groups = _capi.nl_socket_set_peer_groups
|
||||
|
||||
def nl_socket_set_buffer_size(*args):
|
||||
return _capi.nl_socket_set_buffer_size(*args)
|
||||
nl_socket_set_buffer_size = _capi.nl_socket_set_buffer_size
|
||||
|
||||
def nlmsg_size(*args):
|
||||
return _capi.nlmsg_size(*args)
|
||||
nlmsg_size = _capi.nlmsg_size
|
||||
|
||||
def nlmsg_total_size(*args):
|
||||
return _capi.nlmsg_total_size(*args)
|
||||
nlmsg_total_size = _capi.nlmsg_total_size
|
||||
|
||||
def nlmsg_padlen(*args):
|
||||
return _capi.nlmsg_padlen(*args)
|
||||
nlmsg_padlen = _capi.nlmsg_padlen
|
||||
|
||||
def nlmsg_data(*args):
|
||||
return _capi.nlmsg_data(*args)
|
||||
nlmsg_data = _capi.nlmsg_data
|
||||
|
||||
def nlmsg_datalen(*args):
|
||||
return _capi.nlmsg_datalen(*args)
|
||||
nlmsg_datalen = _capi.nlmsg_datalen
|
||||
|
||||
def nlmsg_tail(*args):
|
||||
return _capi.nlmsg_tail(*args)
|
||||
nlmsg_tail = _capi.nlmsg_tail
|
||||
|
||||
def nlmsg_attrdata(*args):
|
||||
return _capi.nlmsg_attrdata(*args)
|
||||
nlmsg_attrdata = _capi.nlmsg_attrdata
|
||||
|
||||
def nlmsg_attrlen(*args):
|
||||
return _capi.nlmsg_attrlen(*args)
|
||||
nlmsg_attrlen = _capi.nlmsg_attrlen
|
||||
|
||||
def nlmsg_valid_hdr(*args):
|
||||
return _capi.nlmsg_valid_hdr(*args)
|
||||
nlmsg_valid_hdr = _capi.nlmsg_valid_hdr
|
||||
|
||||
def nlmsg_ok(*args):
|
||||
return _capi.nlmsg_ok(*args)
|
||||
nlmsg_ok = _capi.nlmsg_ok
|
||||
|
||||
def nlmsg_next(*args):
|
||||
return _capi.nlmsg_next(*args)
|
||||
nlmsg_next = _capi.nlmsg_next
|
||||
|
||||
def nlmsg_parse(*args):
|
||||
return _capi.nlmsg_parse(*args)
|
||||
nlmsg_parse = _capi.nlmsg_parse
|
||||
|
||||
def nlmsg_find_attr(*args):
|
||||
return _capi.nlmsg_find_attr(*args)
|
||||
nlmsg_find_attr = _capi.nlmsg_find_attr
|
||||
|
||||
def nlmsg_validate(*args):
|
||||
return _capi.nlmsg_validate(*args)
|
||||
nlmsg_validate = _capi.nlmsg_validate
|
||||
|
||||
def nlmsg_alloc():
|
||||
return _capi.nlmsg_alloc()
|
||||
nlmsg_alloc = _capi.nlmsg_alloc
|
||||
|
||||
def nlmsg_alloc_size(*args):
|
||||
return _capi.nlmsg_alloc_size(*args)
|
||||
nlmsg_alloc_size = _capi.nlmsg_alloc_size
|
||||
|
||||
def nlmsg_alloc_simple(*args):
|
||||
return _capi.nlmsg_alloc_simple(*args)
|
||||
nlmsg_alloc_simple = _capi.nlmsg_alloc_simple
|
||||
|
||||
def nlmsg_set_default_size(*args):
|
||||
return _capi.nlmsg_set_default_size(*args)
|
||||
nlmsg_set_default_size = _capi.nlmsg_set_default_size
|
||||
|
||||
def nlmsg_inherit(*args):
|
||||
return _capi.nlmsg_inherit(*args)
|
||||
nlmsg_inherit = _capi.nlmsg_inherit
|
||||
|
||||
def nlmsg_convert(*args):
|
||||
return _capi.nlmsg_convert(*args)
|
||||
nlmsg_convert = _capi.nlmsg_convert
|
||||
|
||||
def nlmsg_reserve(*args):
|
||||
return _capi.nlmsg_reserve(*args)
|
||||
nlmsg_reserve = _capi.nlmsg_reserve
|
||||
|
||||
def nlmsg_append(*args):
|
||||
return _capi.nlmsg_append(*args)
|
||||
nlmsg_append = _capi.nlmsg_append
|
||||
|
||||
def nlmsg_expand(*args):
|
||||
return _capi.nlmsg_expand(*args)
|
||||
nlmsg_expand = _capi.nlmsg_expand
|
||||
|
||||
def nlmsg_put(*args):
|
||||
return _capi.nlmsg_put(*args)
|
||||
nlmsg_put = _capi.nlmsg_put
|
||||
|
||||
def nlmsg_hdr(*args):
|
||||
return _capi.nlmsg_hdr(*args)
|
||||
nlmsg_hdr = _capi.nlmsg_hdr
|
||||
|
||||
def nlmsg_get(*args):
|
||||
return _capi.nlmsg_get(*args)
|
||||
nlmsg_get = _capi.nlmsg_get
|
||||
|
||||
def nlmsg_free(*args):
|
||||
return _capi.nlmsg_free(*args)
|
||||
nlmsg_free = _capi.nlmsg_free
|
||||
|
||||
def nlmsg_set_proto(*args):
|
||||
return _capi.nlmsg_set_proto(*args)
|
||||
nlmsg_set_proto = _capi.nlmsg_set_proto
|
||||
|
||||
def nlmsg_get_proto(*args):
|
||||
return _capi.nlmsg_get_proto(*args)
|
||||
nlmsg_get_proto = _capi.nlmsg_get_proto
|
||||
|
||||
def nlmsg_get_max_size(*args):
|
||||
return _capi.nlmsg_get_max_size(*args)
|
||||
nlmsg_get_max_size = _capi.nlmsg_get_max_size
|
||||
|
||||
def nlmsg_set_src(*args):
|
||||
return _capi.nlmsg_set_src(*args)
|
||||
nlmsg_set_src = _capi.nlmsg_set_src
|
||||
|
||||
def nlmsg_get_src(*args):
|
||||
return _capi.nlmsg_get_src(*args)
|
||||
nlmsg_get_src = _capi.nlmsg_get_src
|
||||
|
||||
def nlmsg_set_dst(*args):
|
||||
return _capi.nlmsg_set_dst(*args)
|
||||
nlmsg_set_dst = _capi.nlmsg_set_dst
|
||||
|
||||
def nlmsg_get_dst(*args):
|
||||
return _capi.nlmsg_get_dst(*args)
|
||||
nlmsg_get_dst = _capi.nlmsg_get_dst
|
||||
|
||||
def nlmsg_set_creds(*args):
|
||||
return _capi.nlmsg_set_creds(*args)
|
||||
nlmsg_set_creds = _capi.nlmsg_set_creds
|
||||
|
||||
def nlmsg_get_creds(*args):
|
||||
return _capi.nlmsg_get_creds(*args)
|
||||
nlmsg_get_creds = _capi.nlmsg_get_creds
|
||||
|
||||
def nl_nlmsgtype2str(*args):
|
||||
return _capi.nl_nlmsgtype2str(*args)
|
||||
nl_nlmsgtype2str = _capi.nl_nlmsgtype2str
|
||||
|
||||
def nl_str2nlmsgtype(*args):
|
||||
return _capi.nl_str2nlmsgtype(*args)
|
||||
nl_str2nlmsgtype = _capi.nl_str2nlmsgtype
|
||||
|
||||
def nl_nlmsg_flags2str(*args):
|
||||
return _capi.nl_nlmsg_flags2str(*args)
|
||||
nl_nlmsg_flags2str = _capi.nl_nlmsg_flags2str
|
||||
|
||||
def nl_msg_parse(*args):
|
||||
return _capi.nl_msg_parse(*args)
|
||||
nl_msg_parse = _capi.nl_msg_parse
|
||||
|
||||
def nl_msg_dump(*args):
|
||||
return _capi.nl_msg_dump(*args)
|
||||
nl_msg_dump = _capi.nl_msg_dump
|
||||
|
||||
def cast_obj(*args):
|
||||
return _capi.cast_obj(*args)
|
||||
cast_obj = _capi.cast_obj
|
||||
|
||||
def object_alloc_name(*args):
|
||||
return _capi.object_alloc_name(*args)
|
||||
object_alloc_name = _capi.object_alloc_name
|
||||
|
||||
def nl_object_alloc(*args):
|
||||
return _capi.nl_object_alloc(*args)
|
||||
nl_object_alloc = _capi.nl_object_alloc
|
||||
|
||||
def nl_object_free(*args):
|
||||
return _capi.nl_object_free(*args)
|
||||
nl_object_free = _capi.nl_object_free
|
||||
|
||||
def nl_object_clone(*args):
|
||||
return _capi.nl_object_clone(*args)
|
||||
nl_object_clone = _capi.nl_object_clone
|
||||
|
||||
def nl_object_get(*args):
|
||||
return _capi.nl_object_get(*args)
|
||||
nl_object_get = _capi.nl_object_get
|
||||
|
||||
def nl_object_put(*args):
|
||||
return _capi.nl_object_put(*args)
|
||||
nl_object_put = _capi.nl_object_put
|
||||
|
||||
def nl_object_shared(*args):
|
||||
return _capi.nl_object_shared(*args)
|
||||
nl_object_shared = _capi.nl_object_shared
|
||||
|
||||
def nl_object_dump_buf(*args):
|
||||
return _capi.nl_object_dump_buf(*args)
|
||||
nl_object_dump_buf = _capi.nl_object_dump_buf
|
||||
|
||||
def nl_object_dump(*args):
|
||||
return _capi.nl_object_dump(*args)
|
||||
nl_object_dump = _capi.nl_object_dump
|
||||
|
||||
def nl_object_identical(*args):
|
||||
return _capi.nl_object_identical(*args)
|
||||
nl_object_identical = _capi.nl_object_identical
|
||||
|
||||
def nl_object_diff(*args):
|
||||
return _capi.nl_object_diff(*args)
|
||||
nl_object_diff = _capi.nl_object_diff
|
||||
|
||||
def nl_object_match_filter(*args):
|
||||
return _capi.nl_object_match_filter(*args)
|
||||
nl_object_match_filter = _capi.nl_object_match_filter
|
||||
|
||||
def nl_object_attrs2str(*args):
|
||||
return _capi.nl_object_attrs2str(*args)
|
||||
nl_object_attrs2str = _capi.nl_object_attrs2str
|
||||
|
||||
def nl_object_attr_list(*args):
|
||||
return _capi.nl_object_attr_list(*args)
|
||||
nl_object_attr_list = _capi.nl_object_attr_list
|
||||
|
||||
def nl_object_mark(*args):
|
||||
return _capi.nl_object_mark(*args)
|
||||
nl_object_mark = _capi.nl_object_mark
|
||||
|
||||
def nl_object_unmark(*args):
|
||||
return _capi.nl_object_unmark(*args)
|
||||
nl_object_unmark = _capi.nl_object_unmark
|
||||
|
||||
def nl_object_is_marked(*args):
|
||||
return _capi.nl_object_is_marked(*args)
|
||||
nl_object_is_marked = _capi.nl_object_is_marked
|
||||
|
||||
def nl_object_get_refcnt(*args):
|
||||
return _capi.nl_object_get_refcnt(*args)
|
||||
nl_object_get_refcnt = _capi.nl_object_get_refcnt
|
||||
|
||||
def alloc_cache_name(*args):
|
||||
return _capi.alloc_cache_name(*args)
|
||||
alloc_cache_name = _capi.alloc_cache_name
|
||||
|
||||
def alloc_cache_mngr(*args):
|
||||
return _capi.alloc_cache_mngr(*args)
|
||||
alloc_cache_mngr = _capi.alloc_cache_mngr
|
||||
|
||||
def cache_mngr_add(*args):
|
||||
return _capi.cache_mngr_add(*args)
|
||||
cache_mngr_add = _capi.cache_mngr_add
|
||||
|
||||
def nl_cache_nitems(*args):
|
||||
return _capi.nl_cache_nitems(*args)
|
||||
nl_cache_nitems = _capi.nl_cache_nitems
|
||||
|
||||
def nl_cache_nitems_filter(*args):
|
||||
return _capi.nl_cache_nitems_filter(*args)
|
||||
nl_cache_nitems_filter = _capi.nl_cache_nitems_filter
|
||||
|
||||
def nl_cache_get_ops(*args):
|
||||
return _capi.nl_cache_get_ops(*args)
|
||||
nl_cache_get_ops = _capi.nl_cache_get_ops
|
||||
|
||||
def nl_cache_get_first(*args):
|
||||
return _capi.nl_cache_get_first(*args)
|
||||
nl_cache_get_first = _capi.nl_cache_get_first
|
||||
|
||||
def nl_cache_get_last(*args):
|
||||
return _capi.nl_cache_get_last(*args)
|
||||
nl_cache_get_last = _capi.nl_cache_get_last
|
||||
|
||||
def nl_cache_get_next(*args):
|
||||
return _capi.nl_cache_get_next(*args)
|
||||
nl_cache_get_next = _capi.nl_cache_get_next
|
||||
|
||||
def nl_cache_get_prev(*args):
|
||||
return _capi.nl_cache_get_prev(*args)
|
||||
nl_cache_get_prev = _capi.nl_cache_get_prev
|
||||
|
||||
def nl_cache_alloc(*args):
|
||||
return _capi.nl_cache_alloc(*args)
|
||||
nl_cache_alloc = _capi.nl_cache_alloc
|
||||
|
||||
def nl_cache_subset(*args):
|
||||
return _capi.nl_cache_subset(*args)
|
||||
nl_cache_subset = _capi.nl_cache_subset
|
||||
|
||||
def nl_cache_clear(*args):
|
||||
return _capi.nl_cache_clear(*args)
|
||||
nl_cache_clear = _capi.nl_cache_clear
|
||||
|
||||
def nl_cache_free(*args):
|
||||
return _capi.nl_cache_free(*args)
|
||||
nl_cache_free = _capi.nl_cache_free
|
||||
|
||||
def nl_cache_add(*args):
|
||||
return _capi.nl_cache_add(*args)
|
||||
nl_cache_add = _capi.nl_cache_add
|
||||
|
||||
def nl_cache_parse_and_add(*args):
|
||||
return _capi.nl_cache_parse_and_add(*args)
|
||||
nl_cache_parse_and_add = _capi.nl_cache_parse_and_add
|
||||
|
||||
def nl_cache_remove(*args):
|
||||
return _capi.nl_cache_remove(*args)
|
||||
nl_cache_remove = _capi.nl_cache_remove
|
||||
|
||||
def nl_cache_refill(*args):
|
||||
return _capi.nl_cache_refill(*args)
|
||||
nl_cache_refill = _capi.nl_cache_refill
|
||||
|
||||
def nl_cache_pickup(*args):
|
||||
return _capi.nl_cache_pickup(*args)
|
||||
nl_cache_pickup = _capi.nl_cache_pickup
|
||||
|
||||
def nl_cache_resync(*args):
|
||||
return _capi.nl_cache_resync(*args)
|
||||
nl_cache_resync = _capi.nl_cache_resync
|
||||
|
||||
def nl_cache_include(*args):
|
||||
return _capi.nl_cache_include(*args)
|
||||
nl_cache_include = _capi.nl_cache_include
|
||||
|
||||
def nl_cache_set_arg1(*args):
|
||||
return _capi.nl_cache_set_arg1(*args)
|
||||
nl_cache_set_arg1 = _capi.nl_cache_set_arg1
|
||||
|
||||
def nl_cache_set_arg2(*args):
|
||||
return _capi.nl_cache_set_arg2(*args)
|
||||
nl_cache_set_arg2 = _capi.nl_cache_set_arg2
|
||||
|
||||
def nl_cache_is_empty(*args):
|
||||
return _capi.nl_cache_is_empty(*args)
|
||||
nl_cache_is_empty = _capi.nl_cache_is_empty
|
||||
|
||||
def nl_cache_search(*args):
|
||||
return _capi.nl_cache_search(*args)
|
||||
nl_cache_search = _capi.nl_cache_search
|
||||
|
||||
def nl_cache_mark_all(*args):
|
||||
return _capi.nl_cache_mark_all(*args)
|
||||
nl_cache_mark_all = _capi.nl_cache_mark_all
|
||||
|
||||
def nl_cache_dump(*args):
|
||||
return _capi.nl_cache_dump(*args)
|
||||
nl_cache_dump = _capi.nl_cache_dump
|
||||
|
||||
def nl_cache_dump_filter(*args):
|
||||
return _capi.nl_cache_dump_filter(*args)
|
||||
nl_cache_dump_filter = _capi.nl_cache_dump_filter
|
||||
|
||||
def nl_cache_foreach(*args):
|
||||
return _capi.nl_cache_foreach(*args)
|
||||
nl_cache_foreach = _capi.nl_cache_foreach
|
||||
|
||||
def nl_cache_foreach_filter(*args):
|
||||
return _capi.nl_cache_foreach_filter(*args)
|
||||
nl_cache_foreach_filter = _capi.nl_cache_foreach_filter
|
||||
|
||||
def nl_cache_ops_lookup(*args):
|
||||
return _capi.nl_cache_ops_lookup(*args)
|
||||
nl_cache_ops_lookup = _capi.nl_cache_ops_lookup
|
||||
|
||||
def nl_cache_ops_associate(*args):
|
||||
return _capi.nl_cache_ops_associate(*args)
|
||||
nl_cache_ops_associate = _capi.nl_cache_ops_associate
|
||||
|
||||
def nl_msgtype_lookup(*args):
|
||||
return _capi.nl_msgtype_lookup(*args)
|
||||
nl_msgtype_lookup = _capi.nl_msgtype_lookup
|
||||
|
||||
def nl_cache_ops_foreach(*args):
|
||||
return _capi.nl_cache_ops_foreach(*args)
|
||||
nl_cache_ops_foreach = _capi.nl_cache_ops_foreach
|
||||
|
||||
def nl_cache_mngt_register(*args):
|
||||
return _capi.nl_cache_mngt_register(*args)
|
||||
nl_cache_mngt_register = _capi.nl_cache_mngt_register
|
||||
|
||||
def nl_cache_mngt_unregister(*args):
|
||||
return _capi.nl_cache_mngt_unregister(*args)
|
||||
nl_cache_mngt_unregister = _capi.nl_cache_mngt_unregister
|
||||
|
||||
def nl_cache_mngt_provide(*args):
|
||||
return _capi.nl_cache_mngt_provide(*args)
|
||||
nl_cache_mngt_provide = _capi.nl_cache_mngt_provide
|
||||
|
||||
def nl_cache_mngt_unprovide(*args):
|
||||
return _capi.nl_cache_mngt_unprovide(*args)
|
||||
nl_cache_mngt_unprovide = _capi.nl_cache_mngt_unprovide
|
||||
|
||||
def nl_cache_mngt_require(*args):
|
||||
return _capi.nl_cache_mngt_require(*args)
|
||||
nl_cache_mngt_require = _capi.nl_cache_mngt_require
|
||||
NL_AUTO_PROVIDE = _capi.NL_AUTO_PROVIDE
|
||||
|
||||
def nl_cache_mngr_get_fd(*args):
|
||||
return _capi.nl_cache_mngr_get_fd(*args)
|
||||
nl_cache_mngr_get_fd = _capi.nl_cache_mngr_get_fd
|
||||
|
||||
def nl_cache_mngr_poll(*args):
|
||||
return _capi.nl_cache_mngr_poll(*args)
|
||||
nl_cache_mngr_poll = _capi.nl_cache_mngr_poll
|
||||
|
||||
def nl_cache_mngr_data_ready(*args):
|
||||
return _capi.nl_cache_mngr_data_ready(*args)
|
||||
nl_cache_mngr_data_ready = _capi.nl_cache_mngr_data_ready
|
||||
|
||||
def nl_cache_mngr_free(*args):
|
||||
return _capi.nl_cache_mngr_free(*args)
|
||||
nl_cache_mngr_free = _capi.nl_cache_mngr_free
|
||||
|
||||
def addr_parse(*args):
|
||||
return _capi.addr_parse(*args)
|
||||
addr_parse = _capi.addr_parse
|
||||
|
||||
def nl_addr_alloc(*args):
|
||||
return _capi.nl_addr_alloc(*args)
|
||||
nl_addr_alloc = _capi.nl_addr_alloc
|
||||
|
||||
def nl_addr_alloc_attr(*args):
|
||||
return _capi.nl_addr_alloc_attr(*args)
|
||||
nl_addr_alloc_attr = _capi.nl_addr_alloc_attr
|
||||
|
||||
def nl_addr_build(*args):
|
||||
return _capi.nl_addr_build(*args)
|
||||
nl_addr_build = _capi.nl_addr_build
|
||||
|
||||
def nl_addr_clone(*args):
|
||||
return _capi.nl_addr_clone(*args)
|
||||
nl_addr_clone = _capi.nl_addr_clone
|
||||
|
||||
def nl_addr_get(*args):
|
||||
return _capi.nl_addr_get(*args)
|
||||
nl_addr_get = _capi.nl_addr_get
|
||||
|
||||
def nl_addr_put(*args):
|
||||
return _capi.nl_addr_put(*args)
|
||||
nl_addr_put = _capi.nl_addr_put
|
||||
|
||||
def nl_addr_shared(*args):
|
||||
return _capi.nl_addr_shared(*args)
|
||||
nl_addr_shared = _capi.nl_addr_shared
|
||||
|
||||
def nl_addr_cmp(*args):
|
||||
return _capi.nl_addr_cmp(*args)
|
||||
nl_addr_cmp = _capi.nl_addr_cmp
|
||||
|
||||
def nl_addr_cmp_prefix(*args):
|
||||
return _capi.nl_addr_cmp_prefix(*args)
|
||||
nl_addr_cmp_prefix = _capi.nl_addr_cmp_prefix
|
||||
|
||||
def nl_addr_iszero(*args):
|
||||
return _capi.nl_addr_iszero(*args)
|
||||
nl_addr_iszero = _capi.nl_addr_iszero
|
||||
|
||||
def nl_addr_valid(*args):
|
||||
return _capi.nl_addr_valid(*args)
|
||||
nl_addr_valid = _capi.nl_addr_valid
|
||||
|
||||
def nl_addr_guess_family(*args):
|
||||
return _capi.nl_addr_guess_family(*args)
|
||||
nl_addr_guess_family = _capi.nl_addr_guess_family
|
||||
|
||||
def nl_addr_fill_sockaddr(*args):
|
||||
return _capi.nl_addr_fill_sockaddr(*args)
|
||||
nl_addr_fill_sockaddr = _capi.nl_addr_fill_sockaddr
|
||||
|
||||
def nl_addr_info(*args):
|
||||
return _capi.nl_addr_info(*args)
|
||||
nl_addr_info = _capi.nl_addr_info
|
||||
|
||||
def nl_addr_resolve(*args):
|
||||
return _capi.nl_addr_resolve(*args)
|
||||
nl_addr_resolve = _capi.nl_addr_resolve
|
||||
|
||||
def nl_addr_set_family(*args):
|
||||
return _capi.nl_addr_set_family(*args)
|
||||
nl_addr_set_family = _capi.nl_addr_set_family
|
||||
|
||||
def nl_addr_get_family(*args):
|
||||
return _capi.nl_addr_get_family(*args)
|
||||
nl_addr_get_family = _capi.nl_addr_get_family
|
||||
|
||||
def nl_addr_set_binary_addr(*args):
|
||||
return _capi.nl_addr_set_binary_addr(*args)
|
||||
nl_addr_set_binary_addr = _capi.nl_addr_set_binary_addr
|
||||
|
||||
def nl_addr_get_binary_addr(*args):
|
||||
return _capi.nl_addr_get_binary_addr(*args)
|
||||
nl_addr_get_binary_addr = _capi.nl_addr_get_binary_addr
|
||||
|
||||
def nl_addr_get_len(*args):
|
||||
return _capi.nl_addr_get_len(*args)
|
||||
nl_addr_get_len = _capi.nl_addr_get_len
|
||||
|
||||
def nl_addr_set_prefixlen(*args):
|
||||
return _capi.nl_addr_set_prefixlen(*args)
|
||||
nl_addr_set_prefixlen = _capi.nl_addr_set_prefixlen
|
||||
|
||||
def nl_addr_get_prefixlen(*args):
|
||||
return _capi.nl_addr_get_prefixlen(*args)
|
||||
nl_addr_get_prefixlen = _capi.nl_addr_get_prefixlen
|
||||
|
||||
def nl_af2str(*args):
|
||||
return _capi.nl_af2str(*args)
|
||||
nl_af2str = _capi.nl_af2str
|
||||
|
||||
def nl_str2af(*args):
|
||||
return _capi.nl_str2af(*args)
|
||||
nl_str2af = _capi.nl_str2af
|
||||
|
||||
def nl_addr2str(*args):
|
||||
return _capi.nl_addr2str(*args)
|
||||
nl_addr2str = _capi.nl_addr2str
|
||||
|
||||
|
BIN
python/netlink/capi.pyc
Normal file
BIN
python/netlink/capi.pyc
Normal file
Binary file not shown.
9640
python/netlink/capi_wrap.c
Normal file
9640
python/netlink/capi_wrap.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -254,6 +254,7 @@ class Object(object):
|
|||
def __init__(self, obj_name, name, obj=None):
|
||||
self._obj_name = obj_name
|
||||
self._name = name
|
||||
self._modules = []
|
||||
|
||||
if not obj:
|
||||
obj = capi.object_alloc_name(self._obj_name)
|
||||
|
@ -284,6 +285,45 @@ class Object(object):
|
|||
"""Clone object"""
|
||||
return self._new_instance(capi.nl_object_clone(self._nl_object))
|
||||
|
||||
def _module_lookup(self, path, constructor=None):
|
||||
"""Lookup object specific module and load it
|
||||
|
||||
Object implementations consisting of multiple types may
|
||||
offload some type specific code to separate modules which
|
||||
are loadable on demand, e.g. a VLAN link or a specific
|
||||
queueing discipline implementation.
|
||||
|
||||
Loads the module `path` and calls the constructor if
|
||||
supplied or `module`.init()
|
||||
|
||||
The constructor/init function typically assigns a new
|
||||
object covering the type specific implementation aspects
|
||||
to the new object, e.g. link.vlan = VLANLink()
|
||||
"""
|
||||
try:
|
||||
tmp = __import__(path)
|
||||
except ImportError:
|
||||
return
|
||||
|
||||
module = sys.modules[path]
|
||||
|
||||
if constructor:
|
||||
ret = getattr(module, constructor)(self)
|
||||
else:
|
||||
ret = module.init(self)
|
||||
|
||||
if ret:
|
||||
self._modules.append(ret)
|
||||
|
||||
def _module_brief(self):
|
||||
ret = ''
|
||||
|
||||
for module in self._modules:
|
||||
if hasattr(module, 'brief'):
|
||||
ret += module.brief()
|
||||
|
||||
return ret
|
||||
|
||||
def dump(self, params=None):
|
||||
"""Dump object as human readable text"""
|
||||
if params is None:
|
||||
|
@ -291,6 +331,7 @@ class Object(object):
|
|||
|
||||
capi.nl_object_dump(self._nl_object, params._dp)
|
||||
|
||||
|
||||
#####################################################################
|
||||
# mark
|
||||
@property
|
||||
|
@ -361,12 +402,15 @@ class Object(object):
|
|||
class ObjIterator(object):
|
||||
def __init__(self, cache, obj):
|
||||
self._cache = cache
|
||||
self._nl_object = None
|
||||
|
||||
capi.nl_object_get(obj)
|
||||
self._nl_object = obj
|
||||
|
||||
self._first = 1
|
||||
self._end = 0
|
||||
if not obj:
|
||||
self._end = 1
|
||||
else:
|
||||
capi.nl_object_get(obj)
|
||||
self._nl_object = obj
|
||||
self._first = 1
|
||||
self._end = 0
|
||||
|
||||
def __del__(self):
|
||||
if self._nl_object:
|
||||
|
@ -415,21 +459,21 @@ class Cache(object):
|
|||
raise NotImplementedError()
|
||||
|
||||
def __del(self):
|
||||
capi.nl_cache_free(self._c_cache)
|
||||
capi.nl_cache_free(self._nl_cache)
|
||||
|
||||
def __len__(self):
|
||||
return capi.nl_cache_nitems(self._c_cache)
|
||||
return capi.nl_cache_nitems(self._nl_cache)
|
||||
|
||||
def __iter__(self):
|
||||
obj = capi.nl_cache_get_first(self._c_cache)
|
||||
obj = capi.nl_cache_get_first(self._nl_cache)
|
||||
return ObjIterator(self, obj)
|
||||
|
||||
def __reversed__(self):
|
||||
obj = capi.nl_cache_get_last(self._c_cache)
|
||||
obj = capi.nl_cache_get_last(self._nl_cache)
|
||||
return ReverseObjIterator(self, obj)
|
||||
|
||||
def __contains__(self, item):
|
||||
obj = capi.nl_cache_search(self._c_cache, item._nl_object)
|
||||
obj = capi.nl_cache_search(self._nl_cache, item._nl_object)
|
||||
if obj is None:
|
||||
return False
|
||||
else:
|
||||
|
@ -458,7 +502,7 @@ class Cache(object):
|
|||
if not filter:
|
||||
raise ValueError()
|
||||
|
||||
c = capi.nl_cache_subset(self._c_cache, filter._nl_object)
|
||||
c = capi.nl_cache_subset(self._nl_cache, filter._nl_object)
|
||||
return self._new_cache(cache=c)
|
||||
|
||||
def dump(self, params=None, filter=None):
|
||||
|
@ -469,28 +513,28 @@ class Cache(object):
|
|||
if filter:
|
||||
filter = filter._nl_object
|
||||
|
||||
capi.nl_cache_dump_filter(self._c_cache, params._dp, filter)
|
||||
capi.nl_cache_dump_filter(self._nl_cache, params._dp, filter)
|
||||
|
||||
def clear(self):
|
||||
"""Remove all cache entries"""
|
||||
capi.nl_cache_clear(self._c_cache)
|
||||
capi.nl_cache_clear(self._nl_cache)
|
||||
|
||||
# Called by sub classes to set first cache argument
|
||||
def _set_arg1(self, arg):
|
||||
self.arg1 = arg
|
||||
capi.nl_cache_set_arg1(self._c_cache, arg)
|
||||
capi.nl_cache_set_arg1(self._nl_cache, arg)
|
||||
|
||||
# Called by sub classes to set second cache argument
|
||||
def _set_arg2(self, arg):
|
||||
self.arg2 = arg
|
||||
capi.nl_cache_set_arg2(self._c_cache, arg)
|
||||
capi.nl_cache_set_arg2(self._nl_cache, arg)
|
||||
|
||||
def refill(self, socket=None):
|
||||
"""Clear cache and refill it"""
|
||||
if socket is None:
|
||||
socket = lookup_socket(self._protocol)
|
||||
|
||||
capi.nl_cache_refill(socket._sock, self._c_cache)
|
||||
capi.nl_cache_refill(socket._sock, self._nl_cache)
|
||||
return self
|
||||
|
||||
def resync(self, socket=None, cb=None):
|
||||
|
@ -498,7 +542,7 @@ class Cache(object):
|
|||
if socket is None:
|
||||
socket = lookup_socket(self._protocol)
|
||||
|
||||
capi.nl_cache_resync(socket._sock, self._c_cache, cb)
|
||||
capi.nl_cache_resync(socket._sock, self._nl_cache, cb)
|
||||
|
||||
def provide(self):
|
||||
"""Provide this cache to others
|
||||
|
@ -510,7 +554,7 @@ class Cache(object):
|
|||
link names
|
||||
"""
|
||||
|
||||
capi.nl_cache_mngt_provide(self._c_cache)
|
||||
capi.nl_cache_mngt_provide(self._nl_cache)
|
||||
|
||||
def unprovide(self):
|
||||
"""Unprovide this cache
|
||||
|
@ -519,7 +563,7 @@ class Cache(object):
|
|||
has been handed out already, that reference will still
|
||||
be valid.
|
||||
"""
|
||||
capi.nl_cache_mngt_unprovide(self._c_cache)
|
||||
capi.nl_cache_mngt_unprovide(self._nl_cache)
|
||||
|
||||
###########################################################################
|
||||
# Cache Manager (Work in Progress)
|
||||
|
@ -708,7 +752,7 @@ class AbstractAddress(object):
|
|||
#
|
||||
attrs = {}
|
||||
|
||||
def attr(name, **kwds):
|
||||
def add_attr(name, **kwds):
|
||||
attrs[name] = {}
|
||||
for k in kwds:
|
||||
attrs[name][k] = kwds[k]
|
||||
|
@ -726,6 +770,7 @@ def nlattr(name, **kwds):
|
|||
return self._my_attr
|
||||
|
||||
"""
|
||||
|
||||
attrs[name] = {}
|
||||
for k in kwds:
|
||||
attrs[name][k] = kwds[k]
|
||||
|
|
BIN
python/netlink/core.pyc
Normal file
BIN
python/netlink/core.pyc
Normal file
Binary file not shown.
|
@ -27,7 +27,7 @@ class AddressCache(netlink.Cache):
|
|||
cache = self._alloc_cache_name("route/addr")
|
||||
|
||||
self._protocol = netlink.NETLINK_ROUTE
|
||||
self._c_cache = cache
|
||||
self._nl_cache = cache
|
||||
|
||||
def __getitem__(self, key):
|
||||
# Using ifindex=0 here implies that the local address itself
|
||||
|
@ -38,7 +38,7 @@ class AddressCache(netlink.Cache):
|
|||
if type(local) is str:
|
||||
local = netlink.AbstractAddress(local)
|
||||
|
||||
addr = capi.rtnl_addr_get(self._c_cache, ifindex,
|
||||
addr = capi.rtnl_addr_get(self._nl_cache, ifindex,
|
||||
local._nl_addr)
|
||||
if addr is None:
|
||||
raise KeyError()
|
||||
|
|
|
@ -7,6 +7,10 @@
|
|||
|
||||
#include <netlink/route/tc.h>
|
||||
#include <netlink/route/qdisc.h>
|
||||
#include <netlink/route/class.h>
|
||||
#include <netlink/route/classifier.h>
|
||||
|
||||
#include <netlink/route/qdisc/htb.h>
|
||||
|
||||
#include <netlink/route/addr.h>
|
||||
%}
|
||||
|
@ -231,6 +235,26 @@ extern int rtnl_classid_generate(const char *, uint32_t *, uint32_t);
|
|||
return (struct rtnl_qdisc *) obj;
|
||||
}
|
||||
|
||||
struct nl_object *class2obj(struct rtnl_class *cl)
|
||||
{
|
||||
return OBJ_CAST(cl);
|
||||
}
|
||||
|
||||
struct rtnl_class *obj2class(struct nl_object *obj)
|
||||
{
|
||||
return (struct rtnl_class *) obj;
|
||||
}
|
||||
|
||||
struct nl_object *cls2obj(struct rtnl_cls *cls)
|
||||
{
|
||||
return OBJ_CAST(cls);
|
||||
}
|
||||
|
||||
struct rtnl_cls *obj2cls(struct nl_object *obj)
|
||||
{
|
||||
return (struct rtnl_cls *) obj;
|
||||
}
|
||||
|
||||
struct rtnl_tc *obj2tc(struct nl_object *obj)
|
||||
{
|
||||
return TC_CAST(obj);
|
||||
|
@ -260,6 +284,43 @@ extern int rtnl_qdisc_build_delete_request(struct rtnl_qdisc *,
|
|||
struct nl_msg **);
|
||||
extern int rtnl_qdisc_delete(struct nl_sock *, struct rtnl_qdisc *);
|
||||
|
||||
/* <netlink/route/classifier.h> */
|
||||
|
||||
extern struct rtnl_cls *rtnl_cls_alloc(void);
|
||||
extern void rtnl_cls_put(struct rtnl_cls *);
|
||||
|
||||
extern int rtnl_cls_add(struct nl_sock *, struct rtnl_cls *, int);
|
||||
|
||||
extern int rtnl_cls_delete(struct nl_sock *, struct rtnl_cls *,
|
||||
int);
|
||||
|
||||
extern void rtnl_cls_set_prio(struct rtnl_cls *, uint16_t);
|
||||
extern uint16_t rtnl_cls_get_prio(struct rtnl_cls *);
|
||||
|
||||
extern void rtnl_cls_set_protocol(struct rtnl_cls *, uint16_t);
|
||||
extern uint16_t rtnl_cls_get_protocol(struct rtnl_cls *);
|
||||
|
||||
/* <netlink/route/qdisc/htb.h> */
|
||||
|
||||
extern uint32_t rtnl_htb_get_rate2quantum(struct rtnl_qdisc *);
|
||||
extern int rtnl_htb_set_rate2quantum(struct rtnl_qdisc *, uint32_t);
|
||||
extern uint32_t rtnl_htb_get_defcls(struct rtnl_qdisc *);
|
||||
extern int rtnl_htb_set_defcls(struct rtnl_qdisc *, uint32_t);
|
||||
|
||||
extern uint32_t rtnl_htb_get_prio(struct rtnl_class *);
|
||||
extern int rtnl_htb_set_prio(struct rtnl_class *, uint32_t);
|
||||
extern uint32_t rtnl_htb_get_rate(struct rtnl_class *);
|
||||
extern int rtnl_htb_set_rate(struct rtnl_class *, uint32_t);
|
||||
extern uint32_t rtnl_htb_get_ceil(struct rtnl_class *);
|
||||
extern int rtnl_htb_set_ceil(struct rtnl_class *, uint32_t);
|
||||
extern uint32_t rtnl_htb_get_rbuffer(struct rtnl_class *);
|
||||
extern int rtnl_htb_set_rbuffer(struct rtnl_class *, uint32_t);
|
||||
extern uint32_t rtnl_htb_get_cbuffer(struct rtnl_class *);
|
||||
extern int rtnl_htb_set_cbuffer(struct rtnl_class *, uint32_t);
|
||||
extern uint32_t rtnl_htb_get_quantum(struct rtnl_class *);
|
||||
extern int rtnl_htb_set_quantum(struct rtnl_class *, uint32_t);
|
||||
extern int rtnl_htb_get_level(struct rtnl_class *);
|
||||
|
||||
/* <netlink/route/addr.h> */
|
||||
|
||||
%inline %{
|
||||
|
|
830
python/netlink/route/capi.py
Normal file
830
python/netlink/route/capi.py
Normal file
|
@ -0,0 +1,830 @@
|
|||
# This file was automatically generated by SWIG (http://www.swig.org).
|
||||
# Version 1.3.40
|
||||
#
|
||||
# Do not make changes to this file unless you know what you are doing--modify
|
||||
# the SWIG interface file instead.
|
||||
|
||||
from sys import version_info
|
||||
if version_info >= (3,0,0):
|
||||
new_instancemethod = lambda func, inst, cls: _capi.SWIG_PyInstanceMethod_New(func)
|
||||
else:
|
||||
from new import instancemethod as new_instancemethod
|
||||
if version_info >= (2,6,0):
|
||||
def swig_import_helper():
|
||||
from os.path import dirname
|
||||
import imp
|
||||
fp = None
|
||||
try:
|
||||
fp, pathname, description = imp.find_module('_capi', [dirname(__file__)])
|
||||
except ImportError:
|
||||
import _capi
|
||||
return _capi
|
||||
if fp is not None:
|
||||
try:
|
||||
_mod = imp.load_module('_capi', fp, pathname, description)
|
||||
finally:
|
||||
fp.close()
|
||||
return _mod
|
||||
_capi = swig_import_helper()
|
||||
del swig_import_helper
|
||||
else:
|
||||
import _capi
|
||||
del version_info
|
||||
try:
|
||||
_swig_property = property
|
||||
except NameError:
|
||||
pass # Python < 2.2 doesn't have 'property'.
|
||||
def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
|
||||
if (name == "thisown"): return self.this.own(value)
|
||||
if (name == "this"):
|
||||
if type(value).__name__ == 'SwigPyObject':
|
||||
self.__dict__[name] = value
|
||||
return
|
||||
method = class_type.__swig_setmethods__.get(name,None)
|
||||
if method: return method(self,value)
|
||||
if (not static) or hasattr(self,name):
|
||||
self.__dict__[name] = value
|
||||
else:
|
||||
raise AttributeError("You cannot add attributes to %s" % self)
|
||||
|
||||
def _swig_setattr(self,class_type,name,value):
|
||||
return _swig_setattr_nondynamic(self,class_type,name,value,0)
|
||||
|
||||
def _swig_getattr(self,class_type,name):
|
||||
if (name == "thisown"): return self.this.own()
|
||||
method = class_type.__swig_getmethods__.get(name,None)
|
||||
if method: return method(self)
|
||||
raise AttributeError(name)
|
||||
|
||||
def _swig_repr(self):
|
||||
try: strthis = "proxy of " + self.this.__repr__()
|
||||
except: strthis = ""
|
||||
return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
|
||||
|
||||
try:
|
||||
_object = object
|
||||
_newclass = 1
|
||||
except AttributeError:
|
||||
class _object : pass
|
||||
_newclass = 0
|
||||
|
||||
|
||||
def _swig_setattr_nondynamic_method(set):
|
||||
def set_attr(self,name,value):
|
||||
if (name == "thisown"): return self.this.own(value)
|
||||
if hasattr(self,name) or (name == "this"):
|
||||
set(self,name,value)
|
||||
else:
|
||||
raise AttributeError("You cannot add attributes to %s" % self)
|
||||
return set_attr
|
||||
|
||||
|
||||
|
||||
def link2obj(*args):
|
||||
return _capi.link2obj(*args)
|
||||
link2obj = _capi.link2obj
|
||||
|
||||
def obj2link(*args):
|
||||
return _capi.obj2link(*args)
|
||||
obj2link = _capi.obj2link
|
||||
|
||||
def get_from_kernel(*args):
|
||||
return _capi.get_from_kernel(*args)
|
||||
get_from_kernel = _capi.get_from_kernel
|
||||
|
||||
def inet_get_conf(*args):
|
||||
return _capi.inet_get_conf(*args)
|
||||
inet_get_conf = _capi.inet_get_conf
|
||||
|
||||
def rtnl_scope2str(*args):
|
||||
return _capi.rtnl_scope2str(*args)
|
||||
rtnl_scope2str = _capi.rtnl_scope2str
|
||||
|
||||
def rtnl_str2scope(*args):
|
||||
return _capi.rtnl_str2scope(*args)
|
||||
rtnl_str2scope = _capi.rtnl_str2scope
|
||||
|
||||
def rtnl_link_alloc():
|
||||
return _capi.rtnl_link_alloc()
|
||||
rtnl_link_alloc = _capi.rtnl_link_alloc
|
||||
|
||||
def rtnl_link_get(*args):
|
||||
return _capi.rtnl_link_get(*args)
|
||||
rtnl_link_get = _capi.rtnl_link_get
|
||||
|
||||
def rtnl_link_get_by_name(*args):
|
||||
return _capi.rtnl_link_get_by_name(*args)
|
||||
rtnl_link_get_by_name = _capi.rtnl_link_get_by_name
|
||||
|
||||
def rtnl_link_build_add_request(*args):
|
||||
return _capi.rtnl_link_build_add_request(*args)
|
||||
rtnl_link_build_add_request = _capi.rtnl_link_build_add_request
|
||||
|
||||
def rtnl_link_add(*args):
|
||||
return _capi.rtnl_link_add(*args)
|
||||
rtnl_link_add = _capi.rtnl_link_add
|
||||
|
||||
def rtnl_link_build_change_request(*args):
|
||||
return _capi.rtnl_link_build_change_request(*args)
|
||||
rtnl_link_build_change_request = _capi.rtnl_link_build_change_request
|
||||
|
||||
def rtnl_link_change(*args):
|
||||
return _capi.rtnl_link_change(*args)
|
||||
rtnl_link_change = _capi.rtnl_link_change
|
||||
|
||||
def rtnl_link_build_delete_request(*args):
|
||||
return _capi.rtnl_link_build_delete_request(*args)
|
||||
rtnl_link_build_delete_request = _capi.rtnl_link_build_delete_request
|
||||
|
||||
def rtnl_link_delete(*args):
|
||||
return _capi.rtnl_link_delete(*args)
|
||||
rtnl_link_delete = _capi.rtnl_link_delete
|
||||
|
||||
def rtnl_link_build_get_request(*args):
|
||||
return _capi.rtnl_link_build_get_request(*args)
|
||||
rtnl_link_build_get_request = _capi.rtnl_link_build_get_request
|
||||
|
||||
def rtnl_link_stat2str(*args):
|
||||
return _capi.rtnl_link_stat2str(*args)
|
||||
rtnl_link_stat2str = _capi.rtnl_link_stat2str
|
||||
|
||||
def rtnl_link_str2stat(*args):
|
||||
return _capi.rtnl_link_str2stat(*args)
|
||||
rtnl_link_str2stat = _capi.rtnl_link_str2stat
|
||||
|
||||
def rtnl_link_flags2str(*args):
|
||||
return _capi.rtnl_link_flags2str(*args)
|
||||
rtnl_link_flags2str = _capi.rtnl_link_flags2str
|
||||
|
||||
def rtnl_link_str2flags(*args):
|
||||
return _capi.rtnl_link_str2flags(*args)
|
||||
rtnl_link_str2flags = _capi.rtnl_link_str2flags
|
||||
|
||||
def rtnl_link_operstate2str(*args):
|
||||
return _capi.rtnl_link_operstate2str(*args)
|
||||
rtnl_link_operstate2str = _capi.rtnl_link_operstate2str
|
||||
|
||||
def rtnl_link_str2operstate(*args):
|
||||
return _capi.rtnl_link_str2operstate(*args)
|
||||
rtnl_link_str2operstate = _capi.rtnl_link_str2operstate
|
||||
|
||||
def rtnl_link_mode2str(*args):
|
||||
return _capi.rtnl_link_mode2str(*args)
|
||||
rtnl_link_mode2str = _capi.rtnl_link_mode2str
|
||||
|
||||
def rtnl_link_str2mode(*args):
|
||||
return _capi.rtnl_link_str2mode(*args)
|
||||
rtnl_link_str2mode = _capi.rtnl_link_str2mode
|
||||
|
||||
def rtnl_link_set_qdisc(*args):
|
||||
return _capi.rtnl_link_set_qdisc(*args)
|
||||
rtnl_link_set_qdisc = _capi.rtnl_link_set_qdisc
|
||||
|
||||
def rtnl_link_get_qdisc(*args):
|
||||
return _capi.rtnl_link_get_qdisc(*args)
|
||||
rtnl_link_get_qdisc = _capi.rtnl_link_get_qdisc
|
||||
|
||||
def rtnl_link_set_name(*args):
|
||||
return _capi.rtnl_link_set_name(*args)
|
||||
rtnl_link_set_name = _capi.rtnl_link_set_name
|
||||
|
||||
def rtnl_link_get_name(*args):
|
||||
return _capi.rtnl_link_get_name(*args)
|
||||
rtnl_link_get_name = _capi.rtnl_link_get_name
|
||||
|
||||
def rtnl_link_set_flags(*args):
|
||||
return _capi.rtnl_link_set_flags(*args)
|
||||
rtnl_link_set_flags = _capi.rtnl_link_set_flags
|
||||
|
||||
def rtnl_link_unset_flags(*args):
|
||||
return _capi.rtnl_link_unset_flags(*args)
|
||||
rtnl_link_unset_flags = _capi.rtnl_link_unset_flags
|
||||
|
||||
def rtnl_link_get_flags(*args):
|
||||
return _capi.rtnl_link_get_flags(*args)
|
||||
rtnl_link_get_flags = _capi.rtnl_link_get_flags
|
||||
|
||||
def rtnl_link_set_mtu(*args):
|
||||
return _capi.rtnl_link_set_mtu(*args)
|
||||
rtnl_link_set_mtu = _capi.rtnl_link_set_mtu
|
||||
|
||||
def rtnl_link_get_mtu(*args):
|
||||
return _capi.rtnl_link_get_mtu(*args)
|
||||
rtnl_link_get_mtu = _capi.rtnl_link_get_mtu
|
||||
|
||||
def rtnl_link_set_txqlen(*args):
|
||||
return _capi.rtnl_link_set_txqlen(*args)
|
||||
rtnl_link_set_txqlen = _capi.rtnl_link_set_txqlen
|
||||
|
||||
def rtnl_link_get_txqlen(*args):
|
||||
return _capi.rtnl_link_get_txqlen(*args)
|
||||
rtnl_link_get_txqlen = _capi.rtnl_link_get_txqlen
|
||||
|
||||
def rtnl_link_set_weight(*args):
|
||||
return _capi.rtnl_link_set_weight(*args)
|
||||
rtnl_link_set_weight = _capi.rtnl_link_set_weight
|
||||
|
||||
def rtnl_link_get_weight(*args):
|
||||
return _capi.rtnl_link_get_weight(*args)
|
||||
rtnl_link_get_weight = _capi.rtnl_link_get_weight
|
||||
|
||||
def rtnl_link_set_ifindex(*args):
|
||||
return _capi.rtnl_link_set_ifindex(*args)
|
||||
rtnl_link_set_ifindex = _capi.rtnl_link_set_ifindex
|
||||
|
||||
def rtnl_link_get_ifindex(*args):
|
||||
return _capi.rtnl_link_get_ifindex(*args)
|
||||
rtnl_link_get_ifindex = _capi.rtnl_link_get_ifindex
|
||||
|
||||
def rtnl_link_set_family(*args):
|
||||
return _capi.rtnl_link_set_family(*args)
|
||||
rtnl_link_set_family = _capi.rtnl_link_set_family
|
||||
|
||||
def rtnl_link_get_family(*args):
|
||||
return _capi.rtnl_link_get_family(*args)
|
||||
rtnl_link_get_family = _capi.rtnl_link_get_family
|
||||
|
||||
def rtnl_link_set_arptype(*args):
|
||||
return _capi.rtnl_link_set_arptype(*args)
|
||||
rtnl_link_set_arptype = _capi.rtnl_link_set_arptype
|
||||
|
||||
def rtnl_link_get_arptype(*args):
|
||||
return _capi.rtnl_link_get_arptype(*args)
|
||||
rtnl_link_get_arptype = _capi.rtnl_link_get_arptype
|
||||
|
||||
def rtnl_link_set_addr(*args):
|
||||
return _capi.rtnl_link_set_addr(*args)
|
||||
rtnl_link_set_addr = _capi.rtnl_link_set_addr
|
||||
|
||||
def rtnl_link_get_addr(*args):
|
||||
return _capi.rtnl_link_get_addr(*args)
|
||||
rtnl_link_get_addr = _capi.rtnl_link_get_addr
|
||||
|
||||
def rtnl_link_set_broadcast(*args):
|
||||
return _capi.rtnl_link_set_broadcast(*args)
|
||||
rtnl_link_set_broadcast = _capi.rtnl_link_set_broadcast
|
||||
|
||||
def rtnl_link_get_broadcast(*args):
|
||||
return _capi.rtnl_link_get_broadcast(*args)
|
||||
rtnl_link_get_broadcast = _capi.rtnl_link_get_broadcast
|
||||
|
||||
def rtnl_link_set_link(*args):
|
||||
return _capi.rtnl_link_set_link(*args)
|
||||
rtnl_link_set_link = _capi.rtnl_link_set_link
|
||||
|
||||
def rtnl_link_get_link(*args):
|
||||
return _capi.rtnl_link_get_link(*args)
|
||||
rtnl_link_get_link = _capi.rtnl_link_get_link
|
||||
|
||||
def rtnl_link_set_master(*args):
|
||||
return _capi.rtnl_link_set_master(*args)
|
||||
rtnl_link_set_master = _capi.rtnl_link_set_master
|
||||
|
||||
def rtnl_link_get_master(*args):
|
||||
return _capi.rtnl_link_get_master(*args)
|
||||
rtnl_link_get_master = _capi.rtnl_link_get_master
|
||||
|
||||
def rtnl_link_set_operstate(*args):
|
||||
return _capi.rtnl_link_set_operstate(*args)
|
||||
rtnl_link_set_operstate = _capi.rtnl_link_set_operstate
|
||||
|
||||
def rtnl_link_get_operstate(*args):
|
||||
return _capi.rtnl_link_get_operstate(*args)
|
||||
rtnl_link_get_operstate = _capi.rtnl_link_get_operstate
|
||||
|
||||
def rtnl_link_set_linkmode(*args):
|
||||
return _capi.rtnl_link_set_linkmode(*args)
|
||||
rtnl_link_set_linkmode = _capi.rtnl_link_set_linkmode
|
||||
|
||||
def rtnl_link_get_linkmode(*args):
|
||||
return _capi.rtnl_link_get_linkmode(*args)
|
||||
rtnl_link_get_linkmode = _capi.rtnl_link_get_linkmode
|
||||
|
||||
def rtnl_link_get_ifalias(*args):
|
||||
return _capi.rtnl_link_get_ifalias(*args)
|
||||
rtnl_link_get_ifalias = _capi.rtnl_link_get_ifalias
|
||||
|
||||
def rtnl_link_set_ifalias(*args):
|
||||
return _capi.rtnl_link_set_ifalias(*args)
|
||||
rtnl_link_set_ifalias = _capi.rtnl_link_set_ifalias
|
||||
|
||||
def rtnl_link_get_num_vf(*args):
|
||||
return _capi.rtnl_link_get_num_vf(*args)
|
||||
rtnl_link_get_num_vf = _capi.rtnl_link_get_num_vf
|
||||
|
||||
def rtnl_link_get_stat(*args):
|
||||
return _capi.rtnl_link_get_stat(*args)
|
||||
rtnl_link_get_stat = _capi.rtnl_link_get_stat
|
||||
|
||||
def rtnl_link_set_stat(*args):
|
||||
return _capi.rtnl_link_set_stat(*args)
|
||||
rtnl_link_set_stat = _capi.rtnl_link_set_stat
|
||||
|
||||
def rtnl_link_set_info_type(*args):
|
||||
return _capi.rtnl_link_set_info_type(*args)
|
||||
rtnl_link_set_info_type = _capi.rtnl_link_set_info_type
|
||||
|
||||
def rtnl_link_get_info_type(*args):
|
||||
return _capi.rtnl_link_get_info_type(*args)
|
||||
rtnl_link_get_info_type = _capi.rtnl_link_get_info_type
|
||||
class vlan_map(object):
|
||||
thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
|
||||
def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
|
||||
__repr__ = _swig_repr
|
||||
vm_from = _swig_property(_capi.vlan_map_vm_from_get, _capi.vlan_map_vm_from_set)
|
||||
vm_to = _swig_property(_capi.vlan_map_vm_to_get, _capi.vlan_map_vm_to_set)
|
||||
__swig_destroy__ = _capi.delete_vlan_map
|
||||
vlan_map_swigregister = _capi.vlan_map_swigregister
|
||||
vlan_map_swigregister(vlan_map)
|
||||
|
||||
VLAN_PRIO_MAX = _capi.VLAN_PRIO_MAX
|
||||
|
||||
def rtnl_link_vlan_flags2str(*args):
|
||||
return _capi.rtnl_link_vlan_flags2str(*args)
|
||||
rtnl_link_vlan_flags2str = _capi.rtnl_link_vlan_flags2str
|
||||
|
||||
def rtnl_link_vlan_str2flags(*args):
|
||||
return _capi.rtnl_link_vlan_str2flags(*args)
|
||||
rtnl_link_vlan_str2flags = _capi.rtnl_link_vlan_str2flags
|
||||
|
||||
def rtnl_link_vlan_set_id(*args):
|
||||
return _capi.rtnl_link_vlan_set_id(*args)
|
||||
rtnl_link_vlan_set_id = _capi.rtnl_link_vlan_set_id
|
||||
|
||||
def rtnl_link_vlan_get_id(*args):
|
||||
return _capi.rtnl_link_vlan_get_id(*args)
|
||||
rtnl_link_vlan_get_id = _capi.rtnl_link_vlan_get_id
|
||||
|
||||
def rtnl_link_vlan_set_flags(*args):
|
||||
return _capi.rtnl_link_vlan_set_flags(*args)
|
||||
rtnl_link_vlan_set_flags = _capi.rtnl_link_vlan_set_flags
|
||||
|
||||
def rtnl_link_vlan_unset_flags(*args):
|
||||
return _capi.rtnl_link_vlan_unset_flags(*args)
|
||||
rtnl_link_vlan_unset_flags = _capi.rtnl_link_vlan_unset_flags
|
||||
|
||||
def rtnl_link_vlan_get_flags(*args):
|
||||
return _capi.rtnl_link_vlan_get_flags(*args)
|
||||
rtnl_link_vlan_get_flags = _capi.rtnl_link_vlan_get_flags
|
||||
|
||||
def rtnl_link_vlan_set_ingress_map(*args):
|
||||
return _capi.rtnl_link_vlan_set_ingress_map(*args)
|
||||
rtnl_link_vlan_set_ingress_map = _capi.rtnl_link_vlan_set_ingress_map
|
||||
|
||||
def rtnl_link_vlan_get_ingress_map(*args):
|
||||
return _capi.rtnl_link_vlan_get_ingress_map(*args)
|
||||
rtnl_link_vlan_get_ingress_map = _capi.rtnl_link_vlan_get_ingress_map
|
||||
|
||||
def rtnl_link_vlan_set_egress_map(*args):
|
||||
return _capi.rtnl_link_vlan_set_egress_map(*args)
|
||||
rtnl_link_vlan_set_egress_map = _capi.rtnl_link_vlan_set_egress_map
|
||||
|
||||
def rtnl_link_vlan_get_egress_map(*args):
|
||||
return _capi.rtnl_link_vlan_get_egress_map(*args)
|
||||
rtnl_link_vlan_get_egress_map = _capi.rtnl_link_vlan_get_egress_map
|
||||
|
||||
def rtnl_link_inet_devconf2str(*args):
|
||||
return _capi.rtnl_link_inet_devconf2str(*args)
|
||||
rtnl_link_inet_devconf2str = _capi.rtnl_link_inet_devconf2str
|
||||
|
||||
def rtnl_link_inet_str2devconf(*args):
|
||||
return _capi.rtnl_link_inet_str2devconf(*args)
|
||||
rtnl_link_inet_str2devconf = _capi.rtnl_link_inet_str2devconf
|
||||
|
||||
def rtnl_link_inet_set_conf(*args):
|
||||
return _capi.rtnl_link_inet_set_conf(*args)
|
||||
rtnl_link_inet_set_conf = _capi.rtnl_link_inet_set_conf
|
||||
|
||||
def tc_str2handle(*args):
|
||||
return _capi.tc_str2handle(*args)
|
||||
tc_str2handle = _capi.tc_str2handle
|
||||
|
||||
def rtnl_tc_set_ifindex(*args):
|
||||
return _capi.rtnl_tc_set_ifindex(*args)
|
||||
rtnl_tc_set_ifindex = _capi.rtnl_tc_set_ifindex
|
||||
|
||||
def rtnl_tc_get_ifindex(*args):
|
||||
return _capi.rtnl_tc_get_ifindex(*args)
|
||||
rtnl_tc_get_ifindex = _capi.rtnl_tc_get_ifindex
|
||||
|
||||
def rtnl_tc_set_link(*args):
|
||||
return _capi.rtnl_tc_set_link(*args)
|
||||
rtnl_tc_set_link = _capi.rtnl_tc_set_link
|
||||
|
||||
def rtnl_tc_get_link(*args):
|
||||
return _capi.rtnl_tc_get_link(*args)
|
||||
rtnl_tc_get_link = _capi.rtnl_tc_get_link
|
||||
|
||||
def rtnl_tc_set_mtu(*args):
|
||||
return _capi.rtnl_tc_set_mtu(*args)
|
||||
rtnl_tc_set_mtu = _capi.rtnl_tc_set_mtu
|
||||
|
||||
def rtnl_tc_get_mtu(*args):
|
||||
return _capi.rtnl_tc_get_mtu(*args)
|
||||
rtnl_tc_get_mtu = _capi.rtnl_tc_get_mtu
|
||||
|
||||
def rtnl_tc_set_mpu(*args):
|
||||
return _capi.rtnl_tc_set_mpu(*args)
|
||||
rtnl_tc_set_mpu = _capi.rtnl_tc_set_mpu
|
||||
|
||||
def rtnl_tc_get_mpu(*args):
|
||||
return _capi.rtnl_tc_get_mpu(*args)
|
||||
rtnl_tc_get_mpu = _capi.rtnl_tc_get_mpu
|
||||
|
||||
def rtnl_tc_set_overhead(*args):
|
||||
return _capi.rtnl_tc_set_overhead(*args)
|
||||
rtnl_tc_set_overhead = _capi.rtnl_tc_set_overhead
|
||||
|
||||
def rtnl_tc_get_overhead(*args):
|
||||
return _capi.rtnl_tc_get_overhead(*args)
|
||||
rtnl_tc_get_overhead = _capi.rtnl_tc_get_overhead
|
||||
|
||||
def rtnl_tc_set_linktype(*args):
|
||||
return _capi.rtnl_tc_set_linktype(*args)
|
||||
rtnl_tc_set_linktype = _capi.rtnl_tc_set_linktype
|
||||
|
||||
def rtnl_tc_get_linktype(*args):
|
||||
return _capi.rtnl_tc_get_linktype(*args)
|
||||
rtnl_tc_get_linktype = _capi.rtnl_tc_get_linktype
|
||||
|
||||
def rtnl_tc_set_handle(*args):
|
||||
return _capi.rtnl_tc_set_handle(*args)
|
||||
rtnl_tc_set_handle = _capi.rtnl_tc_set_handle
|
||||
|
||||
def rtnl_tc_get_handle(*args):
|
||||
return _capi.rtnl_tc_get_handle(*args)
|
||||
rtnl_tc_get_handle = _capi.rtnl_tc_get_handle
|
||||
|
||||
def rtnl_tc_set_parent(*args):
|
||||
return _capi.rtnl_tc_set_parent(*args)
|
||||
rtnl_tc_set_parent = _capi.rtnl_tc_set_parent
|
||||
|
||||
def rtnl_tc_get_parent(*args):
|
||||
return _capi.rtnl_tc_get_parent(*args)
|
||||
rtnl_tc_get_parent = _capi.rtnl_tc_get_parent
|
||||
|
||||
def rtnl_tc_set_kind(*args):
|
||||
return _capi.rtnl_tc_set_kind(*args)
|
||||
rtnl_tc_set_kind = _capi.rtnl_tc_set_kind
|
||||
|
||||
def rtnl_tc_get_kind(*args):
|
||||
return _capi.rtnl_tc_get_kind(*args)
|
||||
rtnl_tc_get_kind = _capi.rtnl_tc_get_kind
|
||||
|
||||
def rtnl_tc_get_stat(*args):
|
||||
return _capi.rtnl_tc_get_stat(*args)
|
||||
rtnl_tc_get_stat = _capi.rtnl_tc_get_stat
|
||||
|
||||
def rtnl_tc_calc_txtime(*args):
|
||||
return _capi.rtnl_tc_calc_txtime(*args)
|
||||
rtnl_tc_calc_txtime = _capi.rtnl_tc_calc_txtime
|
||||
|
||||
def rtnl_tc_calc_bufsize(*args):
|
||||
return _capi.rtnl_tc_calc_bufsize(*args)
|
||||
rtnl_tc_calc_bufsize = _capi.rtnl_tc_calc_bufsize
|
||||
|
||||
def rtnl_tc_calc_cell_log(*args):
|
||||
return _capi.rtnl_tc_calc_cell_log(*args)
|
||||
rtnl_tc_calc_cell_log = _capi.rtnl_tc_calc_cell_log
|
||||
|
||||
def rtnl_tc_read_classid_file():
|
||||
return _capi.rtnl_tc_read_classid_file()
|
||||
rtnl_tc_read_classid_file = _capi.rtnl_tc_read_classid_file
|
||||
|
||||
def rtnl_tc_handle2str(*args):
|
||||
return _capi.rtnl_tc_handle2str(*args)
|
||||
rtnl_tc_handle2str = _capi.rtnl_tc_handle2str
|
||||
|
||||
def rtnl_classid_generate(*args):
|
||||
return _capi.rtnl_classid_generate(*args)
|
||||
rtnl_classid_generate = _capi.rtnl_classid_generate
|
||||
|
||||
def qdisc2obj(*args):
|
||||
return _capi.qdisc2obj(*args)
|
||||
qdisc2obj = _capi.qdisc2obj
|
||||
|
||||
def obj2qdisc(*args):
|
||||
return _capi.obj2qdisc(*args)
|
||||
obj2qdisc = _capi.obj2qdisc
|
||||
|
||||
def class2obj(*args):
|
||||
return _capi.class2obj(*args)
|
||||
class2obj = _capi.class2obj
|
||||
|
||||
def obj2class(*args):
|
||||
return _capi.obj2class(*args)
|
||||
obj2class = _capi.obj2class
|
||||
|
||||
def cls2obj(*args):
|
||||
return _capi.cls2obj(*args)
|
||||
cls2obj = _capi.cls2obj
|
||||
|
||||
def obj2cls(*args):
|
||||
return _capi.obj2cls(*args)
|
||||
obj2cls = _capi.obj2cls
|
||||
|
||||
def obj2tc(*args):
|
||||
return _capi.obj2tc(*args)
|
||||
obj2tc = _capi.obj2tc
|
||||
|
||||
def rtnl_qdisc_alloc():
|
||||
return _capi.rtnl_qdisc_alloc()
|
||||
rtnl_qdisc_alloc = _capi.rtnl_qdisc_alloc
|
||||
|
||||
def rtnl_qdisc_get(*args):
|
||||
return _capi.rtnl_qdisc_get(*args)
|
||||
rtnl_qdisc_get = _capi.rtnl_qdisc_get
|
||||
|
||||
def rtnl_qdisc_get_by_parent(*args):
|
||||
return _capi.rtnl_qdisc_get_by_parent(*args)
|
||||
rtnl_qdisc_get_by_parent = _capi.rtnl_qdisc_get_by_parent
|
||||
|
||||
def rtnl_qdisc_build_add_request(*args):
|
||||
return _capi.rtnl_qdisc_build_add_request(*args)
|
||||
rtnl_qdisc_build_add_request = _capi.rtnl_qdisc_build_add_request
|
||||
|
||||
def rtnl_qdisc_add(*args):
|
||||
return _capi.rtnl_qdisc_add(*args)
|
||||
rtnl_qdisc_add = _capi.rtnl_qdisc_add
|
||||
|
||||
def rtnl_qdisc_build_update_request(*args):
|
||||
return _capi.rtnl_qdisc_build_update_request(*args)
|
||||
rtnl_qdisc_build_update_request = _capi.rtnl_qdisc_build_update_request
|
||||
|
||||
def rtnl_qdisc_update(*args):
|
||||
return _capi.rtnl_qdisc_update(*args)
|
||||
rtnl_qdisc_update = _capi.rtnl_qdisc_update
|
||||
|
||||
def rtnl_qdisc_build_delete_request(*args):
|
||||
return _capi.rtnl_qdisc_build_delete_request(*args)
|
||||
rtnl_qdisc_build_delete_request = _capi.rtnl_qdisc_build_delete_request
|
||||
|
||||
def rtnl_qdisc_delete(*args):
|
||||
return _capi.rtnl_qdisc_delete(*args)
|
||||
rtnl_qdisc_delete = _capi.rtnl_qdisc_delete
|
||||
|
||||
def rtnl_cls_alloc():
|
||||
return _capi.rtnl_cls_alloc()
|
||||
rtnl_cls_alloc = _capi.rtnl_cls_alloc
|
||||
|
||||
def rtnl_cls_put(*args):
|
||||
return _capi.rtnl_cls_put(*args)
|
||||
rtnl_cls_put = _capi.rtnl_cls_put
|
||||
|
||||
def rtnl_cls_add(*args):
|
||||
return _capi.rtnl_cls_add(*args)
|
||||
rtnl_cls_add = _capi.rtnl_cls_add
|
||||
|
||||
def rtnl_cls_delete(*args):
|
||||
return _capi.rtnl_cls_delete(*args)
|
||||
rtnl_cls_delete = _capi.rtnl_cls_delete
|
||||
|
||||
def rtnl_cls_set_prio(*args):
|
||||
return _capi.rtnl_cls_set_prio(*args)
|
||||
rtnl_cls_set_prio = _capi.rtnl_cls_set_prio
|
||||
|
||||
def rtnl_cls_get_prio(*args):
|
||||
return _capi.rtnl_cls_get_prio(*args)
|
||||
rtnl_cls_get_prio = _capi.rtnl_cls_get_prio
|
||||
|
||||
def rtnl_cls_set_protocol(*args):
|
||||
return _capi.rtnl_cls_set_protocol(*args)
|
||||
rtnl_cls_set_protocol = _capi.rtnl_cls_set_protocol
|
||||
|
||||
def rtnl_cls_get_protocol(*args):
|
||||
return _capi.rtnl_cls_get_protocol(*args)
|
||||
rtnl_cls_get_protocol = _capi.rtnl_cls_get_protocol
|
||||
|
||||
def rtnl_htb_get_rate2quantum(*args):
|
||||
return _capi.rtnl_htb_get_rate2quantum(*args)
|
||||
rtnl_htb_get_rate2quantum = _capi.rtnl_htb_get_rate2quantum
|
||||
|
||||
def rtnl_htb_set_rate2quantum(*args):
|
||||
return _capi.rtnl_htb_set_rate2quantum(*args)
|
||||
rtnl_htb_set_rate2quantum = _capi.rtnl_htb_set_rate2quantum
|
||||
|
||||
def rtnl_htb_get_defcls(*args):
|
||||
return _capi.rtnl_htb_get_defcls(*args)
|
||||
rtnl_htb_get_defcls = _capi.rtnl_htb_get_defcls
|
||||
|
||||
def rtnl_htb_set_defcls(*args):
|
||||
return _capi.rtnl_htb_set_defcls(*args)
|
||||
rtnl_htb_set_defcls = _capi.rtnl_htb_set_defcls
|
||||
|
||||
def rtnl_htb_get_prio(*args):
|
||||
return _capi.rtnl_htb_get_prio(*args)
|
||||
rtnl_htb_get_prio = _capi.rtnl_htb_get_prio
|
||||
|
||||
def rtnl_htb_set_prio(*args):
|
||||
return _capi.rtnl_htb_set_prio(*args)
|
||||
rtnl_htb_set_prio = _capi.rtnl_htb_set_prio
|
||||
|
||||
def rtnl_htb_get_rate(*args):
|
||||
return _capi.rtnl_htb_get_rate(*args)
|
||||
rtnl_htb_get_rate = _capi.rtnl_htb_get_rate
|
||||
|
||||
def rtnl_htb_set_rate(*args):
|
||||
return _capi.rtnl_htb_set_rate(*args)
|
||||
rtnl_htb_set_rate = _capi.rtnl_htb_set_rate
|
||||
|
||||
def rtnl_htb_get_ceil(*args):
|
||||
return _capi.rtnl_htb_get_ceil(*args)
|
||||
rtnl_htb_get_ceil = _capi.rtnl_htb_get_ceil
|
||||
|
||||
def rtnl_htb_set_ceil(*args):
|
||||
return _capi.rtnl_htb_set_ceil(*args)
|
||||
rtnl_htb_set_ceil = _capi.rtnl_htb_set_ceil
|
||||
|
||||
def rtnl_htb_get_rbuffer(*args):
|
||||
return _capi.rtnl_htb_get_rbuffer(*args)
|
||||
rtnl_htb_get_rbuffer = _capi.rtnl_htb_get_rbuffer
|
||||
|
||||
def rtnl_htb_set_rbuffer(*args):
|
||||
return _capi.rtnl_htb_set_rbuffer(*args)
|
||||
rtnl_htb_set_rbuffer = _capi.rtnl_htb_set_rbuffer
|
||||
|
||||
def rtnl_htb_get_cbuffer(*args):
|
||||
return _capi.rtnl_htb_get_cbuffer(*args)
|
||||
rtnl_htb_get_cbuffer = _capi.rtnl_htb_get_cbuffer
|
||||
|
||||
def rtnl_htb_set_cbuffer(*args):
|
||||
return _capi.rtnl_htb_set_cbuffer(*args)
|
||||
rtnl_htb_set_cbuffer = _capi.rtnl_htb_set_cbuffer
|
||||
|
||||
def rtnl_htb_get_quantum(*args):
|
||||
return _capi.rtnl_htb_get_quantum(*args)
|
||||
rtnl_htb_get_quantum = _capi.rtnl_htb_get_quantum
|
||||
|
||||
def rtnl_htb_set_quantum(*args):
|
||||
return _capi.rtnl_htb_set_quantum(*args)
|
||||
rtnl_htb_set_quantum = _capi.rtnl_htb_set_quantum
|
||||
|
||||
def rtnl_htb_get_level(*args):
|
||||
return _capi.rtnl_htb_get_level(*args)
|
||||
rtnl_htb_get_level = _capi.rtnl_htb_get_level
|
||||
|
||||
def addr2obj(*args):
|
||||
return _capi.addr2obj(*args)
|
||||
addr2obj = _capi.addr2obj
|
||||
|
||||
def obj2addr(*args):
|
||||
return _capi.obj2addr(*args)
|
||||
obj2addr = _capi.obj2addr
|
||||
|
||||
def rtnl_addr_alloc():
|
||||
return _capi.rtnl_addr_alloc()
|
||||
rtnl_addr_alloc = _capi.rtnl_addr_alloc
|
||||
|
||||
def rtnl_addr_get(*args):
|
||||
return _capi.rtnl_addr_get(*args)
|
||||
rtnl_addr_get = _capi.rtnl_addr_get
|
||||
|
||||
def rtnl_addr_build_add_request(*args):
|
||||
return _capi.rtnl_addr_build_add_request(*args)
|
||||
rtnl_addr_build_add_request = _capi.rtnl_addr_build_add_request
|
||||
|
||||
def rtnl_addr_add(*args):
|
||||
return _capi.rtnl_addr_add(*args)
|
||||
rtnl_addr_add = _capi.rtnl_addr_add
|
||||
|
||||
def rtnl_addr_build_delete_request(*args):
|
||||
return _capi.rtnl_addr_build_delete_request(*args)
|
||||
rtnl_addr_build_delete_request = _capi.rtnl_addr_build_delete_request
|
||||
|
||||
def rtnl_addr_delete(*args):
|
||||
return _capi.rtnl_addr_delete(*args)
|
||||
rtnl_addr_delete = _capi.rtnl_addr_delete
|
||||
|
||||
def rtnl_addr_flags2str(*args):
|
||||
return _capi.rtnl_addr_flags2str(*args)
|
||||
rtnl_addr_flags2str = _capi.rtnl_addr_flags2str
|
||||
|
||||
def rtnl_addr_str2flags(*args):
|
||||
return _capi.rtnl_addr_str2flags(*args)
|
||||
rtnl_addr_str2flags = _capi.rtnl_addr_str2flags
|
||||
|
||||
def rtnl_addr_set_label(*args):
|
||||
return _capi.rtnl_addr_set_label(*args)
|
||||
rtnl_addr_set_label = _capi.rtnl_addr_set_label
|
||||
|
||||
def rtnl_addr_get_label(*args):
|
||||
return _capi.rtnl_addr_get_label(*args)
|
||||
rtnl_addr_get_label = _capi.rtnl_addr_get_label
|
||||
|
||||
def rtnl_addr_set_ifindex(*args):
|
||||
return _capi.rtnl_addr_set_ifindex(*args)
|
||||
rtnl_addr_set_ifindex = _capi.rtnl_addr_set_ifindex
|
||||
|
||||
def rtnl_addr_get_ifindex(*args):
|
||||
return _capi.rtnl_addr_get_ifindex(*args)
|
||||
rtnl_addr_get_ifindex = _capi.rtnl_addr_get_ifindex
|
||||
|
||||
def rtnl_addr_set_link(*args):
|
||||
return _capi.rtnl_addr_set_link(*args)
|
||||
rtnl_addr_set_link = _capi.rtnl_addr_set_link
|
||||
|
||||
def rtnl_addr_get_link(*args):
|
||||
return _capi.rtnl_addr_get_link(*args)
|
||||
rtnl_addr_get_link = _capi.rtnl_addr_get_link
|
||||
|
||||
def rtnl_addr_set_family(*args):
|
||||
return _capi.rtnl_addr_set_family(*args)
|
||||
rtnl_addr_set_family = _capi.rtnl_addr_set_family
|
||||
|
||||
def rtnl_addr_get_family(*args):
|
||||
return _capi.rtnl_addr_get_family(*args)
|
||||
rtnl_addr_get_family = _capi.rtnl_addr_get_family
|
||||
|
||||
def rtnl_addr_set_prefixlen(*args):
|
||||
return _capi.rtnl_addr_set_prefixlen(*args)
|
||||
rtnl_addr_set_prefixlen = _capi.rtnl_addr_set_prefixlen
|
||||
|
||||
def rtnl_addr_get_prefixlen(*args):
|
||||
return _capi.rtnl_addr_get_prefixlen(*args)
|
||||
rtnl_addr_get_prefixlen = _capi.rtnl_addr_get_prefixlen
|
||||
|
||||
def rtnl_addr_set_scope(*args):
|
||||
return _capi.rtnl_addr_set_scope(*args)
|
||||
rtnl_addr_set_scope = _capi.rtnl_addr_set_scope
|
||||
|
||||
def rtnl_addr_get_scope(*args):
|
||||
return _capi.rtnl_addr_get_scope(*args)
|
||||
rtnl_addr_get_scope = _capi.rtnl_addr_get_scope
|
||||
|
||||
def rtnl_addr_set_flags(*args):
|
||||
return _capi.rtnl_addr_set_flags(*args)
|
||||
rtnl_addr_set_flags = _capi.rtnl_addr_set_flags
|
||||
|
||||
def rtnl_addr_unset_flags(*args):
|
||||
return _capi.rtnl_addr_unset_flags(*args)
|
||||
rtnl_addr_unset_flags = _capi.rtnl_addr_unset_flags
|
||||
|
||||
def rtnl_addr_get_flags(*args):
|
||||
return _capi.rtnl_addr_get_flags(*args)
|
||||
rtnl_addr_get_flags = _capi.rtnl_addr_get_flags
|
||||
|
||||
def rtnl_addr_set_local(*args):
|
||||
return _capi.rtnl_addr_set_local(*args)
|
||||
rtnl_addr_set_local = _capi.rtnl_addr_set_local
|
||||
|
||||
def rtnl_addr_get_local(*args):
|
||||
return _capi.rtnl_addr_get_local(*args)
|
||||
rtnl_addr_get_local = _capi.rtnl_addr_get_local
|
||||
|
||||
def rtnl_addr_set_peer(*args):
|
||||
return _capi.rtnl_addr_set_peer(*args)
|
||||
rtnl_addr_set_peer = _capi.rtnl_addr_set_peer
|
||||
|
||||
def rtnl_addr_get_peer(*args):
|
||||
return _capi.rtnl_addr_get_peer(*args)
|
||||
rtnl_addr_get_peer = _capi.rtnl_addr_get_peer
|
||||
|
||||
def rtnl_addr_set_broadcast(*args):
|
||||
return _capi.rtnl_addr_set_broadcast(*args)
|
||||
rtnl_addr_set_broadcast = _capi.rtnl_addr_set_broadcast
|
||||
|
||||
def rtnl_addr_get_broadcast(*args):
|
||||
return _capi.rtnl_addr_get_broadcast(*args)
|
||||
rtnl_addr_get_broadcast = _capi.rtnl_addr_get_broadcast
|
||||
|
||||
def rtnl_addr_set_multicast(*args):
|
||||
return _capi.rtnl_addr_set_multicast(*args)
|
||||
rtnl_addr_set_multicast = _capi.rtnl_addr_set_multicast
|
||||
|
||||
def rtnl_addr_get_multicast(*args):
|
||||
return _capi.rtnl_addr_get_multicast(*args)
|
||||
rtnl_addr_get_multicast = _capi.rtnl_addr_get_multicast
|
||||
|
||||
def rtnl_addr_set_anycast(*args):
|
||||
return _capi.rtnl_addr_set_anycast(*args)
|
||||
rtnl_addr_set_anycast = _capi.rtnl_addr_set_anycast
|
||||
|
||||
def rtnl_addr_get_anycast(*args):
|
||||
return _capi.rtnl_addr_get_anycast(*args)
|
||||
rtnl_addr_get_anycast = _capi.rtnl_addr_get_anycast
|
||||
|
||||
def rtnl_addr_get_valid_lifetime(*args):
|
||||
return _capi.rtnl_addr_get_valid_lifetime(*args)
|
||||
rtnl_addr_get_valid_lifetime = _capi.rtnl_addr_get_valid_lifetime
|
||||
|
||||
def rtnl_addr_set_valid_lifetime(*args):
|
||||
return _capi.rtnl_addr_set_valid_lifetime(*args)
|
||||
rtnl_addr_set_valid_lifetime = _capi.rtnl_addr_set_valid_lifetime
|
||||
|
||||
def rtnl_addr_get_preferred_lifetime(*args):
|
||||
return _capi.rtnl_addr_get_preferred_lifetime(*args)
|
||||
rtnl_addr_get_preferred_lifetime = _capi.rtnl_addr_get_preferred_lifetime
|
||||
|
||||
def rtnl_addr_set_preferred_lifetime(*args):
|
||||
return _capi.rtnl_addr_set_preferred_lifetime(*args)
|
||||
rtnl_addr_set_preferred_lifetime = _capi.rtnl_addr_set_preferred_lifetime
|
||||
|
||||
def rtnl_addr_get_create_time(*args):
|
||||
return _capi.rtnl_addr_get_create_time(*args)
|
||||
rtnl_addr_get_create_time = _capi.rtnl_addr_get_create_time
|
||||
|
||||
def rtnl_addr_get_last_update_time(*args):
|
||||
return _capi.rtnl_addr_get_last_update_time(*args)
|
||||
rtnl_addr_get_last_update_time = _capi.rtnl_addr_get_last_update_time
|
||||
|
||||
|
9514
python/netlink/route/capi_wrap.c
Normal file
9514
python/netlink/route/capi_wrap.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -117,15 +117,16 @@ class LinkCache(netlink.Cache):
|
|||
if not cache:
|
||||
cache = self._alloc_cache_name("route/link")
|
||||
|
||||
self._info_module = None
|
||||
self._protocol = netlink.NETLINK_ROUTE
|
||||
self._c_cache = cache
|
||||
self._nl_cache = cache
|
||||
self._set_arg1(family)
|
||||
|
||||
def __getitem__(self, key):
|
||||
if type(key) is int:
|
||||
link = capi.rtnl_link_get(self._c_cache, key)
|
||||
link = capi.rtnl_link_get(self._nl_cache, key)
|
||||
elif type(key) is str:
|
||||
link = capi.rtnl_link_get_by_name(self._c_cache, key)
|
||||
link = capi.rtnl_link_get_by_name(self._nl_cache, key)
|
||||
|
||||
if link is None:
|
||||
raise KeyError()
|
||||
|
@ -147,10 +148,8 @@ class Link(netlink.Object):
|
|||
netlink.Object.__init__(self, "route/link", "link", obj)
|
||||
self._rtnl_link = self._obj2type(self._nl_object)
|
||||
|
||||
self._type = None
|
||||
|
||||
if self.type:
|
||||
self._type_lookup(self.type)
|
||||
self._module_lookup('netlink.route.links.' + self.type)
|
||||
|
||||
self.inet = inet.InetLink(self)
|
||||
self.af = {'inet' : self.inet }
|
||||
|
@ -171,15 +170,6 @@ class Link(netlink.Object):
|
|||
|
||||
return Link(obj)
|
||||
|
||||
def _type_lookup(self, name):
|
||||
rname = 'netlink.route.links.' + name
|
||||
tmp = __import__(rname)
|
||||
mod = sys.modules[rname]
|
||||
|
||||
# this will create a type instance and assign it to
|
||||
# link.<type>, e.g. link.vlan.id
|
||||
self._type = mod.assign_type(self)
|
||||
|
||||
#####################################################################
|
||||
# ifindex
|
||||
@netlink.nlattr('link.ifindex', type=int, immutable=True, fmt=util.num)
|
||||
|
@ -403,7 +393,7 @@ class Link(netlink.Object):
|
|||
if capi.rtnl_link_set_info_type(self._rtnl_link, value) < 0:
|
||||
raise NameError("unknown info type")
|
||||
|
||||
self._type_lookup(value)
|
||||
self._module_lookup('netlink.route.links.' + value)
|
||||
|
||||
#####################################################################
|
||||
# get_stat()
|
||||
|
@ -469,14 +459,7 @@ class Link(netlink.Object):
|
|||
|
||||
@property
|
||||
def _brief(self):
|
||||
buf = ''
|
||||
if self.type:
|
||||
if self._type and hasattr(self._type, 'brief'):
|
||||
buf += self._type.brief()
|
||||
else:
|
||||
buf += util.yellow(self.type)
|
||||
|
||||
return buf + self._foreach_af('brief')
|
||||
return self._module_brief() + self._foreach_af('brief')
|
||||
|
||||
@property
|
||||
def _flags(self):
|
||||
|
@ -587,10 +570,8 @@ def get(name, socket=None):
|
|||
|
||||
return Link.from_capi(link)
|
||||
|
||||
link_cache = LinkCache()
|
||||
_link_cache = LinkCache()
|
||||
|
||||
def resolve(name):
|
||||
socket = netlink.lookup_socket(netlink.NETLINK_ROUTE)
|
||||
link_cache.refill()
|
||||
|
||||
return link_cache[name]
|
||||
_link_cache.refill()
|
||||
return _link_cache[name]
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"""
|
||||
|
||||
__version__ = "1.0"
|
||||
__all__ = ['assign_type']
|
||||
__all__ = ['init']
|
||||
|
||||
import netlink.core as netlink
|
||||
import netlink.route.capi as capi
|
||||
|
@ -15,7 +15,10 @@ import netlink.route.capi as capi
|
|||
class DummyLink(object):
|
||||
def __init__(self, link):
|
||||
self._rtnl_link = link
|
||||
|
||||
def brief(self):
|
||||
return 'dummy'
|
||||
|
||||
def assign_type(link):
|
||||
def init(link):
|
||||
link.dummy = DummyLink(link._rtnl_link)
|
||||
return link.dummy
|
||||
return link.dummy
|
||||
|
|
|
@ -57,6 +57,6 @@ class VLANLink(object):
|
|||
def brief(self):
|
||||
return 'vlan-id ' + self.id
|
||||
|
||||
def assign_type(link):
|
||||
def init(link):
|
||||
link.vlan = VLANLink(link._link)
|
||||
return link.vlan
|
||||
return link.vlan
|
||||
|
|
|
@ -1,185 +0,0 @@
|
|||
#
|
||||
# Copyright (c) 2011 Thomas Graf <tgraf@suug.ch>
|
||||
#
|
||||
|
||||
__all__ = [
|
||||
'QdiscCache',
|
||||
'Qdisc']
|
||||
|
||||
import netlink.core as netlink
|
||||
import netlink.capi as core_capi
|
||||
import netlink.route.capi as capi
|
||||
import netlink.util as util
|
||||
import netlink.route.tc as tc
|
||||
|
||||
###########################################################################
|
||||
# Link Cache
|
||||
class QdiscCache(netlink.Cache):
|
||||
"""Cache of qdiscs"""
|
||||
|
||||
def __init__(self, cache=None):
|
||||
if not cache:
|
||||
cache = self._alloc_cache_name("route/qdisc")
|
||||
|
||||
self._protocol = netlink.NETLINK_ROUTE
|
||||
self._c_cache = cache
|
||||
|
||||
# def __getitem__(self, key):
|
||||
# if type(key) is int:
|
||||
# link = capi.rtnl_link_get(self._this, key)
|
||||
# elif type(key) is str:
|
||||
# link = capi.rtnl_link_get_by_name(self._this, key)
|
||||
#
|
||||
# if qdisc is None:
|
||||
# raise KeyError()
|
||||
# else:
|
||||
# return Qdisc._from_capi(capi.qdisc2obj(qdisc))
|
||||
|
||||
def _new_object(self, obj):
|
||||
return Qdisc(obj)
|
||||
|
||||
def _new_cache(self, cache):
|
||||
return QdiscCache(cache=cache)
|
||||
|
||||
###########################################################################
|
||||
# Qdisc Object
|
||||
class Qdisc(tc.Tc):
|
||||
"""Network link"""
|
||||
|
||||
def __init__(self, obj=None):
|
||||
self._name = "qdisc"
|
||||
self._abbr = "qdisc"
|
||||
|
||||
netlink.Object.__init__(self, "route/qdisc", "qdisc", obj)
|
||||
self._tc = capi.obj2tc(self._nl_object)
|
||||
self._rtnl_qdisc = self._obj2type(self._nl_object)
|
||||
|
||||
netlink.attr('qdisc.handle', fmt=util.handle)
|
||||
netlink.attr('qdisc.parent', fmt=util.handle)
|
||||
netlink.attr('qdisc.kind', fmt=util.bold)
|
||||
|
||||
def _obj2type(self, obj):
|
||||
return capi.obj2qdisc(obj)
|
||||
|
||||
def __cmp__(self, other):
|
||||
return self.handle - other.handle
|
||||
|
||||
def _new_instance(self, obj):
|
||||
if not obj:
|
||||
raise ValueError()
|
||||
|
||||
return Qdisc(obj)
|
||||
|
||||
# #####################################################################
|
||||
# # add()
|
||||
# def add(self, socket, flags=None):
|
||||
# if not flags:
|
||||
# flags = netlink.NLM_F_CREATE
|
||||
#
|
||||
# ret = capi.rtnl_link_add(socket._sock, self._link, flags)
|
||||
# if ret < 0:
|
||||
# raise netlink.KernelError(ret)
|
||||
#
|
||||
# #####################################################################
|
||||
# # change()
|
||||
# def change(self, socket, flags=0):
|
||||
# """Commit changes made to the link object"""
|
||||
# if not self._orig:
|
||||
# raise NetlinkError("Original link not available")
|
||||
# ret = capi.rtnl_link_change(socket._sock, self._orig, self._link, flags)
|
||||
# if ret < 0:
|
||||
# raise netlink.KernelError(ret)
|
||||
#
|
||||
# #####################################################################
|
||||
# # delete()
|
||||
# def delete(self, socket):
|
||||
# """Attempt to delete this link in the kernel"""
|
||||
# ret = capi.rtnl_link_delete(socket._sock, self._link)
|
||||
# if ret < 0:
|
||||
# raise netlink.KernelError(ret)
|
||||
|
||||
@property
|
||||
def _dev(self):
|
||||
buf = util.kw('dev') + ' '
|
||||
|
||||
if self.link:
|
||||
return buf + util.string(self.link.name)
|
||||
else:
|
||||
return buf + util.num(self.ifindex)
|
||||
|
||||
@property
|
||||
def _parent(self):
|
||||
return util.kw('parent') + ' ' + str(self.parent)
|
||||
|
||||
###################################################################
|
||||
#
|
||||
# format(details=False, stats=False)
|
||||
#
|
||||
def format(self, details=False, stats=False):
|
||||
"""Return qdisc as formatted text"""
|
||||
fmt = util.MyFormatter(self)
|
||||
|
||||
buf = fmt.format('qdisc {kind} {handle} {_dev} {_parent}')
|
||||
|
||||
if details:
|
||||
fmt = util.MyFormatter(self)
|
||||
buf += fmt.format('\n'\
|
||||
'\t{mtu} {mpu} {overhead}\n')
|
||||
|
||||
# if stats:
|
||||
# l = [['Packets', RX_PACKETS, TX_PACKETS],
|
||||
# ['Bytes', RX_BYTES, TX_BYTES],
|
||||
# ['Errors', RX_ERRORS, TX_ERRORS],
|
||||
# ['Dropped', RX_DROPPED, TX_DROPPED],
|
||||
# ['Compressed', RX_COMPRESSED, TX_COMPRESSED],
|
||||
# ['FIFO Errors', RX_FIFO_ERR, TX_FIFO_ERR],
|
||||
# ['Length Errors', RX_LEN_ERR, None],
|
||||
# ['Over Errors', RX_OVER_ERR, None],
|
||||
# ['CRC Errors', RX_CRC_ERR, None],
|
||||
# ['Frame Errors', RX_FRAME_ERR, None],
|
||||
# ['Missed Errors', RX_MISSED_ERR, None],
|
||||
# ['Abort Errors', None, TX_ABORT_ERR],
|
||||
# ['Carrier Errors', None, TX_CARRIER_ERR],
|
||||
# ['Heartbeat Errors', None, TX_HBEAT_ERR],
|
||||
# ['Window Errors', None, TX_WIN_ERR],
|
||||
# ['Collisions', None, COLLISIONS],
|
||||
# ['Multicast', None, MULTICAST],
|
||||
# ['', None, None],
|
||||
# ['Ipv6:', None, None],
|
||||
# ['Packets', IP6_INPKTS, IP6_OUTPKTS],
|
||||
# ['Bytes', IP6_INOCTETS, IP6_OUTOCTETS],
|
||||
# ['Discards', IP6_INDISCARDS, IP6_OUTDISCARDS],
|
||||
# ['Multicast Packets', IP6_INMCASTPKTS, IP6_OUTMCASTPKTS],
|
||||
# ['Multicast Bytes', IP6_INMCASTOCTETS, IP6_OUTMCASTOCTETS],
|
||||
# ['Broadcast Packets', IP6_INBCASTPKTS, IP6_OUTBCASTPKTS],
|
||||
# ['Broadcast Bytes', IP6_INBCASTOCTETS, IP6_OUTBCASTOCTETS],
|
||||
# ['Delivers', IP6_INDELIVERS, None],
|
||||
# ['Forwarded', None, IP6_OUTFORWDATAGRAMS],
|
||||
# ['No Routes', IP6_INNOROUTES, IP6_OUTNOROUTES],
|
||||
# ['Header Errors', IP6_INHDRERRORS, None],
|
||||
# ['Too Big Errors', IP6_INTOOBIGERRORS, None],
|
||||
# ['Address Errors', IP6_INADDRERRORS, None],
|
||||
# ['Unknown Protocol', IP6_INUNKNOWNPROTOS, None],
|
||||
# ['Truncated Packets', IP6_INTRUNCATEDPKTS, None],
|
||||
# ['Reasm Timeouts', IP6_REASMTIMEOUT, None],
|
||||
# ['Reasm Requests', IP6_REASMREQDS, None],
|
||||
# ['Reasm Failures', IP6_REASMFAILS, None],
|
||||
# ['Reasm OK', IP6_REASMOKS, None],
|
||||
# ['Frag Created', None, IP6_FRAGCREATES],
|
||||
# ['Frag Failures', None, IP6_FRAGFAILS],
|
||||
# ['Frag OK', None, IP6_FRAGOKS],
|
||||
# ['', None, None],
|
||||
# ['ICMPv6:', None, None],
|
||||
# ['Messages', ICMP6_INMSGS, ICMP6_OUTMSGS],
|
||||
# ['Errors', ICMP6_INERRORS, ICMP6_OUTERRORS]]
|
||||
#
|
||||
# buf += '\n\t%s%s%s%s\n' % (33 * ' ', util.title('RX'),
|
||||
# 15 * ' ', util.title('TX'))
|
||||
#
|
||||
# for row in l:
|
||||
# row[0] = util.kw(row[0])
|
||||
# row[1] = self.get_stat(row[1]) if row[1] else ''
|
||||
# row[2] = self.get_stat(row[2]) if row[2] else ''
|
||||
# buf += '\t{0:27} {1:>16} {2:>16}\n'.format(*row)
|
||||
|
||||
return buf
|
0
python/netlink/route/qdisc/__init__.py
Normal file
0
python/netlink/route/qdisc/__init__.py
Normal file
161
python/netlink/route/qdisc/htb.py
Normal file
161
python/netlink/route/qdisc/htb.py
Normal file
|
@ -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);
|
|
@ -1,5 +1,3 @@
|
|||
|
||||
|
||||
#
|
||||
# Copyright (c) 2011 Thomas Graf <tgraf@suug.ch>
|
||||
#
|
||||
|
@ -8,7 +6,9 @@ __all__ = [
|
|||
'TcCache',
|
||||
'Tc',
|
||||
'QdiscCache',
|
||||
'Qdisc']
|
||||
'Qdisc',
|
||||
'TcClassCache',
|
||||
'TcClass']
|
||||
|
||||
import socket
|
||||
import sys
|
||||
|
@ -17,7 +17,7 @@ import netlink.capi as core_capi
|
|||
import netlink.route.capi as capi
|
||||
import netlink.util as util
|
||||
|
||||
from netlink.route.link import Link
|
||||
import netlink.route.link as Link
|
||||
|
||||
TC_PACKETS = 0
|
||||
TC_BYTES = 1
|
||||
|
@ -32,7 +32,31 @@ TC_OVERLIMITS = 9
|
|||
TC_H_ROOT = 0xFFFFFFFF
|
||||
TC_H_INGRESS = 0xFFFFFFF1
|
||||
|
||||
STAT_PACKETS = 0
|
||||
STAT_BYTES = 1
|
||||
STAT_RATE_BPS = 2
|
||||
STAT_RATE_PPS = 3
|
||||
STAT_QLEN = 4
|
||||
STAT_BACKLOG = 5
|
||||
STAT_DROPS = 6
|
||||
STAT_REQUEUES = 7
|
||||
STAT_OVERLIMITS = 8
|
||||
STAT_MAX = STAT_OVERLIMITS
|
||||
|
||||
|
||||
###########################################################################
|
||||
# Handle
|
||||
class Handle(object):
|
||||
""" Traffic control handle
|
||||
|
||||
Representation of a traffic control handle which uniquely identifies
|
||||
each traffic control object in its link namespace.
|
||||
|
||||
handle = tc.Handle('10:20')
|
||||
handle = tc.handle('root')
|
||||
print int(handle)
|
||||
print str(handle)
|
||||
"""
|
||||
def __init__(self, val=None):
|
||||
if type(val) is str:
|
||||
val = capi.tc_str2handle(val)
|
||||
|
@ -41,6 +65,17 @@ class Handle(object):
|
|||
|
||||
self._val = int(val)
|
||||
|
||||
def __cmp__(self, other):
|
||||
if other is None:
|
||||
other = 0
|
||||
|
||||
if isinstance(other, Handle):
|
||||
return int(self) - int(other)
|
||||
elif isinstance(other, int):
|
||||
return int(self) - other
|
||||
else:
|
||||
raise TypeError()
|
||||
|
||||
def __int__(self):
|
||||
return self._val
|
||||
|
||||
|
@ -62,9 +97,18 @@ class TcCache(netlink.Cache):
|
|||
# Tc Object
|
||||
class Tc(netlink.Object):
|
||||
def __cmp__(self, other):
|
||||
return self.ifindex - other.ifindex
|
||||
diff = self.ifindex - other.ifindex
|
||||
if diff == 0:
|
||||
diff = int(self.handle) - int(other.handle)
|
||||
return diff
|
||||
|
||||
def isroot(self):
|
||||
def _tc_module_lookup(self):
|
||||
self._module_lookup(self._module_path + self.kind,
|
||||
'init_' + self._name)
|
||||
|
||||
@property
|
||||
def root(self):
|
||||
"""True if tc object is a root object"""
|
||||
return self.parent.isroot()
|
||||
|
||||
#####################################################################
|
||||
|
@ -72,120 +116,140 @@ class Tc(netlink.Object):
|
|||
@property
|
||||
def ifindex(self):
|
||||
"""interface index"""
|
||||
return capi.rtnl_tc_get_ifindex(self._tc)
|
||||
return capi.rtnl_tc_get_ifindex(self._rtnl_tc)
|
||||
|
||||
@ifindex.setter
|
||||
def ifindex(self, value):
|
||||
capi.rtnl_tc_set_ifindex(self._tc, int(value))
|
||||
capi.rtnl_tc_set_ifindex(self._rtnl_tc, int(value))
|
||||
|
||||
#####################################################################
|
||||
# link
|
||||
@property
|
||||
def link(self):
|
||||
link = capi.rtnl_tc_get_link(self._tc)
|
||||
link = capi.rtnl_tc_get_link(self._rtnl_tc)
|
||||
if not link:
|
||||
return None
|
||||
else:
|
||||
return Link._from_capi(link)
|
||||
|
||||
return Link.Link.from_capi(link)
|
||||
|
||||
@link.setter
|
||||
def link(self, value):
|
||||
capi.rtnl_tc_set_link(self._tc, value._link)
|
||||
capi.rtnl_tc_set_link(self._rtnl_tc, value._link)
|
||||
|
||||
#####################################################################
|
||||
# mtu
|
||||
@property
|
||||
def mtu(self):
|
||||
return capi.rtnl_tc_get_mtu(self._tc)
|
||||
return capi.rtnl_tc_get_mtu(self._rtnl_tc)
|
||||
|
||||
@mtu.setter
|
||||
def mtu(self, value):
|
||||
capi.rtnl_tc_set_mtu(self._tc, int(value))
|
||||
capi.rtnl_tc_set_mtu(self._rtnl_tc, int(value))
|
||||
|
||||
#####################################################################
|
||||
# mpu
|
||||
@property
|
||||
def mpu(self):
|
||||
return capi.rtnl_tc_get_mpu(self._tc)
|
||||
return capi.rtnl_tc_get_mpu(self._rtnl_tc)
|
||||
|
||||
@mpu.setter
|
||||
def mpu(self, value):
|
||||
capi.rtnl_tc_set_mpu(self._tc, int(value))
|
||||
capi.rtnl_tc_set_mpu(self._rtnl_tc, int(value))
|
||||
|
||||
#####################################################################
|
||||
# overhead
|
||||
@property
|
||||
def overhead(self):
|
||||
return capi.rtnl_tc_get_overhead(self._tc)
|
||||
return capi.rtnl_tc_get_overhead(self._rtnl_tc)
|
||||
|
||||
@overhead.setter
|
||||
def overhead(self, value):
|
||||
capi.rtnl_tc_set_overhead(self._tc, int(value))
|
||||
capi.rtnl_tc_set_overhead(self._rtnl_tc, int(value))
|
||||
|
||||
#####################################################################
|
||||
# linktype
|
||||
@property
|
||||
def linktype(self):
|
||||
return capi.rtnl_tc_get_linktype(self._tc)
|
||||
return capi.rtnl_tc_get_linktype(self._rtnl_tc)
|
||||
|
||||
@linktype.setter
|
||||
def linktype(self, value):
|
||||
capi.rtnl_tc_set_linktype(self._tc, int(value))
|
||||
capi.rtnl_tc_set_linktype(self._rtnl_tc, int(value))
|
||||
|
||||
#####################################################################
|
||||
# handle
|
||||
@property
|
||||
def handle(self):
|
||||
return Handle(capi.rtnl_tc_get_handle(self._tc))
|
||||
return Handle(capi.rtnl_tc_get_handle(self._rtnl_tc))
|
||||
|
||||
@handle.setter
|
||||
def handle(self, value):
|
||||
capi.rtnl_tc_set_handle(self._tc, int(value))
|
||||
capi.rtnl_tc_set_handle(self._rtnl_tc, int(value))
|
||||
|
||||
#####################################################################
|
||||
# parent
|
||||
@property
|
||||
def parent(self):
|
||||
return Handle(capi.rtnl_tc_get_parent(self._tc))
|
||||
return Handle(capi.rtnl_tc_get_parent(self._rtnl_tc))
|
||||
|
||||
@parent.setter
|
||||
def parent(self, value):
|
||||
capi.rtnl_tc_set_parent(self._tc, int(value))
|
||||
capi.rtnl_tc_set_parent(self._rtnl_tc, int(value))
|
||||
|
||||
#####################################################################
|
||||
# kind
|
||||
@property
|
||||
def kind(self):
|
||||
return capi.rtnl_tc_get_kind(self._tc)
|
||||
return capi.rtnl_tc_get_kind(self._rtnl_tc)
|
||||
|
||||
@kind.setter
|
||||
def kind(self, value):
|
||||
capi.rtnl_tc_set_kind(self._tc, value)
|
||||
capi.rtnl_tc_set_kind(self._rtnl_tc, value)
|
||||
self._tc_module_lookup()
|
||||
|
||||
def get_stat(self, id):
|
||||
return capi.rtnl_tc_get_stat(self._tc, id)
|
||||
return capi.rtnl_tc_get_stat(self._rtnl_tc, id)
|
||||
|
||||
class TcTree(object):
|
||||
def __init__(self, link, sock):
|
||||
self._qdisc_cache = QdiscCache().refill(sock)
|
||||
@property
|
||||
def _dev(self):
|
||||
buf = util.kw('dev') + ' '
|
||||
|
||||
def __getitem__(self, key):
|
||||
pass
|
||||
# if type(key) is int:
|
||||
# link = capi.rtnl_link_get(self._this, key)
|
||||
# elif type(key) is str:
|
||||
# link = capi.rtnl_link_get_by_name(self._this, key)
|
||||
#
|
||||
# if qdisc is None:
|
||||
# raise KeyError()
|
||||
# else:
|
||||
# return Qdisc._from_capi(capi.qdisc2obj(qdisc))
|
||||
if self.link:
|
||||
return buf + util.string(self.link.name)
|
||||
else:
|
||||
return buf + util.num(self.ifindex)
|
||||
|
||||
|
||||
def brief(self, title, nodev=False, noparent=False):
|
||||
ret = title + ' {a|kind} {a|handle}'
|
||||
|
||||
if not nodev:
|
||||
ret += ' {a|_dev}'
|
||||
|
||||
if not noparent:
|
||||
ret += ' {t|parent}'
|
||||
|
||||
return ret + self._module_brief()
|
||||
|
||||
def details(self):
|
||||
return '{t|mtu} {t|mpu} {t|overhead} {t|linktype}'
|
||||
|
||||
@property
|
||||
def packets(self):
|
||||
return self.get_stat(STAT_PACKETS)
|
||||
|
||||
@property
|
||||
def bytes(self):
|
||||
return self.get_stat(STAT_BYTES)
|
||||
|
||||
@property
|
||||
def qlen(self):
|
||||
return self.get_stat(STAT_QLEN)
|
||||
|
||||
def stats(self, fmt):
|
||||
return fmt.nl('{t|packets} {t|bytes} {t|qlen}')
|
||||
|
||||
###########################################################################
|
||||
# Link Cache
|
||||
# Queueing discipline cache
|
||||
class QdiscCache(netlink.Cache):
|
||||
"""Cache of qdiscs"""
|
||||
|
||||
|
@ -193,7 +257,8 @@ class QdiscCache(netlink.Cache):
|
|||
if not cache:
|
||||
cache = self._alloc_cache_name("route/qdisc")
|
||||
|
||||
self._c_cache = cache
|
||||
self._protocol = netlink.NETLINK_ROUTE
|
||||
self._nl_cache = cache
|
||||
|
||||
# def __getitem__(self, key):
|
||||
# if type(key) is int:
|
||||
|
@ -215,33 +280,48 @@ class QdiscCache(netlink.Cache):
|
|||
###########################################################################
|
||||
# Qdisc Object
|
||||
class Qdisc(Tc):
|
||||
"""Network link"""
|
||||
"""Queueing discipline"""
|
||||
|
||||
def __init__(self, obj=None):
|
||||
self._name = "qdisc"
|
||||
self._abbr = "qdisc"
|
||||
netlink.Object.__init__(self, "route/qdisc", "qdisc", obj)
|
||||
self._module_path = 'netlink.route.qdisc.'
|
||||
self._rtnl_qdisc = self._obj2type(self._nl_object)
|
||||
self._rtnl_tc = capi.obj2tc(self._nl_object)
|
||||
|
||||
if not obj:
|
||||
self._qdisc = capi.rtnl_qdisc_alloc()
|
||||
else:
|
||||
self._qdisc = capi.obj2qdisc(obj)
|
||||
netlink.add_attr('qdisc.handle', fmt=util.handle)
|
||||
netlink.add_attr('qdisc.parent', fmt=util.handle)
|
||||
netlink.add_attr('qdisc.kind', fmt=util.bold)
|
||||
|
||||
self._obj = capi.qdisc2obj(self._qdisc)
|
||||
self._orig = capi.obj2qdisc(core_capi.nl_object_clone(self._obj))
|
||||
if self.kind:
|
||||
self._tc_module_lookup()
|
||||
|
||||
Tc.__init__(self)
|
||||
@classmethod
|
||||
def from_capi(cls, obj):
|
||||
return cls(capi.qdisc2obj(obj))
|
||||
|
||||
netlink.attr('qdisc.handle', fmt=util.handle)
|
||||
netlink.attr('qdisc.parent', fmt=util.handle)
|
||||
netlink.attr('qdisc.kind', fmt=util.bold)
|
||||
|
||||
def __cmp__(self, other):
|
||||
return self.handle - other.handle
|
||||
def _obj2type(self, obj):
|
||||
return capi.obj2qdisc(obj)
|
||||
|
||||
def _new_instance(self, obj):
|
||||
if not obj: raise ValueError()
|
||||
if not obj:
|
||||
raise ValueError()
|
||||
|
||||
return Qdisc(obj)
|
||||
|
||||
@property
|
||||
def childs(self):
|
||||
ret = []
|
||||
|
||||
if int(self.handle):
|
||||
ret += get_cls(self.ifindex, parent=self.handle)
|
||||
|
||||
if self.root:
|
||||
ret += get_class(self.ifindex, parent=TC_H_ROOT)
|
||||
|
||||
ret += get_class(self.ifindex, parent=self.handle)
|
||||
|
||||
return ret
|
||||
|
||||
# #####################################################################
|
||||
# # add()
|
||||
# def add(self, socket, flags=None):
|
||||
|
@ -270,33 +350,22 @@ class Qdisc(Tc):
|
|||
# if ret < 0:
|
||||
# raise netlink.KernelError(ret)
|
||||
|
||||
@property
|
||||
def _dev(self):
|
||||
buf = util.kw('dev') + ' '
|
||||
|
||||
if self.link:
|
||||
return buf + util.string(self.link.name)
|
||||
else:
|
||||
return buf + util.num(self.ifindex)
|
||||
|
||||
@property
|
||||
def _parent(self):
|
||||
return util.kw('parent') + ' ' + str(self.parent)
|
||||
|
||||
###################################################################
|
||||
#
|
||||
# format(details=False, stats=False)
|
||||
#
|
||||
def format(self, details=False, stats=False):
|
||||
def format(self, details=False, stats=False, nodev=False,
|
||||
noparent=False, indent=''):
|
||||
"""Return qdisc as formatted text"""
|
||||
fmt = util.BriefFormatter(self)
|
||||
|
||||
buf = fmt.format('qdisc {kind} {handle} {_dev} {_parent}')
|
||||
fmt = util.MyFormatter(self, indent)
|
||||
|
||||
buf = fmt.format(self.brief('qdisc', nodev, noparent))
|
||||
|
||||
if details:
|
||||
fmt = util.DetailFormatter(self)
|
||||
buf += fmt.format('\n'\
|
||||
'\t{mtu} {mpu} {overhead}\n')
|
||||
buf += fmt.nl('\t' + self.details())
|
||||
|
||||
if stats:
|
||||
buf += self.stats(fmt)
|
||||
|
||||
# if stats:
|
||||
# l = [['Packets', RX_PACKETS, TX_PACKETS],
|
||||
|
@ -355,3 +424,229 @@ class Qdisc(Tc):
|
|||
# buf += '\t{0:27} {1:>16} {2:>16}\n'.format(*row)
|
||||
|
||||
return buf
|
||||
|
||||
###########################################################################
|
||||
# Traffic class cache
|
||||
class TcClassCache(netlink.Cache):
|
||||
"""Cache of traffic classes"""
|
||||
|
||||
def __init__(self, ifindex, cache=None):
|
||||
if not cache:
|
||||
cache = self._alloc_cache_name("route/class")
|
||||
|
||||
self._protocol = netlink.NETLINK_ROUTE
|
||||
self._nl_cache = cache
|
||||
self._set_arg1(ifindex)
|
||||
|
||||
def _new_object(self, obj):
|
||||
return TcClass(obj)
|
||||
|
||||
def _new_cache(self, cache):
|
||||
return TcClassCache(self.arg1, cache=cache)
|
||||
|
||||
###########################################################################
|
||||
# Traffic Class Object
|
||||
class TcClass(Tc):
|
||||
"""Traffic Class"""
|
||||
|
||||
def __init__(self, obj=None):
|
||||
netlink.Object.__init__(self, "route/class", "class", obj)
|
||||
self._module_path = 'netlink.route.qdisc.'
|
||||
self._rtnl_class = self._obj2type(self._nl_object)
|
||||
self._rtnl_tc = capi.obj2tc(self._nl_object)
|
||||
|
||||
netlink.add_attr('class.handle', fmt=util.handle)
|
||||
netlink.add_attr('class.parent', fmt=util.handle)
|
||||
netlink.add_attr('class.kind', fmt=util.bold)
|
||||
|
||||
if self.kind:
|
||||
self._tc_module_lookup()
|
||||
|
||||
@classmethod
|
||||
def from_capi(cls, obj):
|
||||
return cls(capi.class2obj(obj))
|
||||
|
||||
def _obj2type(self, obj):
|
||||
return capi.obj2class(obj)
|
||||
|
||||
def _new_instance(self, obj):
|
||||
if not obj:
|
||||
raise ValueError()
|
||||
|
||||
return TcClass(obj)
|
||||
|
||||
@property
|
||||
def childs(self):
|
||||
ret = []
|
||||
|
||||
# classes can have classifiers, child classes and leaf
|
||||
# qdiscs
|
||||
ret += get_cls(self.ifindex, parent=self.handle)
|
||||
ret += get_class(self.ifindex, parent=self.handle)
|
||||
ret += get_qdisc(self.ifindex, parent=self.handle)
|
||||
|
||||
return ret
|
||||
|
||||
###################################################################
|
||||
#
|
||||
# format(details=False, stats=False)
|
||||
#
|
||||
def format(self, details=False, stats=False, nodev=False,
|
||||
noparent=False, indent=''):
|
||||
"""Return class as formatted text"""
|
||||
fmt = util.MyFormatter(self, indent)
|
||||
|
||||
buf = fmt.format(self.brief('class', nodev, noparent))
|
||||
|
||||
if details:
|
||||
buf += fmt.nl('\t' + self.details())
|
||||
|
||||
return buf
|
||||
|
||||
###########################################################################
|
||||
# Classifier Cache
|
||||
class ClassifierCache(netlink.Cache):
|
||||
"""Cache of traffic classifiers objects"""
|
||||
|
||||
def __init__(self, ifindex, parent, cache=None):
|
||||
if not cache:
|
||||
cache = self._alloc_cache_name("route/cls")
|
||||
|
||||
self._protocol = netlink.NETLINK_ROUTE
|
||||
self._nl_cache = cache
|
||||
self._set_arg1(ifindex)
|
||||
self._set_arg2(int(parent))
|
||||
|
||||
def _new_object(self, obj):
|
||||
return Classifier(obj)
|
||||
|
||||
def _new_cache(self, cache):
|
||||
return ClassifierCache(self.arg1, self.arg2, cache=cache)
|
||||
|
||||
###########################################################################
|
||||
# Classifier Object
|
||||
class Classifier(Tc):
|
||||
"""Classifier"""
|
||||
|
||||
def __init__(self, obj=None):
|
||||
netlink.Object.__init__(self, "route/cls", "cls", obj)
|
||||
self._module_path = 'netlink.route.cls.'
|
||||
self._rtnl_cls = self._obj2type(self._nl_object)
|
||||
self._rtnl_tc = capi.obj2tc(self._nl_object)
|
||||
|
||||
netlink.add_attr('cls.handle', fmt=util.handle)
|
||||
netlink.add_attr('cls.parent', fmt=util.handle)
|
||||
netlink.add_attr('cls.kind', fmt=util.bold)
|
||||
|
||||
@classmethod
|
||||
def from_capi(cls, obj):
|
||||
return cls(capi.cls2obj(obj))
|
||||
|
||||
def _obj2type(self, obj):
|
||||
return capi.obj2cls(obj)
|
||||
|
||||
def _new_instance(self, obj):
|
||||
if not obj:
|
||||
raise ValueError()
|
||||
|
||||
return Classifier(obj)
|
||||
|
||||
#####################################################################
|
||||
# priority
|
||||
@property
|
||||
def priority(self):
|
||||
return capi.rtnl_cls_get_prio(self._rtnl_cls)
|
||||
|
||||
@priority.setter
|
||||
def priority(self, value):
|
||||
capi.rtnl_cls_set_prio(self._rtnl_cls, int(value))
|
||||
|
||||
#####################################################################
|
||||
# protocol
|
||||
@property
|
||||
def protocol(self):
|
||||
return capi.rtnl_cls_get_protocol(self._rtnl_cls)
|
||||
|
||||
@protocol.setter
|
||||
def protocol(self, value):
|
||||
capi.rtnl_cls_set_protocol(self._rtnl_cls, int(value))
|
||||
|
||||
@property
|
||||
def childs(self):
|
||||
return []
|
||||
|
||||
###################################################################
|
||||
#
|
||||
# format(details=False, stats=False)
|
||||
#
|
||||
def format(self, details=False, stats=False, nodev=False,
|
||||
noparent=False, indent=''):
|
||||
"""Return class as formatted text"""
|
||||
fmt = util.MyFormatter(self, indent)
|
||||
|
||||
buf = fmt.format(self.brief('classifier', nodev, noparent))
|
||||
buf += fmt.format(' {t|priority} {t|protocol}')
|
||||
|
||||
if details:
|
||||
buf += fmt.nl('\t' + self.details())
|
||||
|
||||
return buf
|
||||
|
||||
_qdisc_cache = QdiscCache()
|
||||
|
||||
def get_qdisc(ifindex, handle=None, parent=None):
|
||||
l = []
|
||||
|
||||
_qdisc_cache.refill()
|
||||
|
||||
for qdisc in _qdisc_cache:
|
||||
if qdisc.ifindex == ifindex and \
|
||||
(handle == None or qdisc.handle == handle) and \
|
||||
(parent == None or qdisc.parent == parent):
|
||||
l.append(qdisc)
|
||||
|
||||
return l
|
||||
|
||||
_class_cache = {}
|
||||
|
||||
def get_class(ifindex, parent, handle=None):
|
||||
l = []
|
||||
|
||||
try:
|
||||
cache = _class_cache[ifindex]
|
||||
except KeyError:
|
||||
cache = TcClassCache(ifindex)
|
||||
_class_cache[ifindex] = cache
|
||||
|
||||
cache.refill()
|
||||
|
||||
for cl in cache:
|
||||
if (parent == None or cl.parent == parent) and \
|
||||
(handle == None or cl.handle == handle):
|
||||
l.append(cl)
|
||||
|
||||
return l
|
||||
|
||||
_cls_cache = {}
|
||||
|
||||
def get_cls(ifindex, parent, handle=None):
|
||||
l = []
|
||||
|
||||
try:
|
||||
chain = _cls_cache[ifindex]
|
||||
except KeyError:
|
||||
_cls_cache[ifindex] = {}
|
||||
|
||||
try:
|
||||
cache = _cls_cache[ifindex][parent]
|
||||
except KeyError:
|
||||
cache = ClassifierCache(ifindex, parent)
|
||||
_cls_cache[ifindex][parent] = cache
|
||||
|
||||
cache.refill()
|
||||
|
||||
for cls in cache:
|
||||
if handle == None or cls.handle == handle:
|
||||
l.append(cls)
|
||||
|
||||
return l
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
"""
|
||||
|
||||
import netlink.core as netlink
|
||||
import netlink.capi as capi
|
||||
from string import Formatter
|
||||
|
||||
__version__ = "1.0"
|
||||
|
@ -92,6 +93,8 @@ class MyFormatter(Formatter):
|
|||
title = d['title']
|
||||
except KeyError:
|
||||
pass
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
return title, str(value)
|
||||
|
||||
|
@ -144,3 +147,33 @@ class MyFormatter(Formatter):
|
|||
|
||||
def nl(self, format_string=''):
|
||||
return '\n' + self._indent + self.format(format_string)
|
||||
|
||||
NL_BYTE_RATE = 0
|
||||
NL_BIT_RATE = 1
|
||||
|
||||
class Rate(object):
|
||||
def __init__(self, rate, mode=NL_BYTE_RATE):
|
||||
self._rate = rate
|
||||
self._mode = mode
|
||||
|
||||
def __str__(self):
|
||||
return capi.nl_rate2str(self._rate, self._mode, 32)[1]
|
||||
|
||||
def __int__(self):
|
||||
return self._rate
|
||||
|
||||
def __cmp__(self, other):
|
||||
return int(self) - int(other)
|
||||
|
||||
class Size(object):
|
||||
def __init__(self, size):
|
||||
self._size = size
|
||||
|
||||
def __str__(self):
|
||||
return capi.nl_size2str(self._size, 32)[0]
|
||||
|
||||
def __int__(self):
|
||||
return self._size
|
||||
|
||||
def __cmp__(self, other):
|
||||
return int(self) - int(other)
|
||||
|
|
|
@ -25,5 +25,6 @@ setup(name = 'netlink',
|
|||
author = 'Thomas Graf',
|
||||
author_email = 'tgraf@suug.ch',
|
||||
ext_modules = [netlink_capi, route_capi],
|
||||
packages = ['netlink', 'netlink.route', 'netlink.route.links'],
|
||||
packages = ['netlink', 'netlink.route', 'netlink.route.links',
|
||||
'netlink.route.qdisc'],
|
||||
)
|
||||
|
|
Loading…
Add table
Reference in a new issue