Exemplo n.º 1
0
int main(int argc, char* argv[]) {
  (void)argc;
  (void)argv;
  struct coresrv_init *data = (struct coresrv_init *)_libc_init_get()->data;
  syscall_log("coresrv", "main", "initializing..");

  struct timeval time;
  gettimeofday(&time, 0);
  char msg[128];
  sprintf(msg, "Current UNIX time is %llu", (unsigned long long)time.tv_sec);
  syscall_log("coresrc", "main", msg);

  broker_init();

  vfs_init();
  vfs_t vfs;
  VFS_BIND(&vfs);
  syscall_log("coresrv", "main", "created VFS");

  // devfs needs to be bound first so that we can allocate device numbers.
  devfs_init();
  devfs_op_t devfs_op;
  DEVFS_BIND(&devfs_op);

  initfs_init();
  initfs_op_t initfs_op;
  INITFS_BIND(&initfs_op);
  vfs_fs_t initfs;
  dev_t init_dev = devfs_op.alloc_dev();
  if (initfs_op.create(data->initrd_base, data->initrd_size, init_dev, &initfs)) exit(-1);
  if (vfs.mount("/", &initfs)) exit(-1);
  syscall_log("coresrv", "main", "mounted initfs at /");

  vfs_fs_t devfs;
  if (devfs_op.create(&devfs)) exit(-1);
  if (vfs.mount("/dev", &devfs)) exit(-1);
  syscall_log("coresrv", "main", "mounted devfs at /dev");

  pci_init();
  pci_op_t pci_op;
  PCI_BIND(&pci_op);
  vfs_node_t pci;
  if (pci_op.create(&pci)) exit(-1);
  if (devfs_op.add_dev(&devfs, "pci", &pci, &pci.stat.st_rdev)) exit(-1);
  syscall_log("coresrv", "main", "added /dev/pci");

  console_init();
  console_op_t console_op;
  CONSOLE_BIND(&console_op);
  vfs_node_t console;
  if (console_op.create(&console)) exit(-1);
  if (devfs_op.add_dev(&devfs, "console", &console, &console.stat.st_rdev)) exit(-1);
  syscall_log("coresrv", "main", "added /dev/console");

  ramdisk_init();
  ramdisk_op_t ramdisk_op;
  RAMDISK_BIND(&ramdisk_op);
  vfs_node_t ramdisk;
  if (ramdisk_op.create(0x200000, &ramdisk)) exit(-1);
  if (devfs_op.add_dev(&devfs, "ramdisk$", &ramdisk, &ramdisk.stat.st_rdev)) exit(-1);
  syscall_log("coresrv", "main", "added /dev/ramdisk");

  tmpfs_init();
  tmpfs_op_t tmpfs_op;
  TMPFS_BIND(&tmpfs_op);
  vfs_fs_t tmpfs;
  dev_t tmp_dev = devfs_op.alloc_dev();
  if (tmpfs_op.create(0x200000, tmp_dev, &tmpfs)) exit(-1);
  if (vfs.mount("/tmp", &tmpfs)) exit(-1);
  syscall_log("coresrv", "main", "mounted tmpfs at /tmp");
  
  fat16_init();
  fat16_op_t fat16_op;
  FAT16_BIND(&fat16_op);
  vfs_fs_t fatfs;
  if (fat16_op.create(&ramdisk, &fatfs)) exit(-1);
  if (vfs.mount("/home", &fatfs)) exit(-1);
  syscall_log("coresrv", "main", "mounted fat16 at /home");

  /*
  pid_t init = fork();
  if (!init) {
    execl(argv[1], argv[1], (void*)0);
  } else while (wait(0) == -1);
  */

  ps2_init();

  // TODO: funny way to just sleep
  syscall_log("corsrv", "main", "sleeping for good.");
  syscall_set_signal_mask(~0ull);
  syscall_wait_signal(1<<SIGINT);
}
Exemplo n.º 2
0
int main()
	{
	BROKER_TEST(broker_init(0) == 0);

	broker_endpoint* node0 = broker_endpoint_create("node0");
	broker_string* topic_a = broker_string_create("topic_a");
	broker_string* topic_b = broker_string_create("topic_b");
	broker_string* topic_c = broker_string_create("topic_c");
	broker_message_queue* pq0a = broker_message_queue_create(topic_a, node0);
	broker_message_queue* pq0c = broker_message_queue_create(topic_c, node0);

	if ( ! broker_endpoint_listen(node0, 9999, "127.0.0.1", 1) )
		{
		fprintf(stderr, "%s\n", broker_endpoint_last_error(node0));
		return 1;
		}

	broker_endpoint* node1 = broker_endpoint_create("node1");
	broker_message_queue* pq1b = broker_message_queue_create(topic_b, node1);
	broker_message_queue* pq1c = broker_message_queue_create(topic_c, node1);

	broker_endpoint_peer_remotely(node1, "127.0.0.1", 9999, .5);

	broker_deque_of_outgoing_connection_status* d =
	        broker_outgoing_connection_status_queue_need_pop(
	            broker_endpoint_outgoing_connection_status(node1));

	broker_outgoing_connection_status_tag t =
	        broker_outgoing_connection_status_get(
	            broker_deque_of_outgoing_connection_status_at(d, 0));

	if ( t != broker_outgoing_connection_status_tag_established )
		{
		BROKER_TEST(0);
		return 1;
		}

	broker_string* str = broker_string_create("");
	broker_message* msg = broker_vector_create();
	BROKER_TEST(broker_vector_insert(msg, broker_data_from_string(str), 0));
	BROKER_TEST(broker_vector_insert(msg, broker_data_from_string(str), 1));
	broker_set* pq0a_expected = broker_set_create();
	broker_set* pq0c_expected = broker_set_create();
	broker_set* pq1b_expected = broker_set_create();
	broker_set* pq1c_expected = broker_set_create();

	test_message msgs[5];
	int off = 0;
	broker_data* msg_data;

	msg_data = make_test_msg(node0, "0a", "hi", topic_a, msg, msgs + off++);
	BROKER_TEST(broker_set_insert(pq0a_expected, msg_data));
	msg_data = make_test_msg(node0, "0c", "lazy", topic_c, msg, msgs + off++);
	BROKER_TEST(broker_set_insert(pq0c_expected, msg_data));
	BROKER_TEST(broker_set_insert(pq1c_expected, msg_data));
	msg_data = make_test_msg(node1, "1b", "hello", topic_b, msg, msgs + off++);
	BROKER_TEST(broker_set_insert(pq1b_expected, msg_data));
	msg_data = make_test_msg(node1, "1c", "well met", topic_c, msg, msgs + off++);
	BROKER_TEST(broker_set_insert(pq0c_expected, msg_data));
	BROKER_TEST(broker_set_insert(pq1c_expected, msg_data));
	msg_data = make_test_msg(node0, "0b", "bye", topic_b, msg, msgs + off++);
	BROKER_TEST(broker_set_insert(pq1b_expected, msg_data));
	int i;

	for ( i = 0; i < sizeof(msgs) / sizeof(test_message); ++i )
		BROKER_TEST(broker_endpoint_send(msgs[i].node, msgs[i].topic, msgs[i].msg));

	BROKER_TEST(check_contents_poll(pq0a, pq0a_expected));
	BROKER_TEST(check_contents_poll(pq0c, pq0c_expected));
	BROKER_TEST(check_contents_poll(pq1b, pq1b_expected));
	BROKER_TEST(check_contents_poll(pq1c, pq1c_expected));

	return BROKER_TEST_RESULT();
	}