root/src/shared/initreq.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


/*
 * initreq.h    Interface to talk to init through /dev/initctl.
 *
 *              Copyright (C) 1995-2004 Miquel van Smoorenburg
 *
 *              This library 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 of the License, or (at your option) any later version.
 *
 * Version:     @(#)initreq.h  1.28  31-Mar-2004 MvS
 *
 */
#ifndef _INITREQ_H
#define _INITREQ_H

#include <sys/param.h>

#if defined(__FreeBSD_kernel__)
#  define INIT_FIFO  "/etc/.initctl"
#else
#  define INIT_FIFO  "/dev/initctl"
#endif

#define INIT_MAGIC 0x03091969
#define INIT_CMD_START          0
#define INIT_CMD_RUNLVL         1
#define INIT_CMD_POWERFAIL      2
#define INIT_CMD_POWERFAILNOW   3
#define INIT_CMD_POWEROK        4
#define INIT_CMD_BSD            5
#define INIT_CMD_SETENV         6
#define INIT_CMD_UNSETENV       7

#define INIT_CMD_CHANGECONS     12345

#ifdef MAXHOSTNAMELEN
#  define INITRQ_HLEN   MAXHOSTNAMELEN
#else
#  define INITRQ_HLEN   64
#endif

/*
 *      This is what BSD 4.4 uses when talking to init.
 *      Linux doesn't use this right now.
 */
struct init_request_bsd {
        char    gen_id[8];              /* Beats me.. telnetd uses "fe" */
        char    tty_id[16];             /* Tty name minus /dev/tty      */
        char    host[INITRQ_HLEN];      /* Hostname                     */
        char    term_type[16];          /* Terminal type                */
        int     signal;                 /* Signal to send               */
        int     pid;                    /* Process to send to           */
        char    exec_name[128];         /* Program to execute           */
        char    reserved[128];          /* For future expansion.        */
};


/*
 *      Because of legacy interfaces, "runlevel" and "sleeptime"
 *      aren't in a separate struct in the union.
 *
 *      The weird sizes are because init expects the whole
 *      struct to be 384 bytes.
 */
struct init_request {
        int     magic;                  /* Magic number                 */
        int     cmd;                    /* What kind of request         */
        int     runlevel;               /* Runlevel to change to        */
        int     sleeptime;              /* Time between TERM and KILL   */
        union {
                struct init_request_bsd bsd;
                char                    data[368];
        } i;
};

#endif

/* [<][>][^][v][top][bottom][index][help] */