1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
#
# 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,
|