- •Preface
- •About this book
- •Intended audience
- •Using this book
- •Typographical conventions
- •Further reading
- •Feedback
- •Feedback on ARM TCP/IP
- •Feedback on this book
- •Introduction
- •1.1 A typical embedded networking stack
- •1.2 What is PPP?
- •1.3 ARM TCP/IP requirements
- •1.3.1 Memory requirements
- •1.3.2 CPU requirements
- •1.3.3 Operating system requirements
- •1.4 ARM PPP requirements
- •1.4.1 Line management functions
- •1.4.2 Static memory
- •1.4.3 Dynamic memory
- •1.4.4 Periodic clock tick
- •1.5 Example package directories
- •1.6 Sample programs
- •TCP/IP Porting
- •2.1 Porting procedure
- •2.2 Portable and nonportable files
- •2.2.1 Portable files
- •2.2.2 Nonportable files
- •2.3 Creating the IP port file
- •2.3.1 Standard macros and definitions
- •2.3.2 CPU architecture
- •2.3.4 Debugging aids
- •2.3.5 Timers and multitasking
- •2.3.6 Stack features and options
- •2.4 Coding the glue layer
- •2.4.1 Task control
- •2.5 Specifying IP addresses
- •2.5.1 Porting programmer IP issues
- •2.5.2 End user IP issues
- •2.6 Testing the TCP/IP port
- •PPP Porting
- •3.1 Porting procedure
- •3.2 Porting PPP
- •3.2.1 Source files
- •3.2.2 Compiling PPP
- •3.2.3 Entry points and support calls
- •3.3 Testing PPP
- •3.3.1 Loopback
- •3.3.2 Client connection
- •3.3.3 Server connection
- •3.3.4 Abrupt disconnect
- •3.3.5 Multilink test
- •TCP/IP API Functions
- •4.2.1 cksum()
- •4.2.2 dprintf() and initmsg()
- •4.2.3 dtrap()
- •4.2.4 ENTER_CRIT_SECTION() and EXIT_CRIT_SECTION()
- •4.2.5 LOCK_NET_RESOURCE() and UNLOCK_NET_RESOURCE()
- •4.2.6 npalloc()
- •4.2.7 npfree()
- •4.2.8 panic()
- •4.2.9 prep_ifaces()
- •4.2.10 tcp_sleep()
- •4.2.11 tcp_wakeup()
- •4.3 Network interfaces
- •4.3.1 The NET structure
- •4.3.2 n_close()
- •4.3.3 n_init()
- •4.3.4 n_reg_type()
- •4.3.5 n_stats()
- •4.3.6 pkt_send()
- •4.3.7 raw_send()
- •PPP API Functions
- •5.2.1 _ALLOC() functions
- •5.2.2 ConPrintf()
- •5.2.3 _FREE() functions
- •5.2.4 get_secret()
- •5.2.5 ppp_port_init()
- •5.3 Serial line drivers
- •5.3.1 ln_connect()
- •5.3.2 ln_getc()
- •5.3.3 ln_hangup()
- •5.3.4 ln_putc()
- •5.3.5 ln_speed()
- •5.3.6 ln_state()
- •5.3.7 ln_write()
- •5.4 PPP entry points
- •5.4.1 lcp_lowerdown()
- •5.4.2 lcp_lowerup()
- •5.4.3 ppp_input()
- •5.4.4 ppp_timeisup()
- •5.4.5 prep_ppp()
- •Modem Functions
- •6.1 dialer.c
- •6.1.1 dial()
- •6.1.2 dial_check()
- •6.1.3 dialer_status()
- •6.1.4 modem_cmd()
- •6.1.5 modem_connect()
- •6.1.6 modem_getc()
- •6.1.7 modem_gets()
- •6.1.8 modem_hangup()
- •6.1.9 modem_init()
- •6.1.10 modem_lstate()
- •6.1.11 modem_putc()
- •6.1.12 modem_reset()
- •6.1.13 modem_speed()
- •6.1.14 modem_state()
- •6.1.15 modem_write()
- •6.2 login.c
- •6.2.1 do_script()
- •6.2.2 login()
- •6.2.3 log_input()
- •6.2.4 log_output()
- •6.2.5 logserver()
- •6.3 mdmport.c
- •6.3.1 dial_delay()
- •6.3.2 hangup()
- •6.3.3 modem_clr_dtr() and modem_set_dtr()
- •6.3.4 modem_DCD()
- •6.3.5 modem_portstat()
- •DHCP Client Functions
- •7.1 DHCP client functions
- •7.1.1 dhc_init()
- •7.1.2 dhc_discover()
- •7.1.3 dhc_set_callback()
- •7.1.4 dhc_halt()
- •7.1.5 dhc_second()
- •Low-overhead UDP Functions
- •8.1 UDP functions
- •8.1.1 udp_alloc()
- •8.1.2 udp_close()
- •8.1.3 udp_open()
- •8.1.4 udp_send()
- •8.1.5 udp_socket()
- •Sockets
- •9.1 ARM implementation of sockets
- •9.2 Socket API reference
- •9.2.1 t_accept()
- •9.2.2 t_bind()
- •9.2.3 t_connect()
- •9.2.4 t_errno()
- •9.2.5 t_getpeername()
- •9.2.6 t_getsockname()
- •9.2.7 t_getsockopt()
- •9.2.8 t_listen()
- •9.2.9 t_recv() and t_recvfrom()
- •9.2.10 t_select()
- •9.2.11 t_send() and t_sendto()
- •9.2.12 t_setsockopt()
- •9.2.13 t_shutdown()
- •9.2.14 t_socket()
- •9.2.15 t_socketclose()
- •ARM-specific Functions
- •10.1 ARM directories
- •10.1.1 armthumb
- •10.2 cksum.s
- •10.3 clock.c
- •10.3.1 clock_init()
- •10.3.2 clock_c()
- •10.4 delay.s
- •10.5 dtrap.s
- •10.6 except.s
- •10.7.1 ENTER_CRIT_SECTION() and EXIT_CRIT_SECTION()
- •10.7.2 irqDispatch()
- •10.7.3 irq_Enable() and irq_Disable()
- •10.7.4 irqInit()
- •10.8 lswap.s
- •10.10 olicom.c
- •10.11 pcmcia.c
- •10.12 stack.s
- •10.13 uart.c description
- •10.14 uart.c ring buffer management functions
- •10.14.1 ring_add()
- •10.14.2 ring_avail()
- •10.14.3 ring_new()
- •10.14.4 ring_remove()
- •10.14.5 ring_space()
- •10.15 uart.c interface functions
- •10.15.1 uart_getc()
- •10.15.2 uart_DCD()
- •10.15.3 uart_delay()
- •10.15.4 uart_do_irq()
- •10.15.5 uart_init()
- •10.15.6 uart_irq()
- •10.15.7 uart_putc()
- •10.15.8 uart_ready()
- •10.15.9 uart_reset()
- •10.15.10 uart_setup()
- •10.15.11 uart_stats()
- •10.16 uart.c debug TTY interface functions
- •10.16.1 dputchar()
- •10.16.2 getch()
- •10.16.3 kbhit()
- •Miscellaneous Library Functions
- •11.1 app_ping.c
- •11.2 in_utils.c
- •11.2.1 con_page()
- •11.2.2 hexdump()
- •11.2.3 nextarg()
- •11.2.4 ns_printf()
- •11.2.5 panic()
- •11.2.6 print_eth()
- •11.2.7 print_ipad()
- •11.2.8 print_uptime()
- •11.2.11 sysuptime()
- •11.2.12 uslash()
- •11.3 memman.c
- •11.4 menus.c, menulib.c, and nrmenus.c
- •11.5 nextcarg.c
- •11.5.1 nextcarg()
- •11.6 nvfsio.c
- •11.6.1 Overview
- •11.6.2 nv_fclose()
- •11.6.3 nv_fgets()
- •11.6.4 nv_fopen()
- •11.6.5 nv_fprintf()
- •11.6.6 nv_fwrite()
- •11.6.7 nv_initialize()
- •11.6.8 nv_writeflash()
- •11.7 nvparms.c
- •11.8 parseip.c
- •11.8.1 parseip()
- •11.9 reshost.c
- •11.9.1 in_reshost()
- •11.10 strilib.c
- •11.11 strlib.c
- •11.12 tcp_echo.c
- •11.13 ttyio.c
- •11.14 udp_echo.c
- •11.15 userpass.c
- •11.15.1 add_user()
- •11.15.2 check_permit()
- •Example Applications
- •12.1 Overview of the examples
- •12.1.1 Requirements
- •12.1.2 Building projects
- •12.1.3 Running the examples
- •12.2 Example descriptions
- •12.2.1 chargen
- •12.2.2 loopback
- •12.2.3 maildemo
- •12.2.4 menus
- •Error Codes
- •A.1 ENP_ error codes
- •A.2 Socket error codes
Porting TCP/IP
Version 1.4
Programmer’s Guide
Copyright © 1998 and 1999 ARM Limited. All rights reserved.
ARM DUI 0079B
Copyright © 1998 and 1999 ARM Limited. All rights reserved.
Release Information
The following changes have been made to this document.
|
|
Change History |
|
|
|
Date |
Issue |
Change |
|
|
|
October 1998 |
A |
First release |
|
|
|
June 1999 |
B |
Second release, changes reflect software revision 1.4 |
|
|
|
Proprietary Notice
ARM, the ARM Powered logo, Thumb, and StrongARM are registered trademarks of ARM Limited.
The ARM logo, AMBA, PrimeCell, Angel, ARMulator, EmbeddedICE, ModelGen, Multi-ICE, ARM7TDMI, ARM7TDMI-S, ARM9TDMI, TDMI, and STRONG are trademarks of ARM Limited.
All other products or services mentioned herein may be trademarks of their respective owners.
Neither the whole nor any part of the information contained in, or the product described in, this document may be adapted or reproduced in any material form except with the prior written permission of the copyright holder.
The product described in this document is subject to continuous development and improvements. All particulars of the product and its use contained in this document are given by ARM in good faith. However, all warranties implied or expressed, including but not limited to implied warranties of merchantability, or fitness for purpose, are excluded.
This document is intended only to assist the reader in the use of the product. ARM Ltd shall not be liable for any loss or damage arising from the use of any information in this document, or any error or omission in such information, or any incorrect use of the product.
ii |
Copyright © 1998 and 1999 ARM Limited. All rights reserved. |
ARM DUI 0079B |
Contents
Programmer’s Guide
Preface
|
|
About this book ............................................................................................. |
viii |
|
|
Feedback ........................................................................................................ |
xi |
Chapter 1 |
Introduction |
|
|
|
1.1 |
A typical embedded networking stack .......................................................... |
1-2 |
|
1.2 |
What is PPP? ............................................................................................... |
1-4 |
|
1.3 |
ARM TCP/IP requirements ........................................................................... |
1-7 |
|
1.4 |
ARM PPP requirements ............................................................................. |
1-12 |
|
1.5 |
Example package directories ..................................................................... |
1-16 |
|
1.6 |
Sample programs ....................................................................................... |
1-18 |
Chapter 2 |
TCP/IP Porting |
|
|
|
2.1 |
Porting procedure ........................................................................................ |
2-2 |
|
2.2 |
Portable and nonportable files ..................................................................... |
2-3 |
|
2.3 |
Creating the IP port file ................................................................................ |
2-4 |
|
2.4 |
Coding the glue layer ................................................................................. |
2-10 |
|
2.5 |
Specifying IP addresses ............................................................................ |
2-14 |
|
2.6 |
Testing the TCP/IP port ............................................................................. |
2-16 |
Chapter 3 |
PPP Porting |
|
|
|
3.1 |
Porting procedure ........................................................................................ |
3-2 |
|
3.2 |
Porting PPP ................................................................................................. |
3-3 |
|
3.3 |
Testing PPP ................................................................................................. |
3-9 |
Chapter 4 |
TCP/IP API Functions |
|
|
|
4.1 |
Overview of user-provided TCP/IP functions ............................................... |
4-2 |
|
4.2 |
User-provided TCP and IP functions ............................................................ |
4-3 |
|
4.3 |
Network interfaces ..................................................................................... |
4-15 |
Chapter 5 |
PPP API Functions |
|
|
|
5.1 |
Overview of user-provided PPP functions .................................................... |
5-2 |
ARM DUI 0079B |
Copyright © 1998 and 1999 ARM Limited. All rights reserved. |
iii |
|
5.2 |
User-provided PPP functions ...................................................................... |
5-3 |
|
5.3 |
Serial line drivers ....................................................................................... |
5-10 |
|
5.4 |
PPP entry points ........................................................................................ |
5-18 |
Chapter 6 |
Modem Functions |
|
|
|
6.1 |
dialer.c ......................................................................................................... |
6-2 |
|
6.2 |
login.c ........................................................................................................ |
6-18 |
|
6.3 |
mdmport.c .................................................................................................. |
6-24 |
Chapter 7 |
DHCP Client Functions |
|
|
|
7.1 |
DHCP client functions .................................................................................. |
7-2 |
Chapter 8 |
Low-overhead UDP Functions |
|
|
|
8.1 |
UDP functions .............................................................................................. |
8-2 |
Chapter 9 |
Sockets |
|
|
|
9.1 |
ARM implementation of sockets .................................................................. |
9-2 |
|
9.2 |
Socket API reference ................................................................................... |
9-3 |
Chapter 10 |
ARM-specific Functions |
|
|
|
10.1 |
ARM directories ......................................................................................... |
10-3 |
|
10.2 |
cksum.s ..................................................................................................... |
10-5 |
|
10.3 |
clock.c ........................................................................................................ |
10-6 |
|
10.4 |
delay.s ....................................................................................................... |
10-7 |
|
10.5 |
dtrap.s ........................................................................................................ |
10-8 |
|
10.6 |
except.s ..................................................................................................... |
10-9 |
|
10.7 |
irq.c .......................................................................................................... |
10-10 |
|
10.8 |
lswap.s ..................................................................................................... |
10-12 |
|
10.9 |
mmu.s ...................................................................................................... |
10-13 |
|
10.10 |
olicom.c ................................................................................................... |
10-14 |
|
10.11 |
pcmcia.c .................................................................................................. |
10-15 |
|
10.12 |
stack.s ..................................................................................................... |
10-16 |
|
10.13 |
uart.c description ..................................................................................... |
10-17 |
|
10.14 |
uart.c ring buffer management functions ................................................. |
10-18 |
|
10.15 |
uart.c interface functions ......................................................................... |
10-22 |
|
10.16 |
uart.c debug TTY interface functions ....................................................... |
10-31 |
|
10.17 |
82595.c .................................................................................................... |
10-33 |
Chapter 11 |
Miscellaneous Library Functions |
|
|
|
11.1 |
app_ping.c ................................................................................................. |
11-3 |
|
11.2 |
in_utils.c ..................................................................................................... |
11-4 |
|
11.3 |
memman.c ............................................................................................... |
11-16 |
|
11.4 |
menus.c, menulib.c, and nrmenus.c ........................................................ |
11-17 |
|
11.5 |
nextcarg.c ................................................................................................ |
11-18 |
|
11.6 |
nvfsio.c .................................................................................................... |
11-19 |
|
11.7 |
nvparms.c ................................................................................................ |
11-27 |
iv |
Copyright © 1998 and 1999 ARM Limited. All rights reserved. |
ARM DUI 0079B |
|
11.8 |
parseip.c .................................................................................................. |
11-28 |
|
11.9 |
reshost.c .................................................................................................. |
11-29 |
|
11.10 |
strilib.c ...................................................................................................... |
11-31 |
|
11.11 |
strlib.c ....................................................................................................... |
11-32 |
|
11.12 |
tcp_echo.c ................................................................................................ |
11-33 |
|
11.13 |
ttyio.c ........................................................................................................ |
11-34 |
|
11.14 |
udp_echo.c .............................................................................................. |
11-35 |
|
11.15 |
userpass.c ................................................................................................ |
11-36 |
Chapter 12 |
Example Applications |
|
|
|
12.1 |
Overview of the examples .......................................................................... |
12-2 |
|
12.2 |
Example descriptions ................................................................................. |
12-5 |
Appendix A |
Error Codes |
|
|
|
A.1 |
ENP_ error codes ........................................................................................ |
A-2 |
|
A.2 |
Socket error codes....................................................................................... |
A-3 |
ARM DUI 0079B |
Copyright © 1998 and 1999 ARM Limited. All rights reserved. |
v |
vi |
Copyright © 1998 and 1999 ARM Limited. All rights reserved. |
ARM DUI 0079B |
Preface
This preface introduces the ARM TCP/IP and PPP implementations and their documentation. It contains the following sections:
•About this book on page viii
•Feedback on page xi.
ARM DUI 0079B |
Copyright © 1998 and 1999 ARM Limited. All rights reserved. |
vii |