Beispiel #1
0
/* Making a pair of ConnectedSockets is relatively convoluted, since
   we have to create them via a BoundSocket/SocketAddress pair. */
void make_socket_pair(int pair[2]) {
  int bound_pair[2];
  int rc;

  rc = imc_makeboundsock(bound_pair);
  assert(rc == 0);

  connect_and_accept(bound_pair[0], bound_pair[1], &pair[0], &pair[1]);
  checked_close(bound_pair[0]);
  checked_close(bound_pair[1]);
}
Beispiel #2
0
void test_imc_connect_with_no_acceptor(void) {
  int bound_pair[2];
  int rc;
  rc = imc_makeboundsock(bound_pair);
  assert(rc == 0);

  printf("Test imc_connect() when BoundSocket has been dropped...\n");
  checked_close(bound_pair[0]);

  rc = imc_connect(bound_pair[1]);
  assert(rc == -1);
  assert(errno == EIO);
  checked_close(bound_pair[1]);
}
Beispiel #3
0
void test_imc_accept_end_of_stream(void) {
  int bound_pair[2];
  int rc;
  rc = imc_makeboundsock(bound_pair);
  assert(rc == 0);

  printf("Test imc_accept() when SocketAddress has been dropped...\n");
  checked_close(bound_pair[1]);

  rc = imc_accept(bound_pair[0]);
  assert(rc == -1);
  assert(errno == EIO);
  checked_close(bound_pair[0]);
}
Beispiel #4
0
void test_socket_transfer(void) {
  int sock_pair[2];
  int bound_pair[2];
  int rc;
  int fd1;
  int fd2;
  char buf[100];
  int received_fds[8];
  int received_fd_count;
  int received_bytes;

  make_socket_pair(sock_pair);

  printf("Test data-only messages...\n");
  check_send_and_receive_data(sock_pair[0], sock_pair[1]);
  check_send_and_receive_data(sock_pair[1], sock_pair[0]);

  rc = imc_makeboundsock(bound_pair);
  assert(rc == 0);

  printf("Test sending a BoundSocket (this is rejected)...\n");
  rc = send_message(sock_pair[0], test_message, strlen(test_message),
                    &bound_pair[0], 1);
  assert(rc == -1);
  assert(errno == EIO);

  printf("Test sending a ConnectedSocket (this is rejected)...\n");
  send_message(sock_pair[0], test_message, strlen(test_message),
               &sock_pair[0], 1);
  assert(rc == -1);
  assert(errno == EIO);

  printf("Test sending a SocketAddress...\n");
  rc = send_message(sock_pair[0], test_message, strlen(test_message),
                    &bound_pair[1], 1);
  assert(rc == strlen(test_message));

  printf("Check that we can receive the SocketAddress we sent...\n");
  received_bytes = receive_message(sock_pair[1], buf, sizeof(buf),
                                   received_fds, 8, &received_fd_count);
  assert(received_bytes == strlen(test_message));
  assert(memcmp(buf, test_message, strlen(test_message)) == 0);
  assert(received_fd_count == 1);

  printf("Check that the received SocketAddress works...\n");
  connect_and_accept(bound_pair[0], received_fds[0], &fd1, &fd2);
  checked_close(received_fds[0]);
  check_send_and_receive_data(fd1, fd2);
  check_send_and_receive_data(fd2, fd1);
  checked_close(fd1);
  checked_close(fd2);

  checked_close(sock_pair[0]);
  checked_close(sock_pair[1]);
  checked_close(bound_pair[0]);
  checked_close(bound_pair[1]);
}
Beispiel #5
0
void test_sending_and_receiving_max_fd_count(void) {
  int sock_pair[2];
  int sent;
  int received;
  char data_buf[10];
  int fds_send_buf[NACL_ABI_IMC_DESC_MAX + 1];
  int fds_receive_buf[NACL_ABI_IMC_DESC_MAX];
  int fds_got;
  int i;

  printf("Test sending and receiving many FDs...\n");
  make_socket_pair(sock_pair);

  /* Test exactly the maximum. */
  for (i = 0; i < NACL_ABI_IMC_DESC_MAX; i++) {
    fds_send_buf[i] = kKnownInvalidDescNumber;
  }
  sent = send_message(sock_pair[0], "", 0, fds_send_buf, NACL_ABI_IMC_DESC_MAX);
  assert(sent == 0);
  received = receive_message(sock_pair[1], data_buf, sizeof(data_buf),
                             fds_receive_buf, NACL_ABI_IMC_DESC_MAX, &fds_got);
  assert(received == 0);
  assert(fds_got == NACL_ABI_IMC_DESC_MAX);
  for (i = 0; i < NACL_ABI_IMC_DESC_MAX; i++) {
    assert(fds_receive_buf[i] == kKnownInvalidDescNumber);
  }

  /* Test above the maximum. */
  for (i = 0; i < NACL_ABI_IMC_DESC_MAX + 1; i++) {
    fds_send_buf[i] = kKnownInvalidDescNumber;
  }
  sent = send_message(sock_pair[0], "", 0, fds_send_buf,
                      NACL_ABI_IMC_DESC_MAX + 1);
  assert(sent == -1);
  assert(errno == EINVAL);

  checked_close(sock_pair[0]);
  checked_close(sock_pair[1]);
}
Beispiel #6
0
void *
consume(void *arg_)
{
	struct consume_arg *arg = arg_;
	struct queue *q = arg->q;
	struct kmp_table *t = arg->t;

	char buffer[BUFFER_SIZE];

	for (;;) {
		char *path = dequeue(q);

		int pos = 0;
		int file;
		int bytes_read = 0;

		struct kmp_result r;

		if (!path) {
			return (NULL);
		}

		file = checked_open(path, O_RDONLY);
		if (file == -1) {
			fprintf_ts(stderr, "Cannot open %s\n", path);

			free(path);
			continue;
		}

		while ((bytes_read =
		    checked_read(file, buffer, BUFFER_SIZE)) > 0) {
			int i;
			for (i = 0; i < bytes_read; i++) {
				advance(t, &r, buffer[i], pos);
				pos = r.pos;
				if (r.match) {
					fprintf_ts(stdout, "%s\n", path);
					break;
				}
			}

			if (r.match) {
				break;
			}
		}

		free(path);
		checked_close(file);
	}
}
Beispiel #7
0
void test_special_invalid_fd(void) {
  int sock_pair[2];
  int sent;
  int received;
  int fd_to_send;
  char data_buf[10];
  int fds_buf[NACL_ABI_IMC_DESC_MAX];
  int fds_got;

  printf("Test sending and receiving the special 'invalid' descriptor...\n");
  make_socket_pair(sock_pair);

  fd_to_send = kKnownInvalidDescNumber;
  sent = send_message(sock_pair[0], "", 0, &fd_to_send, 1);
  assert(sent == 0);
  received = receive_message(sock_pair[1], data_buf, sizeof(data_buf),
                             fds_buf, NACL_ABI_IMC_DESC_MAX, &fds_got);
  assert(received == 0);
  assert(fds_got == 1);
  assert(fds_buf[0] == kKnownInvalidDescNumber);

  /* Other invalid FD numbers are not accepted. */
  fd_to_send = 1234;
  sent = send_message(sock_pair[0], "", 0, &fd_to_send, 1);
  assert(sent == -1);
  assert(errno == EBADF);

  /* We don't accept other negative numbers. */
  fd_to_send = -2;
  sent = send_message(sock_pair[0], "", 0, &fd_to_send, 1);
  assert(sent == -1);
  assert(errno == EBADF);

  checked_close(sock_pair[0]);
  checked_close(sock_pair[1]);
}
int main(int argc, char *argv[]) {
	int nr = 2;
	char c;
	int mapflag = MAP_SHARED;
	unsigned long memsize = 0;
	int hugetlbfd1;
	char *phugetlbfile1;
	unsigned long address = ADDR_INPUT;
	char *filename;

	while ((c = getopt(argc, argv, "h:f:n:v")) != -1) {
		switch(c) {
                case 'h':
                        HPS = strtoul(optarg, NULL, 10) * 1024;
                        break;
		case 'f':
			filename = optarg;
			break;
		case 'n':
			nr = strtoul(optarg, NULL, 10);
			break;
		case 'v':
			verbose = 1;
			break;
		}
	}

	if (!filename) {
		errmsg("need to specify file path with -f\n");
	}
	
	validate_hugepage_size(HPS);
	memsize = nr * HPS;
	signal(SIGUSR1, sig_handle);

	Dprintf("memsize = 0x%x, hpsize = %d, mapflag = 0x%x\n", memsize, HPS, mapflag);
	hugetlbfd1 = checked_open(filename, O_CREAT|O_RDWR);
	phugetlbfile1 = checked_mmap((void *)address, memsize, MMAP_PROT, mapflag,
				     hugetlbfd1, 0);
	Dprintf("p %p\n", phugetlbfile1);
	
	memset(phugetlbfile1, 'a', memsize);
	munmap(phugetlbfile1, memsize);
	checked_close(hugetlbfd1);
	pprintf("%s exit\n", argv[0]);
	exit(EXIT_SUCCESS);
}