NetServices Stack source
Dependents: HelloWorld ServoInterfaceBoardExample1 4180_Lab4
This is the IPv4 layer implementation for incoming and outgoing IP traffic. More...
Go to the source code of this file.
Functions | |
struct netif * | ip_route (ip_addr_t *dest) |
Finds the appropriate network interface for a given IP address. | |
static void | ip_forward (struct pbuf *p, struct ip_hdr *iphdr, struct netif *inp) |
Forwards an IP packet. | |
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. | |
Variables | |
struct netif * | current_netif |
The interface that provided the packet for the current callback invocation. | |
struct ip_hdr * | current_header |
Header of the input packet currently being processed. | |
ip_addr_t | current_iphdr_src |
Source IP address of current_header. | |
ip_addr_t | current_iphdr_dest |
Destination IP address of current_header. | |
static u16_t | ip_id |
The IP header ID of the next outgoing IP packet. |
Detailed Description
This is the IPv4 layer implementation for incoming and outgoing IP traffic.
- See also:
- ip_frag.c
Definition in file ip.c.
Function Documentation
static void ip_forward | ( | struct pbuf * | p, |
struct ip_hdr * | iphdr, | ||
struct netif * | inp | ||
) | [static] |
Forwards an IP packet.
It finds an appropriate route for the packet, decrements the TTL value of the packet, adjusts the checksum and outputs the packet on the appropriate interface.
- Parameters:
-
p the packet to forward (p->payload points to IP header) iphdr the IP header of the input packet inp the netif on which this packet was received
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:
-
p the received IP packet (p->payload points to IP header) inp the 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)
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:
-
p the 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) src the 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) dest the destination IP address to send the packet to ttl the TTL value to be set in the IP header tos the TOS value to be set in the IP header proto the PROTOCOL to be set in the IP header netif the 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"
Same as ip_output_if() but with the possibility to include IP options:
@ param ip_options pointer to the IP options, copied into the IP header @ param optlen length of ip_options
Simple interface to ip_output_if. It finds the outgoing network interface and calls upon ip_output_if to do the actual work.
- Parameters:
-
p the 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) src the 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) dest the destination IP address to send the packet to ttl the TTL value to be set in the IP header tos the TOS value to be set in the IP header proto the PROTOCOL to be set in the IP header
- Returns:
- ERR_RTE if no route is found see ip_output_if() for more return values
Like ip_output, but takes and addr_hint pointer that is passed on to netif->addr_hint before calling ip_output_if.
- Parameters:
-
p the 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) src the 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) dest the destination IP address to send the packet to ttl the TTL value to be set in the IP header tos the TOS value to be set in the IP header proto the PROTOCOL to be set in the IP header addr_hint address hint pointer set to netif->addr_hint before calling ip_output_if()
- Returns:
- ERR_RTE if no route is found see ip_output_if() for more return values
struct netif* ip_route | ( | ip_addr_t * | dest ) | [read] |
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:
-
dest the destination IP address for which to find the route
- Returns:
- the netif on which to send to reach dest
Variable Documentation
struct ip_hdr* current_header |
ip_addr_t current_iphdr_dest |
ip_addr_t current_iphdr_src |
struct netif* current_netif |
Generated on Tue Jul 12 2022 11:52:59 by 1.7.2