diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2013-11-21 16:50:49 +0100 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-10-01 09:03:51 +0200 |
commit | d565bf2f784ce1203e77306d05eade03933bc523 (patch) | |
tree | 1c30bed601834acd886b9dc4abcecb706349d8b6 /ipc/ipc_object.h | |
parent | 3a0fae39873c9c7d73dc978888e45b87ad27d44e (diff) | |
download | gnumach-d565bf2f784ce1203e77306d05eade03933bc523.tar.gz gnumach-d565bf2f784ce1203e77306d05eade03933bc523.tar.bz2 gnumach-d565bf2f784ce1203e77306d05eade03933bc523.zip |
ipc: add protected payload
Add a field ip_protected_payload and a flag ip_has_protected_payload
to struct ipc_port.
Clear the protected payload when a receive port is moved from one ipc
space to another. This is done to retain the old behavior of
mach_msg, so that a port name is sent in the msgh_local_port field.
If the new owner of that receive right wishes to use the protected
payload mechanism, it has to be explicitly set again.
* ipc/ipc_port.h (struct ipc_port): Add field ip_protected_payload.
(ipc_port_set_protected_payload): Add function declaration.
(ipc_port_clear_protected_payload): Likewise.
(ipc_port_flag_protected_payload): Add accessor for the protected
payload flag.
(ipc_port_flag_protected_payload_set): Likewise.
(ipc_port_flag_protected_payload_clear): Likewise.
* ipc/ipc_port.c (ipc_port_init): Initialize protected payload.
(ipc_port_print): Print protected_payload.
(ipc_port_set_protected_payload): New function.
(ipc_port_clear_protected_payload): Likewise.
(ipc_port_destroy): Clear the payload when moving a receive port.
* ipc/ipc_right.c (ipc_right_copyin): Likewise.
(ipc_right_copyout): Likewise.
* ipc/ipc_object.c (ipc_object_copyin_from_kernel): Likewise.
* ipc/ipc_object.h (IO_BITS_PROTECTED_PAYLOAD): New bitmask.
(IO_BITS_OTYPE): Adjust accordingly.
Diffstat (limited to 'ipc/ipc_object.h')
-rw-r--r-- | ipc/ipc_object.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/ipc/ipc_object.h b/ipc/ipc_object.h index adf5bca4..b83bb5a6 100644 --- a/ipc/ipc_object.h +++ b/ipc/ipc_object.h @@ -57,7 +57,9 @@ typedef struct ipc_object { #define IO_VALID(io) (((io) != IO_NULL) && ((io) != IO_DEAD)) #define IO_BITS_KOTYPE 0x0000ffff /* used by the object */ -#define IO_BITS_OTYPE 0x7fff0000 /* determines a cache */ +#define IO_BITS_OTYPE 0x3fff0000 /* determines a cache */ +/* The following masks are used to store attributes of ipc ports. */ +#define IO_BITS_PROTECTED_PAYLOAD 0x40000000 /* pp set? */ #define IO_BITS_ACTIVE 0x80000000U /* is object alive? */ #define io_active(io) ((int)(io)->io_bits < 0) /* hack */ |