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