Contiki 2.5
Files | Functions | Variables
Architecture specific uIP functions

The functions in the architecture specific module implement the IP check sum and 32-bit additions. More...

Files

file  uip_arch.h
 Declarations of architecture specific functions.
 

Functions

void uip_add32 (u8_t *op32, u16_t op16)
 Carry out a 32-bit addition. More...
 
u16_t uip_chksum (u16_t *buf, u16_t len)
 Calculate the Internet checksum over a buffer. More...
 
u16_t uip_ipchksum (void)
 Calculate the IP header checksum of the packet header in uip_buf. More...
 
u16_t uip_tcpchksum (void)
 Calculate the TCP checksum of the packet in uip_buf and uip_appdata. More...
 

Variables

u8_t uip_acc32 [4]
 4-byte array used for the 32-bit sequence number calculations.
 

Detailed Description

The functions in the architecture specific module implement the IP check sum and 32-bit additions.

The IP checksum calculation is the most computationally expensive operation in the TCP/IP stack and it therefore pays off to implement this in efficient assembler. The purpose of the uip-arch module is to let the checksum functions to be implemented in architecture specific assembler.

Function Documentation

void uip_add32 ( u8_t op32,
u16_t  op16 
)

Carry out a 32-bit addition.

Because not all architectures for which uIP is intended has native 32-bit arithmetic, uIP uses an external C function for doing the required 32-bit additions in the TCP protocol processing. This function should add the two arguments and place the result in the global variable uip_acc32.

Note
The 32-bit integer pointed to by the op32 parameter and the result in the uip_acc32 variable are in network byte order (big endian).
Parameters
op32A pointer to a 4-byte array representing a 32-bit integer in network byte order (big endian).
op16A 16-bit integer in host byte order.

Definition at line 241 of file uip.c.

References uip_acc32.

Referenced by uip_process(), and uip_split_output().

u16_t uip_chksum ( u16_t buf,
u16_t  len 
)

Calculate the Internet checksum over a buffer.

The Internet checksum is the one's complement of the one's complement sum of all 16-bit words in the buffer.

See RFC1071.

Note
This function is not called in the current version of uIP, but future versions might make use of it.
Parameters
bufA pointer to the buffer over which the checksum is to be computed.
lenThe length of the buffer over which the checksum is to be computed.
Returns
The Internet checksum of the buffer.

The Internet checksum is the one's complement of the one's complement sum of all 16-bit words in the buffer.

See RFC1071.

Parameters
bufA pointer to the buffer over which the checksum is to be computed.
lenThe length of the buffer over which the checksum is to be computed.
Returns
The Internet checksum of the buffer.

Definition at line 303 of file uip.c.

References uip_htons().

Referenced by uip_process().

u16_t uip_ipchksum ( void  )

Calculate the IP header checksum of the packet header in uip_buf.

The IP header checksum is the Internet checksum of the 20 bytes of the IP header.

Returns
The IP header checksum of the IP header in the uip_buf buffer.

Definition at line 310 of file uip.c.

References uip_htons(), uip_ipchksum(), and UIP_LLH_LEN.

Referenced by hc_inflate(), uip_ipchksum(), uip_process(), and uip_split_output().

u16_t uip_tcpchksum ( void  )

Calculate the TCP checksum of the packet in uip_buf and uip_appdata.

The TCP checksum is the Internet checksum of data contents of the TCP segment, and a pseudo-header as defined in RFC793.

Note
The uip_appdata pointer that points to the packet data may point anywhere in memory, so it is not possible to simply calculate the Internet checksum of the contents of the uip_buf buffer.
Returns
The TCP checksum of the TCP segment in uip_buf and pointed to by uip_appdata.

The TCP checksum is the Internet checksum of data contents of the TCP segment, and a pseudo-header as defined in RFC793.

Returns
The TCP checksum of the TCP segment in uip_buf and pointed to by uip_appdata.

Definition at line 356 of file uip.c.

References uip_appdata, UIP_LLH_LEN, and uip_tcpchksum().

Referenced by uip_process(), uip_split_output(), and uip_tcpchksum().