lwIP  2.1.0
Lightweight IP stack
ip4_frag.c File Reference
#include "lwip/opt.h"
#include "lwip/ip4_frag.h"
#include "lwip/def.h"
#include "lwip/inet_chksum.h"
#include "lwip/netif.h"
#include "lwip/stats.h"
#include "lwip/icmp.h"
#include <string.h>
#include "arch/bpstruct.h"
#include "arch/epstruct.h"

Data Structures

struct  ip_reass_helper
 

Macros

#define IP_REASS_CHECK_OVERLAP   1
 
#define IP_REASS_FREE_OLDEST   1
 

Functions

void ip_reass_tmr (void)
 
struct pbufip4_reass (struct pbuf *p)
 
err_t ip4_frag (struct pbuf *p, struct netif *netif, const ip4_addr_t *dest)
 

Detailed Description

This is the IPv4 packet segmentation and reassembly implementation.

Macro Definition Documentation

◆ IP_REASS_CHECK_OVERLAP

#define IP_REASS_CHECK_OVERLAP   1

The IP reassembly code currently has the following limitations:

  • IP header options are not supported
  • fragments must not overlap (e.g. due to different routes), currently, overlapping or duplicate fragments are thrown away if IP_REASS_CHECK_OVERLAP=1 (the default)!

Setting this to 0, you can turn off checking the fragments for overlapping regions. The code gets a little smaller. Only use this if you know that overlapping won't occur on your network!

◆ IP_REASS_FREE_OLDEST

#define IP_REASS_FREE_OLDEST   1

Set to 0 to prevent freeing the oldest datagram when the reassembly buffer is full (IP_REASS_MAX_PBUFS pbufs are enqueued). The code gets a little smaller. Datagrams will be freed by timeout only. Especially useful when MEMP_NUM_REASSDATA is set to 1, so one datagram can be reassembled at a time, only.

Function Documentation

◆ ip4_frag()

err_t ip4_frag ( struct pbuf p,
struct netif netif,
const ip4_addr_t dest 
)

Fragment an IP datagram if too large for the netif.

Chop the datagram in MTU sized chunks and send them in order by pointing PBUF_REFs into p.

Parameters
pip packet to send
netifthe netif on which to send
destdestination ip address to which to send
Returns
ERR_OK if sent successfully, err_t otherwise

◆ ip4_reass()

struct pbuf* ip4_reass ( struct pbuf p)

Reassembles incoming IP fragments into an IP datagram.

Parameters
ppoints to a pbuf chain of the fragment
Returns
NULL if reassembly is incomplete, ? otherwise

◆ ip_reass_tmr()

void ip_reass_tmr ( void  )

Reassembly timer base function for both NO_SYS == 0 and 1 (!).

Should be called every 1000 msec (defined by IP_TMR_INTERVAL).