choices.py 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. from django.utils.translation import gettext_lazy as _
  2. from utilities.choices import ChoiceSet
  3. #
  4. # Tunnels
  5. #
  6. class TunnelStatusChoices(ChoiceSet):
  7. key = 'Tunnel.status'
  8. STATUS_PLANNED = 'planned'
  9. STATUS_ACTIVE = 'active'
  10. STATUS_DISABLED = 'disabled'
  11. CHOICES = [
  12. (STATUS_PLANNED, _('Planned'), 'cyan'),
  13. (STATUS_ACTIVE, _('Active'), 'green'),
  14. (STATUS_DISABLED, _('Disabled'), 'red'),
  15. ]
  16. class TunnelEncapsulationChoices(ChoiceSet):
  17. ENCAP_GRE = 'gre'
  18. ENCAP_IPSEC_TRANSPORT = 'ipsec-transport'
  19. ENCAP_IPSEC_TUNNEL = 'ipsec-tunnel'
  20. ENCAP_IP_IP = 'ip-ip'
  21. ENCAP_L2TP = 'l2tp'
  22. ENCAP_OPENVPN = 'openvpn'
  23. ENCAP_PPTP = 'pptp'
  24. ENCAP_WIREGUARD = 'wireguard'
  25. CHOICES = [
  26. (ENCAP_IPSEC_TRANSPORT, _('IPsec - Transport')),
  27. (ENCAP_IPSEC_TUNNEL, _('IPsec - Tunnel')),
  28. (ENCAP_IP_IP, _('IP-in-IP')),
  29. (ENCAP_GRE, _('GRE')),
  30. (ENCAP_WIREGUARD, _('WireGuard')),
  31. (ENCAP_OPENVPN, _('OpenVPN')),
  32. (ENCAP_L2TP, _('L2TP')),
  33. (ENCAP_PPTP, _('PPTP')),
  34. ]
  35. class TunnelTerminationTypeChoices(ChoiceSet):
  36. # For TunnelCreateForm
  37. TYPE_DEVICE = 'dcim.device'
  38. TYPE_VIRTUALMACHINE = 'virtualization.virtualmachine'
  39. CHOICES = (
  40. (TYPE_DEVICE, _('Device')),
  41. (TYPE_VIRTUALMACHINE, _('Virtual Machine')),
  42. )
  43. class TunnelTerminationRoleChoices(ChoiceSet):
  44. ROLE_PEER = 'peer'
  45. ROLE_HUB = 'hub'
  46. ROLE_SPOKE = 'spoke'
  47. CHOICES = [
  48. (ROLE_PEER, _('Peer'), 'green'),
  49. (ROLE_HUB, _('Hub'), 'blue'),
  50. (ROLE_SPOKE, _('Spoke'), 'orange'),
  51. ]
  52. #
  53. # Crypto
  54. #
  55. class IKEVersionChoices(ChoiceSet):
  56. VERSION_1 = 1
  57. VERSION_2 = 2
  58. CHOICES = (
  59. (VERSION_1, 'IKEv1'),
  60. (VERSION_2, 'IKEv2'),
  61. )
  62. class IKEModeChoices(ChoiceSet):
  63. AGGRESSIVE = 'aggressive'
  64. MAIN = 'main'
  65. CHOICES = (
  66. (AGGRESSIVE, _('Aggressive')),
  67. (MAIN, _('Main')),
  68. )
  69. class AuthenticationMethodChoices(ChoiceSet):
  70. PRESHARED_KEYS = 'preshared-keys'
  71. CERTIFICATES = 'certificates'
  72. RSA_SIGNATURES = 'rsa-signatures'
  73. DSA_SIGNATURES = 'dsa-signatures'
  74. CHOICES = (
  75. (PRESHARED_KEYS, _('Pre-shared keys')),
  76. (CERTIFICATES, _('Certificates')),
  77. (RSA_SIGNATURES, _('RSA signatures')),
  78. (DSA_SIGNATURES, _('DSA signatures')),
  79. )
  80. class IPSecModeChoices(ChoiceSet):
  81. ESP = 'esp'
  82. AH = 'ah'
  83. CHOICES = (
  84. (ESP, 'ESP'),
  85. (AH, 'AH'),
  86. )
  87. class EncryptionAlgorithmChoices(ChoiceSet):
  88. ENCRYPTION_AES128_CBC = 'aes-128-cbc'
  89. ENCRYPTION_AES128_GCM = 'aes-128-gcm'
  90. ENCRYPTION_AES192_CBC = 'aes-192-cbc'
  91. ENCRYPTION_AES192_GCM = 'aes-192-gcm'
  92. ENCRYPTION_AES256_CBC = 'aes-256-cbc'
  93. ENCRYPTION_AES256_GCM = 'aes-256-gcm'
  94. ENCRYPTION_3DES = '3des-cbc'
  95. ENCRYPTION_DES = 'des-cbc'
  96. CHOICES = (
  97. (ENCRYPTION_AES128_CBC, '128-bit AES (CBC)'),
  98. (ENCRYPTION_AES128_GCM, '128-bit AES (GCM)'),
  99. (ENCRYPTION_AES192_CBC, '192-bit AES (CBC)'),
  100. (ENCRYPTION_AES192_GCM, '192-bit AES (GCM)'),
  101. (ENCRYPTION_AES256_CBC, '256-bit AES (CBC)'),
  102. (ENCRYPTION_AES256_GCM, '256-bit AES (GCM)'),
  103. (ENCRYPTION_3DES, '3DES'),
  104. (ENCRYPTION_DES, 'DES'),
  105. )
  106. class AuthenticationAlgorithmChoices(ChoiceSet):
  107. AUTH_HMAC_SHA1 = 'hmac-sha1'
  108. AUTH_HMAC_SHA256 = 'hmac-sha256'
  109. AUTH_HMAC_SHA384 = 'hmac-sha384'
  110. AUTH_HMAC_SHA512 = 'hmac-sha512'
  111. AUTH_HMAC_MD5 = 'hmac-md5'
  112. CHOICES = (
  113. (AUTH_HMAC_SHA1, 'SHA-1 HMAC'),
  114. (AUTH_HMAC_SHA256, 'SHA-256 HMAC'),
  115. (AUTH_HMAC_SHA384, 'SHA-384 HMAC'),
  116. (AUTH_HMAC_SHA512, 'SHA-512 HMAC'),
  117. (AUTH_HMAC_MD5, 'MD5 HMAC'),
  118. )
  119. class DHGroupChoices(ChoiceSet):
  120. # https://www.iana.org/assignments/ikev2-parameters/ikev2-parameters.xhtml#ikev2-parameters-8
  121. GROUP_1 = 1 # 768-bit MODP
  122. GROUP_2 = 2 # 1024-but MODP
  123. # Groups 3-4 reserved
  124. GROUP_5 = 5 # 1536-bit MODP
  125. # Groups 6-13 unassigned
  126. GROUP_14 = 14 # 2048-bit MODP
  127. GROUP_15 = 15 # 3072-bit MODP
  128. GROUP_16 = 16 # 4096-bit MODP
  129. GROUP_17 = 17 # 6144-bit MODP
  130. GROUP_18 = 18 # 8192-bit MODP
  131. GROUP_19 = 19 # 256-bit random ECP
  132. GROUP_20 = 20 # 384-bit random ECP
  133. GROUP_21 = 21 # 521-bit random ECP (521 is not a typo)
  134. GROUP_22 = 22 # 1024-bit MODP w/160-bit prime
  135. GROUP_23 = 23 # 2048-bit MODP w/224-bit prime
  136. GROUP_24 = 24 # 2048-bit MODP w/256-bit prime
  137. GROUP_25 = 25 # 192-bit ECP
  138. GROUP_26 = 26 # 224-bit ECP
  139. GROUP_27 = 27 # brainpoolP224r1
  140. GROUP_28 = 28 # brainpoolP256r1
  141. GROUP_29 = 29 # brainpoolP384r1
  142. GROUP_30 = 30 # brainpoolP512r1
  143. GROUP_31 = 31 # Curve25519
  144. GROUP_32 = 32 # Curve448
  145. GROUP_33 = 33 # GOST3410_2012_256
  146. GROUP_34 = 34 # GOST3410_2012_512
  147. CHOICES = (
  148. # Strings are formatted in this manner to optimize translations
  149. (GROUP_1, _('Group {n}').format(n=1)),
  150. (GROUP_2, _('Group {n}').format(n=2)),
  151. (GROUP_5, _('Group {n}').format(n=5)),
  152. (GROUP_14, _('Group {n}').format(n=14)),
  153. (GROUP_15, _('Group {n}').format(n=15)),
  154. (GROUP_16, _('Group {n}').format(n=16)),
  155. (GROUP_17, _('Group {n}').format(n=17)),
  156. (GROUP_18, _('Group {n}').format(n=18)),
  157. (GROUP_19, _('Group {n}').format(n=19)),
  158. (GROUP_20, _('Group {n}').format(n=20)),
  159. (GROUP_21, _('Group {n}').format(n=21)),
  160. (GROUP_22, _('Group {n}').format(n=22)),
  161. (GROUP_23, _('Group {n}').format(n=23)),
  162. (GROUP_24, _('Group {n}').format(n=24)),
  163. (GROUP_25, _('Group {n}').format(n=25)),
  164. (GROUP_26, _('Group {n}').format(n=26)),
  165. (GROUP_27, _('Group {n}').format(n=27)),
  166. (GROUP_28, _('Group {n}').format(n=28)),
  167. (GROUP_29, _('Group {n}').format(n=29)),
  168. (GROUP_30, _('Group {n}').format(n=30)),
  169. (GROUP_31, _('Group {n}').format(n=31)),
  170. (GROUP_32, _('Group {n}').format(n=32)),
  171. (GROUP_33, _('Group {n}').format(n=33)),
  172. (GROUP_34, _('Group {n}').format(n=34)),
  173. )
  174. #
  175. # L2VPN
  176. #
  177. class L2VPNTypeChoices(ChoiceSet):
  178. TYPE_VPLS = 'vpls'
  179. TYPE_VPWS = 'vpws'
  180. TYPE_EPL = 'epl'
  181. TYPE_EVPL = 'evpl'
  182. TYPE_EPLAN = 'ep-lan'
  183. TYPE_EVPLAN = 'evp-lan'
  184. TYPE_EPTREE = 'ep-tree'
  185. TYPE_EVPTREE = 'evp-tree'
  186. TYPE_VXLAN = 'vxlan'
  187. TYPE_VXLAN_EVPN = 'vxlan-evpn'
  188. TYPE_MPLS_EVPN = 'mpls-evpn'
  189. TYPE_PBB_EVPN = 'pbb-evpn'
  190. TYPE_EVPN_VPWS = 'evpn-vpws'
  191. TYPE_SPB = 'spb'
  192. CHOICES = (
  193. ('VPLS', (
  194. (TYPE_VPWS, 'VPWS'),
  195. (TYPE_VPLS, 'VPLS'),
  196. )),
  197. ('VXLAN', (
  198. (TYPE_VXLAN, 'VXLAN'),
  199. (TYPE_VXLAN_EVPN, 'VXLAN-EVPN'),
  200. )),
  201. ('L2VPN E-VPN', (
  202. (TYPE_MPLS_EVPN, 'MPLS EVPN'),
  203. (TYPE_PBB_EVPN, 'PBB EVPN'),
  204. (TYPE_EVPN_VPWS, 'EVPN VPWS')
  205. )),
  206. ('E-Line', (
  207. (TYPE_EPL, 'EPL'),
  208. (TYPE_EVPL, 'EVPL'),
  209. )),
  210. ('E-LAN', (
  211. (TYPE_EPLAN, _('Ethernet Private LAN')),
  212. (TYPE_EVPLAN, _('Ethernet Virtual Private LAN')),
  213. )),
  214. ('E-Tree', (
  215. (TYPE_EPTREE, _('Ethernet Private Tree')),
  216. (TYPE_EVPTREE, _('Ethernet Virtual Private Tree')),
  217. )),
  218. ('Other', (
  219. (TYPE_SPB, _('SPB')),
  220. )),
  221. )
  222. P2P = (
  223. TYPE_VPWS,
  224. TYPE_EPL,
  225. TYPE_EPLAN,
  226. TYPE_EPTREE
  227. )
  228. class L2VPNStatusChoices(ChoiceSet):
  229. key = 'L2VPN.status'
  230. STATUS_ACTIVE = 'active'
  231. STATUS_PLANNED = 'planned'
  232. STATUS_DECOMMISSIONING = 'decommissioning'
  233. CHOICES = [
  234. (STATUS_ACTIVE, _('Active'), 'green'),
  235. (STATUS_PLANNED, _('Planned'), 'cyan'),
  236. (STATUS_DECOMMISSIONING, _('Decommissioning'), 'red'),
  237. ]