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; }
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; }
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"); }