diff --git a/client/node.go b/client/node.go index 2f61b59f6..74592c549 100644 --- a/client/node.go +++ b/client/node.go @@ -158,6 +158,17 @@ func (n *NodeClient) NetworkListWGPorts(ctx context.Context) ([]uint16, error) { return result, nil } +func (n *NodeClient) HasPublicIPv6(ctx context.Context) (bool, error) { + const cmd = "zos.network.has_ipv6" + var result bool + + if err := n.bus.Call(ctx, n.nodeTwin, cmd, nil, &result); err != nil { + return false, err + } + + return result, nil +} + func (n *NodeClient) NetworkListInterfaces(ctx context.Context) (map[string][]net.IP, error) { const cmd = "zos.network.interfaces" var result map[string][]net.IP diff --git a/pkg/provision/mbus/network.go b/pkg/provision/mbus/network.go index 3b0349046..74d27a9ba 100644 --- a/pkg/provision/mbus/network.go +++ b/pkg/provision/mbus/network.go @@ -39,6 +39,9 @@ func (n *Network) listPortsHandler(ctx context.Context, payload []byte) (interfa return data, nil } +func (n *Network) hasPublicIPv6Handler(ctx context.Context, payload []byte) (interface{}, error) { + return n.hasPublicIPv6(ctx), nil +} func (n *Network) interfacesHandler(ctx context.Context, payload []byte) (interface{}, error) { data, err := n.listInterfaces(ctx) if err != nil { @@ -71,6 +74,7 @@ func (n *Network) setup(router rmb.Router) { sub.WithHandler("list_public_ips", n.listPublicIPsHandler) sub.WithHandler("public_config_get", n.getPublicConfigHandler) sub.WithHandler("interfaces", n.interfacesHandler) + sub.WithHandler("has_ipv6", n.hasPublicIPv6Handler) } func (n *Network) listPorts(ctx context.Context) (interface{}, mw.Response) { @@ -82,6 +86,10 @@ func (n *Network) listPorts(ctx context.Context) (interface{}, mw.Response) { return ports, nil } +func (n *Network) hasPublicIPv6(ctx context.Context) interface{} { + ipData, err := stubs.NewNetworkerStub(n.cl).GetPublicIPv6Subnet(ctx) + return ipData.IP != nil && err == nil +} func (n *Network) listInterfaces(ctx context.Context) (interface{}, mw.Response) { mgr := stubs.NewNetworkerStub(n.cl) results := make(map[string][]net.IP)