]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/machine/machine.h
bus-util: drop redundant bus argument from bus_message_map_all_properties() and relat...
[thirdparty/systemd.git] / src / machine / machine.h
CommitLineData
9444b1f2
LP
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3#pragma once
4
5/***
6 This file is part of systemd.
7
8 Copyright 2013 Lennart Poettering
9
10 systemd is free software; you can redistribute it and/or modify it
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
13 (at your option) any later version.
14
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 Lesser General Public License for more details.
19
20 You should have received a copy of the GNU Lesser General Public License
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
24typedef struct Machine Machine;
0370612e 25typedef struct MachineOperation MachineOperation;
1ee306e1 26typedef enum KillWho KillWho;
9444b1f2
LP
27
28#include "list.h"
1ee306e1 29#include "machined.h"
9444b1f2 30
fb6becb4
LP
31typedef enum MachineState {
32 MACHINE_OPENING, /* Machine is being registered */
33 MACHINE_RUNNING, /* Machine is running */
34 MACHINE_CLOSING, /* Machine is terminating */
35 _MACHINE_STATE_MAX,
36 _MACHINE_STATE_INVALID = -1
37} MachineState;
38
9444b1f2
LP
39typedef enum MachineClass {
40 MACHINE_CONTAINER,
41 MACHINE_VM,
42 _MACHINE_CLASS_MAX,
43 _MACHINE_CLASS_INVALID = -1
44} MachineClass;
45
1ee306e1
LP
46enum KillWho {
47 KILL_LEADER,
48 KILL_ALL,
49 _KILL_WHO_MAX,
50 _KILL_WHO_INVALID = -1
51};
52
0370612e
LP
53#define MACHINE_OPERATIONS_MAX 64
54
55struct MachineOperation {
56 Machine *machine;
57 pid_t pid;
58 sd_bus_message *message;
59 int errno_fd;
60 sd_event_source *event_source;
61 LIST_FIELDS(MachineOperation, operations);
62};
63
9444b1f2
LP
64struct Machine {
65 Manager *manager;
66
67 char *name;
68 sd_id128_t id;
69
fb6becb4 70 MachineState state;
9444b1f2
LP
71 MachineClass class;
72
73 char *state_file;
74 char *service;
9444b1f2
LP
75 char *root_directory;
76
89f7c846 77 char *unit;
fb6becb4
LP
78 char *scope_job;
79
9444b1f2
LP
80 pid_t leader;
81
82 dual_timestamp timestamp;
83
84 bool in_gc_queue:1;
85 bool started:1;
86
c3350683 87 sd_bus_message *create_message;
fb6becb4 88
9b5ed6fe
LP
89 int *netif;
90 unsigned n_netif;
91
9444b1f2 92 LIST_FIELDS(Machine, gc_queue);
0370612e
LP
93
94 MachineOperation *operations;
95 unsigned n_operations;
9444b1f2
LP
96};
97
98Machine* machine_new(Manager *manager, const char *name);
99void machine_free(Machine *m);
a658cafa 100bool machine_check_gc(Machine *m, bool drop_not_started);
9444b1f2 101void machine_add_to_gc_queue(Machine *m);
c3350683 102int machine_start(Machine *m, sd_bus_message *properties, sd_bus_error *error);
9444b1f2
LP
103int machine_stop(Machine *m);
104int machine_save(Machine *m);
105int machine_load(Machine *m);
106int machine_kill(Machine *m, KillWho who, int signo);
107
fb6becb4
LP
108MachineState machine_get_state(Machine *u);
109
0370612e
LP
110MachineOperation *machine_operation_unref(MachineOperation *o);
111
9444b1f2
LP
112const char* machine_class_to_string(MachineClass t) _const_;
113MachineClass machine_class_from_string(const char *s) _pure_;
fb6becb4
LP
114
115const char* machine_state_to_string(MachineState t) _const_;
116MachineState machine_state_from_string(const char *s) _pure_;
1ee306e1
LP
117
118const char *kill_who_to_string(KillWho k) _const_;
119KillWho kill_who_from_string(const char *s) _pure_;