1 # 2 # Copyright (c) 2011 Thomas Graf <tgraf (at] suug.ch> 3 # 4 5 """IPv4 6 7 """ 8 9 from __future__ import absolute_import 10 11 __all__ = [ 12 '', 13 ] 14 15 from ... import core as netlink 16 from .. import capi as capi 17 from ... import util as util 18 DEVCONF_FORWARDING = 1 19 DEVCONF_MC_FORWARDING = 2 20 DEVCONF_PROXY_ARP = 3 21 DEVCONF_ACCEPT_REDIRECTS = 4 22 DEVCONF_SECURE_REDIRECTS = 5 23 DEVCONF_SEND_REDIRECTS = 6 24 DEVCONF_SHARED_MEDIA = 7 25 DEVCONF_RP_FILTER = 8 26 DEVCONF_ACCEPT_SOURCE_ROUTE = 9 27 DEVCONF_BOOTP_RELAY = 10 28 DEVCONF_LOG_MARTIANS = 11 29 DEVCONF_TAG = 12 30 DEVCONF_ARPFILTER = 13 31 DEVCONF_MEDIUM_ID = 14 32 DEVCONF_NOXFRM = 15 33 DEVCONF_NOPOLICY = 16 34 DEVCONF_FORCE_IGMP_VERSION = 17 35 DEVCONF_ARP_ANNOUNCE = 18 36 DEVCONF_ARP_IGNORE = 19 37 DEVCONF_PROMOTE_SECONDARIES = 20 38 DEVCONF_ARP_ACCEPT = 21 39 DEVCONF_ARP_NOTIFY = 22 40 DEVCONF_ACCEPT_LOCAL = 23 41 DEVCONF_SRC_VMARK = 24 42 DEVCONF_PROXY_ARP_PVLAN = 25 43 DEVCONF_MAX = DEVCONF_PROXY_ARP_PVLAN 44 45 def _resolve(id): 46 if type(id) is str: 47 id = capi.rtnl_link_inet_str2devconf(id)[0] 48 if id < 0: 49 raise NameError('unknown configuration id') 50 return id 51 52 class InetLink(object): 53 def __init__(self, link): 54 self._link = link 55 56 def details(self, fmt): 57 buf = fmt.nl('\n\t{0}\n\t'.format(util.title('Configuration:'))) 58 59 for i in range(DEVCONF_FORWARDING, DEVCONF_MAX+1): 60 if i & 1 and i > 1: 61 buf += fmt.nl('\t') 62 txt = util.kw(capi.rtnl_link_inet_devconf2str(i, 32)[0]) 63 buf += fmt.format('{0:28s} {1:12} ', txt, 64 self.get_conf(i)) 65 66 67 return buf 68 69 def get_conf(self, id): 70 return capi.inet_get_conf(self._link._rtnl_link, _resolve(id)) 71 72 def set_conf(self, id, value): 73 return capi.rtnl_link_inet_set_conf(self._link._rtnl_link, 74 _resolve(id), int(value)) 75 76 @property 77 @netlink.nlattr(type=bool, fmt=util.boolean) 78 def forwarding(self): 79 return bool(self.get_conf(DEVCONF_FORWARDING)) 80 81 @forwarding.setter 82 def forwarding(self, value): 83 self.set_conf(DEVCONF_FORWARDING, int(value)) 84 85 86 @property 87 @netlink.nlattr(type=bool, fmt=util.boolean) 88 def mc_forwarding(self): 89 return bool(self.get_conf(DEVCONF_MC_FORWARDING)) 90 91 @mc_forwarding.setter 92 def mc_forwarding(self, value): 93 self.set_conf(DEVCONF_MC_FORWARDING, int(value)) 94 95 96 @property 97 @netlink.nlattr(type=bool, fmt=util.boolean) 98 def proxy_arp(self): 99 return bool(self.get_conf(DEVCONF_PROXY_ARP)) 100 101 @proxy_arp.setter 102 def proxy_arp(self, value): 103 self.set_conf(DEVCONF_PROXY_ARP, int(value)) 104 105 @property 106 @netlink.nlattr(type=bool, fmt=util.boolean) 107 def accept_redirects(self): 108 return bool(self.get_conf(DEVCONF_ACCEPT_REDIRECTS)) 109 110 @accept_redirects.setter 111 def accept_redirects(self, value): 112 self.set_conf(DEVCONF_ACCEPT_REDIRECTS, int(value)) 113 114 @property 115 @netlink.nlattr(type=bool, fmt=util.boolean) 116 def secure_redirects(self): 117 return bool(self.get_conf(DEVCONF_SECURE_REDIRECTS)) 118 119 @secure_redirects.setter 120 def secure_redirects(self, value): 121 self.set_conf(DEVCONF_SECURE_REDIRECTS, int(value)) 122 123 @property 124 @netlink.nlattr(type=bool, fmt=util.boolean) 125 def send_redirects(self): 126 return bool(self.get_conf(DEVCONF_SEND_REDIRECTS)) 127 128 @send_redirects.setter 129 def send_redirects(self, value): 130 self.set_conf(DEVCONF_SEND_REDIRECTS, int(value)) 131 132 @property 133 @netlink.nlattr(type=bool, fmt=util.boolean) 134 def shared_media(self): 135 return bool(self.get_conf(DEVCONF_SHARED_MEDIA)) 136 137 @shared_media.setter 138 def shared_media(self, value): 139 self.set_conf(DEVCONF_SHARED_MEDIA, int(value)) 140 141 # IPV4_DEVCONF_RP_FILTER, 142 # IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE, 143 # IPV4_DEVCONF_BOOTP_RELAY, 144 # IPV4_DEVCONF_LOG_MARTIANS, 145 # IPV4_DEVCONF_TAG, 146 # IPV4_DEVCONF_ARPFILTER, 147 # IPV4_DEVCONF_MEDIUM_ID, 148 # IPV4_DEVCONF_NOXFRM, 149 # IPV4_DEVCONF_NOPOLICY, 150 # IPV4_DEVCONF_FORCE_IGMP_VERSION, 151 # IPV4_DEVCONF_ARP_ANNOUNCE, 152 # IPV4_DEVCONF_ARP_IGNORE, 153 # IPV4_DEVCONF_PROMOTE_SECONDARIES, 154 # IPV4_DEVCONF_ARP_ACCEPT, 155 # IPV4_DEVCONF_ARP_NOTIFY, 156 # IPV4_DEVCONF_ACCEPT_LOCAL, 157 # IPV4_DEVCONF_SRC_VMARK, 158 # IPV4_DEVCONF_PROXY_ARP_PVLAN, 159