Ejemplo n.º 1
0
Archivo: Test_ort.c Proyecto: 0x42/fire
TEST(ort, RtCreateFile1)
{
	TEST_ASSERT_EQUAL(0, rt_put(rt, "128", "192.168.1.007:1"));
	TEST_ASSERT_EQUAL(0, rt_put(rt, "129", "192.168.1.203:1"));
	TEST_ASSERT_EQUAL(0, rt_put(rt, "012", "192.168.1.007:2"));
	TEST_ASSERT_EQUAL(0, rt_put(rt, "013", "192.168.1.007:2"));
	TEST_ASSERT_EQUAL(0, rt_put(rt, "014", "192.168.1.203:2"));
	TEST_ASSERT_EQUAL(0, rt_put(rt, "015", "192.168.1.203:2"));
	
	rt_remove(rt, "014");
	rt_remove(rt, "129");
	
	TEST_ASSERT_EQUAL(0, rt_put(rt, "013", "192.168.1.007:1"));
	
	TEST_ASSERT_EQUAL(0, rt_put(rt, "134", "192.168.1.203:1"));
	TEST_ASSERT_EQUAL(0, rt_put(rt, "024", "192.168.1.007:2"));
	TEST_ASSERT_EQUAL(0, rt_put(rt, "025", "192.168.1.203:2"));
	
	rt_save(rt, "rt_glob1");
}
Ejemplo n.º 2
0
/* ARGSUSED */
void
rde_dispatch_parent(int fd, short event, void *bula)
{
	struct imsg		 imsg;
	struct rt_node		*rt;
	struct kroute		 kr;
	struct imsgev		*iev = bula;
	struct imsgbuf		*ibuf = &iev->ibuf;
	ssize_t			 n;
	int			 shut = 0;

	if (event & EV_READ) {
		if ((n = imsg_read(ibuf)) == -1)
			fatal("imsg_read error");
		if (n == 0)	/* connection closed */
			shut = 1;
	}
	if (event & EV_WRITE) {
		if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN)
			fatal("msgbuf_write");
	}

	for (;;) {
		if ((n = imsg_get(ibuf, &imsg)) == -1)
			fatal("rde_dispatch_parent: imsg_read error");
		if (n == 0)
			break;

		switch (imsg.hdr.type) {
		case IMSG_NETWORK_ADD:
			if (imsg.hdr.len - IMSG_HEADER_SIZE != sizeof(kr)) {
				log_warnx("rde_dispatch: wrong imsg len");
				break;
			}

			memcpy(&kr, imsg.data, sizeof(kr));

			rt = rt_new_kr(&kr);
			rt_insert(rt);
			break;
		case IMSG_NETWORK_DEL:
			if (imsg.hdr.len - IMSG_HEADER_SIZE != sizeof(kr)) {
				log_warnx("rde_dispatch: wrong imsg len");
				break;
			}
			memcpy(&kr, imsg.data, sizeof(kr));

			if ((rt = rt_find(kr.prefix.s_addr,
			    kr.netmask.s_addr)) != NULL)
				rt_remove(rt);
			break;
		default:
			log_debug("rde_dispatch_parent: unexpected imsg %d",
			    imsg.hdr.type);
			break;
		}
		imsg_free(&imsg);
	}
	if (!shut)
		imsg_event_add(iev);
	else {
		/* this pipe is dead, so remove the event handler */
		event_del(&iev->ev);
		event_loopexit(NULL);
	}
}