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.2. DHCP Client Service - dhcp client #

NAME

DHCP Client Service – dhcp

SYNOPSIS

#include <tcpinit.h>
#include <sys/socket.h>
#include < netinet/in.h>
#include < arpa/inet.h >

int dhcp_get_params (struct tcpinit *init, _dhcp_params * param);

// For dual TCP stack:

int dhcp_get_params (unsigned char *mac, char *if_name, _dhcp_params *param);

 

DESCRIPTION

The tcp and udp server or tcpd provides IPv4/IPv6 TCP, UDP and IP protocol support with low level drivers for specific chip support packages. It is a fast and easy to use TCP/UDP solution which requires a simple setup structure at creation time to get it up and running. It offers static IP addresses in IPv4 format unless provisioned with the DHCP client service for IP address retrieval.

The dhcp client service uses the standard dhcp protocol to lease an IPv4 address from a IPv4 dhcp server. Typically, these servers are included in routers and are configured for IPv4 subnets to provide local network IP addresses. Both the client and the server are easily setup.

More precisely, the dhcp client service is actually a library that is called and does not run as a separate thread. This library uses the calling thread’s context and sets up the etherinit structure for use with tcpd. It implements the standard dhcp client protocol in the library and returns control to the calling thread when complete.

SPECIFIC OPTIONS

These options applicable not only for dual stack, but as well for old stack:

Option Default Description Placement
IP_ADDR_OF_HOST inet_addr(“192.168.16.5“) IP address of host to which test UDP packets will be sent demo
WAIT_ANSWER_INTERVAL_US 200000 Time interval in microseconds for waiting of DHCP-server answer library

 

EXAMPLE

This is an example of the various setup parameters for the tcpd – in this case using SPI communication with a 28J60:

#define GW_IP_ADDR	0xf010a8c0	//"192.168.16.240"

#define ENC_ADDR	0x100000
#define ENC_INT_VECT	0		//Interrupt 0
#define ENC_INT_LEVEL	3

static char	tcpbuf[1024*8];

struct tcpinit etherinit = {
	sizeof(struct tcpinit),			/* message size             */
	GW_IP_ADDR,				/* default gateway          */
	ENC_ADDR,				/* address of enc28j60 chip */
	ENC_INT_VECT,				/* interrupt vector         */
	0,					/* internet address         */
	{0x00,0x11,0x22,0x33,0x44,0x55},	/* ethernet address         */
	{0,0},					/* padding                  */
	ENC_INT_LEVEL,				/* interrupt level          */
	0,					/* unit number              */
	tcpbuf,					/* buffer pointer           */
	sizeof(tcpbuf),				/* size of buffer           */
	{'l','e',0},				/* interface name           */
};

This is an example of the setup parameters for the tcpd under dual stack:

#define ENC_ADDR	0x100000
#define ENC_INT_VECT	0		//Interrupt 0
#define ENC_INT_LEVEL	3

static char	tcpbuf[1024*16] __attribute__ ((aligned (2048)));
struct tcpinit tcpinit;

THREAD tcp_shell(void *arg)
{
	// clear init structure
	memset(&tcpinit, 0, sizeof(tcpinit));

	// memory
	tcpinit.tcp_pool_start = tcpbuf;
	tcpinit.tcp_pool_size = sizeof(tcpbuf);

	// device
	tcpinit.dev_type = DEV_ETHERNET;
	tcpinit.dev_unit = 0;
	tcpinit.dev_addr = ENC_ADDR;
	tcpinit.dev_vector = ENC_INT_VECT;
	tcpinit.dev_level = ENC_INT_LEVEL;
	tcpinit.eth_mac[0] = 0x00;
	tcpinit.eth_mac[1] = 0x11;
	tcpinit.eth_mac[2] = 0x22;
	tcpinit.eth_mac[3] = 0x33;
	tcpinit.eth_mac[4] = 0x44;
	tcpinit.eth_mac[5] = 0x55;

	// IPv4
	tcpinit.IPv4.IP_address = NULL;
	tcpinit.IPv4.IP_mask = NULL;
	tcpinit.IPv4_default_gateway = NULL;

	tcpd(&tcpinit);
	return 0;	//just to avoid warning
}

This partial example shows the creation and registration of the tcpd using tcp_shell followed with the lease of an IP address and discovery of the default gateway.

	if(pthread_create(&pid, &attr, &tcp_shell, 0)!=0)
	{
		xprintf("pthread_create = %d\n", errno);
		pthread_exit(0);
	}	

	if(dir_register("/dev/tcpd", pid, TYPE_SERVER)==0)
	{
		xprintf("dir_register = %d\n", errno);
		pthread_exit(0);
	}


	// Try to get our IP and default GW
	if (dhcp_get_params (&etherinit, &dhcp_param) == -1)
	{
		xprintf("DHCP could not get params! errno = %d\n", errno);
		while (1) sleep(1);
	}

	xprintf("Get DHCP params:\n");
   	xprintf("  Client IP: %d.%d.%d.%d\n",
		((unsigned char *)&etherinit.tcp_IP_address)[0],
		((unsigned char *)&etherinit.tcp_IP_address)[1],
		((unsigned char *)&etherinit.tcp_IP_address)[2],
		((unsigned char *)&etherinit.tcp_IP_address)[3]);
   	xprintf("  Default GW IP: %d.%d.%d.%d\n",
		((unsigned char *)&etherinit.tcp_default_gateway)[0],
		((unsigned char *)&etherinit.tcp_default_gateway)[1],
		((unsigned char *)&etherinit.tcp_default_gateway)[2],
		((unsigned char *)&etherinit.tcp_default_gateway)[3]);

The example for dual stack:

			...

	// Try to get our IP and default GW
	if (dhcp_get_params (tcpinit.eth_mac, "eth0", &dhcp_param) == -1)
	{
		xprintf("DHCP could not get params! errno = %d\n", errno);
		while (1) sleep(1);
	}


 ...

 

NOTES

There is a demo available for the Unison and DSPnano dhcp client server which is found in installdir/demos.

 

SEE ALSO

tcpd

Suggest Edit

CONTACT US

TO GET YOUR PROJECT STARTED

TOP