messages.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package remote
  2. import "net"
  3. type response struct {
  4. Err string
  5. }
  6. type maybeError interface {
  7. getError() string
  8. }
  9. func (r *response) getError() string {
  10. return r.Err
  11. }
  12. type createNetworkRequest struct {
  13. NetworkID string
  14. Options map[string]interface{}
  15. }
  16. type createNetworkResponse struct {
  17. response
  18. }
  19. type deleteNetworkRequest struct {
  20. NetworkID string
  21. }
  22. type deleteNetworkResponse struct {
  23. response
  24. }
  25. type createEndpointRequest struct {
  26. NetworkID string
  27. EndpointID string
  28. Interfaces []*endpointInterface
  29. Options map[string]interface{}
  30. }
  31. type endpointInterface struct {
  32. ID int
  33. Address string
  34. AddressIPv6 string
  35. MacAddress string
  36. }
  37. type createEndpointResponse struct {
  38. response
  39. Interfaces []*endpointInterface
  40. }
  41. func toAddr(ipAddr string) (*net.IPNet, error) {
  42. ip, ipnet, err := net.ParseCIDR(ipAddr)
  43. if err != nil {
  44. return nil, err
  45. }
  46. ipnet.IP = ip
  47. return ipnet, nil
  48. }
  49. type iface struct {
  50. ID int
  51. Address *net.IPNet
  52. AddressIPv6 *net.IPNet
  53. MacAddress net.HardwareAddr
  54. }
  55. func (r *createEndpointResponse) parseInterfaces() ([]*iface, error) {
  56. var (
  57. ifaces = make([]*iface, len(r.Interfaces))
  58. )
  59. for i, inIf := range r.Interfaces {
  60. var err error
  61. outIf := &iface{ID: inIf.ID}
  62. if inIf.Address != "" {
  63. if outIf.Address, err = toAddr(inIf.Address); err != nil {
  64. return nil, err
  65. }
  66. }
  67. if inIf.AddressIPv6 != "" {
  68. if outIf.AddressIPv6, err = toAddr(inIf.AddressIPv6); err != nil {
  69. return nil, err
  70. }
  71. }
  72. if inIf.MacAddress != "" {
  73. if outIf.MacAddress, err = net.ParseMAC(inIf.MacAddress); err != nil {
  74. return nil, err
  75. }
  76. }
  77. ifaces[i] = outIf
  78. }
  79. return ifaces, nil
  80. }
  81. type deleteEndpointRequest struct {
  82. NetworkID string
  83. EndpointID string
  84. }
  85. type deleteEndpointResponse struct {
  86. response
  87. }
  88. type endpointInfoRequest struct {
  89. NetworkID string
  90. EndpointID string
  91. }
  92. type endpointInfoResponse struct {
  93. response
  94. Value map[string]interface{}
  95. }
  96. type joinRequest struct {
  97. NetworkID string
  98. EndpointID string
  99. SandboxKey string
  100. Options map[string]interface{}
  101. }
  102. type ifaceName struct {
  103. SrcName string
  104. DstPrefix string
  105. }
  106. type joinResponse struct {
  107. response
  108. InterfaceNames []*ifaceName
  109. Gateway string
  110. GatewayIPv6 string
  111. HostsPath string
  112. ResolvConfPath string
  113. }
  114. type leaveRequest struct {
  115. NetworkID string
  116. EndpointID string
  117. }
  118. type leaveResponse struct {
  119. response
  120. }