Files
tart-guest-agent/internal/rpc/resolveip.go
T
edi-oai 0540136b95 Expose Protocol Buffers/gRPC bindings (#66)
* Expose Protocol Buffers/gRPC bindings

* CI: pin used actions
2026-09-02 08:56:14 -04:00

45 lines
973 B
Go

package rpc
import (
"context"
"fmt"
"net"
"github.com/cirruslabs/tart-guest-agent/pkg/v1"
)
func (rpc *RPC) ResolveIP(ctx context.Context, _ *v1.ResolveIPRequest) (*v1.ResolveIPResponse, error) {
ifaceAddrs, err := net.InterfaceAddrs()
if err != nil {
return nil, fmt.Errorf("failed to retrieve VM's network interface addresses: %w", err)
}
for _, ifaceAddr := range ifaceAddrs {
// Addresses returned by net.InterfaceAddrs()
// generally are of type *net.IPNet
ipNet, ok := ifaceAddr.(*net.IPNet)
if !ok {
continue
}
// Only interested in IPv4 addresses
if ipNet.IP.To4() == nil {
continue
}
// Only interested in global unicast addresses
//
// Note that Golang's "net" package also includes
// IPv4 private address space in this definition.
if !ipNet.IP.IsGlobalUnicast() {
continue
}
return &v1.ResolveIPResponse{
Ip: ipNet.IP.String(),
}, nil
}
return nil, fmt.Errorf("cannot resolve VM's IP address")
}