Dear Hackers,
I've been studying the descriptions of IPC in the L4 Reference Manual (x86) and the L4 User Manual (MIPS) and would be grateful if someone could confirm to me that I've correctly understood some points which are not explicitly stated in those manuals. Here's are my hypotheses/deductions; please tell me if I'm right or wrong!
(1) Both the "send message descriptor" and the "receive message descriptor" allow in-line data, strings and fpages to be transmitted in both directions. In fact, the names are confusing and they might better be referred to as "client message descriptor" and "server message descriptor" as the only differences between them relate to the way the other party is addressed - plus one little optimisation for the case where a "receive message descriptor" wants to receive just an fpage.
(2) If you want to transmit some data from thread S to thread T, one way of doing it is to get thread S to do a SEND operation and thread T to do a RECEIVE FROM operation, but you could equally well get thread S to do a RECEIVE FROM and thread T to do a SEND, as the "RECEIVE FROM" and "SEND" IPC types have nothing to do with "receive" and "send", really.
(3) When you do a CALL operation, specifying both a "send message descriptor" and a "receive message descriptor" in the same system call, in most cases you probably only want to send data with the former and only receive data with the latter. Since both descriptors have space for both directions, you can use the same message descriptor as both send message descriptor and receive message descriptor, if you want. But you don't have to.
Edmund