Writing tiny protocol stacks Especially TCPIP - PowerPoint PPT Presentation

1 / 23
About This Presentation
Title:

Writing tiny protocol stacks Especially TCPIP

Description:

Even embedded devices with tiny 8-bit microcontrollers! ... Suitable for '16-bit systems' Application. Stack. Network. Application driven ... – PowerPoint PPT presentation

Number of Views:45
Avg rating:3.0/5.0
Slides: 24
Provided by: sics
Category:

less

Transcript and Presenter's Notes

Title: Writing tiny protocol stacks Especially TCPIP


1
Writing tiny protocol stacks(Especially TCP/IP)
  • Adam Dunkels
  • Computer and Network Architectures lab _at_ SICS
  • Dept of Computer Science and Electronics _at_ MdH
  • 18 January 2005

2
Today's message
  • Think like the network!

3
What is all this about?
  • We want to network almost everything!
  • Even embedded devices with tiny 8-bit
    microcontrollers!
  • Typical characteristics 10k RAM, 100k ROM
  • Network? Does that mean TCP/IP? Bluetooth? CAN?
  • Today TCP/IP

4
But TCP/IP is LARGE!
5
TCP/IP IS large!
  • Linux TCP/IP stack 100k code! 400K RAM!
  • µCLinux kernel 400 kb, 1 megabyte RAM

4k RAM, 60k ROM...
6
  • But what if
  • we could make it smaller?

7
Background the TCP/IP stack
  • UDP best-effort datagrams
  • TCP connection oriented, reliable byte-stream,
    full-duplex
  • Flow control, congestion control, etc
  • IP best-effort packet delivery
  • Forwarding, fragmentation
  • The hard parts are IP and TCP

8
The design of a small TCP/IP stack
  • I have written a bunch of (different) TCP/IP
    stacks
  • Focus today on lwIP and µIP
  • lwIP lightweight IP
  • Application driven gt larger
  • µIP micro IP
  • Network driven gt smaller

Think like the network
9
The two stacks lwIP and µIP
  • Both quite widely used
  • Products from 30 companies
  • Only the tip of the iceberg
  • lwIP the larger
  • 16-bit systems
  • µIP the smaller
  • 8-bit systems

10
lwIP Application driven
  • lwIP lightweight IP
  • First release late 2000
  • 40k code, 40k RAM
  • Application driven design
  • Similar to Linux, BSD stacks
  • Suitable for 16-bit systems

11
µIP The smallest TCP/IP stack in the world
  • First release 2001
  • 5k code, 100 bytes 2k RAM
  • Full TCP/IP (RFC compliant)
  • Unconventional design
  • The secrets
  • Shared packet buffer
  • Lower throughput
  • Event-driven application interface

Think like the network
12
The secrets of µIP
13
The secrets of µIP
  • Shared packet buffer
  • Lower throughput
  • Event-driven application programming interface

14
The secrets of µIP part I A shared packet buffer
  • All packets both outbound and inbound use the
    same buffer
  • Size of buffer determines throughput

Outbound packet
Incoming packet
Packet buffer
15
The secrets of µIP part I A shared packet
buffer II
  • Implicit locking single-threaded access
  • Grab packet from network put into buffer
  • Process packet
  • Put reply packet in the same buffer
  • Send reply packet into network

Think like the network
Packet buffer
16
The secrets of µIP part II Throughput
  • µIP trades throughput for RAM
  • Low RAM usage low throughput
  • Small systems not that much data!
  • Ability to communicate more important!
  • Example CubeSat
  • µIP with 100 bytes buffer
  • 9600 bps RF link

17
The secrets of µIP part III Application
Programming Interface I
  • µIP does not have BSD sockets
  • BSD sockets are built on threads
  • Threads induce overhead (RAM)
  • Instead event-driven API
  • Execution is always initiated by µIP
  • Applications are called by µIP, call must return
  • Application cannot block
  • Not entirely true...

18
The secrets of µIP part III Application
Programming Interface II
void example2_app(void) struct
example2_state s (struct example2_state
)uip_conn-gtappstate if(uip_connected())
s-gtstate WELCOME_SENT
uip_send("Welcome!\n", 9) return
if(uip_acked() s-gtstate
WELCOME_SENT) s-gtstate WELCOME_ACKED
if(uip_newdata()) uip_send("ok\n",
3)
if(uip_rexmit()) switch(s-gtstate)
case WELCOME_SENT
uip_send("Welcome!\n", 9) break
case WELCOME_ACKED uip_send("ok\n",
3) break
19
The secrets of µIP part III Application
Programming Interface III
  • Event-driven API sometimes is problematic
  • Manually handle retransmissions,
    acknowledgments
  • Alternative sockets-like API using protothreads
  • Very lightweight stackless threads
  • 2 bytes per-thread state, no stack
  • Protothreads allow blocking functions, even
    when called from µIP!

20
The secrets of µIP part III Application
Programming Interface IV
PT_THREAD(smtp_thread(void))
PSOCK_BEGIN(s) PSOCK_READTO(s, '\n')
if(strncmp(inputbuffer, 220, 3) ! 0)
PSOCK_CLOSE(s) PSOCK_EXIT(s)
PSOCK_SEND(s, HELO , 5) PSOCK_SEND(s,
hostname, strlen(hostname)) PSOCK_SEND(s,
\r\n, 2) PSOCK_READTO(s, '\n')
if(inputbuffer0 ! '2') PSOCK_CLOSE(s)
PSOCK_EXIT(s) / Och så vidare...
/
21
The secrets of µIP part III Application
Programming Interface V
  • API built from the bottom (network) and up
  • Protothreads and protosockets API provides
    sequential programming
  • Less overhead than real threads and the real
    socket API

22
Conclusions
  • Protocols may seem complicated and big, yet they
    can be implemented efficiently
  • The TCP/IP example shows this
  • Designing from the network and up reduces size
  • Usually backwards from protocol definition

Think like the network
23
Thank you!
  • Adam Dunkels ltadam_at_sics.segt
  • http//www.sics.se/adam/uip/
Write a Comment
User Comments (0)
About PowerShow.com