| # |
| # 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, |