func setManageCgroupsMode(context *cli.Context, options *libcontainer.CriuOpts) { if cgOpt := context.String("manage-cgroups-mode"); cgOpt != "" { switch cgOpt { case "soft": options.ManageCgroupsMode = libcontainer.CRIU_CG_MODE_SOFT case "full": options.ManageCgroupsMode = libcontainer.CRIU_CG_MODE_FULL case "strict": options.ManageCgroupsMode = libcontainer.CRIU_CG_MODE_STRICT default: fatal(fmt.Errorf("Invalid manage cgroups mode")) } } }
func setEmptyNsMask(context *cli.Context, options *libcontainer.CriuOpts) error { var nsmask int for _, ns := range context.StringSlice("empty-ns") { f, exists := namespaceMapping[specs.NamespaceType(ns)] if !exists { return fmt.Errorf("namespace %q is not supported", ns) } nsmask |= f } options.EmptyNs = uint32(nsmask) return nil }
func (c *libcontainerContainer) createCheckpointOpts(cp runtime.Checkpoint) *libcontainer.CriuOpts { opts := libcontainer.CriuOpts{} opts.LeaveRunning = !cp.Exit opts.ShellJob = cp.Shell opts.TcpEstablished = cp.Tcp opts.ExternalUnixConnections = cp.UnixSockets opts.ImagesDirectory = c.getCheckpointPath(cp.Name) return &opts }
func setPageServer(context *cli.Context, options *libcontainer.CriuOpts) { // xxx following criu opts are optional // The dump image can be sent to a criu page server if psOpt := context.String("page-server"); psOpt != "" { addressPort := strings.Split(psOpt, ":") if len(addressPort) != 2 { fatal(fmt.Errorf("Use --page-server ADDRESS:PORT to specify page server")) } portInt, err := strconv.Atoi(addressPort[1]) if err != nil { fatal(fmt.Errorf("Invalid port number")) } options.PageServer = libcontainer.CriuPageServerInfo{ Address: addressPort[0], Port: int32(portInt), } } }
func (c *libcontainerContainer) Restore(name string) error { path := c.getCheckpointPath(name) var opts libcontainer.CriuOpts opts.ImagesDirectory = path return c.c.Restore(c.initProcess.process, &opts) }