github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/hypervisor/rpcd/importLocalVm.go (about)

     1  package rpcd
     2  
     3  import (
     4  	"net"
     5  
     6  	"github.com/Cloud-Foundations/Dominator/lib/errors"
     7  	"github.com/Cloud-Foundations/Dominator/lib/srpc"
     8  	"github.com/Cloud-Foundations/Dominator/proto/hypervisor"
     9  )
    10  
    11  func (t *srpcType) ImportLocalVm(conn *srpc.Conn,
    12  	request hypervisor.ImportLocalVmRequest,
    13  	reply *hypervisor.ImportLocalVmResponse) error {
    14  	*reply = hypervisor.ImportLocalVmResponse{
    15  		errors.ErrorToString(t.importLocalVm(conn, request))}
    16  	return nil
    17  }
    18  
    19  func (t *srpcType) importLocalVm(conn *srpc.Conn,
    20  	request hypervisor.ImportLocalVmRequest) error {
    21  	if err := testIfLoopback(conn); err != nil {
    22  		return err
    23  	}
    24  	return t.manager.ImportLocalVm(conn.GetAuthInformation(), request)
    25  }
    26  
    27  func testIfLoopback(conn *srpc.Conn) error {
    28  	host, _, err := net.SplitHostPort(conn.RemoteAddr())
    29  	if err != nil {
    30  		return err
    31  	}
    32  	if !net.ParseIP(host).IsLoopback() {
    33  		return errors.New("local connection required")
    34  	}
    35  	return nil
    36  }