92 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
	
		
			3.7 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, the implementation can be found
 | 
						|
in comm/* mostly (clients use begin_msg() and server sigio() additonally).
 | 
						|
 | 
						|
--------------------------------------------------------------------------------
 | 
						|
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*)
 | 
						|
 | 
						|
      *) The commands are not and maybe will never be implemented,
 | 
						|
         as they are realized another way (using signals).
 | 
						|
 | 
						|
      **) Not yet implemented.
 | 
						|
 | 
						|
--------------------------------------------------------------------------------
 | 
						|
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(). ]
 | 
						|
 | 
						|
CMD1CHG_STATUS:   I want to change the status of a service.
 | 
						|
   0. int len;
 | 
						|
   1. char *svc;
 | 
						|
   2. char status;   /* status:
 | 
						|
                        once: started successfully the service once.
 | 
						|
                        fail: tried to start once, but the service exit ungracefully
 | 
						|
                        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.
 |