...

Source file src/github.com/Microsoft/hcsshim/internal/vm/hcs/vpmem.go

Documentation: github.com/Microsoft/hcsshim/internal/vm/hcs

     1  //go:build windows
     2  
     3  package hcs
     4  
     5  import (
     6  	"context"
     7  	"fmt"
     8  	"strconv"
     9  
    10  	"github.com/pkg/errors"
    11  
    12  	"github.com/Microsoft/hcsshim/internal/hcs/resourcepaths"
    13  	hcsschema "github.com/Microsoft/hcsshim/internal/hcs/schema2"
    14  	"github.com/Microsoft/hcsshim/internal/protocol/guestrequest"
    15  	"github.com/Microsoft/hcsshim/internal/vm"
    16  )
    17  
    18  func (uvmb *utilityVMBuilder) AddVPMemController(maximumDevices uint32, maximumSizeBytes uint64) error {
    19  	uvmb.doc.VirtualMachine.Devices.VirtualPMem = &hcsschema.VirtualPMemController{
    20  		MaximumCount:     maximumDevices,
    21  		MaximumSizeBytes: maximumSizeBytes,
    22  	}
    23  	uvmb.doc.VirtualMachine.Devices.VirtualPMem.Devices = make(map[string]hcsschema.VirtualPMemDevice)
    24  	return nil
    25  }
    26  
    27  func (uvmb *utilityVMBuilder) AddVPMemDevice(ctx context.Context, id uint32, path string, readOnly bool, imageFormat vm.VPMemImageFormat) error {
    28  	if uvmb.doc.VirtualMachine.Devices.VirtualPMem == nil {
    29  		return errors.New("VPMem controller has not been added")
    30  	}
    31  	imageFormatString, err := getVPMemImageFormatString(imageFormat)
    32  	if err != nil {
    33  		return err
    34  	}
    35  	uvmb.doc.VirtualMachine.Devices.VirtualPMem.Devices[strconv.Itoa(int(id))] = hcsschema.VirtualPMemDevice{
    36  		HostPath:    path,
    37  		ReadOnly:    readOnly,
    38  		ImageFormat: imageFormatString,
    39  	}
    40  	return nil
    41  }
    42  
    43  func (uvmb *utilityVMBuilder) RemoveVPMemDevice(ctx context.Context, id uint32, path string) error {
    44  	return vm.ErrNotSupported
    45  }
    46  
    47  func (uvm *utilityVM) AddVPMemController(maximumDevices uint32, maximumSizeBytes uint64) error {
    48  	return vm.ErrNotSupported
    49  }
    50  
    51  func (uvm *utilityVM) AddVPMemDevice(ctx context.Context, id uint32, path string, readOnly bool, imageFormat vm.VPMemImageFormat) error {
    52  	imageFormatString, err := getVPMemImageFormatString(imageFormat)
    53  	if err != nil {
    54  		return err
    55  	}
    56  	request := &hcsschema.ModifySettingRequest{
    57  		RequestType: guestrequest.RequestTypeAdd,
    58  		Settings: hcsschema.VirtualPMemDevice{
    59  			HostPath:    path,
    60  			ReadOnly:    readOnly,
    61  			ImageFormat: imageFormatString,
    62  		},
    63  		ResourcePath: fmt.Sprintf(resourcepaths.VPMemControllerResourceFormat, id),
    64  	}
    65  	return uvm.cs.Modify(ctx, request)
    66  }
    67  
    68  func (uvm *utilityVM) RemoveVPMemDevice(ctx context.Context, id uint32, path string) error {
    69  	request := &hcsschema.ModifySettingRequest{
    70  		RequestType:  guestrequest.RequestTypeRemove,
    71  		ResourcePath: fmt.Sprintf(resourcepaths.VPMemControllerResourceFormat, id),
    72  	}
    73  	return uvm.cs.Modify(ctx, request)
    74  }
    75  
    76  func getVPMemImageFormatString(imageFormat vm.VPMemImageFormat) (string, error) {
    77  	switch imageFormat {
    78  	case vm.VPMemImageFormatVHD1:
    79  		return "Vhd1", nil
    80  	case vm.VPMemImageFormatVHDX:
    81  		return "Vhdx", nil
    82  	default:
    83  		return "", fmt.Errorf("unsupported VPMem image format: %d", imageFormat)
    84  	}
    85  }
    86  

View as plain text