xref: /aosp_15_r20/external/libnl/python/netlink/route/links/inet.py (revision 4dc78e53d49367fa8e61b07018507c90983a077d)
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