Merge pull request #39108 from Microsoft/jjh/lcowrs5plus
LCOW: (Experimental) Require RS5+ builds
This commit is contained in:
commit
7ccc4f70de
12 changed files with 186 additions and 137 deletions
|
@ -3,6 +3,7 @@ package system // import "github.com/docker/docker/pkg/system"
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"github.com/Microsoft/hcsshim/osversion"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -15,10 +16,10 @@ var (
|
||||||
containerdRuntimeSupported = false
|
containerdRuntimeSupported = false
|
||||||
)
|
)
|
||||||
|
|
||||||
// InitLCOW sets whether LCOW is supported or not
|
// InitLCOW sets whether LCOW is supported or not. Requires RS5+
|
||||||
func InitLCOW(experimental bool) {
|
func InitLCOW(experimental bool) {
|
||||||
v := GetOSVersion()
|
v := GetOSVersion()
|
||||||
if experimental && v.Build >= 16299 {
|
if experimental && v.Build >= osversion.RS5 {
|
||||||
lcowSupported = true
|
lcowSupported = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
github.com/Azure/go-ansiterm d6e3b3328b783f23731bc4d058875b0371ff8109
|
github.com/Azure/go-ansiterm d6e3b3328b783f23731bc4d058875b0371ff8109
|
||||||
github.com/Microsoft/hcsshim ba3d6667710fa905116f39a19d059c4c1016be7c
|
github.com/Microsoft/hcsshim 672e52e9209d1e53718c1b6a7d68cc9272654ab5
|
||||||
github.com/Microsoft/go-winio c599b533b43b1363d7d7c6cfda5ede70ed73ff13
|
github.com/Microsoft/go-winio c599b533b43b1363d7d7c6cfda5ede70ed73ff13
|
||||||
github.com/docker/libtrust 9cbd2a1374f46905c68a4eb3694a130610adc62a
|
github.com/docker/libtrust 9cbd2a1374f46905c68a4eb3694a130610adc62a
|
||||||
github.com/go-check/check 4ed411733c5785b40214c70bce814c3a3a689609 https://github.com/cpuguy83/check.git
|
github.com/go-check/check 4ed411733c5785b40214c70bce814c3a3a689609 https://github.com/cpuguy83/check.git
|
||||||
|
|
100
vendor/github.com/Microsoft/hcsshim/internal/guestrequest/types.go
generated
vendored
100
vendor/github.com/Microsoft/hcsshim/internal/guestrequest/types.go
generated
vendored
|
@ -1,100 +0,0 @@
|
||||||
package guestrequest
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/Microsoft/hcsshim/internal/schema2"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Arguably, many of these (at least CombinedLayers) should have been generated
|
|
||||||
// by swagger.
|
|
||||||
//
|
|
||||||
// This will also change package name due to an inbound breaking change.
|
|
||||||
|
|
||||||
// This class is used by a modify request to add or remove a combined layers
|
|
||||||
// structure in the guest. For windows, the GCS applies a filter in ContainerRootPath
|
|
||||||
// using the specified layers as the parent content. Ignores property ScratchPath
|
|
||||||
// since the container path is already the scratch path. For linux, the GCS unions
|
|
||||||
// the specified layers and ScratchPath together, placing the resulting union
|
|
||||||
// filesystem at ContainerRootPath.
|
|
||||||
type CombinedLayers struct {
|
|
||||||
ContainerRootPath string `json:"ContainerRootPath,omitempty"`
|
|
||||||
Layers []hcsschema.Layer `json:"Layers,omitempty"`
|
|
||||||
ScratchPath string `json:"ScratchPath,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Defines the schema for hosted settings passed to GCS and/or OpenGCS
|
|
||||||
|
|
||||||
// SCSI. Scratch space for remote file-system commands, or R/W layer for containers
|
|
||||||
type LCOWMappedVirtualDisk struct {
|
|
||||||
MountPath string `json:"MountPath,omitempty"` // /tmp/scratch for an LCOW utility VM being used as a service VM
|
|
||||||
Lun uint8 `json:"Lun,omitempty"`
|
|
||||||
Controller uint8 `json:"Controller,omitempty"`
|
|
||||||
ReadOnly bool `json:"ReadOnly,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type WCOWMappedVirtualDisk struct {
|
|
||||||
ContainerPath string `json:"ContainerPath,omitempty"`
|
|
||||||
Lun int32 `json:"Lun,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type LCOWMappedDirectory struct {
|
|
||||||
MountPath string `json:"MountPath,omitempty"`
|
|
||||||
Port int32 `json:"Port,omitempty"`
|
|
||||||
ShareName string `json:"ShareName,omitempty"` // If empty not using ANames (not currently supported)
|
|
||||||
ReadOnly bool `json:"ReadOnly,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read-only layers over VPMem
|
|
||||||
type LCOWMappedVPMemDevice struct {
|
|
||||||
DeviceNumber uint32 `json:"DeviceNumber,omitempty"`
|
|
||||||
MountPath string `json:"MountPath,omitempty"` // /tmp/pN
|
|
||||||
}
|
|
||||||
|
|
||||||
type LCOWNetworkAdapter struct {
|
|
||||||
NamespaceID string `json:",omitempty"`
|
|
||||||
ID string `json:",omitempty"`
|
|
||||||
MacAddress string `json:",omitempty"`
|
|
||||||
IPAddress string `json:",omitempty"`
|
|
||||||
PrefixLength uint8 `json:",omitempty"`
|
|
||||||
GatewayAddress string `json:",omitempty"`
|
|
||||||
DNSSuffix string `json:",omitempty"`
|
|
||||||
DNSServerList string `json:",omitempty"`
|
|
||||||
EnableLowMetric bool `json:",omitempty"`
|
|
||||||
EncapOverhead uint16 `json:",omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type ResourceType string
|
|
||||||
|
|
||||||
const (
|
|
||||||
// These are constants for v2 schema modify guest requests.
|
|
||||||
ResourceTypeMappedDirectory ResourceType = "MappedDirectory"
|
|
||||||
ResourceTypeMappedVirtualDisk ResourceType = "MappedVirtualDisk"
|
|
||||||
ResourceTypeNetwork ResourceType = "Network"
|
|
||||||
ResourceTypeNetworkNamespace ResourceType = "NetworkNamespace"
|
|
||||||
ResourceTypeCombinedLayers ResourceType = "CombinedLayers"
|
|
||||||
ResourceTypeVPMemDevice ResourceType = "VPMemDevice"
|
|
||||||
)
|
|
||||||
|
|
||||||
// GuestRequest is for modify commands passed to the guest.
|
|
||||||
type GuestRequest struct {
|
|
||||||
RequestType string `json:"RequestType,omitempty"`
|
|
||||||
ResourceType ResourceType `json:"ResourceType,omitempty"`
|
|
||||||
Settings interface{} `json:"Settings,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type NetworkModifyRequest struct {
|
|
||||||
AdapterId string `json:"AdapterId,omitempty"`
|
|
||||||
RequestType string `json:"RequestType,omitempty"`
|
|
||||||
Settings interface{} `json:"Settings,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type RS4NetworkModifyRequest struct {
|
|
||||||
AdapterInstanceId string `json:"AdapterInstanceId,omitempty"`
|
|
||||||
RequestType string `json:"RequestType,omitempty"`
|
|
||||||
Settings interface{} `json:"Settings,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// SignalProcessOptions is the options passed to either WCOW or LCOW
|
|
||||||
// to signal a given process.
|
|
||||||
type SignalProcessOptions struct {
|
|
||||||
Signal int `json:,omitempty`
|
|
||||||
}
|
|
90
vendor/github.com/Microsoft/hcsshim/internal/hcs/callback.go
generated
vendored
90
vendor/github.com/Microsoft/hcsshim/internal/hcs/callback.go
generated
vendored
|
@ -1,10 +1,12 @@
|
||||||
package hcs
|
package hcs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/Microsoft/hcsshim/internal/interop"
|
"github.com/Microsoft/hcsshim/internal/interop"
|
||||||
|
"github.com/Microsoft/hcsshim/internal/logfields"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -40,16 +42,61 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
type hcsNotification uint32
|
type hcsNotification uint32
|
||||||
|
|
||||||
|
func (hn hcsNotification) String() string {
|
||||||
|
switch hn {
|
||||||
|
case hcsNotificationSystemExited:
|
||||||
|
return "SystemExited"
|
||||||
|
case hcsNotificationSystemCreateCompleted:
|
||||||
|
return "SystemCreateCompleted"
|
||||||
|
case hcsNotificationSystemStartCompleted:
|
||||||
|
return "SystemStartCompleted"
|
||||||
|
case hcsNotificationSystemPauseCompleted:
|
||||||
|
return "SystemPauseCompleted"
|
||||||
|
case hcsNotificationSystemResumeCompleted:
|
||||||
|
return "SystemResumeCompleted"
|
||||||
|
case hcsNotificationSystemCrashReport:
|
||||||
|
return "SystemCrashReport"
|
||||||
|
case hcsNotificationSystemSiloJobCreated:
|
||||||
|
return "SystemSiloJobCreated"
|
||||||
|
case hcsNotificationSystemSaveCompleted:
|
||||||
|
return "SystemSaveCompleted"
|
||||||
|
case hcsNotificationSystemRdpEnhancedModeStateChanged:
|
||||||
|
return "SystemRdpEnhancedModeStateChanged"
|
||||||
|
case hcsNotificationSystemShutdownFailed:
|
||||||
|
return "SystemShutdownFailed"
|
||||||
|
case hcsNotificationSystemGetPropertiesCompleted:
|
||||||
|
return "SystemGetPropertiesCompleted"
|
||||||
|
case hcsNotificationSystemModifyCompleted:
|
||||||
|
return "SystemModifyCompleted"
|
||||||
|
case hcsNotificationSystemCrashInitiated:
|
||||||
|
return "SystemCrashInitiated"
|
||||||
|
case hcsNotificationSystemGuestConnectionClosed:
|
||||||
|
return "SystemGuestConnectionClosed"
|
||||||
|
case hcsNotificationProcessExited:
|
||||||
|
return "ProcessExited"
|
||||||
|
case hcsNotificationInvalid:
|
||||||
|
return "Invalid"
|
||||||
|
case hcsNotificationServiceDisconnect:
|
||||||
|
return "ServiceDisconnect"
|
||||||
|
default:
|
||||||
|
return fmt.Sprintf("Unknown: %d", hn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type notificationChannel chan error
|
type notificationChannel chan error
|
||||||
|
|
||||||
type notifcationWatcherContext struct {
|
type notifcationWatcherContext struct {
|
||||||
channels notificationChannels
|
channels notificationChannels
|
||||||
handle hcsCallback
|
handle hcsCallback
|
||||||
|
|
||||||
|
systemID string
|
||||||
|
processID int
|
||||||
}
|
}
|
||||||
|
|
||||||
type notificationChannels map[hcsNotification]notificationChannel
|
type notificationChannels map[hcsNotification]notificationChannel
|
||||||
|
|
||||||
func newChannels() notificationChannels {
|
func newSystemChannels() notificationChannels {
|
||||||
channels := make(notificationChannels)
|
channels := make(notificationChannels)
|
||||||
|
|
||||||
channels[hcsNotificationSystemExited] = make(notificationChannel, 1)
|
channels[hcsNotificationSystemExited] = make(notificationChannel, 1)
|
||||||
|
@ -57,17 +104,14 @@ func newChannels() notificationChannels {
|
||||||
channels[hcsNotificationSystemStartCompleted] = make(notificationChannel, 1)
|
channels[hcsNotificationSystemStartCompleted] = make(notificationChannel, 1)
|
||||||
channels[hcsNotificationSystemPauseCompleted] = make(notificationChannel, 1)
|
channels[hcsNotificationSystemPauseCompleted] = make(notificationChannel, 1)
|
||||||
channels[hcsNotificationSystemResumeCompleted] = make(notificationChannel, 1)
|
channels[hcsNotificationSystemResumeCompleted] = make(notificationChannel, 1)
|
||||||
|
|
||||||
|
return channels
|
||||||
|
}
|
||||||
|
|
||||||
|
func newProcessChannels() notificationChannels {
|
||||||
|
channels := make(notificationChannels)
|
||||||
|
|
||||||
channels[hcsNotificationProcessExited] = make(notificationChannel, 1)
|
channels[hcsNotificationProcessExited] = make(notificationChannel, 1)
|
||||||
channels[hcsNotificationServiceDisconnect] = make(notificationChannel, 1)
|
|
||||||
channels[hcsNotificationSystemCrashReport] = make(notificationChannel, 1)
|
|
||||||
channels[hcsNotificationSystemSiloJobCreated] = make(notificationChannel, 1)
|
|
||||||
channels[hcsNotificationSystemSaveCompleted] = make(notificationChannel, 1)
|
|
||||||
channels[hcsNotificationSystemRdpEnhancedModeStateChanged] = make(notificationChannel, 1)
|
|
||||||
channels[hcsNotificationSystemShutdownFailed] = make(notificationChannel, 1)
|
|
||||||
channels[hcsNotificationSystemGetPropertiesCompleted] = make(notificationChannel, 1)
|
|
||||||
channels[hcsNotificationSystemModifyCompleted] = make(notificationChannel, 1)
|
|
||||||
channels[hcsNotificationSystemCrashInitiated] = make(notificationChannel, 1)
|
|
||||||
channels[hcsNotificationSystemGuestConnectionClosed] = make(notificationChannel, 1)
|
|
||||||
|
|
||||||
return channels
|
return channels
|
||||||
}
|
}
|
||||||
|
@ -92,12 +136,28 @@ func notificationWatcher(notificationType hcsNotification, callbackNumber uintpt
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log := logrus.WithFields(logrus.Fields{
|
||||||
|
"notification-type": notificationType.String(),
|
||||||
|
"system-id": context.systemID,
|
||||||
|
})
|
||||||
|
if context.processID != 0 {
|
||||||
|
log.Data[logfields.ProcessID] = context.processID
|
||||||
|
}
|
||||||
|
log.Debug("")
|
||||||
|
|
||||||
|
// The HCS notification system can grow overtime. We explicitly opt-in to
|
||||||
|
// the notifications we would like to handle, all others we simply return.
|
||||||
|
// This means that as it grows we don't have issues associated with new
|
||||||
|
// notification types the code didn't know about.
|
||||||
|
switch notificationType {
|
||||||
|
case hcsNotificationSystemExited, hcsNotificationSystemCreateCompleted, hcsNotificationSystemStartCompleted, hcsNotificationSystemPauseCompleted, hcsNotificationSystemResumeCompleted:
|
||||||
|
case hcsNotificationProcessExited:
|
||||||
|
default:
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
if channel, ok := context.channels[notificationType]; ok {
|
if channel, ok := context.channels[notificationType]; ok {
|
||||||
channel <- result
|
channel <- result
|
||||||
} else {
|
|
||||||
logrus.WithFields(logrus.Fields{
|
|
||||||
"notification-type": notificationType,
|
|
||||||
}).Warn("Received a callback of an unsupported type")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
7
vendor/github.com/Microsoft/hcsshim/internal/hcs/errors.go
generated
vendored
7
vendor/github.com/Microsoft/hcsshim/internal/hcs/errors.go
generated
vendored
|
@ -272,6 +272,13 @@ func IsNotSupported(err error) bool {
|
||||||
err == ErrVmcomputeUnknownMessage
|
err == ErrVmcomputeUnknownMessage
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsOperationInvalidState returns true when err is caused by
|
||||||
|
// `ErrVmcomputeOperationInvalidState`.
|
||||||
|
func IsOperationInvalidState(err error) bool {
|
||||||
|
err = getInnerError(err)
|
||||||
|
return err == ErrVmcomputeOperationInvalidState
|
||||||
|
}
|
||||||
|
|
||||||
func getInnerError(err error) error {
|
func getInnerError(err error) error {
|
||||||
switch pe := err.(type) {
|
switch pe := err.(type) {
|
||||||
case nil:
|
case nil:
|
||||||
|
|
2
vendor/github.com/Microsoft/hcsshim/internal/hcs/hcs.go
generated
vendored
2
vendor/github.com/Microsoft/hcsshim/internal/hcs/hcs.go
generated
vendored
|
@ -27,7 +27,7 @@ import (
|
||||||
//sys hcsOpenProcess(computeSystem hcsSystem, pid uint32, process *hcsProcess, result **uint16) (hr error) = vmcompute.HcsOpenProcess?
|
//sys hcsOpenProcess(computeSystem hcsSystem, pid uint32, process *hcsProcess, result **uint16) (hr error) = vmcompute.HcsOpenProcess?
|
||||||
//sys hcsCloseProcess(process hcsProcess) (hr error) = vmcompute.HcsCloseProcess?
|
//sys hcsCloseProcess(process hcsProcess) (hr error) = vmcompute.HcsCloseProcess?
|
||||||
//sys hcsTerminateProcess(process hcsProcess, result **uint16) (hr error) = vmcompute.HcsTerminateProcess?
|
//sys hcsTerminateProcess(process hcsProcess, result **uint16) (hr error) = vmcompute.HcsTerminateProcess?
|
||||||
//sys hcsSignalProcess(process hcsProcess, options string, result **uint16) (hr error) = vmcompute.HcsTerminateProcess?
|
//sys hcsSignalProcess(process hcsProcess, options string, result **uint16) (hr error) = vmcompute.HcsSignalProcess?
|
||||||
//sys hcsGetProcessInfo(process hcsProcess, processInformation *hcsProcessInformation, result **uint16) (hr error) = vmcompute.HcsGetProcessInfo?
|
//sys hcsGetProcessInfo(process hcsProcess, processInformation *hcsProcessInformation, result **uint16) (hr error) = vmcompute.HcsGetProcessInfo?
|
||||||
//sys hcsGetProcessProperties(process hcsProcess, processProperties **uint16, result **uint16) (hr error) = vmcompute.HcsGetProcessProperties?
|
//sys hcsGetProcessProperties(process hcsProcess, processProperties **uint16, result **uint16) (hr error) = vmcompute.HcsGetProcessProperties?
|
||||||
//sys hcsModifyProcess(process hcsProcess, settings string, result **uint16) (hr error) = vmcompute.HcsModifyProcess?
|
//sys hcsModifyProcess(process hcsProcess, settings string, result **uint16) (hr error) = vmcompute.HcsModifyProcess?
|
||||||
|
|
13
vendor/github.com/Microsoft/hcsshim/internal/hcs/process.go
generated
vendored
13
vendor/github.com/Microsoft/hcsshim/internal/hcs/process.go
generated
vendored
|
@ -7,7 +7,6 @@ import (
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/Microsoft/hcsshim/internal/guestrequest"
|
|
||||||
"github.com/Microsoft/hcsshim/internal/interop"
|
"github.com/Microsoft/hcsshim/internal/interop"
|
||||||
"github.com/Microsoft/hcsshim/internal/logfields"
|
"github.com/Microsoft/hcsshim/internal/logfields"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
|
@ -112,7 +111,11 @@ func (process *Process) logOperationEnd(operation string, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Signal signals the process with `options`.
|
// Signal signals the process with `options`.
|
||||||
func (process *Process) Signal(options guestrequest.SignalProcessOptions) (err error) {
|
//
|
||||||
|
// For LCOW `guestrequest.SignalProcessOptionsLCOW`.
|
||||||
|
//
|
||||||
|
// For WCOW `guestrequest.SignalProcessOptionsWCOW`.
|
||||||
|
func (process *Process) Signal(options interface{}) (err error) {
|
||||||
process.handleLock.RLock()
|
process.handleLock.RLock()
|
||||||
defer process.handleLock.RUnlock()
|
defer process.handleLock.RUnlock()
|
||||||
|
|
||||||
|
@ -189,7 +192,7 @@ func (process *Process) Wait() (err error) {
|
||||||
|
|
||||||
<-process.waitBlock
|
<-process.waitBlock
|
||||||
if process.waitError != nil {
|
if process.waitError != nil {
|
||||||
return makeProcessError(process, operation, err, nil)
|
return makeProcessError(process, operation, process.waitError, nil)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -432,7 +435,9 @@ func (process *Process) Close() (err error) {
|
||||||
|
|
||||||
func (process *Process) registerCallback() error {
|
func (process *Process) registerCallback() error {
|
||||||
context := ¬ifcationWatcherContext{
|
context := ¬ifcationWatcherContext{
|
||||||
channels: newChannels(),
|
channels: newProcessChannels(),
|
||||||
|
systemID: process.SystemID(),
|
||||||
|
processID: process.processID,
|
||||||
}
|
}
|
||||||
|
|
||||||
callbackMapLock.Lock()
|
callbackMapLock.Lock()
|
||||||
|
|
10
vendor/github.com/Microsoft/hcsshim/internal/hcs/system.go
generated
vendored
10
vendor/github.com/Microsoft/hcsshim/internal/hcs/system.go
generated
vendored
|
@ -414,18 +414,19 @@ func (computeSystem *System) Properties(types ...schema1.PropertyType) (_ *schem
|
||||||
computeSystem.logOperationBegin(operation)
|
computeSystem.logOperationBegin(operation)
|
||||||
defer func() { computeSystem.logOperationEnd(operation, err) }()
|
defer func() { computeSystem.logOperationEnd(operation, err) }()
|
||||||
|
|
||||||
queryj, err := json.Marshal(schema1.PropertyQuery{types})
|
queryBytes, err := json.Marshal(schema1.PropertyQuery{PropertyTypes: types})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, makeSystemError(computeSystem, "Properties", "", err, nil)
|
return nil, makeSystemError(computeSystem, "Properties", "", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
queryString := string(queryBytes)
|
||||||
logrus.WithFields(computeSystem.logctx).
|
logrus.WithFields(computeSystem.logctx).
|
||||||
WithField(logfields.JSON, queryj).
|
WithField(logfields.JSON, queryString).
|
||||||
Debug("HCS ComputeSystem Properties Query")
|
Debug("HCS ComputeSystem Properties Query")
|
||||||
|
|
||||||
var resultp, propertiesp *uint16
|
var resultp, propertiesp *uint16
|
||||||
syscallWatcher(computeSystem.logctx, func() {
|
syscallWatcher(computeSystem.logctx, func() {
|
||||||
err = hcsGetComputeSystemProperties(computeSystem.handle, string(queryj), &propertiesp, &resultp)
|
err = hcsGetComputeSystemProperties(computeSystem.handle, string(queryString), &propertiesp, &resultp)
|
||||||
})
|
})
|
||||||
events := processHcsResult(resultp)
|
events := processHcsResult(resultp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -625,7 +626,8 @@ func (computeSystem *System) Close() (err error) {
|
||||||
|
|
||||||
func (computeSystem *System) registerCallback() error {
|
func (computeSystem *System) registerCallback() error {
|
||||||
context := ¬ifcationWatcherContext{
|
context := ¬ifcationWatcherContext{
|
||||||
channels: newChannels(),
|
channels: newSystemChannels(),
|
||||||
|
systemID: computeSystem.id,
|
||||||
}
|
}
|
||||||
|
|
||||||
callbackMapLock.Lock()
|
callbackMapLock.Lock()
|
||||||
|
|
18
vendor/github.com/Microsoft/hcsshim/internal/hcs/zsyscall_windows.go
generated
vendored
18
vendor/github.com/Microsoft/hcsshim/internal/hcs/zsyscall_windows.go
generated
vendored
|
@ -56,13 +56,13 @@ var (
|
||||||
procHcsOpenProcess = modvmcompute.NewProc("HcsOpenProcess")
|
procHcsOpenProcess = modvmcompute.NewProc("HcsOpenProcess")
|
||||||
procHcsCloseProcess = modvmcompute.NewProc("HcsCloseProcess")
|
procHcsCloseProcess = modvmcompute.NewProc("HcsCloseProcess")
|
||||||
procHcsTerminateProcess = modvmcompute.NewProc("HcsTerminateProcess")
|
procHcsTerminateProcess = modvmcompute.NewProc("HcsTerminateProcess")
|
||||||
|
procHcsSignalProcess = modvmcompute.NewProc("HcsSignalProcess")
|
||||||
procHcsGetProcessInfo = modvmcompute.NewProc("HcsGetProcessInfo")
|
procHcsGetProcessInfo = modvmcompute.NewProc("HcsGetProcessInfo")
|
||||||
procHcsGetProcessProperties = modvmcompute.NewProc("HcsGetProcessProperties")
|
procHcsGetProcessProperties = modvmcompute.NewProc("HcsGetProcessProperties")
|
||||||
procHcsModifyProcess = modvmcompute.NewProc("HcsModifyProcess")
|
procHcsModifyProcess = modvmcompute.NewProc("HcsModifyProcess")
|
||||||
procHcsGetServiceProperties = modvmcompute.NewProc("HcsGetServiceProperties")
|
procHcsGetServiceProperties = modvmcompute.NewProc("HcsGetServiceProperties")
|
||||||
procHcsRegisterProcessCallback = modvmcompute.NewProc("HcsRegisterProcessCallback")
|
procHcsRegisterProcessCallback = modvmcompute.NewProc("HcsRegisterProcessCallback")
|
||||||
procHcsUnregisterProcessCallback = modvmcompute.NewProc("HcsUnregisterProcessCallback")
|
procHcsUnregisterProcessCallback = modvmcompute.NewProc("HcsUnregisterProcessCallback")
|
||||||
)
|
)
|
||||||
|
|
||||||
func hcsEnumerateComputeSystems(query string, computeSystems **uint16, result **uint16) (hr error) {
|
func hcsEnumerateComputeSystems(query string, computeSystems **uint16, result **uint16) (hr error) {
|
||||||
|
@ -417,10 +417,10 @@ func hcsSignalProcess(process hcsProcess, options string, result **uint16) (hr e
|
||||||
}
|
}
|
||||||
|
|
||||||
func _hcsSignalProcess(process hcsProcess, options *uint16, result **uint16) (hr error) {
|
func _hcsSignalProcess(process hcsProcess, options *uint16, result **uint16) (hr error) {
|
||||||
if hr = procHcsTerminateProcess.Find(); hr != nil {
|
if hr = procHcsSignalProcess.Find(); hr != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
r0, _, _ := syscall.Syscall(procHcsTerminateProcess.Addr(), 3, uintptr(process), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result)))
|
r0, _, _ := syscall.Syscall(procHcsSignalProcess.Addr(), 3, uintptr(process), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result)))
|
||||||
if int32(r0) < 0 {
|
if int32(r0) < 0 {
|
||||||
if r0&0x1fff0000 == 0x00070000 {
|
if r0&0x1fff0000 == 0x00070000 {
|
||||||
r0 &= 0xffff
|
r0 &= 0xffff
|
||||||
|
|
51
vendor/github.com/Microsoft/hcsshim/osversion/osversion_windows.go
generated
vendored
Normal file
51
vendor/github.com/Microsoft/hcsshim/osversion/osversion_windows.go
generated
vendored
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
package osversion
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"golang.org/x/sys/windows"
|
||||||
|
)
|
||||||
|
|
||||||
|
// OSVersion is a wrapper for Windows version information
|
||||||
|
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms724439(v=vs.85).aspx
|
||||||
|
type OSVersion struct {
|
||||||
|
Version uint32
|
||||||
|
MajorVersion uint8
|
||||||
|
MinorVersion uint8
|
||||||
|
Build uint16
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms724833(v=vs.85).aspx
|
||||||
|
type osVersionInfoEx struct {
|
||||||
|
OSVersionInfoSize uint32
|
||||||
|
MajorVersion uint32
|
||||||
|
MinorVersion uint32
|
||||||
|
BuildNumber uint32
|
||||||
|
PlatformID uint32
|
||||||
|
CSDVersion [128]uint16
|
||||||
|
ServicePackMajor uint16
|
||||||
|
ServicePackMinor uint16
|
||||||
|
SuiteMask uint16
|
||||||
|
ProductType byte
|
||||||
|
Reserve byte
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get gets the operating system version on Windows.
|
||||||
|
// The calling application must be manifested to get the correct version information.
|
||||||
|
func Get() OSVersion {
|
||||||
|
var err error
|
||||||
|
osv := OSVersion{}
|
||||||
|
osv.Version, err = windows.GetVersion()
|
||||||
|
if err != nil {
|
||||||
|
// GetVersion never fails.
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
osv.MajorVersion = uint8(osv.Version & 0xFF)
|
||||||
|
osv.MinorVersion = uint8(osv.Version >> 8 & 0xFF)
|
||||||
|
osv.Build = uint16(osv.Version >> 16)
|
||||||
|
return osv
|
||||||
|
}
|
||||||
|
|
||||||
|
func (osv OSVersion) ToString() string {
|
||||||
|
return fmt.Sprintf("%d.%d.%d", osv.MajorVersion, osv.MinorVersion, osv.Build)
|
||||||
|
}
|
23
vendor/github.com/Microsoft/hcsshim/osversion/windowsbuilds.go
generated
vendored
Normal file
23
vendor/github.com/Microsoft/hcsshim/osversion/windowsbuilds.go
generated
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
package osversion
|
||||||
|
|
||||||
|
const (
|
||||||
|
// RS1 (version 1607, codename "Redstone 1") corresponds to Windows Server
|
||||||
|
// 2016 (ltsc2016) and Windows 10 (Anniversary Update).
|
||||||
|
RS1 = 14393
|
||||||
|
|
||||||
|
// RS2 (version 1703, codename "Redstone 2") was a client-only update, and
|
||||||
|
// corresponds to Windows 10 (Creators Update).
|
||||||
|
RS2 = 15063
|
||||||
|
|
||||||
|
// RS3 (version 1709, codename "Redstone 3") corresponds to Windows Server
|
||||||
|
// 1709 (Semi-Annual Channel (SAC)), and Windows 10 (Fall Creators Update).
|
||||||
|
RS3 = 16299
|
||||||
|
|
||||||
|
// RS4 (version 1803, codename "Redstone 4") corresponds to Windows Server
|
||||||
|
// 1809 (Semi-Annual Channel (SAC)), and Windows 10 (April 2018 Update).
|
||||||
|
RS4 = 17134
|
||||||
|
|
||||||
|
// RS5 (version 1809, codename "Redstone 5") corresponds to Windows Server
|
||||||
|
// 2019 (ltsc2019), and Windows 10 (October 2018 Update).
|
||||||
|
RS5 = 17763
|
||||||
|
)
|
2
vendor/github.com/Microsoft/hcsshim/vendor.conf
generated
vendored
2
vendor/github.com/Microsoft/hcsshim/vendor.conf
generated
vendored
|
@ -10,7 +10,7 @@ github.com/hashicorp/errwrap 7554cd9344cec97297fa6649b055a8c98c2a1e55
|
||||||
github.com/hashicorp/go-multierror ed905158d87462226a13fe39ddf685ea65f1c11f
|
github.com/hashicorp/go-multierror ed905158d87462226a13fe39ddf685ea65f1c11f
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1
|
github.com/konsorten/go-windows-terminal-sequences v1.0.1
|
||||||
github.com/linuxkit/virtsock 8e79449dea0735c1c056d814934dd035734cc97c
|
github.com/linuxkit/virtsock 8e79449dea0735c1c056d814934dd035734cc97c
|
||||||
github.com/Microsoft/go-winio c599b533b43b1363d7d7c6cfda5ede70ed73ff13
|
github.com/Microsoft/go-winio 84b4ab48a50763fe7b3abcef38e5205c12027fac
|
||||||
github.com/Microsoft/opengcs v0.3.9
|
github.com/Microsoft/opengcs v0.3.9
|
||||||
github.com/opencontainers/go-digest c9281466c8b2f606084ac71339773efd177436e7
|
github.com/opencontainers/go-digest c9281466c8b2f606084ac71339773efd177436e7
|
||||||
github.com/opencontainers/runc 12f6a991201fdb8f82579582d5e00e28fba06d0a
|
github.com/opencontainers/runc 12f6a991201fdb8f82579582d5e00e28fba06d0a
|
||||||
|
|
Loading…
Reference in a new issue