Viewing file: sd-shutdown.h (3.74 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
#ifndef foosdshutdownhfoo #define foosdshutdownhfoo
/*** This file is part of systemd.
Copyright 2010 Lennart Poettering
systemd is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
systemd is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with systemd; If not, see <http://www.gnu.org/licenses/>. ***/
/* Interface for scheduling and cancelling timed shutdowns. */
#include <inttypes.h>
#ifdef __cplusplus extern "C" { #endif
#ifndef _sd_packed_ # define _sd_packed_ __attribute__((packed)) #endif
typedef enum sd_shutdown_mode { SD_SHUTDOWN_NONE = 0, SD_SHUTDOWN_REBOOT = 'r', SD_SHUTDOWN_POWEROFF = 'P', SD_SHUTDOWN_HALT = 'H', SD_SHUTDOWN_KEXEC = 'K' } sd_shutdown_mode_t;
/* Calculate the size of the message as "offsetof(struct * sd_shutdown_command, wall_message) + * strlen(command.wall_message)" */ struct sd_shutdown_command { /* Microseconds after the epoch 1970 UTC */ uint64_t usec;
/* H, P, r, i.e. the switches usually passed to * /usr/bin/shutdown to select whether to halt, power-off or * reboot the machine */ sd_shutdown_mode_t mode:8;
/* If non-zero, don't actually shut down, just pretend */ unsigned dry_run:1;
/* If non-zero, send our wall message */ unsigned warn_wall:1;
/* The wall message to send around. Leave empty for the * default wall message */ char wall_message[]; } _sd_packed_;
/* The scheme is very simple: * * To schedule a shutdown, simply fill in and send a single * AF_UNIX/SOCK_DGRAM datagram with the structure above suffixed with * the wall message to the socket /run/systemd/shutdownd (leave an * empty wall message for the default shutdown message). To calculate * the size of the message, use "offsetof(struct sd_shutdown_command, * wall_message) + strlen(command.wall_message)". * * To cancel a shutdown, do the same, but send a fully zeroed-out * structure. * * To be notified about scheduled shutdowns, create an inotify watch * on /run/shutdown/. Whenever a file called "scheduled" appears, a * shutdown is scheduled. If it is removed, it is canceled. If it is * replaced, the scheduled shutdown has been changed. The file contains * a simple, environment-like block that contains information about * the scheduled shutdown: * * USEC= * encodes the time for the shutdown in usecs since the epoch UTC, * formatted as a numeric string. * * WARN_WALL= * is 1 if a wall message shall be sent * * DRY_RUN= * is 1 if a dry-run shutdown is scheduled * * MODE= * is the shutdown mode, one of "poweroff", "reboot", "halt", "kexec" * * WALL_MESSAGE= * is the wall message to use, with all special characters escaped in C-style. * * Note that some fields might be missing if they do not apply. * * Note that the file is first written to a temporary file and then * renamed, in order to provide atomic properties for readers: if the * file exists under the name "scheduled", it is guaranteed to be fully * written. A reader should ignore all files in that directory by any * other name. * * Scheduled shutdowns are only accepted from privileged processes, * but anyone may watch the directory and the file in it. */
#ifdef __cplusplus } #endif
#endif
|