inet.py 4.1 KB

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