The Pedigree Project 0.1
process-memory-contract-test/contract.h
1#ifndef PROCESS_MEMORY_CONTRACT_H
2#define PROCESS_MEMORY_CONTRACT_H
3
4#include <errno.h>
5#include <stdint.h>
6#include <stdio.h>
7
8#include <sys/types.h>
9#include <sys/uio.h>
10
11#define PM_APP "/applications/process-memory-contract-test"
12#define CHECK(condition) \
13 do { \
14 if (!(condition)) { \
15 fprintf(stderr, "%s:%d: %s (errno=%d)\n", __FILE__, __LINE__, #condition, errno); \
16 failed = 1; \
17 goto out; \
18 } \
19 } while (0)
20
21struct pm_peer {
22 pid_t pid;
23 int command, report;
24};
25#define PM_PEER_INITIALIZER {.pid = -1, .command = -1, .report = -1}
26
27extern size_t pm_page;
28int64_t pm_now(void);
29int pm_reap(pid_t pid, int milliseconds);
30int pm_read(int fd, void* buffer, size_t length);
31int pm_write(int fd, const void* buffer, size_t length);
32int pm_send(int fd, char command);
33int pm_receive(int fd, char command);
34int pm_spawn(struct pm_peer* peer, int (*body)(int, int, void*), void* argument);
35int pm_join(struct pm_peer* peer);
36void pm_cleanup(struct pm_peer* peer);
37int pm_isolate(int (*body)(void));
38ssize_t pm_copy(pid_t pid, void* local, const void* remote, size_t length, int write_remote);
39int pm_dumpable(int value);
40int pm_copies(void);
41int pm_mappings(void);
42int pm_lifetime(void);
43int pm_credentials(void);
44int pm_filesystem(void);
45int pm_exec(int argc, char** argv);
46int pm_fs_exec(int argc, char** argv);
47
48#endif