diff --git a/src/cmd/linuxkit/run_hyperkit.go b/src/cmd/linuxkit/run_hyperkit.go index 7dcd177b0..4abf3c02e 100644 --- a/src/cmd/linuxkit/run_hyperkit.go +++ b/src/cmd/linuxkit/run_hyperkit.go @@ -32,6 +32,7 @@ func runHyperKit(args []string) { data := flags.String("data", "", "Metadata to pass to VM (either a path to a file or a string)") ipStr := flags.String("ip", "", "IP address for the VM") state := flags.String("state", "", "Path to directory to keep VM state in") + vsockports := flags.String("vsock-ports", "", "List of vsock ports to forward from the guest on startup (comma separated). A unix domain socket for each port will be created in the state directory") if err := flags.Parse(args); err != nil { log.Fatal("Unable to parse args") @@ -100,6 +101,10 @@ func runHyperKit(args []string) { log.Fatalln("Error creating hyperkit: ", err) } + if h.VSockPorts, err = stringToIntArray(*vsockports, ","); err != nil { + log.Fatalln("Unable to parse vsock-ports: ", err) + } + h.Kernel = prefix + "-kernel" h.Initrd = prefix + "-initrd.img" h.VPNKitKey = vpnKitKey diff --git a/src/cmd/linuxkit/util.go b/src/cmd/linuxkit/util.go index a5717c07a..548047096 100644 --- a/src/cmd/linuxkit/util.go +++ b/src/cmd/linuxkit/util.go @@ -3,6 +3,7 @@ package main import ( "os" "strconv" + "strings" ) func getStringValue(envKey string, flagVal string, defaultVal string) string { @@ -81,3 +82,18 @@ func getBoolValue(envKey string, flagVal bool) bool { return res } + +func stringToIntArray(l string, sep string) ([]int, error) { + var err error + if l == "" { + return []int{}, err + } + s := strings.Split(l, sep) + i := make([]int, len(s)) + for idx := range s { + if i[idx], err = strconv.Atoi(s[idx]); err != nil { + return nil, err + } + } + return i, nil +}