lwIP  2.0.2
Lightweight IP stack

Functions

err_t raw_bind (struct raw_pcb *pcb, const ip_addr_t *ipaddr)
 
err_t raw_connect (struct raw_pcb *pcb, const ip_addr_t *ipaddr)
 
void raw_recv (struct raw_pcb *pcb, raw_recv_fn recv, void *recv_arg)
 
err_t raw_sendto (struct raw_pcb *pcb, struct pbuf *p, const ip_addr_t *ipaddr)
 
err_t raw_send (struct raw_pcb *pcb, struct pbuf *p)
 
void raw_remove (struct raw_pcb *pcb)
 
struct raw_pcbraw_new (u8_t proto)
 
struct raw_pcbraw_new_ip_type (u8_t type, u8_t proto)
 

Detailed Description

Implementation of raw protocol PCBs for low-level handling of different types of protocols besides (or overriding) those already available in lwIP.

See also
lwIP API

Function Documentation

◆ raw_bind()

err_t raw_bind ( struct raw_pcb pcb,
const ip_addr_t ipaddr 
)

Bind a RAW PCB.

Parameters
pcbRAW PCB to be bound with a local address ipaddr.
ipaddrlocal IP address to bind with. Use IP4_ADDR_ANY to bind to all local interfaces.
Returns
lwIP error code.
  • ERR_OK. Successful. No error occurred.
  • ERR_USE. The specified IP address is already bound to by another RAW PCB.
See also
raw_disconnect()

◆ raw_connect()

err_t raw_connect ( struct raw_pcb pcb,
const ip_addr_t ipaddr 
)

Connect an RAW PCB. This function is required by upper layers of lwip. Using the raw api you could use raw_sendto() instead

This will associate the RAW PCB with the remote address.

Parameters
pcbRAW PCB to be connected with remote address ipaddr and port.
ipaddrremote IP address to connect with.
Returns
lwIP error code
See also
raw_disconnect() and raw_sendto()

◆ raw_new()

struct raw_pcb* raw_new ( u8_t  proto)

Create a RAW PCB.

Returns
The RAW PCB which was created. NULL if the PCB data structure could not be allocated.
Parameters
protothe protocol number of the IPs payload (e.g. IP_PROTO_ICMP)
See also
raw_remove()

◆ raw_new_ip_type()

struct raw_pcb* raw_new_ip_type ( u8_t  type,
u8_t  proto 
)

Create a RAW PCB for specific IP type.

Returns
The RAW PCB which was created. NULL if the PCB data structure could not be allocated.
Parameters
typeIP address type, see lwip_ip_addr_type definitions. If you want to listen to IPv4 and IPv6 (dual-stack) packets, supply IPADDR_TYPE_ANY as argument and bind to IP_ANY_TYPE.
protothe protocol number (next header) of the IPv6 packet payload (e.g. IP6_NEXTH_ICMP6)
See also
raw_remove()

◆ raw_recv()

void raw_recv ( struct raw_pcb pcb,
raw_recv_fn  recv,
void *  recv_arg 
)

Set the callback function for received packets that match the raw PCB's protocol and binding.

The callback function MUST either

  • eat the packet by calling pbuf_free() and returning non-zero. The packet will not be passed to other raw PCBs or other protocol layers.
  • not free the packet, and return zero. The packet will be matched against further PCBs and/or forwarded to another protocol layers.

◆ raw_remove()

void raw_remove ( struct raw_pcb pcb)

Remove an RAW PCB.

Parameters
pcbRAW PCB to be removed. The PCB is removed from the list of RAW PCB's and the data structure is freed from memory.
See also
raw_new()

◆ raw_send()

err_t raw_send ( struct raw_pcb pcb,
struct pbuf p 
)

Send the raw IP packet to the address given by raw_connect()

Parameters
pcbthe raw pcb which to send
pthe IP payload to send

◆ raw_sendto()

err_t raw_sendto ( struct raw_pcb pcb,
struct pbuf p,
const ip_addr_t ipaddr 
)

Send the raw IP packet to the given address. Note that actually you cannot modify the IP headers (this is inconsistent with the receive callback where you actually get the IP headers), you can only specify the IP payload here. It requires some more changes in lwIP. (there will be a raw_send() function then.)

Parameters
pcbthe raw pcb which to send
pthe IP payload to send
ipaddrthe destination address of the IP packet