#include <linux/module.h>#include <linux/kernel.h>#include "netdb.h"#include "ares.h"#include "ares_dns.h"#include "memcopy.h"#include "lwip/sys.h"#include "lwip/ip_addr.h"#include "lwip/inet.h"#include "lwip/sockets.h"#include <rtl_printf.h>Include dependency graph for dnsclient.c:
Go to the source code of this file.
Defines | |
| #define | INADDR_NONE 0xffffffff |
| #define | QUESTION "cybeles.disca.upv.es" |
| #define | DNS_SERVER_ADDR "158.42.4.4" |
Functions | |
| void | dns_client_callback (void *arg, int status, struct hostent *host) |
| void | dns_client (void *arg) |
| int | init_module (void) |
| void | cleanup_module (void) |
|
|
Definition at line 26 of file dnsclient.c. Referenced by dns_client(). |
|
|
Definition at line 22 of file dnsclient.c. |
|
|
Definition at line 25 of file dnsclient.c. Referenced by dns_client(). |
|
|
Definition at line 109 of file dnsclient.c.
00109 {
00110 printk("\n\nDNS client module removed.\n\n");
00111 }
|
|
|
Definition at line 51 of file dnsclient.c. References AF_INET, ares_channel, ares_destroy(), ares_fds(), ARES_FLAG_USEVC, ares_free_errmem(), ares_gethostbyaddr(), ares_gethostbyname(), ares_init_options(), ARES_OPT_FLAGS, ARES_OPT_SERVERS, ares_process(), ares_strerror(), ARES_SUCCESS, ares_timeout(), dns_client_callback(), DNS_SERVER_ADDR, FD_ZERO, ares_options::flags, INADDR_NONE, inet_addr(), inet_aton(), ares_options::nservers, NULL, QUESTION, in_addr::s_addr, ares_options::servers, status, and sys_thread_exit(). Referenced by init_module().
00051 {
00052 ares_channel channel;
00053 int status, nfds;
00054 fd_set read_fds, write_fds;
00055 struct timeval *tvp, tv;
00056 char *errmem;
00057 struct in_addr addr;
00058 struct in_addr ns1;
00059 struct ares_options options;
00060
00061 inet_aton(DNS_SERVER_ADDR,&ns1);
00062
00063 options.servers = &ns1;
00064 options.nservers = 1;
00065 options.flags = ARES_FLAG_USEVC;
00066
00067 status = ares_init_options(&channel, &options, ARES_OPT_SERVERS | ARES_OPT_FLAGS);
00068
00069 if (status != ARES_SUCCESS)
00070 {
00071 rtl_printf("ares_init: %s\n", ares_strerror(status, &errmem));
00072 ares_free_errmem(errmem);
00073 sys_thread_exit();
00074 }
00075
00076
00077 addr.s_addr = inet_addr(QUESTION);
00078 if (addr.s_addr == INADDR_NONE){
00079 ares_gethostbyname(channel, QUESTION, AF_INET, dns_client_callback, QUESTION);
00080 }else{
00081 ares_gethostbyaddr(channel, &addr, sizeof(addr), AF_INET, dns_client_callback,
00082 QUESTION);
00083 }
00084
00085 /* Wait for all queries to complete. */
00086 while (1)
00087 {
00088 FD_ZERO(&read_fds);
00089 FD_ZERO(&write_fds);
00090 nfds = ares_fds(channel, &read_fds, &write_fds);
00091 if (nfds == 0)
00092 break;
00093 tvp = ares_timeout(channel, NULL, &tv);
00094 select(nfds, &read_fds, &write_fds, NULL, tvp);
00095 ares_process(channel, &read_fds, &write_fds);
00096 }
00097
00098 ares_destroy(channel);
00099 }
|
Here is the call graph for this function:
|
||||||||||||||||
|
Definition at line 28 of file dnsclient.c. References address, ares_free_errmem(), ares_strerror(), ARES_SUCCESS, hostent::h_addr_list, hostent::h_name, inet_ntoa(), memcopy(), and status. Referenced by dns_client().
00029 {
00030 struct in_addr addr;
00031 char *mem, **p;
00032
00033 if (status != ARES_SUCCESS)
00034 {
00035 rtl_printf("%s: %s\n", (char *) arg, ares_strerror(status, &mem));
00036 ares_free_errmem(mem);
00037 return;
00038 }
00039
00040 for (p = host->h_addr_list; *p; p++)
00041 {
00042 char *address = " ";
00043 memcopy(&addr, *p, sizeof(struct in_addr));
00044 address = inet_ntoa(addr);
00045 rtl_printf("%s: %s\n", host->h_name, address);
00046 }
00047 }
|
Here is the call graph for this function:
|
|
Definition at line 102 of file dnsclient.c. References dns_client(), NULL, and sys_thread_new().
00102 {
00103 printk("\n\nDNS client module inserted.\n\n");
00104 sys_thread_new(dns_client, NULL, 0);
00105 return 0;
00106 }
|
Here is the call graph for this function:
1.3.4