www.nico.schottelius.org/software/cinit/browse_source/cinit-0.0.5/old/cinit.commands.v01
Nico Schottelius 423ba10303 import cinit from unix.schottelius.org
Signed-off-by: Nico Schottelius <nico@ikn.schottelius.org>
2009-09-16 12:53:45 +02:00

85 lines
3.4 KiB
Text

--------------------------------------------------------------------------------
cinit commands, Nico Schottelius 2005-04-28
--------------------------------------------------------------------------------
cinit allows communication through a socket (see ipc.thoughs for reasons).
Sockets allow to find out the accessing uid, gid and pid (uses SO_PEERCRED as
socketoption).
The communication-protocol is binary.
--------------------------------------------------------------------------------
Protocol overview
--------------------------------------------------------------------------------
Any communication begins with a command. A command is a one byte
unsigned char. Depending on the command, the communication has its own
semantics.
Commands are: (values can be found in cinit.h)
CMD_START_SVC: I want to start a service.
CMD_CHG_STATUS: I want to change the status of a service.
CMD_STOP_SVC: Please shutdown a service and its dependencies.
CMD_KILL_SVC: Shutdown a service, don't care about its dependencies.
CMD_RESCUE: Kill everything, and spawn a sulogin shell.
CMD_INIT: Start all services (again possibly).
CMD_HALT: Halt the system.
CMD_REBOOT: Reboot the system.
CMD_POWEROFF: Power-off the system.
--------------------------------------------------------------------------------
Detailled command-listing
--------------------------------------------------------------------------------
CMD_START_SVC
1. int len; /* length of service name, including \0 */
2. char *svc; /* name of the service, absolute pathname */
cinit returns:
a) ok, a SID, a service ID: int svc_id; [ really need int? ]
b) fail, [currently only fail is returned]
a) already running
b) svc_name too long / not allowed
[ A service identification is used for faster searching in cinit.
It is also a hint for developers of external software, that they should not
be able to use CMD_CHG_STATUS, if they didn't start a service.
They should use CMD_STOP_SVC to stop a service.
Starting a service is currently done via exec() in the external program or
a cinit-fork(). ]
CMD_CHG_STATUS: I want to change the status of a service.
0. int svc_id; /* service ID to change */
1. char status; /* status:
once: started successfully the service once.
fail: tried to start once, but the service exit uncgrafully
UNUSED! respawn: I am on it, as soon it exists I'll restart! */
2. pid_t pid /* the pid of the service, if started once
or the pid of the service watcher, if respawning */
cinit returns: MSG_OK|MSG_FAIL (char)
CMD_STOP_SVC: Please shutdown a service and its dependencies.
1. int len; /* length of service name, including \0 */
2. char *svc; /* name of the service, absolute pathname */
cinit returns: ready...
CMD_KILL_SVC: Shutdown a service, don't care about its dependencies.
1. int len; /* length of service name, including \0 */
2. char *svc; /* name of the service, absolute pathname */
cinit returns: ready...
CMD_INIT: Start all services (again possibly).
cinit returns: ready...
CMD_RESCUE: Kill everything, and spawn a sulogin shell.
CMD_HALT: Halt the system.
CMD_REBOOT: Reboot the system.
CMD_POWEROFF: Power-off the system.