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.20. AutoIP Service - autoip client #

NAME

AutoIP Service – autoip

SYNOPSIS

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

int get_autoip(struct tcpinit *etherinit);

// For dual TCP stack:

int get_autoip (unsigned char *mac, char *if_name);

 

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 or AutoIP service for IP address retrieval.

The autoip service generates an IPv4 address following the information from net interface and uses the standard ARP protocol to check if such IP already present on net. Generally there is two ways of using an AutoIP: standalone or together with DHCP client.

More precisely, the autoip 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 tcpinit structure for use with tcpd. It implements the standard autoip functions in the library and returns control to the calling thread when complete.

 

SPECIFIC OPTIONS (Compile time)

Option Default Description Values Placement
IP_ADDR_OF_HOST inet_addr(“169.254.107.135”) IP address of host to which test UDP packets will be sent (should be the same segment). String Demo
TRY_DHCP 0 If set to “1” – allows first try to obtain IP from DHCP and if it was unsuccessful, use AutoIP. Dec: 0 | 1 Demo
Net_test 0 If set to “1” – allows to use standart, or user defined network segment, for IP address obtaining. Useful for tests. Dec: 0 | 1 Library
TEMP_IP 0xA9FE0000 Defines most significant two octets of IP address (network segment). May be used only for tests. Hex., 4 bytes Library
RFC3927 0 If set to “1” – defines full compliance of component to the RFC3927 Standard. Adds additional ARP sendings, which are not currently needed. Dec: 0 | 1 Library

 

EXAMPLE

This is the example of the various setup parameters for the tcpd.

#define ETH_ADDR        ETH_BASE
#define ETH_INT_VECT    INT_ETH
#define ETH_INT_LEVEL   0x80

static char	tcpbuf[1024*8];

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

This is the example of the various setup parameters for the dual TCP stack.

/*************************************************************************
 *  Subroutine  : tcp_shell
 *  Purpose     : Task shell for starting device specific tcpserver
 ************************************************************************/
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 = ETH_ADDR;
	tcpinit.dev_vector = ETH_INT_VECT;
	tcpinit.dev_level = ETH_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] = 0x66;

	// 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 set IP by AutoIP.

	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);
	}


	// Set automatic IP
	xprintf("Using AutoIP...\n");
	if(get_autoip(&etherinit) != 0) {
		xprintf("AutoIP could not get params!\n");
		while (1) sleep(1);
	}

	xprintf("Get AutoIP 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]);
 

This partial example shows the process of setting IP by AutoIP for dual TCP stack.

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

	if (dhcp_sts == -1)
	{
		xprintf("Using AutoIP...\n");
		if(get_autoip(tcpinit.eth_mac, "eth0") != 0) {
			xprintf("AutoIP could not get params!\n");
			while (1) sleep(1);
		}
	}

 

NOTES

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

 

SEE ALSO

tcpd, dhcp_client

Suggest Edit

CONTACT US

TO GET YOUR PROJECT STARTED

TOP