udp.c File Reference


Functions

void udp_input (struct pbuf *p, struct netif *inp)
err_t udp_send (struct udp_pcb *pcb, struct pbuf *p)
err_t udp_sendto (struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *dst_ip, u16_t dst_port)
err_t udp_sendto_if (struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *dst_ip, u16_t dst_port, struct netif *netif)
err_t udp_bind (struct udp_pcb *pcb, struct ip_addr *ipaddr, u16_t port)
err_t udp_connect (struct udp_pcb *pcb, struct ip_addr *ipaddr, u16_t port)
void udp_disconnect (struct udp_pcb *pcb)
void udp_recv (struct udp_pcb *pcb, void(*recv)(void *arg, struct udp_pcb *upcb, struct pbuf *p, struct ip_addr *addr, u16_t port), void *recv_arg)
void udp_remove (struct udp_pcb *pcb)
struct udp_pcb * udp_new (void)
void udp_debug_print (struct udp_hdr *udphdr)

Detailed Description

User Datagram Protocol module

Function Documentation

err_t udp_bind ( struct udp_pcb *  pcb,
struct ip_addr *  ipaddr,
u16_t  port 
)

Bind an UDP PCB.

Parameters:
pcb UDP PCB to be bound with a local address ipaddr and port.
ipaddr local IP address to bind with. Use IP_ADDR_ANY to bind to all local interfaces.
port local UDP port to bind with. Use 0 to automatically bind to a random port between UDP_LOCAL_PORT_RANGE_START and UDP_LOCAL_PORT_RANGE_END.
ipaddr & port are expected to be in the same byte order as in the pcb.

Returns:
lwIP error code.
  • ERR_OK. Successful. No error occured.
  • ERR_USE. The specified ipaddr and port are already bound to by another UDP PCB.
See also:
udp_disconnect()

err_t udp_connect ( struct udp_pcb *  pcb,
struct ip_addr *  ipaddr,
u16_t  port 
)

Connect an UDP PCB.

This will associate the UDP PCB with the remote address.

Parameters:
pcb UDP PCB to be connected with remote address ipaddr and port.
ipaddr remote IP address to connect with.
port remote UDP port to connect with.
Returns:
lwIP error code
ipaddr & port are expected to be in the same byte order as in the pcb.

The udp pcb is bound to a random local port if not already bound.

See also:
udp_disconnect()

TODO: this functionality belongs in upper layers

TODO: this will bind the udp pcb locally, to the interface which is used to route output packets to the remote address. However, we might want to accept incoming packets on any interface!

void udp_debug_print ( struct udp_hdr *  udphdr  ) 

Print UDP header information for debug purposes.

Parameters:
udphdr pointer to the udp header in memory.

void udp_disconnect ( struct udp_pcb *  pcb  ) 

Disconnect a UDP PCB

Parameters:
pcb the udp pcb to disconnect.

void udp_input ( struct pbuf *  p,
struct netif inp 
)

Process an incoming UDP datagram.

Given an incoming UDP datagram (as a chain of pbufs) this function finds a corresponding UDP PCB and hands over the pbuf to the pcbs recv function. If no pcb is found or the datagram is incorrect, the pbuf is freed.

Parameters:
p pbuf to be demultiplexed to a UDP PCB.
inp network interface on which the datagram was received.

struct udp_pcb* udp_new ( void   )  [read]

Create a UDP PCB.

Returns:
The UDP PCB which was created. NULL if the PCB data structure could not be allocated.
See also:
udp_remove()

void udp_recv ( struct udp_pcb *  pcb,
void(*)(void *arg, struct udp_pcb *upcb, struct pbuf *p, struct ip_addr *addr, u16_t port)  recv,
void *  recv_arg 
)

Set a receive callback for a UDP PCB

This callback will be called when receiving a datagram for the pcb.

Parameters:
pcb the pcb for wich to set the recv callback
recv function pointer of the callback function
recv_arg additional argument to pass to the callback function

void udp_remove ( struct udp_pcb *  pcb  ) 

Remove an UDP PCB.

Parameters:
pcb UDP PCB to be removed. The PCB is removed from the list of UDP PCB's and the data structure is freed from memory.
See also:
udp_new()

err_t udp_send ( struct udp_pcb *  pcb,
struct pbuf *  p 
)

Send data using UDP.

Parameters:
pcb UDP PCB used to send the data.
p chain of pbuf's to be sent.
The datagram will be sent to the current remote_ip & remote_port stored in pcb. If the pcb is not bound to a port, it will automatically be bound to a random port.

Returns:
lwIP error code.
  • ERR_OK. Successful. No error occured.
  • ERR_MEM. Out of memory.
  • ERR_RTE. Could not find route to destination address.
  • More errors could be returned by lower protocol layers.
See also:
udp_disconnect() udp_sendto()

err_t udp_sendto ( struct udp_pcb *  pcb,
struct pbuf *  p,
struct ip_addr *  dst_ip,
u16_t  dst_port 
)

Send data to a specified address using UDP.

Parameters:
pcb UDP PCB used to send the data.
p chain of pbuf's to be sent.
dst_ip Destination IP address.
dst_port Destination UDP port.
dst_ip & dst_port are expected to be in the same byte order as in the pcb.

If the PCB already has a remote address association, it will be restored after the data is sent.

Returns:
lwIP error code (
See also:
udp_send for possible error codes)

udp_disconnect() udp_send()

err_t udp_sendto_if ( struct udp_pcb *  pcb,
struct pbuf *  p,
struct ip_addr *  dst_ip,
u16_t  dst_port,
struct netif netif 
)

Send data to a specified address using UDP. The netif used for sending can be specified.

This function exists mainly for DHCP, to be able to send UDP packets on a netif that is still down.

Parameters:
pcb UDP PCB used to send the data.
p chain of pbuf's to be sent.
dst_ip Destination IP address.
dst_port Destination UDP port.
netif the netif used for sending.
dst_ip & dst_port are expected to be in the same byte order as in the pcb.

Returns:
lwIP error code (
See also:
udp_send for possible error codes)

udp_disconnect() udp_send()


Generated on Sun Mar 23 19:22:46 2008 for lwIP 1.3.0 by  doxygen 1.5.4