Home | History | Annotate | Line # | Download | only in master
      1 /*	$NetBSD: master_proto.h,v 1.3 2025/02/25 19:15:46 christos Exp $	*/
      2 
      3 /*++
      4 /* NAME
      5 /*	master_proto 3h
      6 /* SUMMARY
      7 /*	master process protocol
      8 /* SYNOPSIS
      9 /*	#include <master_proto.h>
     10 /* DESCRIPTION
     11 /* .nf
     12 
     13  /*
     14   * Transport names. The master passes the transport name on the command
     15   * line, and thus the name is part of the master to child protocol.
     16   */
     17 #define MASTER_XPORT_NAME_UNIX	"unix"	/* local IPC */
     18 #define MASTER_XPORT_NAME_FIFO	"fifo"	/* local IPC */
     19 #define MASTER_XPORT_NAME_INET	"inet"	/* non-local IPC */
     20 #define MASTER_XPORT_NAME_PASS	"pass"	/* local IPC */
     21 #define MASTER_XPORT_NAME_UXDG	"unix-dgram"	/* local IPC */
     22 
     23  /*
     24   * Format of a status message sent by a child process to the process
     25   * manager. Since this is between processes on the same machine we need not
     26   * worry about byte order and word length.
     27   */
     28 typedef struct MASTER_STATUS {
     29     int     pid;			/* process ID */
     30     unsigned gen;			/* child generation number */
     31     int     avail;			/* availability */
     32 } MASTER_STATUS;
     33 
     34 #define MASTER_GEN_NAME	"GENERATION"	/* passed via environment */
     35 
     36 #define MASTER_STAT_TAKEN	0	/* this one is occupied */
     37 #define MASTER_STAT_AVAIL	1	/* this process is idle */
     38 
     39 extern int master_notify(int, unsigned, int);	/* encapsulate status msg */
     40 
     41  /*
     42   * File descriptors inherited from the master process. The flow control pipe
     43   * is read by receive processes and is written to by send processes. If
     44   * receive processes get too far ahead they will pause for a brief moment.
     45   */
     46 #define MASTER_FLOW_READ	3
     47 #define MASTER_FLOW_WRITE	4
     48 
     49  /*
     50   * File descriptors inherited from the master process. All processes that
     51   * provide a given service share the same status file descriptor, and listen
     52   * on the same service socket(s). The kernel decides what process gets the
     53   * next connection. Usually the number of listening processes is small, so
     54   * one connection will not cause a "thundering herd" effect. When no process
     55   * listens on a given socket, the master process will. MASTER_LISTEN_FD is
     56   * actually the lowest-numbered descriptor of a sequence of descriptors to
     57   * listen on.
     58   */
     59 #define MASTER_STATUS_FD	5	/* shared channel to parent */
     60 #define MASTER_LISTEN_FD	6	/* accept connections here */
     61 
     62 /* LICENSE
     63 /* .ad
     64 /* .fi
     65 /*	The Secure Mailer license must be distributed with this software.
     66 /* AUTHOR(S)
     67 /*	Wietse Venema
     68 /*	IBM T.J. Watson Research
     69 /*	P.O. Box 704
     70 /*	Yorktown Heights, NY 10598, USA
     71 /*
     72 /*	Wietse Venema
     73 /*	Google, Inc.
     74 /*	111 8th Avenue
     75 /*	New York, NY 10011, USA
     76 /*--*/
     77