mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
178 lines
3.2 KiB
Go
178 lines
3.2 KiB
Go
package remote
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
|
|
"github.com/docker/libnetwork/types"
|
|
)
|
|
|
|
type response struct {
|
|
Err string
|
|
}
|
|
|
|
type maybeError interface {
|
|
getError() string
|
|
}
|
|
|
|
func (r *response) getError() string {
|
|
return r.Err
|
|
}
|
|
|
|
type createNetworkRequest struct {
|
|
NetworkID string
|
|
Options map[string]interface{}
|
|
}
|
|
|
|
type createNetworkResponse struct {
|
|
response
|
|
}
|
|
|
|
type deleteNetworkRequest struct {
|
|
NetworkID string
|
|
}
|
|
|
|
type deleteNetworkResponse struct {
|
|
response
|
|
}
|
|
|
|
type createEndpointRequest struct {
|
|
NetworkID string
|
|
EndpointID string
|
|
Interfaces []*endpointInterface
|
|
Options map[string]interface{}
|
|
}
|
|
|
|
type endpointInterface struct {
|
|
ID int
|
|
Address string
|
|
AddressIPv6 string
|
|
MacAddress string
|
|
}
|
|
|
|
type staticRoute struct {
|
|
Destination string
|
|
RouteType int
|
|
NextHop string
|
|
InterfaceID int
|
|
}
|
|
|
|
type createEndpointResponse struct {
|
|
response
|
|
Interfaces []*endpointInterface
|
|
}
|
|
|
|
func toAddr(ipAddr string) (*net.IPNet, error) {
|
|
ip, ipnet, err := net.ParseCIDR(ipAddr)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
ipnet.IP = ip
|
|
return ipnet, nil
|
|
}
|
|
|
|
type iface struct {
|
|
ID int
|
|
Address *net.IPNet
|
|
AddressIPv6 *net.IPNet
|
|
MacAddress net.HardwareAddr
|
|
}
|
|
|
|
func (r *createEndpointResponse) parseInterfaces() ([]*iface, error) {
|
|
var ifaces = make([]*iface, len(r.Interfaces))
|
|
for i, inIf := range r.Interfaces {
|
|
var err error
|
|
outIf := &iface{ID: inIf.ID}
|
|
if inIf.Address != "" {
|
|
if outIf.Address, err = toAddr(inIf.Address); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
if inIf.AddressIPv6 != "" {
|
|
if outIf.AddressIPv6, err = toAddr(inIf.AddressIPv6); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
if inIf.MacAddress != "" {
|
|
if outIf.MacAddress, err = net.ParseMAC(inIf.MacAddress); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
ifaces[i] = outIf
|
|
}
|
|
return ifaces, nil
|
|
}
|
|
|
|
func (r *joinResponse) parseStaticRoutes() ([]*types.StaticRoute, error) {
|
|
var routes = make([]*types.StaticRoute, len(r.StaticRoutes))
|
|
for i, inRoute := range r.StaticRoutes {
|
|
var err error
|
|
outRoute := &types.StaticRoute{InterfaceID: inRoute.InterfaceID, RouteType: inRoute.RouteType}
|
|
|
|
if inRoute.Destination != "" {
|
|
if outRoute.Destination, err = toAddr(inRoute.Destination); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
if inRoute.NextHop != "" {
|
|
outRoute.NextHop = net.ParseIP(inRoute.NextHop)
|
|
if outRoute.NextHop == nil {
|
|
return nil, fmt.Errorf("failed to parse nexthop IP %s", inRoute.NextHop)
|
|
}
|
|
}
|
|
|
|
routes[i] = outRoute
|
|
}
|
|
return routes, nil
|
|
}
|
|
|
|
type deleteEndpointRequest struct {
|
|
NetworkID string
|
|
EndpointID string
|
|
}
|
|
|
|
type deleteEndpointResponse struct {
|
|
response
|
|
}
|
|
|
|
type endpointInfoRequest struct {
|
|
NetworkID string
|
|
EndpointID string
|
|
}
|
|
|
|
type endpointInfoResponse struct {
|
|
response
|
|
Value map[string]interface{}
|
|
}
|
|
|
|
type joinRequest struct {
|
|
NetworkID string
|
|
EndpointID string
|
|
SandboxKey string
|
|
Options map[string]interface{}
|
|
}
|
|
|
|
type ifaceName struct {
|
|
SrcName string
|
|
DstPrefix string
|
|
}
|
|
|
|
type joinResponse struct {
|
|
response
|
|
InterfaceNames []*ifaceName
|
|
Gateway string
|
|
GatewayIPv6 string
|
|
StaticRoutes []*staticRoute
|
|
HostsPath string
|
|
ResolvConfPath string
|
|
}
|
|
|
|
type leaveRequest struct {
|
|
NetworkID string
|
|
EndpointID string
|
|
}
|
|
|
|
type leaveResponse struct {
|
|
response
|
|
}
|