📄 dns_task.c.svn-base
字号:
/* restore Static Look Up Entry */
for (i = 0; i < MAX_STATIC_DNS_NUM; i++)
{
if (DNSR_DB_Get_Static_Table_Entry(&tmp, i))
{
dns_set_static_host(tmp.host_ip,tmp.host_name,sizeof(tmp.host_name),tmp.status,i);
}
else
break;
}
/* restore DNS Server config */
for (i = 0; i < MAX_NAME_SERVER; i++)
DNSR_DB_Get_Name_Server_IP(&dns_config_db.ip_addr[i], i);
/* restore DNSR Status */
DNSR_DB_Get_Lookup_Status(&dns_config_db.lookup_stat);
DNSR_DB_Get_Cache_Status(&dns_config_db.cache_stat);
DNSR_DB_Get_Status(&enable);
/* check the dnsr status */
if (enable)
{
if (!DNSR_Set_Status(TRUE))
{
DBG_L3_Printf("DNSR_Restore_Config: DNSR_Set_Status failed!!\n") ;
return;
}
}
}
/*------------------------------------------------------------------------
* void DNSR_Get_Max_TTL()
* Purpose: get DNSR default ttl
*
* Parameters:
* Input: status
* Output:
* returns :
*------------------------------------------------------------------------
*/
UI32_T DNSR_Get_Max_TTL(void)
{
return dns_config_db.max_ttl;
}
/*------------------------------------------------------------------------
* void DNSR_Set_Status()
* Purpose: set DNSR status
*
* Parameters:
* Input: status
* Output:
* returns :
*------------------------------------------------------------------------
*/
BOOLEAN_T DNSR_Set_Status(BOOLEAN_T enable)
{
OS_STATUS_T status;
if (dns_config_db.dns_stat == enable)
return TRUE;
if (enable)
{
dns_config_db.dns_stat = TRUE;
}
else
{
dns_config_db.dns_stat = FALSE;
/* clear query list */
dnsr_abort();
/* clear cache data */
dns_gc_nuke();
}
#if 0
status = LA3_OS_Set_Events(&dnsrEvent, (OS_STATUS_T) DNSR_EVT, OS_OR);
#else
status = OS_Event_Set(
dnsrEvent,
DNSR_EVT,
OS_OR);
#endif
if(status != OS_SUCCESS)
{
DBG_L3_Printf("LA3_DNSR_Terminate: LA3_OS_Set_Events failed!!\n") ;
}
return TRUE;
}
/*------------------------------------------------------------------------
* void DNSR_Get_Status()
* Purpose: get DNSR status
*
* Parameters:
* Input: status
* Output:
* returns :
*------------------------------------------------------------------------
*/
BOOLEAN_T DNSR_Get_Status(void)
{
return dns_config_db.dns_stat;
}
/*------------------------------------------------------------------------
* BOOLEAN_T DNSR_Set_Cache_Status()
* Purpose: set DNSR cache status
*
* Parameters:
* Input: status
* Output:
* returns :
*------------------------------------------------------------------------
*/
BOOLEAN_T DNSR_Set_Cache_Status(BOOLEAN_T enable)
{
if (dns_config_db.cache_stat == enable)
return TRUE;
dns_config_db.cache_stat = (UI8_T)enable;
/* if the cache is disabled, clear cache data */
if (!enable)
{
/* clear cache data */
dns_gc_nuke();
}
return TRUE;
}
/*------------------------------------------------------------------------
* void DNSR_Get_Cache_Status()
* Purpose: get DNSR status
*
* Parameters:
* Input: status
* Output:
* returns :
*------------------------------------------------------------------------
*/
BOOLEAN_T DNSR_Get_Cache_Status(void)
{
return dns_config_db.cache_stat;
}
/*------------------------------------------------------------------------
* BOOLEAN_T DNSR_Set_LookUp_Status()
* Purpose: set DNSR Look up status
*
* Parameters:
* Input: status
* Output:
* returns :
*------------------------------------------------------------------------
*/
BOOLEAN_T DNSR_Set_Lookup_Status(BOOLEAN_T enable)
{
if (dns_config_db.lookup_stat == enable)
return TRUE;
dns_config_db.lookup_stat = (UI8_T)enable;
return TRUE;
}
/*------------------------------------------------------------------------
* void DNSR_Get_Lookup_Status()
* Purpose: get DNSR status
*
* Parameters:
* Input: status
* Output:
* returns :
*------------------------------------------------------------------------
*/
BOOLEAN_T DNSR_Get_Lookup_Status(void)
{
return dns_config_db.lookup_stat;
}
/*------------------------------------------------------------------------
* BOOLEAN_T DNSR_Set_DNS_Server()
* Purpose: set DNS Name Server
*
* Parameters:
* Input: server IP, index
* Output:
* returns :
*------------------------------------------------------------------------
*/
BOOLEAN_T DNSR_Set_DNS_Server(UI32_T addr,UI32_T index)
{
dns_config_db.ip_addr[index] = addr;
return TRUE;
}
/*------------------------------------------------------------------------
* BOOLEAN_T DNSR_Set_DNS_Server()
* Purpose: set DNS Name Server
*
* Parameters:
* Input: server IP, index
* Output:
* returns :
*------------------------------------------------------------------------
*/
UI32_T DNSR_Get_DNS_Server(UI32_T index)
{
if (index >= DNSR_MAX_NAME_SERVER )
return 0;
return (dns_config_db.ip_addr[index]);
}
/*------------------------------------------------------------------------
* BOOLEAN_T DNSR_Set_DNS_Server()
* Purpose: set DNS Name Server
*
* Parameters:
* Input: IP,IP Name, Name size, status, index
* Output:
* returns :
*------------------------------------------------------------------------
*/
BOOLEAN_T DNSR_Set_Static_Table(UI32_T addr,UI8_T *name,UI32_T name_size,BOOLEAN_T status ,UI32_T index)
{
return (dns_set_static_host(addr,name,name_size,status,index));
}
/*------------------------------------------------------------------------
* BOOLEAN_T DNSR_Send_Packet_To_Server()
* Purpose: send pkt to socket API
*
* Parameters:
* Input:
* Output:
* returns :
*------------------------------------------------------------------------
*/
BOOLEAN_T DNSR_Send_Packet_To_Server(unsigned char *pkt,
int len,
PENDING_DNSR_MSG_PTR pMsg
)
{
UI32_T index;
int query_id;
I16_T addrlen;
I32_T tmp_addr;
struct sockaddr_in remote;
addrlen = sizeof(struct sockaddr_in);
memset((I8_T *)&remote,0,addrlen);
remote.sin_family = AF_INET4;
remote.sin_port = DNS_NAMESERVER_PORT;
do
{
index = (pMsg->request_server /dns_config_db.max_tries_per_server);
/* free the query index */
if (index >= dns_config_db.n_servers)
{
if ((query_id = dnsr_get_query_id(pMsg)) >=0)
dnsr_clear_query_id(query_id);
return FALSE;
}
/* no DNS server, do notihing */
if (dns_config_db.ip_addr[index] ==0)
{
/* increment request server */
pMsg->request_server++;
continue;
}
u32_2n(&tmp_addr, dns_config_db.ip_addr[index]);
remote.sin_addr = tmp_addr;
sendto(DnsrSocket, pkt,len,
0, (struct sockaddr *)&remote, addrlen);
/* increment request server */
pMsg->request_server++;
break;
} while (index < dns_config_db.n_servers);
return TRUE;
}
/*------------------------------------------------------------------------
* BOOLEAN_T DNSR_Send_Packet_To_Client()
* Purpose: send pkt to socket API
*
* Parameters:
* Input:
* Output:
* returns :
*------------------------------------------------------------------------
*/
void DNSR_Send_Packet_To_Client(unsigned char *pkt,
int len,
PENDING_DNSR_MSG_PTR pMsg
)
{
I16_T addrlen;
addrlen = sizeof(struct sockaddr_in);
sendto(DnsrSocket, pkt, len,
0, &pMsg->client, addrlen);
}
/*------------------------------------------------------------------------
* BOOLEAN_T DNSR_Lock()
* Purpose: dns lock semaphore
*
* Parameters:
* Input:
* Output:
* returns :
*------------------------------------------------------------------------
*/
void DNSR_Lock(void)
{
#if 0
OS_STATUS_T status;
status = LA3_OS_Obtain_Semaphore(&dnsrSEMA, OS_SUSPEND);
if (status != OS_SUCCESS)
{
DBG_L3_Printf("DNSR_TASK: obtain sem error !!\n");
return;
}
#else
OS_Semaphore_Lock(dnsrSEMA);
#endif
}
/*------------------------------------------------------------------------
* BOOLEAN_T DNSR_UnLock()
* Purpose: dns unlock semaphore
*
* Parameters:
* Input:
* Output:
* returns :
*------------------------------------------------------------------------
*/
void DNSR_UnLock(void)
{
#if 0
OS_STATUS_T status;
status = LA3_OS_Release_Semaphore(&dnsrSEMA);
if (status != OS_SUCCESS)
{
DBG_L3_Printf("DNSR_TASK: obtain sem error !!\n");
return;
}
#else
OS_Semaphore_Unlock(dnsrSEMA);
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -