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.1.2. IPv4/IPv6 server #

NAME

IPv4/IPv6 TCP and UDP Server – tcpd

SYNOPSIS

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

pthread_create(&pid, &attr, &tcp_shell, 0);

 

DESCRIPTION

The IPv4/IPv6 tcp and udp server or tcpd provides IPv4/IPv6 TCP, UDP and IP protocols 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 or a DHCP client for IP address retrieval. It offers static routing tables, multiple interfaces and great small packet performance on processors with less than 32K of RAM. IPv6 protocol uses automaticaly configured link-local IP address based on host MAC.

The tcpd is an extensively modified version of the zero copy BSD implementation. It has been reduced in size and provides standard BSD socket services including support for select. It has been in the field in various incarnations for over 20 years.

The tcpd is initialized using the structure defined in tcpinit.h. It is passed to the tcpd from tcp_shell which starts the actual server passing in the parameter. The structure works this way for historical reasons – it could easily be restructured to take the parameter in the pthread_create call and start the server directly. For future reasons relating to parallelization of the tcpd, this change was not made.

The tcpd has several compile time options to reduce server size and several initialization options to reduce system size. Through recompilation, a udp only solution may be created reducing total system size to under 11K bytes. Initialization options which are geared to reducing the buffer sizes are tunable to trade off performance and size. Multiple interfaces are compile time options.

The tcpd has some commands supports specific ioctl().

The tcpd also has several add on features that many will be interested in. These features include:

  • dhcp client
  • dhcp server
  • ppp
  • NAT with PAT

More details can be found in the appropriate server and services man pages for these add on servers and services.


Compile time options

The tcpd compile time options can be found in the file <tcpdconfig.h> from server directory. All options can be defined as 0 (OFF) or 1 (ON):

IPv4 options

    • IPv4_ENABLE:

0

    • :  support IPv4 protocol;

 

    •     –

1

    • :  not support IPv4 protocol.

 

    • PPP_INTERFACE:

0

    • :  not support PPP protocol;

 

    •     –

1

    • :  support PPP protocol.

 

    • NAT:

0

    • :  not support NAT technology;

 

    •     –

1

    • :  support NAT technology.

 

    • IP4_FORWARD:

0

    • :  not support IPv4 packet forward;

 

    •     –

1

    • :  support IPv4 packet forward.

 

    • IP_SOOPT:

0

    • :  not support IPv4 socket option;

 

    •     –

1

    • :  support IPv4 socket option.

 

    • IGMP_PROTOCOL:

0

    • :  not support IGMP for IPv4;

 

    •     –

1

    • :  support IGMP for IPv4.

 

IPv6 options

    • IPv6_ENABLE:

0

    • :  support IPv6 protocol;

 

    •     –

1

    • :  not support IPv6 protocol.

 

    • DAD_TRANSMIT:

0

    • :  not support Duplicated Address Detection;

 

    •     –

1

    • :  support Duplicated Address Detection.

 

    • IP6_FORWARD:

0

    • :  not support IPv6 packet forward;

 

    •     –

1

    • :  support IPv6 packet forward.

 

    • IP6_SOOPT:

0

    • :  not support IPv6 socket option;

 

    •     –

1

    • :  support IPv6 socket option.

 

    • MLD6_SUPPORT:

0

    • :  not support Multicast Listener Discovery;

 

    •     –

1

    • :  support Multicast Listener Discovery.

 

    • ICMP6_TO_SOCKET:

0

    • :  allow read icmp6 data from socket;

 

    •     –

1

    • :  do not allow read icmp6 data from socket.

 

    • ICMP6_RTSOL:

0

    • :  not support Receive Router Solicitation Message;

 

    •     –

1

    • :  support Receive Router Solicitation Message.

 

    • ICMP6_RTADV:

0

    • :  not support Receive Router Advertisement Message;

 

    •     –

1

    • :  support Receive Router Advertisement Message.

 

    • ICMP6_REDIRECT:

0

    • :  not support redirect messages;

 

    •     –

1

    • :  support redirect messages.

 

    • IN6_CONTROL:

0

    • :  not support IPv6 interfaces ioctl() control;

 

    •     –

1

    • :  support IPv6 interfaces ioctl() control.

 

    • IN6_DETACH:

0

    • :  not support IPv6 interfaces detach;

 

    •     –

1

    • :  support IPv6 interfaces detach.

 

    • IP6_MTUDISC:

0

    • :  not support MTU discovery for IPv6;

 

    •     –

1

    • :  support MTU discovery for IPv6.

 

    • IP6_FRAG:

0

    • :  not support IPv6 packets fragmentation;

 

    •     –

1

    • :  support IPv6 packets fragmentation.

 

Physical interfaces options

    • ETHER_ENABLE:

0

    • :  support Ethernet protocol;

 

    •     –

1

    • :  not support Ethernet protocol.

 

    • LOWPAN_ENABLE:

0

    • :  support LoWPAN protocol;

 

    •     –

1

    • :  not support LoWPAN protocol.

 

    • WIFI_ENABLE:

0

    • :  support Wi-Fi protocol;

 

    •     –

1

    • :  not support Wi-Fi protocol.

 

Common options

    • TCPN_INTERFACE:

0

    • :  support only one physical network interface;

 

    •     –

1

    • :  support multiple physical network interfaces.

 

    • TCP_PROTOCOL:

0

    • :  not support TCP protocol;

 

    •     –

1

    • :  support TCP protocol.

 

    • TCP_DEBUG:

0

    • :  support tcp socket trace with SO_DEBUG;

 

    •     –

1

    • :  not support tcp socket trace with SO_DEBUG.

 

    • SOCK_CONTROL:

0

    • :  disable extended socket control options;

 

    •     –

1

    • :  enable extended socket control options.

 

    • IP_MULTICAST:

0

    • :  not support multicast;

 

    •     –

1

    • :  support multicast.

 

    • IF_DETACH:

0

    • :  not support interface detach;

 

    •     –

1

    • :  support interface detach.

 

    • IP_AUTOPORT_CTL:

0

    • :  enable advanced automatic bind port control for IPv4;

 

    •     –

1

    • :  disavle advanced automatic bind port control for IPv4.

 

    • PKTS_RATE_LIMIT:

0

    • :  not support packets rate limitation;

 

    •     –

1

    • :  support packets rate limitation.

 

tcp-server statistics

    • IP_STATISTICS
    • ICMP_STATISTICS
    • IN6_STATISTICS
    • IP6_STATISTICS
    • ICMP6_STATISTICS
    • ROUTE_STATISTICS
    • UDP_STATISTICS
    • TCP_STATISTICS
    • MBUF_STATISTICS
    • IGMP_STATISTICS

0

    • :  not support statistic counters;

 

    •     –

1

    • :  support statistic counters.

 


Tcpd initialization

The tcpd initiatization structure can be found in the file <tcpinit.h>:

//
// tcpd initialization structure
//
struct tcpinit {
	char *          tcp_pool_start;         /* buffer address   */
	uint            tcp_pool_size;          /* buffer size      */

	uint_8          dev_type;               /* device type      */
	uint_8          dev_unit;               /* device number    */
	int             dev_addr;               /* device address   */
	int             dev_vector;             /* device vector    */
	int             dev_level;              /* device int level */
	union {
		struct eth_settings eth;
		struct ieee802154_settings ieee802154;
	} dev;

	struct IP_settings IPv4;                /* IPv4 settings         */
	char *IPv4_default_gateway;             /* IPv4 default gateway  */
	struct IP_settings IPv6;                /* IPv6 settings         */
	char *IPv6_default_gateway;             /* IPv6 default gateway  */
};

Structure fields description:

  • tcp_pool_start – start address for tcp-server memory
  • tcp_pool_size – length of tcp-server memory buffer
  • dev_type – device type, i.e. DEV_ETHERNET, DEV_IEEE802154, DEV_IEEE80211
  • dev_unit – device number
  • dev_addr – device address
  • dev_vector – device vector
  • dev_level – device interrupt level
  • struct eth_settings eth – ethernet settings
  • struct ieee802154_settings ieee802154 – IEEE 802.15.4 settings
  • struct IP_settings IPv4 – IPv4 settings
  • IPv4_default_gateway – IPv4 default gateway
  • struct IP_settings IPv6 – IPv6 settings
  • IPv6_default_gateway – IPv6 default gateway

 

EXAMPLE

This partial example shows the setup, creation and registration of the tcpd using tcp_shell.

#define ETH_ADDR        0x01            // phy address
#define ETH_INT_VECT    ETH_IRQn        // interrupt vector
#define ETH_INT_LEVEL   (1<<4) | 1      // interrupt priority

THREAD Main()
{
    pthread_t pid;
    pthread_attr_t attr;
    struct sched_param myNewPriority;

 ...

    pthread_attr_init(&attr);
    myNewPriority.sched_priority = 5; 
    pthread_attr_setschedparam(&attr, &myNewPriority); 
    pthread_attr_setstacksize(&attr, 2560);
 
    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);
    }

 ...
}

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] = 0x55;


    // IPv4
    tcpinit.IPv4.IP_address = "192.168.16.199";
    tcpinit.IPv4.IP_mask = "255.255.255.0";
    tcpinit.IPv4_default_gateway = "192.168.16.1";

    // IPv6
    tcpinit.IPv6.IP_address = "2001:0db9::99";
    tcpinit.IPv6.IP_prefix = 32;
    tcpinit.IPv6_default_gateway = "2001:0db9::1";


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

NOTES

There is several demos available for the Unison and DSPnano tcpd which are found in installdir/demos which provide examples of using the server with blocking and non-blocking sockets, select, and a variety of services including tftp, telnet, and more.

 

SEE ALSO

socket(), bind(), accept(), recv(), listen(), send(), select(), dhcp client service, dhcp server, ppp server, Network Address Translation

Suggest Edit

CONTACT US

TO GET YOUR PROJECT STARTED

TOP