Porting PicoTCP WIP
This commit is contained in:
120
kernel/picotcp/test/examples/dnsclient.c
Normal file
120
kernel/picotcp/test/examples/dnsclient.c
Normal file
@ -0,0 +1,120 @@
|
||||
#include <stdint.h>
|
||||
#include <pico_stack.h>
|
||||
#include <pico_ipv4.h>
|
||||
#include <pico_dns_client.h>
|
||||
#include "utils.h"
|
||||
extern int IPV6_MODE;
|
||||
|
||||
/*** START UDP DNS CLIENT ***/
|
||||
/*
|
||||
./test/vde_sock_start.sh
|
||||
echo 1 > /proc/sys/net/ipv4/ip_forward
|
||||
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
|
||||
iptables -A FORWARD -i pic0 -o wlan0 -j ACCEPT
|
||||
iptables -A FORWARD -i wlan0 -o pic0 -j ACCEPT
|
||||
./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.2:255.255.0.0:10.40.0.1: -a udpdnsclient:www.google.be:173.194.67.94
|
||||
*/
|
||||
void cb_udpdnsclient_getaddr(char *ip, void *arg)
|
||||
{
|
||||
uint8_t *id = (uint8_t *) arg;
|
||||
|
||||
if (!ip) {
|
||||
picoapp_dbg("%s: ERROR occured! (id: %u)\n", __FUNCTION__, *id);
|
||||
return;
|
||||
}
|
||||
|
||||
picoapp_dbg("%s: ip %s (id: %u)\n", __FUNCTION__, ip, *id);
|
||||
if (arg)
|
||||
PICO_FREE(arg);
|
||||
}
|
||||
|
||||
void cb_udpdnsclient_getname(char *name, void *arg)
|
||||
{
|
||||
uint8_t *id = (uint8_t *) arg;
|
||||
|
||||
if (!name) {
|
||||
picoapp_dbg("%s: ERROR occured! (id: %u)\n", __FUNCTION__, *id);
|
||||
return;
|
||||
}
|
||||
|
||||
picoapp_dbg("%s: name %s (id: %u)\n", __FUNCTION__, name, *id);
|
||||
if (arg)
|
||||
PICO_FREE(arg);
|
||||
}
|
||||
|
||||
void app_udpdnsclient(char *arg)
|
||||
{
|
||||
struct pico_ip4 nameserver;
|
||||
char *dname, *daddr;
|
||||
char *nxt;
|
||||
char *ipver;
|
||||
int v = 4;
|
||||
uint8_t *getaddr_id, *getname_id, *getaddr6_id, *getname6_id;
|
||||
|
||||
nxt = cpy_arg(&dname, arg);
|
||||
if (!dname || !nxt) {
|
||||
picoapp_dbg(" udpdnsclient expects the following format: udpdnsclient:dest_name:dest_ip:[ipv6]\n");
|
||||
exit(255);
|
||||
}
|
||||
|
||||
nxt = cpy_arg(&daddr, nxt);
|
||||
if (!daddr || !nxt) {
|
||||
picoapp_dbg(" udpdnsclient expects the following format: udpdnsclient:dest_name:dest_ip:[ipv6]\n");
|
||||
exit(255);
|
||||
}
|
||||
|
||||
nxt = cpy_arg(&ipver, nxt);
|
||||
if (!ipver || strcmp("ipv6", ipver) != 0)
|
||||
v = 4;
|
||||
else
|
||||
v = 6;
|
||||
|
||||
picoapp_dbg("UDP DNS client started.\n");
|
||||
|
||||
picoapp_dbg("----- Deleting non existant nameserver -----\n");
|
||||
pico_string_to_ipv4("127.0.0.1", &nameserver.addr);
|
||||
pico_dns_client_nameserver(&nameserver, PICO_DNS_NS_DEL);
|
||||
picoapp_dbg("----- Adding 8.8.8.8 nameserver -----\n");
|
||||
pico_string_to_ipv4("8.8.8.8", &nameserver.addr);
|
||||
pico_dns_client_nameserver(&nameserver, PICO_DNS_NS_ADD);
|
||||
picoapp_dbg("----- Deleting 8.8.8.8 nameserver -----\n");
|
||||
pico_string_to_ipv4("8.8.8.8", &nameserver.addr);
|
||||
pico_dns_client_nameserver(&nameserver, PICO_DNS_NS_DEL);
|
||||
picoapp_dbg("----- Adding 8.8.8.8 nameserver -----\n");
|
||||
pico_string_to_ipv4("8.8.8.8", &nameserver.addr);
|
||||
pico_dns_client_nameserver(&nameserver, PICO_DNS_NS_ADD);
|
||||
picoapp_dbg("----- Adding 8.8.4.4 nameserver -----\n");
|
||||
pico_string_to_ipv4("8.8.4.4", &nameserver.addr);
|
||||
pico_dns_client_nameserver(&nameserver, PICO_DNS_NS_ADD);
|
||||
if (!IPV6_MODE) {
|
||||
if (v == 4) {
|
||||
picoapp_dbg("Mode: IPv4\n");
|
||||
getaddr_id = calloc(1, sizeof(uint8_t));
|
||||
*getaddr_id = 1;
|
||||
picoapp_dbg(">>>>> DNS GET ADDR OF %s\n", dname);
|
||||
pico_dns_client_getaddr(dname, &cb_udpdnsclient_getaddr, getaddr_id);
|
||||
|
||||
getname_id = calloc(1, sizeof(uint8_t));
|
||||
*getname_id = 2;
|
||||
picoapp_dbg(">>>>> DNS GET NAME OF %s\n", daddr);
|
||||
pico_dns_client_getname(daddr, &cb_udpdnsclient_getname, getname_id);
|
||||
return;
|
||||
}
|
||||
|
||||
picoapp_dbg("Mode: IPv6\n");
|
||||
|
||||
#ifdef PICO_SUPPORT_IPV6
|
||||
getaddr6_id = calloc(1, sizeof(uint8_t));
|
||||
*getaddr6_id = 3;
|
||||
picoapp_dbg(">>>>> DNS GET ADDR6 OF %s\n", dname);
|
||||
pico_dns_client_getaddr6(dname, &cb_udpdnsclient_getaddr, getaddr6_id);
|
||||
getname6_id = calloc(1, sizeof(uint8_t));
|
||||
*getname6_id = 4;
|
||||
picoapp_dbg(">>>>> DNS GET NAME OF ipv6 addr 2a00:1450:400c:c06::64\n");
|
||||
pico_dns_client_getname6("2a00:1450:400c:c06::64", &cb_udpdnsclient_getname, getname6_id);
|
||||
#endif
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
/*** END UDP DNS CLIENT ***/
|
||||
Reference in New Issue
Block a user