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