FORGOT YOUR DETAILS?

CREATE ACCOUNT

Unison Help

  1. Unison Kernel
    1. Pthreads
      1. pthread_create()
      2. pthread_exit()
      3. pthread_self()
      4. pthread_equal()
      5. pthread_join()
      6. pthread_detach()
      7. pthread_setschedparam()
      8. pthread_getschedparam()
      9. pthread_attr_init()
      10. pthread_attr_destroy()
      11. pthread_attr_setstackaddr()
      12. pthread_attr_getstackaddr()
      13. pthread_attr_setstacksize()
      14. pthread_attr_getstacksize()
      15. pthread_attr_setschedparam()
      16. pthread_attr_getschedparam()
      17. pthread_attr_setdetachstate()
      18. pthread_attr_getdetachstate()
      19. pthread_stackinfo()
      20. pthread_setprio()
      21. pthread_getprio()
      22. sched_get_priority_max()
      23. sched_get_priority_min()
      24. sched_yield()
    2. Pthread Cancellation
      1. pthread_cleanup_pop()
      2. pthread_cleanup_push()
      3. pthread_cancel()
      4. pthread_setcanceltype()
      5. pthread_setcancelstate()
      6. pthread_testcancel()
    3. Mutex
      1. pthread_mutex_init()
      2. pthread_mutex_destroy()
      3. pthread_mutex_lock()
      4. pthread_mutex_trylock()
      5. pthread_mutex_unlock()
    4. Semaphores
      1. sem_open()
      2. sem_close()
      3. sem_unlink()
      4. sem_init()
      5. sem_destroy()
      6. sem_wait()
      7. sem_trywait()
      8. sem_timedwait()
      9. sem_post()
      10. sem_getvalue()
    5. Message Queues
      1. mq_open()
      2. mq_close()
      3. mq_unlink()
      4. mq_send()
      5. mq_receive()
      6. mq_notify()
      7. mq_setattr()
      8. mq_getattr()
      9. mq_timedreceive()
      10. mq_timedsend()
    6. Conditional Variables
      1. pthread_cond_init()
      2. pthread_cond_destroy()
      3. pthread_cond_wait()
      4. pthread_cond_timedwait()
      5. pthread_cond_signal()
      6. pthread_cond_broadcast()
      7. pthread_condattr_init()
      8. pthread_condattr_destroy()
    7. Barriers
      1. pthread_barrier_init()
      2. pthread_barrier_destroy()
      3. pthread_barrier_wait()
    8. Timers
      1. timer_create()
      2. timer_delete()
      3. timer_settime()
      4. timer_gettime()
      5. timer_getoverrun()
      6. timer_tick()
      7. nanosleep()
    9. Clocks
      1. time()
      2. uptime()
      3. sleep()
      4. clock_settime()
      5. clock_gettime()
      6. clock_getres()
      7. clock_init()
    10. Memory Allocation
      1. POSIX.1
        1. malloc()
        2. free()
      2. Variable Length (Pools)
        1. pool_create()
        2. pool_destroy()
        3. pool_alloc()
        4. pool_free()
      3. Fixed Length (Partitions)
        1. pt_create()
        2. pt_destroy()
        3. pt_getblock()
        4. pt_freeblock()
    11. Rendezvous
      1. mr_init()
      2. mr_send()
      3. mr_receive()
      4. mr_reply()
      5. mr_sigrecv()
      6. mr_sigpost()
    12. Interrupts
      1. interrupts
      2. i_disable()
      3. i_restore()
    13. Directory Services
      1. dir_register()
      2. dir_deregister()
      3. dir_lookup()
      4. dir_lookup_string()
    14. Miscellaneous
      1. checkIstack()
      2. NanoStart() or DSPexec_Start()
      3. _isrStackFill
      4. Kernel Scaling
      5. kfatal()
      6. kalloc()
      7. kfree()
      8. mpu or mmu
      9. pthreadStackFill
      10. thread_numb()
      11. thread_utilization_start()
      12. thread_utilization_stop()
      13. xprintf()
      14. xputs()
      15. xputchar()
  2. Unison I/O Library
    1. accept()
    2. bind()
    3. chmod()
    4. close()
    5. connect()
    6. creat()
    7. fstat()
    8. getpeername()
    9. getsockname()
    10. getsockopt()
    11. ioctl()
    12. link()
    13. listen()
    14. lseek()
    15. mkdir()
    16. mkfs()
    17. mount()
    18. open()
    19. read()
    20. recv()
    21. recvfrom()
    22. rename()
    23. renameat()
    24. rmdir()
    25. select()
    26. send()
    27. sendto()
    28. setsockopt()
    29. shutdown()
    30. socket()
    31. stat()
    32. sync()
    33. umount()
    34. unlink()
    35. write()
  3. Unison STDIO Library
    1. STDIO Library Calls
      1. clearerr()
      2. dprintf()
      3. fclose()
      4. fdopen()
      5. feof()
      6. ferror()
      7. fileno()
      8. fflush()
      9. fgetc()
      10. fgetpos()
      11. fgets()
      12. fopen()
      13. fprintf()
      14. fputc()
      15. fputs()
      16. fread()
      17. freopen()
      18. fscanf()
      19. fseek()
      20. fseeko()
      21. fsetpos()
      22. ftell()
      23. ftello()
      24. fwrite()
      25. getc()
      26. getc_unlocked()
      27. getchar()
      28. getchar_unlocked()
      29. getdelim()
      30. getline()
      31. gets()
      32. get_stderr_ptr()
      33. get_stdin_ptr()
      34. get_stdout_ptr()
      35. noperprintf()
      36. perprintf()
      37. perror()
      38. posix_compat()
      39. printf()
      40. putc()
      41. putc_unlocked()
      42. putchar()
      43. putchar_unlocked()
      44. puts()
      45. remove()
      46. rewind()
      47. scanf()
      48. setbuf()
      49. setvbuf()
      50. snprintf()
      51. sprintf()
      52. sscanf()
      53. stderr_init()
      54. stderr_close()
      55. stdin_init()
      56. stdin_close()
      57. stdout_init()
      58. stdout_close()
      59. vdprintf()
      60. vscanf()
      61. vsscanf()
      62. vfscanf()
      63. vprintf()
      64. vsnprintf()
      65. vsprintf()
      66. vfprintf()
      67. ungetc()
    2. Do-nothing Stubs
      1. ctermid()
      2. flockfile()
      3. fmemopen()
      4. ftrylockfile()
      5. open_memstream()
      6. pclose()
      7. popen()
      8. tempnam()
      9. tmpfile()
      10. tmpnam()
  4. Unison LIBC Library
    1. LIBC Library Calls
      1. assert()
      2. realloc()
      3. strcasecmp()
      4. strdup()
      5. strncasecmp()
      6. strftime()
    2. Do-nothing Stubs
      1. abort()
      2. execve()
      3. exit()
      4. _Exit()
      5. fork()
      6. getpid()
      7. isatty()
      8. kill()
      9. sbrk()
      10. times()
      11. wait()
    3. Do-nothing Wide-character Stubs
      1. <wchar.h>
      2. <wctype.h>
  5. Unison I/O Servers
    1. File Servers
      1. Multimedia File Server - fsys
      2. FAT File System - fatfs
      3. NAND File Server - nandfsys
      4. NOR File Server - norfsys
      5. Network File Server - nfs
  6. Graphics, Camera, Video, Audio
    1. Vendor Graphics
    2. Prism++ Graphics
    3. ADPCM Services - adpcmd
    4. Camera
  7. Network Protocols
    1. TCP and UDP Server - tcpd
      1. IPv4 only server
      2. IPv4/IPv6 server
    2. DHCP Client Service - dhcp client
    3. DHCP Server - dhcpd
    4. Telnet Server - telnetd
    5. Tiny FTP Server - tftpd
    6. Point to Point - pppd
    7. Network Translation - NAT with PAT
    8. Firewall
      1. Packet filter: pf
      2. Packet filter control: pfctl
      3. Fitler rules: pf.filtering
      4. Translation rules: pf.nat
    9. Tiny HTTP Server - thttpd
    10. Tiny HTTP Server with TLS
    11. POP3 Server
    12. Simple Mail Transfer Protocol Services (SMTP)
    13. Bootp Protocol
    14. File Transfer Protocol Server (FTP)
    15. File Transfer Client Services
    16. RPC / XDR
    17. DNS Client
    18. HTTP/HTTPS Client
    19. REST Client
    20. AutoIP Service - autoip client
    21. mDNS server - mdnsd
    22. SNTP Client
    23. SNMP Agent - Snmpd server
    24. SSL/TLS library
    25. SSH server
    26. IP security
      1. IPsec description
      2. IPsec administration: ipsecadm
      3. Virtual Private Network: VPN
    27. Power Control
      1. Motor and Motion Control Servers
      2. PWM, Encoders
    28. Serial I/O
      1. Asynchronous Serial I/O Server - ttyserver
      2. CAN Server - cand
      3. I2C Server - i2cd
      4. I2S Server - i2sd
    29. System Services
      1. Power Management Servers
      2. Login Service - login_services
      3. XML
      4. POSIX Shell and Login Service - posh
    30. Universal Serial Bus (USB)
      1. USB Server
      2. USB Device Server
      3. USB Embedded Host Server
    31. Wireless
      1. Wireless Servers and Drivers
      2. 802.15.4 Radio Servers
      3. TCP/v6 with 6loWPAN
      4. ZigBee
      5. BlueTooth Server
      6. 802.11 Wi-Fi
      7. GPRS, UHF and GPS Radio Servers
    32. Remedy Tools for Unison
      1. Remedy Data Logging and Event Display Tools
      2. Remedy Diagnostics
      3. Remedy Flash Downloader/Bootloader
      4. Remedy Power On Self Test - POST
      5. Remedy OS Object Viewer
      6. Remedy Remote Control Tools

7.17. DNS Client #

NAME

DNS Client

SYNOPSIS

int set_dns_server_address (char* ipv4_addr, char* ipv6_addr, char *mac);

int getnameinfo (const struct sockaddr *sa, socklen_t salen, char *host, size_t hostlen, char *serv, size_t servlen, int flags);

int getaddrinfo (const char *nodename, const char *servname, const struct addrinfo *hints, struct addrinfo **res);

void freeaddrinfo (struct addrinfo *ai);

 

DESCRIPTION

The DNS client component serves for obtaining the domain name of host, having his IP address and vise versa. There are several functions which doing main actions. Their list is represented below.

Functions description:

    • set_dns_server_address – sets DNS server addresses (IPv4/IPv6).

Parameters:

      • ipv4_addr – pointer to IPv4 address of DNS server.
      • ipv6_addr – pointer to IPv6 address of DNS server.
      • mac – pointer to MAC address of client interface.

 

    • getnameinfo – gets the host name using IP address of this host.

Parameters:

      • sa – pointer to struct sockaddr, where the IP address and port number of host placed.
      • salen – length of struct sockaddr.
      • host – pointer to space for host name storing.
      • hostlen – length of host name string.
      • serv – pointer to service name string.
      • servlen – length of service name string.
      • flags – flags that modify behavior of this function (currently not support):
NI_NAMEREQD
If set, then an error is returned if the hostname cannot be determined.
NI_DGRAM
If set, then the service is a datagram (UDP) based rather than stream (TCP) based. This is required for the few ports (512-514) that have different services for UDP and TCP.
NI_NOFQDN
If set, return only the hostname part of the fully qualified domain name for local hosts.
NI_NUMERICHOST
If set, then the numeric form of the hostname is returned. (When not set, this will still happen in case the node’s name cannot be determined.)
NI_NUMERICSERV
If set, then the numeric form of the service address is returned. (When not set, this will still happen in case the service’s name cannot be determined.)

 

    • getaddrinfo – gets the IP address using the name of the host.

Parameters:

      • nodename – pointer to the name of internet node, for example “www.google.com”.
      • servname – pointer to service name string.
      • hints – pointer to an addrinfo structure that specifies criteria for selecting the socket address structures returned in the list pointed to by res.
      • res – pointer to the resulting addrinfo structure with the information about host.

 

struct addrinfo {
	int ai_flags;			/* input flags */
	int ai_family;			/* protocol family for socket */
	int ai_socktype;		/* socket type */
	int ai_protocol;		/* protocol for socket */
	socklen_t ai_addrlen;		/* length of socket-address */
	struct sockaddr *ai_addr; 	/* socket-address for socket */
	char *ai_canonname;		/* canonical name for service location (iff req) */
	struct addrinfo *ai_next; 	/* pointer to next in list */
};

 

    • freeaddrinfo – frees memory space used for host address information. This function used together with getaddrinfo.

Parameters:

    • ai – pointer to the space of resulting addrinfo structure, which has to be freed.

 

EXAMPLE

	struct sockaddr_in sa;
	struct sockaddr_in6 sa6;
	const struct sockaddr_in *sa_ptr = NULL;
	const struct sockaddr_in6 *sa_ptr6 = NULL;
	socklen_t salen, salen6;
	char *host = NULL;

...

	xprintf("\n\n\nStart DNS\n");

	memset(&sa, 0, sizeof(sa));
	sa.sin_family = AF_INET;
	sa.sin_addr.s_addr = inet_addr("173.194.70.102");// set ipv4 adress for request
	salen = sa.sin_len = sizeof (struct sockaddr_in) ;
	sa_ptr = &sa;


	memset(&sa6, 0, sizeof(sa6));
	sa6.sin6_family = AF_INET6;
	inet_pton(AF_INET6, "2a00:1450:400d:805::1001", &(sa6.sin6_addr));// set ipv6 adress for request
	sa6.sin6_scope_id = __IPV6_ADDR_SCOPE_LINKLOCAL;
	salen6 = sa6.sin6_len =  sizeof (struct sockaddr_in6);
	sa_ptr6 = &sa6;

	/*
	*	MANDATORY function !!!
	* 	Set DNS ip adress
	*/
	if (set_dns_server_address(IP_ADDR_OF_SERVER_V4 ,IP_ADDR_OF_SERVER_V6, (char *)tcpinit.eth_mac)== -1)
		xprintf ("set_dns_server_address ERROR\n");

	/*****************  getnameinfo *******************/

	xprintf("\nTest getnameinfo\n");

	host = (char*)malloc(MAX_NAME_LEN);
	if (host == NULL) {
		xprintf("dns err: memory allocation\n\r");
		return NULL;
	}

	memset(host, 0, MAX_NAME_LEN);

	getnameinfo((const struct sockaddr* )sa_ptr, salen,	// input parameters Ip adress and len
			host, MAX_NAME_LEN,			// output host name and length
			NULL , 0, 0 				//this parameters no use and set to 0 and NULL
			);
	xprintf("\n");
	xprintf("host with IPv4 adress 173.194.70.102 have name: %s\n", host);

	free (host);

	host = (char*)malloc(MAX_NAME_LEN);
	if (host == NULL) {
		xprintf("dns err: memory allocation\n\r");
		return NULL;
	}

	memset(host, 0, MAX_NAME_LEN);

	getnameinfo((const struct sockaddr* )sa_ptr6, salen6,
			host, MAX_NAME_LEN,
			NULL , 0, 0);
	
	xprintf("\n");
	xprintf("host with IPv6 adress 2a00:1450:400d:805::1001 have name: %s\n", host);

	free (host);


	/*****************  getaddrinfo and  freeaddrinfo *******************/

	xprintf("\n");
	xprintf("\nTest getaddrinfo and  freeaddrinfo \n");

	/*if you want work with both DNS servers */
	xprintf("\n\n");
	xprintf("Read Ipv4 and Ip6 adress from google.com , if server don't have adress return nothing \n");
	memset(&hints, 0, sizeof(struct addrinfo));

	getaddrinfo("google.com", NULL, NULL, &res);

	print_ip_adress (res);

	freeaddrinfo(res);

	xprintf("\nEnd read\n");

...

	/*if you want work only with ipv4 DNS server set hints to AF_INET */
	xprintf("\n\n");
	xprintf("Read Ip4 adress from www.google.com , if server don't have adress return nothing \n\n");
	memset(&hints, 0, sizeof(struct addrinfo));
	hints.ai_family = AF_INET;

	getaddrinfo("www.google.com", NULL, &hints, &res);

	print_ip_adress (res);

	freeaddrinfo(res);

	xprintf("\nEnd read\n");

 

NOTES

There is a demo available for the Unison and DSPnano DNS Client which can be found in installdir/demos.

 

SEE ALSO

tcpd, autoip

Suggest Edit

CONTACT US

TO GET YOUR PROJECT STARTED

TOP