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