You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
4.1 KiB
159 lines
4.1 KiB
#
|
|
# Copyright (c) 2011 Thomas Graf <tgraf@suug.ch>
|
|
#
|
|
|
|
"""IPv4
|
|
|
|
"""
|
|
|
|
from __future__ import absolute_import
|
|
|
|
__all__ = [
|
|
'',
|
|
]
|
|
|
|
from ... import core as netlink
|
|
from .. import capi as capi
|
|
from ... import util as util
|
|
DEVCONF_FORWARDING = 1
|
|
DEVCONF_MC_FORWARDING = 2
|
|
DEVCONF_PROXY_ARP = 3
|
|
DEVCONF_ACCEPT_REDIRECTS = 4
|
|
DEVCONF_SECURE_REDIRECTS = 5
|
|
DEVCONF_SEND_REDIRECTS = 6
|
|
DEVCONF_SHARED_MEDIA = 7
|
|
DEVCONF_RP_FILTER = 8
|
|
DEVCONF_ACCEPT_SOURCE_ROUTE = 9
|
|
DEVCONF_BOOTP_RELAY = 10
|
|
DEVCONF_LOG_MARTIANS = 11
|
|
DEVCONF_TAG = 12
|
|
DEVCONF_ARPFILTER = 13
|
|
DEVCONF_MEDIUM_ID = 14
|
|
DEVCONF_NOXFRM = 15
|
|
DEVCONF_NOPOLICY = 16
|
|
DEVCONF_FORCE_IGMP_VERSION = 17
|
|
DEVCONF_ARP_ANNOUNCE = 18
|
|
DEVCONF_ARP_IGNORE = 19
|
|
DEVCONF_PROMOTE_SECONDARIES = 20
|
|
DEVCONF_ARP_ACCEPT = 21
|
|
DEVCONF_ARP_NOTIFY = 22
|
|
DEVCONF_ACCEPT_LOCAL = 23
|
|
DEVCONF_SRC_VMARK = 24
|
|
DEVCONF_PROXY_ARP_PVLAN = 25
|
|
DEVCONF_MAX = DEVCONF_PROXY_ARP_PVLAN
|
|
|
|
def _resolve(id):
|
|
if type(id) is str:
|
|
id = capi.rtnl_link_inet_str2devconf(id)[0]
|
|
if id < 0:
|
|
raise NameError('unknown configuration id')
|
|
return id
|
|
|
|
class InetLink(object):
|
|
def __init__(self, link):
|
|
self._link = link
|
|
|
|
def details(self, fmt):
|
|
buf = fmt.nl('\n\t{0}\n\t'.format(util.title('Configuration:')))
|
|
|
|
for i in range(DEVCONF_FORWARDING, DEVCONF_MAX+1):
|
|
if i & 1 and i > 1:
|
|
buf += fmt.nl('\t')
|
|
txt = util.kw(capi.rtnl_link_inet_devconf2str(i, 32)[0])
|
|
buf += fmt.format('{0:28s} {1:12} ', txt,
|
|
self.get_conf(i))
|
|
|
|
|
|
return buf
|
|
|
|
def get_conf(self, id):
|
|
return capi.inet_get_conf(self._link._rtnl_link, _resolve(id))
|
|
|
|
def set_conf(self, id, value):
|
|
return capi.rtnl_link_inet_set_conf(self._link._rtnl_link,
|
|
_resolve(id), int(value))
|
|
|
|
@property
|
|
@netlink.nlattr(type=bool, fmt=util.boolean)
|
|
def forwarding(self):
|
|
return bool(self.get_conf(DEVCONF_FORWARDING))
|
|
|
|
@forwarding.setter
|
|
def forwarding(self, value):
|
|
self.set_conf(DEVCONF_FORWARDING, int(value))
|
|
|
|
|
|
@property
|
|
@netlink.nlattr(type=bool, fmt=util.boolean)
|
|
def mc_forwarding(self):
|
|
return bool(self.get_conf(DEVCONF_MC_FORWARDING))
|
|
|
|
@mc_forwarding.setter
|
|
def mc_forwarding(self, value):
|
|
self.set_conf(DEVCONF_MC_FORWARDING, int(value))
|
|
|
|
|
|
@property
|
|
@netlink.nlattr(type=bool, fmt=util.boolean)
|
|
def proxy_arp(self):
|
|
return bool(self.get_conf(DEVCONF_PROXY_ARP))
|
|
|
|
@proxy_arp.setter
|
|
def proxy_arp(self, value):
|
|
self.set_conf(DEVCONF_PROXY_ARP, int(value))
|
|
|
|
@property
|
|
@netlink.nlattr(type=bool, fmt=util.boolean)
|
|
def accept_redirects(self):
|
|
return bool(self.get_conf(DEVCONF_ACCEPT_REDIRECTS))
|
|
|
|
@accept_redirects.setter
|
|
def accept_redirects(self, value):
|
|
self.set_conf(DEVCONF_ACCEPT_REDIRECTS, int(value))
|
|
|
|
@property
|
|
@netlink.nlattr(type=bool, fmt=util.boolean)
|
|
def secure_redirects(self):
|
|
return bool(self.get_conf(DEVCONF_SECURE_REDIRECTS))
|
|
|
|
@secure_redirects.setter
|
|
def secure_redirects(self, value):
|
|
self.set_conf(DEVCONF_SECURE_REDIRECTS, int(value))
|
|
|
|
@property
|
|
@netlink.nlattr(type=bool, fmt=util.boolean)
|
|
def send_redirects(self):
|
|
return bool(self.get_conf(DEVCONF_SEND_REDIRECTS))
|
|
|
|
@send_redirects.setter
|
|
def send_redirects(self, value):
|
|
self.set_conf(DEVCONF_SEND_REDIRECTS, int(value))
|
|
|
|
@property
|
|
@netlink.nlattr(type=bool, fmt=util.boolean)
|
|
def shared_media(self):
|
|
return bool(self.get_conf(DEVCONF_SHARED_MEDIA))
|
|
|
|
@shared_media.setter
|
|
def shared_media(self, value):
|
|
self.set_conf(DEVCONF_SHARED_MEDIA, int(value))
|
|
|
|
# IPV4_DEVCONF_RP_FILTER,
|
|
# IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE,
|
|
# IPV4_DEVCONF_BOOTP_RELAY,
|
|
# IPV4_DEVCONF_LOG_MARTIANS,
|
|
# IPV4_DEVCONF_TAG,
|
|
# IPV4_DEVCONF_ARPFILTER,
|
|
# IPV4_DEVCONF_MEDIUM_ID,
|
|
# IPV4_DEVCONF_NOXFRM,
|
|
# IPV4_DEVCONF_NOPOLICY,
|
|
# IPV4_DEVCONF_FORCE_IGMP_VERSION,
|
|
# IPV4_DEVCONF_ARP_ANNOUNCE,
|
|
# IPV4_DEVCONF_ARP_IGNORE,
|
|
# IPV4_DEVCONF_PROMOTE_SECONDARIES,
|
|
# IPV4_DEVCONF_ARP_ACCEPT,
|
|
# IPV4_DEVCONF_ARP_NOTIFY,
|
|
# IPV4_DEVCONF_ACCEPT_LOCAL,
|
|
# IPV4_DEVCONF_SRC_VMARK,
|
|
# IPV4_DEVCONF_PROXY_ARP_PVLAN,
|