If there is no DNS available on system start the capwap-wtp will stop while evaluating the configuration. I fixed that by checking if the address was yet translated on every address access. If not a DNS request is started before continuing.
This commit is contained in:
@ -49,9 +49,18 @@ void wtp_dfa_state_discovery_timeout(struct capwap_timeout* timeout, unsigned lo
|
||||
|
||||
/* Check for preferred AC */
|
||||
for (j = 0; j < ((indexpreferred != -1) ? indexpreferred : g_wtp.acpreferedarray->count); j++) {
|
||||
union sockaddr_capwap* acpreferredaddr = (union sockaddr_capwap*)capwap_array_get_item_pointer(g_wtp.acpreferedarray, j);
|
||||
|
||||
if (!capwap_compare_ip(acpreferredaddr, &checkaddr)) {
|
||||
struct addr_capwap* acpreferredaddr = (struct addr_capwap*)capwap_array_get_item_pointer(g_wtp.acpreferedarray, j);
|
||||
if (!acpreferredaddr->resolved) {
|
||||
if (capwap_address_from_string(acpreferredaddr->fqdn, &acpreferredaddr->socket)) {
|
||||
if (!CAPWAP_GET_NETWORK_PORT(&acpreferredaddr->socket)) {
|
||||
CAPWAP_SET_NETWORK_PORT(&acpreferredaddr->socket, CAPWAP_CONTROL_PORT);
|
||||
}
|
||||
acpreferredaddr->resolved = 1;
|
||||
} else {
|
||||
capwap_logging_info("%s:%d Could not resolve application.acprefered.host %s", __FILE__, __LINE__, acpreferredaddr->fqdn);
|
||||
}
|
||||
}
|
||||
if (!capwap_compare_ip(&acpreferredaddr->socket, &checkaddr)) {
|
||||
indexpreferred = j;
|
||||
memcpy(&peeraddr, &checkaddr, sizeof(union sockaddr_capwap));
|
||||
break;
|
||||
@ -79,9 +88,18 @@ void wtp_dfa_state_discovery_timeout(struct capwap_timeout* timeout, unsigned lo
|
||||
|
||||
/* Check for preferred AC */
|
||||
for (j = 0; j < ((indexpreferred != -1) ? indexpreferred : g_wtp.acpreferedarray->count); j++) {
|
||||
union sockaddr_capwap* acpreferredaddr = (union sockaddr_capwap*)capwap_array_get_item_pointer(g_wtp.acpreferedarray, j);
|
||||
|
||||
if (!capwap_compare_ip(acpreferredaddr, &checkaddr)) {
|
||||
struct addr_capwap* acpreferredaddr = (struct addr_capwap*)capwap_array_get_item_pointer(g_wtp.acpreferedarray, j);
|
||||
if (!acpreferredaddr->resolved) {
|
||||
if (capwap_address_from_string(acpreferredaddr->fqdn, &acpreferredaddr->socket)) {
|
||||
if (!CAPWAP_GET_NETWORK_PORT(&acpreferredaddr->socket)) {
|
||||
CAPWAP_SET_NETWORK_PORT(&acpreferredaddr->socket, CAPWAP_CONTROL_PORT);
|
||||
}
|
||||
acpreferredaddr->resolved = 1;
|
||||
} else {
|
||||
capwap_logging_info("Could not resolve application.acprefered.host %s", acpreferredaddr->fqdn);
|
||||
}
|
||||
}
|
||||
if (!capwap_compare_ip(&acpreferredaddr->socket, &checkaddr)) {
|
||||
indexpreferred = j;
|
||||
memcpy(&peeraddr, &checkaddr, sizeof(union sockaddr_capwap));
|
||||
break;
|
||||
@ -183,8 +201,20 @@ void wtp_dfa_state_discovery_timeout(struct capwap_timeout* timeout, unsigned lo
|
||||
|
||||
/* Send discovery request to AC */
|
||||
for (i = 0; i < g_wtp.acdiscoveryarray->count; i++) {
|
||||
if (!capwap_sendto_fragmentpacket(g_wtp.net.socket, g_wtp.requestfragmentpacket, (union sockaddr_capwap*)capwap_array_get_item_pointer(g_wtp.acdiscoveryarray, i))) {
|
||||
capwap_logging_debug("Warning: error to send discovery request packet");
|
||||
struct addr_capwap* addr = capwap_array_get_item_pointer(g_wtp.acdiscoveryarray, i);
|
||||
if (!addr->resolved) {
|
||||
if (capwap_address_from_string(addr->fqdn, &addr->socket)) {
|
||||
if (!CAPWAP_GET_NETWORK_PORT(&addr->socket)) {
|
||||
CAPWAP_SET_NETWORK_PORT(&addr->socket, CAPWAP_CONTROL_PORT);
|
||||
}
|
||||
addr->resolved = 1;
|
||||
g_wtp.discoverytype.type = CAPWAP_DISCOVERYTYPE_TYPE_STATIC;
|
||||
} else {
|
||||
capwap_logging_info("%s:%d Could not resolve application.acdiscovery.host %s", __FILE__, __LINE__, addr->fqdn);
|
||||
}
|
||||
}
|
||||
if (!capwap_sendto_fragmentpacket(g_wtp.net.socket, g_wtp.requestfragmentpacket, &addr->socket)) {
|
||||
capwap_logging_info("Error to send discovery request packet");
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user