Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / minix / rs.h @ 14

History | View | Annotate | Download (6.82 KB)

1
#ifndef RS_H
2
#define RS_H
3

    
4
/*
5
minix/rs.h
6

7
Interface to the reincarnation server
8
*/
9

    
10
#include <minix/bitmap.h>
11
#include <minix/com.h>
12
#include <minix/ipc_filter.h>
13

    
14
#define SERVICE_LOGIN        "service"        /* passwd file entry for services */
15

    
16
/* The following definition should be kept in sync with the actual
17
 * /etc/master.passwd value for SERVICE_LOGIN for now, and removed altogether
18
 * once we are able to obtain its value dynamically everywhere.  The value has
19
 * been chosen so as to avoid creating conflicts with future NetBSD additions
20
 * to the password files, although one can never be sure.
21
 */
22
#define SERVICE_UID                999                /* user ID for services */
23

    
24
/* RSS definitions. */
25
#define RSS_NR_IRQ                16
26
#define RSS_NR_IO                16
27
#define RSS_IRQ_ALL                (RSS_NR_IRQ+1)
28
#define RSS_IO_ALL                (RSS_NR_IO+1)
29
#define RSS_IPC_ALL                "IPC_ALL"
30
#define RSS_IPC_ALL_SYS                "IPC_ALL_SYS"
31

    
32
/* RSS flags. */
33
#define RSS_COPY        0x01        /* keep an in-memory copy of the binary */
34
#define RSS_REUSE        0x04        /* Try to reuse previously copied binary */
35
#define RSS_NOBLOCK        0x08        /* unblock caller immediately */
36
#define RSS_REPLICA        0x10        /* keep a replica of the service */
37
#define RSS_BATCH        0x20        /* batch mode */
38
#define RSS_SELF_LU        0x40        /* perform self update */
39
#define RSS_ASR_LU        0x80        /* perform ASR update */
40
#define RSS_FORCE_SELF_LU        0x0100        /* force self update */
41
#define RSS_PREPARE_ONLY_LU        0x0200        /* request prepare-only update */
42
#define RSS_FORCE_INIT_CRASH    0x0400  /* force crash at initialization time (for debugging) */
43
#define RSS_FORCE_INIT_FAIL     0x0800  /* force failure at initialization time (for debugging) */
44
#define RSS_FORCE_INIT_TIMEOUT  0x1000  /* force timeout at initialization time (for debugging) */
45
#define RSS_FORCE_INIT_DEFCB    0x2000  /* force default cb at initialization time (for debugging) */
46
#define RSS_SYS_BASIC_CALLS        0x4000        /* include basic kernel calls */
47
#define RSS_VM_BASIC_CALLS        0x8000        /* include basic vm calls */
48
#define RSS_NOMMAP_LU          0x10000  /* don't inherit mmapped regions */
49
#define RSS_DETACH             0x20000  /* detach on update/restart */
50
#define RSS_NORESTART          0x40000  /* don't restart */
51
#define RSS_FORCE_INIT_ST      0x80000  /* force state transfer at initialization time */
52
#define RSS_NO_BIN_EXP        0x100000  /* suppress binary exponential offset */
53

    
54
/* Common definitions. */
55
#define RS_NR_CONTROL                 8
56
#define RS_NR_PCI_DEVICE        32
57
#define RS_NR_PCI_CLASS                 4
58
#define RS_MAX_LABEL_LEN        16
59
#define RS_MAX_IPCF_STR_LEN         (RS_MAX_LABEL_LEN+12)
60
#define RS_MAX_IPC_FILTERS         4
61

    
62
/* CPU special values */
63
#define RS_CPU_DEFAULT                -1 /* use the default cpu or do not change the current one */
64
#define RS_CPU_BSP                -2 /* use the bootstrap cpu */
65

    
66
/* Labels are copied over separately. */
67
struct rss_label
68
{
69
        char *l_addr;
70
        size_t l_len;
71
};
72

    
73
struct rs_pci_id {
74
        u16_t vid;
75
        u16_t did;
76
        u16_t sub_vid;
77
        u16_t sub_did;
78
};
79
#define NO_SUB_VID        0xffff
80
#define NO_SUB_DID        0xffff
81

    
82
struct rs_pci_class {
83
        u32_t pciclass;
84
        u32_t mask;
85
};
86

    
87
/* State-related data. */
88
struct rs_ipc_filter_el {
89
        int flags;
90
        char m_label[RS_MAX_LABEL_LEN];
91
        int m_type;
92
};
93
struct rs_state_data {
94
        size_t size;
95
        void *ipcf_els;
96
        size_t ipcf_els_size;
97
        int ipcf_els_gid;
98
        void *eval_addr;
99
        size_t eval_len;
100
        int eval_gid;
101
};
102

    
103
/* Arguments needed to start a new driver or server */
104
struct rs_start
105
{
106
        unsigned rss_flags;
107
        char *rss_cmd;
108
        size_t rss_cmdlen;
109
        uid_t rss_uid;
110
        endpoint_t rss_sigmgr;
111
        endpoint_t rss_scheduler;
112
        int rss_priority;
113
        int rss_quantum;
114
        int rss_major;
115
        long rss_period;
116
        char *rss_script;
117
        size_t rss_scriptlen;
118
        long rss_asr_count;
119
        long rss_restarts;
120
        long rss_heap_prealloc_bytes;
121
        long rss_map_prealloc_bytes;
122
        int rss_nr_irq;
123
        int rss_irq[RSS_NR_IRQ];
124
        int rss_nr_io;
125
        struct { unsigned base; unsigned len; } rss_io[RSS_NR_IO];
126
        int rss_nr_pci_id;
127
        struct rs_pci_id rss_pci_id[RS_NR_PCI_DEVICE];
128
        int rss_nr_pci_class;
129
        struct rs_pci_class rss_pci_class[RS_NR_PCI_CLASS];
130
        bitchunk_t rss_system[SYS_CALL_MASK_SIZE];
131
        struct rss_label rss_label;
132
        struct rss_label rss_trg_label;
133
        char *rss_ipc;
134
        size_t rss_ipclen;
135
        bitchunk_t rss_vm[VM_CALL_MASK_SIZE];
136
        int rss_nr_control;
137
        struct rss_label rss_control[RS_NR_CONTROL];
138
        struct rs_state_data rss_state_data;
139
        int devman_id;
140
        char *rss_progname;
141
        size_t rss_prognamelen;
142
        int rss_nr_domain;
143
        int rss_domain[NR_DOMAIN];
144
        /*
145
         * SMP specific data
146
         *
147
         * must be at the end of the structure for binary compatibility with
148
         * non-smp sysytems
149
         */
150
        int rss_cpu;
151
};
152

    
153
/* ACL information for access to PCI devices */
154
struct rs_pci
155
{
156
        char rsp_label[RS_MAX_LABEL_LEN];
157
        int rsp_endpoint;
158
        int rsp_nr_device;
159
        struct rs_pci_id rsp_device[RS_NR_PCI_DEVICE];
160
        int rsp_nr_class;
161
        struct rs_pci_class rsp_class[RS_NR_PCI_CLASS];
162
};
163

    
164
/* Definition of a public entry of the system process table. */
165
struct rprocpub {
166
  short in_use;                   /* set when the entry is in use */
167
  unsigned sys_flags;                   /* sys flags */
168
  endpoint_t endpoint;                  /* process endpoint number */
169
  endpoint_t old_endpoint;          /* old instance endpoint number (for VM, when updating) */
170
  endpoint_t new_endpoint;          /* new instance endpoint number (for VM, when updating) */
171

    
172
  devmajor_t dev_nr;                  /* major device number or NO_DEV */
173
  int nr_domain;                  /* number of socket driver domains */
174
  int domain[NR_DOMAIN];          /* set of socket driver domains */
175

    
176
  char label[RS_MAX_LABEL_LEN];          /* label of this service */
177
  char proc_name[RS_MAX_LABEL_LEN]; /* process name of this service */
178

    
179
  bitchunk_t vm_call_mask[VM_CALL_MASK_SIZE]; /* vm call mask */
180

    
181
  struct rs_pci pci_acl;          /* pci acl */
182
  int devman_id;
183
};
184

    
185
/* Return whether the given boot process is a user process, as opposed to a
186
 * system process. Only usable by core services during SEF initialization.
187
 */
188
#define IS_RPUB_BOOT_USR(rpub) ((rpub)->endpoint == INIT_PROC_NR)
189

    
190
/* Sys flag values. */
191
#define SF_CORE_SRV     0x001    /* set for core system services */
192
#define SF_SYNCH_BOOT   0X002    /* set when process needs synch boot init */
193
#define SF_NEED_COPY    0x004    /* set when process needs copy to start */
194
#define SF_USE_COPY     0x008    /* set when process has a copy in memory */
195
#define SF_NEED_REPL    0x010    /* set when process needs replica to start */
196
#define SF_USE_REPL     0x020    /* set when process has a replica */
197
#define SF_VM_UPDATE    0x040    /* set when process needs vm update */
198
#define SF_VM_ROLLBACK  0x080    /* set when vm update is a rollback */
199
#define SF_VM_NOMMAP    0x100    /* set when vm update ignores mmapped regions */
200
#define SF_USE_SCRIPT   0x200    /* set when process has restart script */
201
#define SF_DET_RESTART  0x400    /* set when process detaches on restart */
202
#define SF_NORESTART    0x800    /* set when process should not be restarted */
203
#define SF_NO_BIN_EXP  0x1000    /* set when we should ignore binary exp. offset */
204

    
205
#define IMM_SF          \
206
    (SF_NO_BIN_EXP | SF_CORE_SRV | SF_SYNCH_BOOT | SF_NEED_COPY | SF_NEED_REPL) /* immutable */
207

    
208
int minix_rs_lookup(const char *name, endpoint_t *value);
209

    
210
#endif