85 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			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. |