Ejemplo n.º 1
0
int 
lxl_dns_core_init(lxl_cycle_t *cycle)
{
	lxl_dns_pool = lxl_create_pool(LXL_DEFAULT_POOL_SIZE);
	if (lxl_dns_pool == NULL) {
		return -1;
	}

	lxl_dns_root_zone = lxl_palloc(lxl_dns_pool, sizeof(lxl_dns_zone_t));
	if (lxl_dns_root_zone == NULL) {
		return -1;
	}

	lxl_log_error(LXL_LOG_INFO, 0, "dns init zone hash");
	if (lxl_hash_init(&lxl_dns_hash, lxl_dns_pool, 1024000, lxl_hash_key) == -1) {
		lxl_log_error(LXL_LOG_ERROR, 0, "dns init hash failed");
		return -1;
	}

	lxl_list_init(&lxl_dns_root_zone->rrset_list);
	lxl_dns_root_zone->update_sec = lxl_current_sec;

	lxl_log_error(LXL_LOG_INFO, 0, "dns load named root path conf/named.root");
	lxl_dns_load_named_root("conf/named.root");

	lxl_log_error(LXL_LOG_INFO, 0, "dns add root zone");
	if (lxl_dns_zone_add(LXL_DNS_ROOT_LABEL, LXL_DNS_ROOT_LEN, lxl_dns_root_zone) == -1) {
		lxl_log_error(LXL_LOG_ERROR, 0, "dns add root zone failed");
		return -1;
	}

	return 0;
}
Ejemplo n.º 2
0
int 
lxl_dns_core_init(lxl_cycle_t *cycle)
{
	lxl_connection_t *c;

	lxl_dns_pool = lxl_create_pool(LXL_DEFAULT_POOL_SIZE);
	if (lxl_dns_pool == NULL) {
		return -1;
	}

	lxl_dns_root_zone = lxl_palloc(lxl_dns_pool, sizeof(lxl_dns_zone_t));
	if (lxl_dns_root_zone == NULL) {
		return -1;
	}

	lxl_log_error(LXL_LOG_INFO, 0, "dns init zone hash");
	if (lxl_hash_init(&lxl_dns_hash, lxl_dns_pool, 1024000, lxl_hash_key) == -1) {
		lxl_log_error(LXL_LOG_ERROR, 0, "dns init hash failed");
		return -1;
	}

	lxl_list_init(&lxl_dns_root_zone->rrset_list);
	lxl_dns_root_zone->update_sec = lxl_current_sec;

	lxl_log_error(LXL_LOG_INFO, 0, "dns load named root path conf/named.root");
	if (lxl_dns_load_named_root("conf/named.root") == -1) {
		lxl_log_error(LXL_LOG_ERROR, 0, "dns load named root path conf/named.root failed");
		return -1;
	}

	lxl_log_error(LXL_LOG_INFO, 0, "dns add root zone");
	if (lxl_dns_zone_add(LXL_DNS_ROOT_LABEL, LXL_DNS_ROOT_LEN, lxl_dns_root_zone) == -1) {
		lxl_log_error(LXL_LOG_ERROR, 0, "dns add root zone failed");
		return -1;
	}

	c = lxl_get_connection(-1);
	if (c == NULL) {
		return -1;
	}

	memset(&lxl_dns_event, 0x00, sizeof(lxl_event_t));
	lxl_dns_event.data = c;
	lxl_dns_event.handler = lxl_dns_data_rebuild_handler;
	lxl_add_timer(&lxl_dns_event, 86400*1000);

#if 0
	char *t;
	memcpy(t, "lxl coredump test", 1000);
#endif

	return 0;
}
Ejemplo n.º 3
0
void 
lxl_dns_data_rebuild(void)
{
	lxl_pool_t *new_pool;
	lxl_list_t *list1, *list2;
	lxl_dns_rr_t rr;
	lxl_dns_zone_t *old_zone, *new_zone;
	lxl_dns_rrset_t *rrset;
	lxl_dns_rdata_t *rdata;
	
	old_zone = lxl_dns_zone_find(LXL_DNS_ROOT_LABEL, LXL_DNS_ROOT_LEN);
	if (old_zone == NULL) {
		lxl_log_error(LXL_LOG_ERROR, 0, "dns data rebuild root not find");
		return;
	}

	lxl_log_error(LXL_LOG_INFO, 0, "dns data rebuild create new pool");
	new_pool = lxl_create_pool(LXL_DEFAULT_POOL_SIZE);
	if (new_pool == NULL) {
		lxl_log_error(LXL_LOG_ERROR, 0, "dns data rebuild create pool failed");
		return;
	}

	lxl_log_error(LXL_LOG_INFO, 0, "dns data rebuild init hash");
	if (lxl_hash_init(&lxl_dns_hash, new_pool, lxl_dns_hash.nelts, lxl_dns_hash.key) == -1) {
        lxl_log_error(LXL_LOG_ERROR, 0, "dns init hash failed");
        return;
    }

	new_zone = lxl_palloc(new_pool, sizeof(lxl_dns_zone_t));
	if (new_zone == NULL) {
		return;
	}

	lxl_list_init(&new_zone->rrset_list);
	new_zone->update_sec = lxl_current_sec;
	for (list1 = lxl_list_head(&old_zone->rrset_list); list1 != lxl_list_sentinel(&old_zone->rrset_list); list1 = lxl_list_next(list1)) {
		rrset = lxl_list_data(list1, lxl_dns_rrset_t, list);
		rr.type = rrset->type;
		rr.ttl = rrset->ttl;
		rr.nlen = rrset->nlen;
		rr.name = rrset->name;
		rr.soa_nlen = 0;
		rr.soa_flags = LXL_DNS_RRSET_NORMAL_TYPE;
		rr.expires_sec = lxl_current_sec + rrset->ttl;
		rr.update_flags = LXL_DNS_RR_NORMAL_TYPE;
		for (list2 = lxl_list_head(&rrset->rdata_list); list2 != lxl_list_sentinel(&rrset->rdata_list); list2 = lxl_list_next(list2)) {
			rdata = lxl_list_data(list2, lxl_dns_rdata_t, list);
			rr.rdlength = rdata->rdlength;
			rr.rdata = rdata->rdata;
			if (lxl_dns_rr_add(new_pool, new_zone, &rr) == -1) {
				lxl_log_error(LXL_LOG_ERROR, 0, "dns data rebuild add rr failed");
				return;
			}
		}
	}

	lxl_log_error(LXL_LOG_INFO, 0, "dns data rebuild add root zone");
	if (lxl_dns_zone_add(LXL_DNS_ROOT_LABEL, LXL_DNS_ROOT_LEN, new_zone) == -1) {
		lxl_log_error(LXL_LOG_ERROR, 0, "dns data rebuild add root zone failed");
		//return;
	}

	lxl_log_error(LXL_LOG_INFO, 0, "dns data rebuild destory pool");
	lxl_destroy_pool(lxl_dns_pool);
	lxl_dns_pool = new_pool;
	lxl_log_error(LXL_LOG_INFO, 0, "dns data rebuild succeed");
}