1 /* SPDX-License-Identifier: LGPL-2.0-or-later */
2 /*
3  * initreq.h	Interface to talk to init through /dev/initctl.
4  *
5  *		Copyright (C) 1995-2004 Miquel van Smoorenburg
6  *
7  *		This library is free software; you can redistribute it and/or
8  *		modify it under the terms of the GNU Lesser General Public
9  *		License as published by the Free Software Foundation; either
10  *		version 2 of the License, or (at your option) any later version.
11  *
12  * Version:     @(#)initreq.h  1.28  31-Mar-2004 MvS
13  */
14 
15 #pragma once
16 
17 #include <sys/param.h>
18 
19 #if defined(__FreeBSD_kernel__)
20 #  define INIT_FIFO  "/etc/.initctl"
21 #else
22 #  define INIT_FIFO  "/dev/initctl"
23 #endif
24 
25 #define INIT_MAGIC 0x03091969
26 #define INIT_CMD_START		0
27 #define INIT_CMD_RUNLVL		1
28 #define INIT_CMD_POWERFAIL	2
29 #define INIT_CMD_POWERFAILNOW	3
30 #define INIT_CMD_POWEROK	4
31 #define INIT_CMD_BSD		5
32 #define INIT_CMD_SETENV		6
33 #define INIT_CMD_UNSETENV	7
34 
35 #define INIT_CMD_CHANGECONS	12345
36 
37 #ifdef MAXHOSTNAMELEN
38 #  define INITRQ_HLEN	MAXHOSTNAMELEN
39 #else
40 #  define INITRQ_HLEN	64
41 #endif
42 
43 /*
44  *	This is what BSD 4.4 uses when talking to init.
45  *	Linux doesn't use this right now.
46  */
47 struct init_request_bsd {
48         char	gen_id[8];		/* Beats me.. telnetd uses "fe" */
49         char	tty_id[16];		/* Tty name minus /dev/tty      */
50         char	host[INITRQ_HLEN];	/* Hostname                     */
51         char	term_type[16];		/* Terminal type                */
52         int	signal;			/* Signal to send               */
53         int	pid;			/* Process to send to           */
54         char	exec_name[128];	        /* Program to execute           */
55         char	reserved[128];		/* For future expansion.        */
56 };
57 
58 /*
59  *	Because of legacy interfaces, "runlevel" and "sleeptime"
60  *	aren't in a separate struct in the union.
61  *
62  *	The weird sizes are because init expects the whole
63  *	struct to be 384 bytes.
64  */
65 struct init_request {
66         int	magic;			/* Magic number                 */
67         int	cmd;			/* What kind of request         */
68         int	runlevel;		/* Runlevel to change to        */
69         int	sleeptime;		/* Time between TERM and KILL   */
70         union {
71                 struct init_request_bsd	bsd;
72                 char			data[368];
73         } i;
74 };
75