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