// Test Conversation between parent and child environment // Contributed by Varun Agrawal at Stony Brook #include const char *str1 = "hello child environment! how are you?"; const char *str2 = "hello parent environment! I'm good."; #define TEMP_ADDR ((char*)0xa00000) #define TEMP_ADDR_CHILD ((char*)0xb00000) void umain(int argc, char **argv) { envid_t who; if ((who = fork()) == 0) { // Child ipc_recv(&who, TEMP_ADDR_CHILD, 0); cprintf("%x got message: %s\n", who, TEMP_ADDR_CHILD); if (strncmp(TEMP_ADDR_CHILD, str1, strlen(str1)) == 0) cprintf("child received correct message\n"); memcpy(TEMP_ADDR_CHILD, str2, strlen(str2) + 1); ipc_send(who, 0, TEMP_ADDR_CHILD, PTE_P | PTE_W | PTE_U); return; } // Parent sys_page_alloc(thisenv->env_id, TEMP_ADDR, PTE_P | PTE_W | PTE_U); memcpy(TEMP_ADDR, str1, strlen(str1) + 1); ipc_send(who, 0, TEMP_ADDR, PTE_P | PTE_W | PTE_U); ipc_recv(&who, TEMP_ADDR, 0); cprintf("%x got message: %s\n", who, TEMP_ADDR); if (strncmp(TEMP_ADDR, str2, strlen(str2)) == 0) cprintf("parent received correct message\n"); return; }