iPXE
ip.h
Go to the documentation of this file.
1#ifndef _IPXE_IP_H
2#define _IPXE_IP_H
3
4/** @file
5 *
6 * IP protocol
7 *
8 */
9
10FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11FILE_SECBOOT ( PERMITTED );
12
13#include <stdint.h>
14#include <ipxe/in.h>
15#include <ipxe/list.h>
16#include <ipxe/retry.h>
17#include <ipxe/netdevice.h>
18
19struct io_buffer;
20
21/* IP constants */
22
23#define IP_VER 0x40U
24#define IP_MASK_VER 0xf0U
25#define IP_MASK_HLEN 0x0fU
26#define IP_MASK_OFFSET 0x1fffU
27#define IP_MASK_DONOTFRAG 0x4000U
28#define IP_MASK_MOREFRAGS 0x2000U
29#define IP_PSHLEN 12
30
31/* IP header defaults */
32#define IP_TOS 0
33#define IP_TTL 64
34
35/** An IPv4 packet header */
48
49/** An IPv4 pseudo header */
57
58/** An IPv4 address/routing table entry
59 *
60 * Routing table entries are maintained in order of specificity. For
61 * a given destination address, the first matching table entry will be
62 * used as the egress route.
63 */
65 /** List of miniroutes */
67
68 /** Network device
69 *
70 * When this routing table entry is matched, this is the
71 * egress network device to be used.
72 */
74
75 /** IPv4 address
76 *
77 * When this routing table entry is matched, this is the
78 * source address to be used.
79 *
80 * The presence of this routing table entry also indicates
81 * that this address is a valid local destination address for
82 * the matching network device.
83 */
85 /** Subnet network address
86 *
87 * A subnet is a range of addresses defined by a network
88 * address and subnet mask. A destination address with all of
89 * the subnet mask bits in common with the network address is
90 * within the subnet and therefore matches this routing table
91 * entry.
92 */
94 /** Subnet mask
95 *
96 * An address with all of these bits in common with the
97 * network address matches this routing table entry.
98 */
100 /** Gateway address, or zero
101 *
102 * When this routing table entry is matched and this address
103 * is non-zero, it will be used as the next-hop address.
104 *
105 * When this routing table entry is matched and this address
106 * is zero, the subnet is local (on-link) and the next-hop
107 * address will be the original destination address.
108 */
110 /** Host mask
111 *
112 * An address in a local subnet with all of these bits set to
113 * zero represents the network address, and an address in a
114 * local subnet with all of these bits set to one represents
115 * the local directed broadcast address. All other addresses
116 * in a local subnet are valid host addresses.
117 *
118 * For most local subnets, this is the inverse of the subnet
119 * mask. In a small subnet (/31 or /32) there is no network
120 * address or directed broadcast address, and all addresses in
121 * the subnet are valid host addresses.
122 *
123 * When this routing table entry is matched and the subnet is
124 * local, a next-hop address with all of these bits set to one
125 * will be treated as a local broadcast address. All other
126 * next-hop addresses will be treated as unicast addresses.
127 *
128 * When this routing table entry is matched and the subnet is
129 * non-local, the next-hop address is always a unicast
130 * address. The host mask for non-local subnets is therefore
131 * set to @c INADDR_NONE to allow the same logic to be used as
132 * for local subnets.
133 */
135};
136
137extern struct list_head ipv4_miniroutes;
138
139extern struct net_protocol ipv4_protocol __net_protocol;
140
141extern struct ipv4_miniroute * ipv4_route ( unsigned int scope_id,
142 struct in_addr *dest );
143extern int ipv4_has_any_addr ( struct net_device *netdev );
144extern int parse_ipv4_setting ( const struct setting_type *type,
145 const char *value, void *buf, size_t len );
146extern int format_ipv4_setting ( const struct setting_type *type,
147 const void *raw, size_t raw_len, char *buf,
148 size_t len );
149
150#endif /* _IPXE_IP_H */
__be32 raw[7]
Definition CIB_PRM.h:0
pseudo_bit_t value[0x00020]
Definition arbel.h:2
unsigned short uint16_t
Definition stdint.h:11
unsigned char uint8_t
Definition stdint.h:10
if(len >=6 *4) __asm__ __volatile__("movsl" if(len >=5 *4) __asm__ __volatile__("movsl" if(len >=4 *4) __asm__ __volatile__("movsl" if(len >=3 *4) __asm__ __volatile__("movsl" if(len >=2 *4) __asm__ __volatile__("movsl" if(len >=1 *4) __asm__ __volatile__("movsl" if((len % 4) >=2) __asm__ __volatile__("movsw" if((len % 2) >=1) __asm__ __volatile__("movsb" retur dest)
Definition string.h:151
static size_t raw_len
Definition base16.h:54
ring len
Length.
Definition dwmac.h:226
uint32_t type
Operating system type.
Definition ena.h:1
static struct net_device * netdev
Definition gdbudp.c:53
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:896
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
Definition compiler.h:926
#define __attribute__(x)
Definition compiler.h:10
int format_ipv4_setting(const struct setting_type *type, const void *raw, size_t raw_len, char *buf, size_t len)
int ipv4_has_any_addr(struct net_device *netdev)
Check if network device has any IPv4 address.
Definition ipv4.c:589
int parse_ipv4_setting(const struct setting_type *type, const char *value, void *buf, size_t len)
struct ipv4_miniroute * ipv4_route(unsigned int scope_id, struct in_addr *dest)
Perform IPv4 routing.
Definition ipv4.c:310
struct list_head ipv4_miniroutes
List of IPv4 miniroutes.
Definition ipv4.c:58
Linked lists.
Network device management.
#define __net_protocol
Declare a network-layer protocol.
Definition netdevice.h:474
Retry timers.
IP address structure.
Definition in.h:42
A persistent I/O buffer.
Definition iobuf.h:38
An IPv4 packet header.
Definition ip.h:36
uint8_t service
Definition ip.h:38
uint8_t protocol
Definition ip.h:43
struct in_addr dest
Definition ip.h:46
uint16_t len
Definition ip.h:39
struct in_addr src
Definition ip.h:45
uint8_t ttl
Definition ip.h:42
uint8_t verhdrlen
Definition ip.h:37
uint16_t chksum
Definition ip.h:44
uint16_t frags
Definition ip.h:41
uint16_t ident
Definition ip.h:40
An IPv4 address/routing table entry.
Definition ip.h:64
struct in_addr gateway
Gateway address, or zero.
Definition ip.h:109
struct in_addr network
Subnet network address.
Definition ip.h:93
struct in_addr netmask
Subnet mask.
Definition ip.h:99
struct list_head list
List of miniroutes.
Definition ip.h:66
struct net_device * netdev
Network device.
Definition ip.h:73
struct in_addr address
IPv4 address.
Definition ip.h:84
struct in_addr hostmask
Host mask.
Definition ip.h:134
An IPv4 pseudo header.
Definition ip.h:50
uint8_t zero_padding
Definition ip.h:53
uint16_t len
Definition ip.h:55
struct in_addr src
Definition ip.h:51
struct in_addr dest
Definition ip.h:52
uint8_t protocol
Definition ip.h:54
A doubly-linked list entry (or list head)
Definition list.h:19
A network device.
Definition netdevice.h:353
A network-layer protocol.
Definition netdevice.h:65
A setting type.
Definition settings.h:192