vpcs_ovn.go 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. // Copyright 2019 Yunion
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package compute
  15. import (
  16. "fmt"
  17. "strings"
  18. "yunion.io/x/cloudmux/pkg/apis/compute"
  19. "yunion.io/x/pkg/util/netutils"
  20. )
  21. // IP: 20
  22. // UDP: 8
  23. // GENEVE HDR: 8 + 4x
  24. // total: 36 + 4x
  25. const VPC_OVN_ENCAP_COST = 60
  26. const (
  27. VPC_EXTERNAL_ACCESS_MODE_DISTGW = "distgw" // distgw only
  28. VPC_EXTERNAL_ACCESS_MODE_EIP_DISTGW = "eip-distgw" // eip when available, distgw otherwise
  29. VPC_EXTERNAL_ACCESS_MODE_EIP = compute.VPC_EXTERNAL_ACCESS_MODE_EIP // eip only
  30. VPC_EXTERNAL_ACCESS_MODE_NONE = compute.VPC_EXTERNAL_ACCESS_MODE_NONE // no external access
  31. )
  32. var (
  33. VPC_EXTERNAL_ACCESS_MODES = []string{
  34. VPC_EXTERNAL_ACCESS_MODE_DISTGW,
  35. VPC_EXTERNAL_ACCESS_MODE_EIP_DISTGW,
  36. VPC_EXTERNAL_ACCESS_MODE_EIP,
  37. VPC_EXTERNAL_ACCESS_MODE_NONE,
  38. }
  39. )
  40. const (
  41. sVpcInterCidr = "100.65.0.0/17"
  42. sVpcInterExtCidr = "100.65.0.0/30"
  43. VpcInterExtMask = 30
  44. sVpcInterExtIP1 = "100.65.0.1"
  45. sVpcInterExtIP2 = "100.65.0.2"
  46. VpcInterExtMac1 = "ee:ee:ee:ee:ee:f0"
  47. VpcInterExtMac2 = "ee:ee:ee:ee:ee:f1"
  48. sVpcInterCidr6 = "fc00::fffe:100:65:0:0/100"
  49. sVpcInterExtCidr6 = "fc00::fffe:100:65:0:0/112"
  50. VpcInterExtMask6 = 112
  51. sVpcInterExtIP16 = "fc00::fffe:100:65:0:1"
  52. sVpcInterExtIP26 = "fc00::fffe:100:65:0:2"
  53. )
  54. var (
  55. vpcInterCidr netutils.IPV4Prefix
  56. vpcInterExtIP1 netutils.IPV4Addr
  57. vpcInterExtIP2 netutils.IPV4Addr
  58. vpcInterCidr6 netutils.IPV6Prefix
  59. vpcInterExtIP16 netutils.IPV6Addr
  60. vpcInterExtIP26 netutils.IPV6Addr
  61. )
  62. func VpcInterCidr() netutils.IPV4Prefix {
  63. return vpcInterCidr
  64. }
  65. func VpcInterExtIP1() netutils.IPV4Addr {
  66. return vpcInterExtIP1
  67. }
  68. func VpcInterExtIP2() netutils.IPV4Addr {
  69. return vpcInterExtIP2
  70. }
  71. func VpcInterCidr6() netutils.IPV6Prefix {
  72. return vpcInterCidr6
  73. }
  74. func VpcInterExtIP16() netutils.IPV6Addr {
  75. return vpcInterExtIP16
  76. }
  77. func VpcInterExtIP26() netutils.IPV6Addr {
  78. return vpcInterExtIP26
  79. }
  80. const (
  81. sVpcMappedCidr = "100.64.0.0/17"
  82. VpcMappedIPMask = 17
  83. sVpcMappedGatewayIP = "100.64.0.1"
  84. VpcMappedGatewayMac = "ee:ee:ee:ee:ee:ee"
  85. sVpcMappedCidr6 = "fc00::fffe:100:64:0:0/100"
  86. VpcMappedIPMask6 = 100
  87. sVpcMappedGatewayIP6 = "fc00::fffe:100:64:0:1"
  88. // reserved: [100.64.0.2, 100.64.0.127]
  89. // [128, 2176 (128+2048)]
  90. sVpcMappedHostIPStart = "100.64.0.128"
  91. sVpcMappedHostIPEnd = "100.64.8.128"
  92. // reserved: [10.64.8.129, 10.64.8.255]
  93. // [2304, 32511], 30207
  94. sVpcMappedIPStart = "100.64.9.0"
  95. sVpcMappedIPEnd = "100.64.126.255"
  96. // reserved: [10.64.127.0 , 10.64.127.255]
  97. )
  98. const (
  99. sVpcEipGatewayCidr = "100.64.128.0/17"
  100. VpcEipGatewayIPMask = 17
  101. sVpcEipGatewayIP = "100.64.128.2"
  102. VpcEipGatewayMac = "ee:ee:ee:ee:ee:ef"
  103. sVpcEipGatewayCidr6 = "fc00::fffe:100:64:f000:0/100"
  104. VpcEipGatewayIPMask6 = 100
  105. sVpcEipGatewayIP6 = "fc00::fffe:100:64:f000:2"
  106. sVpcEipGatewayIP3 = "100.64.128.3"
  107. VpcEipGatewayMac3 = "ee:ee:ee:ee:ee:f0"
  108. sVpcEipGatewayIP63 = "fc00::fffe:100:64:f000:3"
  109. )
  110. var (
  111. vpcMappedCidr netutils.IPV4Prefix
  112. vpcMappedGatewayIP netutils.IPV4Addr
  113. vpcMappedCidr6 netutils.IPV6Prefix
  114. vpcMappedGatewayIP6 netutils.IPV6Addr
  115. vpcEipGatewayCidr netutils.IPV4Prefix
  116. vpcEipGatewayIP netutils.IPV4Addr
  117. vpcEipGatewayIP3 netutils.IPV4Addr
  118. vpcEipGatewayCidr6 netutils.IPV6Prefix
  119. vpcEipGatewayIP6 netutils.IPV6Addr
  120. vpcEipGatewayIP63 netutils.IPV6Addr
  121. vpcMappedHostIPStart netutils.IPV4Addr
  122. vpcMappedHostIPEnd netutils.IPV4Addr
  123. vpcMappedIPStart netutils.IPV4Addr
  124. vpcMappedIPEnd netutils.IPV4Addr
  125. )
  126. func init() {
  127. mi := func(v netutils.IPV4Addr, err error) netutils.IPV4Addr {
  128. if err != nil {
  129. panic(err.Error())
  130. }
  131. return v
  132. }
  133. mp := func(v netutils.IPV4Prefix, err error) netutils.IPV4Prefix {
  134. if err != nil {
  135. panic(err.Error())
  136. }
  137. return v
  138. }
  139. mi6 := func(v netutils.IPV6Addr, err error) netutils.IPV6Addr {
  140. if err != nil {
  141. panic(err.Error())
  142. }
  143. return v
  144. }
  145. mp6 := func(v netutils.IPV6Prefix, err error) netutils.IPV6Prefix {
  146. if err != nil {
  147. panic(err.Error())
  148. }
  149. return v
  150. }
  151. vpcInterCidr = mp(netutils.NewIPV4Prefix(sVpcInterCidr))
  152. vpcInterExtIP1 = mi(netutils.NewIPV4Addr(sVpcInterExtIP1))
  153. vpcInterExtIP2 = mi(netutils.NewIPV4Addr(sVpcInterExtIP2))
  154. vpcInterCidr6 = mp6(netutils.NewIPV6Prefix(sVpcInterCidr6))
  155. vpcInterExtIP16 = mi6(netutils.NewIPV6Addr(sVpcInterExtIP16))
  156. vpcInterExtIP26 = mi6(netutils.NewIPV6Addr(sVpcInterExtIP26))
  157. vpcMappedCidr = mp(netutils.NewIPV4Prefix(sVpcMappedCidr))
  158. vpcMappedGatewayIP = mi(netutils.NewIPV4Addr(sVpcMappedGatewayIP))
  159. vpcMappedCidr6 = mp6(netutils.NewIPV6Prefix(sVpcMappedCidr6))
  160. vpcMappedGatewayIP6 = mi6(netutils.NewIPV6Addr(sVpcMappedGatewayIP6))
  161. vpcEipGatewayCidr = mp(netutils.NewIPV4Prefix(sVpcEipGatewayCidr))
  162. vpcEipGatewayIP = mi(netutils.NewIPV4Addr(sVpcEipGatewayIP))
  163. vpcEipGatewayIP3 = mi(netutils.NewIPV4Addr(sVpcEipGatewayIP3))
  164. vpcEipGatewayCidr6 = mp6(netutils.NewIPV6Prefix(sVpcEipGatewayCidr6))
  165. vpcEipGatewayIP6 = mi6(netutils.NewIPV6Addr(sVpcEipGatewayIP6))
  166. vpcEipGatewayIP63 = mi6(netutils.NewIPV6Addr(sVpcEipGatewayIP63))
  167. vpcMappedHostIPStart = mi(netutils.NewIPV4Addr(sVpcMappedHostIPStart))
  168. vpcMappedHostIPEnd = mi(netutils.NewIPV4Addr(sVpcMappedHostIPEnd))
  169. vpcMappedIPStart = mi(netutils.NewIPV4Addr(sVpcMappedIPStart))
  170. vpcMappedIPEnd = mi(netutils.NewIPV4Addr(sVpcMappedIPEnd))
  171. }
  172. func VpcMappedCidr() netutils.IPV4Prefix {
  173. return vpcMappedCidr
  174. }
  175. func VpcMappedCidr6() netutils.IPV6Prefix {
  176. return vpcMappedCidr6
  177. }
  178. func VpcMappedGatewayIP() netutils.IPV4Addr {
  179. return vpcMappedGatewayIP
  180. }
  181. func VpcMappedGatewayIP6() netutils.IPV6Addr {
  182. return vpcMappedGatewayIP6
  183. }
  184. func VpcEipGatewayCidr() netutils.IPV4Prefix {
  185. return vpcEipGatewayCidr
  186. }
  187. func VpcEipGatewayCidr6() netutils.IPV6Prefix {
  188. return vpcEipGatewayCidr6
  189. }
  190. func VpcEipGatewayIP() netutils.IPV4Addr {
  191. return vpcEipGatewayIP
  192. }
  193. func VpcEipGatewayIP6() netutils.IPV6Addr {
  194. return vpcEipGatewayIP6
  195. }
  196. func VpcEipGatewayIP3() netutils.IPV4Addr {
  197. return vpcEipGatewayIP3
  198. }
  199. func VpcEipGatewayIP63() netutils.IPV6Addr {
  200. return vpcEipGatewayIP63
  201. }
  202. func VpcMappedHostIPStart() netutils.IPV4Addr {
  203. return vpcMappedHostIPStart
  204. }
  205. func VpcMappedHostIPEnd() netutils.IPV4Addr {
  206. return vpcMappedHostIPEnd
  207. }
  208. func VpcMappedIPStart() netutils.IPV4Addr {
  209. return vpcMappedIPStart
  210. }
  211. func VpcMappedIPEnd() netutils.IPV4Addr {
  212. return vpcMappedIPEnd
  213. }
  214. func VpcOvnEncapCostStr() string {
  215. return fmt.Sprintf("%d", VPC_OVN_ENCAP_COST)
  216. }
  217. func GenVpcMappedIP6(ip string) string {
  218. segs := strings.Split(ip, ".")
  219. return fmt.Sprintf("fc00::fffe:100:64:%s:%s", segs[2], segs[3])
  220. }