LibXenon
Bare-metal Xbox 360 homebrew library
Loading...
Searching...
No Matches
Data Structures | Macros | Functions | Variables
ip.h File Reference
#include "lwip/opt.h"
#include "lwip/def.h"
#include "lwip/pbuf.h"
#include "lwip/ip_addr.h"
#include "lwip/err.h"
#include "lwip/netif.h"
Include dependency graph for ip.h:

Go to the source code of this file.

Data Structures

struct  ip_pcb
 
struct  ip_hdr
 

Macros

#define IP_OPTIONS_SEND   LWIP_IGMP
 
#define IP_HLEN   20
 
#define IP_PROTO_ICMP   1
 
#define IP_PROTO_IGMP   2
 
#define IP_PROTO_UDP   17
 
#define IP_PROTO_UDPLITE   136
 
#define IP_PROTO_TCP   6
 
#define IP_HDRINCL   NULL
 
#define IP_PCB_ADDRHINT
 
#define IP_PCB
 
#define SOF_ACCEPTCONN   0x02U /* socket has had listen() */
 
#define SOF_REUSEADDR   0x04U /* allow local address reuse */
 
#define SOF_KEEPALIVE   0x08U /* keep connections alive */
 
#define SOF_BROADCAST   0x20U /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */
 
#define SOF_LINGER   0x80U /* linger on close if data present */
 
#define SOF_INHERITED   (SOF_REUSEADDR|SOF_KEEPALIVE|SOF_LINGER/*|SOF_DEBUG|SOF_DONTROUTE|SOF_OOBINLINE*/)
 
#define IP_RF   0x8000U /* reserved fragment flag */
 
#define IP_DF   0x4000U /* dont fragment flag */
 
#define IP_MF   0x2000U /* more fragments flag */
 
#define IP_OFFMASK   0x1fffU /* mask for fragmenting bits */
 
#define IPH_V(hdr)   ((hdr)->_v_hl >> 4)
 
#define IPH_HL(hdr)   ((hdr)->_v_hl & 0x0f)
 
#define IPH_TOS(hdr)   ((hdr)->_tos)
 
#define IPH_LEN(hdr)   ((hdr)->_len)
 
#define IPH_ID(hdr)   ((hdr)->_id)
 
#define IPH_OFFSET(hdr)   ((hdr)->_offset)
 
#define IPH_TTL(hdr)   ((hdr)->_ttl)
 
#define IPH_PROTO(hdr)   ((hdr)->_proto)
 
#define IPH_CHKSUM(hdr)   ((hdr)->_chksum)
 
#define IPH_VHL_SET(hdr, v, hl)   (hdr)->_v_hl = (((v) << 4) | (hl))
 
#define IPH_TOS_SET(hdr, tos)   (hdr)->_tos = (tos)
 
#define IPH_LEN_SET(hdr, len)   (hdr)->_len = (len)
 
#define IPH_ID_SET(hdr, id)   (hdr)->_id = (id)
 
#define IPH_OFFSET_SET(hdr, off)   (hdr)->_offset = (off)
 
#define IPH_TTL_SET(hdr, ttl)   (hdr)->_ttl = (u8_t)(ttl)
 
#define IPH_PROTO_SET(hdr, proto)   (hdr)->_proto = (u8_t)(proto)
 
#define IPH_CHKSUM_SET(hdr, chksum)   (hdr)->_chksum = (chksum)
 
#define ip_init()   /* Compatibility define, not init needed. */
 
#define ip_current_netif()   (current_netif)
 
#define ip_current_header()   (current_header)
 
#define ip_current_src_addr()   (&current_iphdr_src)
 
#define ip_current_dest_addr()   (&current_iphdr_dest)
 
#define ip_get_option(pcb, opt)   ((pcb)->so_options & (opt))
 
#define ip_set_option(pcb, opt)   ((pcb)->so_options |= (opt))
 
#define ip_reset_option(pcb, opt)   ((pcb)->so_options &= ~(opt))
 
#define ip_debug_print(p)
 

Functions

struct netifip_route (ip_addr_t *dest)
 
err_t ip_input (struct pbuf *p, struct netif *inp)
 
err_t ip_output (struct pbuf *p, ip_addr_t *src, ip_addr_t *dest, u8_t ttl, u8_t tos, u8_t proto)
 
err_t ip_output_if (struct pbuf *p, ip_addr_t *src, ip_addr_t *dest, u8_t ttl, u8_t tos, u8_t proto, struct netif *netif)
 

Variables

PACK_STRUCT_BEGIN struct ip_hdr PACK_STRUCT_STRUCT
 
struct netifcurrent_netif
 
const struct ip_hdrcurrent_header
 
ip_addr_t current_iphdr_src
 
ip_addr_t current_iphdr_dest
 

Macro Definition Documentation

◆ ip_current_dest_addr

#define ip_current_dest_addr ( )    (&current_iphdr_dest)

Destination IP address of current_header

Definition at line 202 of file ip.h.

◆ ip_current_header

#define ip_current_header ( )    (current_header)

Get the IP header of the current packet. This function must only be called from a receive callback (udp_recv, raw_recv, tcp_accept). It will return NULL otherwise.

Definition at line 198 of file ip.h.

◆ ip_current_netif

#define ip_current_netif ( )    (current_netif)

Get the interface that received the current packet. This function must only be called from a receive callback (udp_recv, raw_recv, tcp_accept). It will return NULL otherwise.

Definition at line 194 of file ip.h.

◆ ip_current_src_addr

#define ip_current_src_addr ( )    (&current_iphdr_src)

Source IP address of current_header

Definition at line 200 of file ip.h.

◆ ip_debug_print

#define ip_debug_print (   p)

Definition at line 214 of file ip.h.

◆ IP_DF

#define IP_DF   0x4000U /* dont fragment flag */

Definition at line 128 of file ip.h.

◆ ip_get_option

#define ip_get_option (   pcb,
  opt 
)    ((pcb)->so_options & (opt))

Gets an IP pcb option (SOF_* flags)

Definition at line 205 of file ip.h.

◆ IP_HDRINCL

#define IP_HDRINCL   NULL

Definition at line 64 of file ip.h.

◆ IP_HLEN

#define IP_HLEN   20

Definition at line 50 of file ip.h.

◆ ip_init

#define ip_init (   void)    /* Compatibility define, not init needed. */

Definition at line 174 of file ip.h.

◆ IP_MF

#define IP_MF   0x2000U /* more fragments flag */

Definition at line 129 of file ip.h.

◆ IP_OFFMASK

#define IP_OFFMASK   0x1fffU /* mask for fragmenting bits */

Definition at line 130 of file ip.h.

◆ IP_OPTIONS_SEND

#define IP_OPTIONS_SEND   LWIP_IGMP

Currently, the function ip_output_if_opt() is only used with IGMP

Definition at line 48 of file ip.h.

◆ IP_PCB

#define IP_PCB
Value:
/* ip addresses in network byte order */ \
ip_addr_t local_ip; \
ip_addr_t remote_ip; \
/* Socket options */ \
u8_t so_options; \
/* Type Of Service */ \
u8_t tos; \
/* Time To Live */ \
u8_t ttl \
/* link layer address resolution hint */ \
unsigned char u8_t
Definition: cc.h:38
#define IP_PCB_ADDRHINT
Definition: ip.h:69
typedefPACK_STRUCT_END struct ip_addr ip_addr_t
Definition: ip_addr.h:64

Definition at line 76 of file ip.h.

◆ IP_PCB_ADDRHINT

#define IP_PCB_ADDRHINT

Definition at line 69 of file ip.h.

◆ IP_PROTO_ICMP

#define IP_PROTO_ICMP   1

Definition at line 52 of file ip.h.

◆ IP_PROTO_IGMP

#define IP_PROTO_IGMP   2

Definition at line 53 of file ip.h.

◆ IP_PROTO_TCP

#define IP_PROTO_TCP   6

Definition at line 56 of file ip.h.

◆ IP_PROTO_UDP

#define IP_PROTO_UDP   17

Definition at line 54 of file ip.h.

◆ IP_PROTO_UDPLITE

#define IP_PROTO_UDPLITE   136

Definition at line 55 of file ip.h.

◆ ip_reset_option

#define ip_reset_option (   pcb,
  opt 
)    ((pcb)->so_options &= ~(opt))

Resets an IP pcb option (SOF_* flags)

Definition at line 209 of file ip.h.

◆ IP_RF

#define IP_RF   0x8000U /* reserved fragment flag */

Definition at line 127 of file ip.h.

◆ ip_set_option

#define ip_set_option (   pcb,
  opt 
)    ((pcb)->so_options |= (opt))

Sets an IP pcb option (SOF_* flags)

Definition at line 207 of file ip.h.

◆ IPH_CHKSUM

#define IPH_CHKSUM (   hdr)    ((hdr)->_chksum)

Definition at line 154 of file ip.h.

◆ IPH_CHKSUM_SET

#define IPH_CHKSUM_SET (   hdr,
  chksum 
)    (hdr)->_chksum = (chksum)

Definition at line 163 of file ip.h.

◆ IPH_HL

#define IPH_HL (   hdr)    ((hdr)->_v_hl & 0x0f)

Definition at line 147 of file ip.h.

◆ IPH_ID

#define IPH_ID (   hdr)    ((hdr)->_id)

Definition at line 150 of file ip.h.

◆ IPH_ID_SET

#define IPH_ID_SET (   hdr,
  id 
)    (hdr)->_id = (id)

Definition at line 159 of file ip.h.

◆ IPH_LEN

#define IPH_LEN (   hdr)    ((hdr)->_len)

Definition at line 149 of file ip.h.

◆ IPH_LEN_SET

#define IPH_LEN_SET (   hdr,
  len 
)    (hdr)->_len = (len)

Definition at line 158 of file ip.h.

◆ IPH_OFFSET

#define IPH_OFFSET (   hdr)    ((hdr)->_offset)

Definition at line 151 of file ip.h.

◆ IPH_OFFSET_SET

#define IPH_OFFSET_SET (   hdr,
  off 
)    (hdr)->_offset = (off)

Definition at line 160 of file ip.h.

◆ IPH_PROTO

#define IPH_PROTO (   hdr)    ((hdr)->_proto)

Definition at line 153 of file ip.h.

◆ IPH_PROTO_SET

#define IPH_PROTO_SET (   hdr,
  proto 
)    (hdr)->_proto = (u8_t)(proto)

Definition at line 162 of file ip.h.

◆ IPH_TOS

#define IPH_TOS (   hdr)    ((hdr)->_tos)

Definition at line 148 of file ip.h.

◆ IPH_TOS_SET

#define IPH_TOS_SET (   hdr,
  tos 
)    (hdr)->_tos = (tos)

Definition at line 157 of file ip.h.

◆ IPH_TTL

#define IPH_TTL (   hdr)    ((hdr)->_ttl)

Definition at line 152 of file ip.h.

◆ IPH_TTL_SET

#define IPH_TTL_SET (   hdr,
  ttl 
)    (hdr)->_ttl = (u8_t)(ttl)

Definition at line 161 of file ip.h.

◆ IPH_V

#define IPH_V (   hdr)    ((hdr)->_v_hl >> 4)

Definition at line 146 of file ip.h.

◆ IPH_VHL_SET

#define IPH_VHL_SET (   hdr,
  v,
  hl 
)    (hdr)->_v_hl = (((v) << 4) | (hl))

Definition at line 156 of file ip.h.

◆ SOF_ACCEPTCONN

#define SOF_ACCEPTCONN   0x02U /* socket has had listen() */

Definition at line 98 of file ip.h.

◆ SOF_BROADCAST

#define SOF_BROADCAST   0x20U /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */

Definition at line 102 of file ip.h.

◆ SOF_INHERITED

#define SOF_INHERITED   (SOF_REUSEADDR|SOF_KEEPALIVE|SOF_LINGER/*|SOF_DEBUG|SOF_DONTROUTE|SOF_OOBINLINE*/)

Definition at line 109 of file ip.h.

◆ SOF_KEEPALIVE

#define SOF_KEEPALIVE   0x08U /* keep connections alive */

Definition at line 100 of file ip.h.

◆ SOF_LINGER

#define SOF_LINGER   0x80U /* linger on close if data present */

Definition at line 104 of file ip.h.

◆ SOF_REUSEADDR

#define SOF_REUSEADDR   0x04U /* allow local address reuse */

Definition at line 99 of file ip.h.

Function Documentation

◆ ip_input()

err_t ip_input ( struct pbuf p,
struct netif inp 
)

This function is called by the network interface device driver when an IP packet is received. The function does the basic checks of the IP header such as packet size being at least larger than the header size etc. If the packet was not destined for us, the packet is forwarded (using ip_forward). The IP checksum is always checked.

Finally, the packet is sent to the upper layer protocol input function.

Parameters
pthe received IP packet (p->payload points to IP header)
inpthe netif on which this packet was received
Returns
ERR_OK if the packet was processed (could return ERR_* if it wasn't processed, but currently always returns ERR_OK)

Definition at line 305 of file ip.c.

◆ ip_output()

err_t ip_output ( struct pbuf p,
ip_addr_t src,
ip_addr_t dest,
u8_t  ttl,
u8_t  tos,
u8_t  proto 
)

Simple interface to ip_output_if. It finds the outgoing network interface and calls upon ip_output_if to do the actual work.

Parameters
pthe packet to send (p->payload points to the data, e.g. next protocol header; if dest == IP_HDRINCL, p already includes an IP header and p->payload points to that IP header)
srcthe source IP address to send from (if src == IP_ADDR_ANY, the IP address of the netif used to send is used as source address)
destthe destination IP address to send the packet to
ttlthe TTL value to be set in the IP header
tosthe TOS value to be set in the IP header
protothe PROTOCOL to be set in the IP header
Returns
ERR_RTE if no route is found see ip_output_if() for more return values

Definition at line 818 of file ip.c.

◆ ip_output_if()

err_t ip_output_if ( struct pbuf p,
ip_addr_t src,
ip_addr_t dest,
u8_t  ttl,
u8_t  tos,
u8_t  proto,
struct netif netif 
)

Sends an IP packet on a network interface. This function constructs the IP header and calculates the IP header checksum. If the source IP address is NULL, the IP address of the outgoing network interface is filled in as source address. If the destination IP address is IP_HDRINCL, p is assumed to already include an IP header and p->payload points to it instead of the data.

Parameters
pthe packet to send (p->payload points to the data, e.g. next protocol header; if dest == IP_HDRINCL, p already includes an IP header and p->payload points to that IP header)
srcthe source IP address to send from (if src == IP_ADDR_ANY, the IP address of the netif used to send is used as source address)
destthe destination IP address to send the packet to
ttlthe TTL value to be set in the IP header
tosthe TOS value to be set in the IP header
protothe PROTOCOL to be set in the IP header
netifthe netif on which to send this packet
Returns
ERR_OK if the packet was sent OK ERR_BUF if p doesn't have enough space for IP/LINK headers returns errors returned by netif->output
Note
ip_id: RFC791 "some host may be able to simply use unique identifiers independent of destination"

Definition at line 641 of file ip.c.

◆ ip_route()

struct netif * ip_route ( ip_addr_t dest)

Finds the appropriate network interface for a given IP address. It searches the list of network interfaces linearly. A match is found if the masked IP address of the network interface equals the masked IP address given to the function.

Parameters
destthe destination IP address for which to find the route
Returns
the netif on which to send to reach dest

Definition at line 124 of file ip.c.

Variable Documentation

◆ current_header

const struct ip_hdr* current_header
extern

Header of the input packet currently being processed.

Definition at line 105 of file ip.c.

◆ current_iphdr_dest

ip_addr_t current_iphdr_dest
extern

Destination IP address of current_header

Definition at line 109 of file ip.c.

◆ current_iphdr_src

ip_addr_t current_iphdr_src
extern

Source IP address of current_header

Definition at line 107 of file ip.c.

◆ current_netif

struct netif* current_netif
extern

The interface that provided the packet for the current callback invocation.

Definition at line 100 of file ip.c.

◆ PACK_STRUCT_STRUCT

PACK_STRUCT_BEGIN struct ip_hdr PACK_STRUCT_STRUCT