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 
10 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11 
12 #include <stdint.h>
13 #include <ipxe/in.h>
14 #include <ipxe/list.h>
15 #include <ipxe/retry.h>
16 #include <ipxe/netdevice.h>
17 
18 struct io_buffer;
19 
20 /* IP constants */
21 
22 #define IP_VER 0x40U
23 #define IP_MASK_VER 0xf0U
24 #define IP_MASK_HLEN 0x0fU
25 #define IP_MASK_OFFSET 0x1fffU
26 #define IP_MASK_DONOTFRAG 0x4000U
27 #define IP_MASK_MOREFRAGS 0x2000U
28 #define IP_PSHLEN 12
29 
30 /* IP header defaults */
31 #define IP_TOS 0
32 #define IP_TTL 64
33 
34 /** An IPv4 packet header */
35 struct iphdr {
44  struct in_addr src;
45  struct in_addr dest;
46 } __attribute__ (( packed ));
47 
48 /** An IPv4 pseudo header */
50  struct in_addr src;
51  struct in_addr dest;
55 };
56 
57 /** An IPv4 address/routing table entry */
59  /** List of miniroutes */
60  struct list_head list;
61 
62  /** Network device */
63  struct net_device *netdev;
64 
65  /** IPv4 address */
66  struct in_addr address;
67  /** Subnet mask
68  *
69  * An address with all of these bits in common with our IPv4
70  * address is in the local subnet.
71  */
72  struct in_addr netmask;
73  /** Host mask
74  *
75  * An address in the local subnet with all of these bits set
76  * to zero represents the network address, and an address in
77  * the local subnet with all of these bits set to one
78  * represents the directed broadcast address. All other
79  * addresses in the local subnet are valid host addresses.
80  *
81  * For most subnets, this is the inverse of the subnet mask.
82  * In a small subnet (/31 or /32) there is no network address
83  * or directed broadcast address, and all addresses in the
84  * subnet are valid host addresses.
85  */
86  struct in_addr hostmask;
87  /** Gateway address, or zero for no gateway */
88  struct in_addr gateway;
89 };
90 
91 extern struct list_head ipv4_miniroutes;
92 
93 extern struct net_protocol ipv4_protocol __net_protocol;
94 
95 extern int ipv4_has_any_addr ( struct net_device *netdev );
96 extern int parse_ipv4_setting ( const struct setting_type *type,
97  const char *value, void *buf, size_t len );
98 extern int format_ipv4_setting ( const struct setting_type *type,
99  const void *raw, size_t raw_len, char *buf,
100  size_t len );
101 
102 #endif /* _IPXE_IP_H */
struct in_addr netmask
Subnet mask.
Definition: ip.h:72
#define __attribute__(x)
Definition: compiler.h:10
unsigned short uint16_t
Definition: stdint.h:11
int ipv4_has_any_addr(struct net_device *netdev)
Check if network device has any IPv4 address.
Definition: ipv4.c:443
struct list_head list
List of miniroutes.
Definition: ip.h:60
struct in_addr src
Definition: ip.h:44
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
uint8_t zero_padding
Definition: ip.h:52
Retry timers.
struct net_device * netdev
Network device.
Definition: ip.h:63
uint16_t chksum
Definition: ip.h:43
int format_ipv4_setting(const struct setting_type *type, const void *raw, size_t raw_len, char *buf, size_t len)
struct net_protocol ipv4_protocol __net_protocol
AoE protocol.
Definition: aoe.c:56
uint16_t ident
Definition: ip.h:39
uint16_t frags
Definition: ip.h:40
An IPv4 packet header.
Definition: ip.h:35
struct in_addr address
IPv4 address.
Definition: ip.h:66
struct in_addr hostmask
Host mask.
Definition: ip.h:86
A doubly-linked list entry (or list head)
Definition: list.h:18
uint16_t len
Definition: ip.h:54
struct in_addr dest
Definition: ip.h:51
An IPv4 address/routing table entry.
Definition: ip.h:58
uint16_t len
Definition: ip.h:38
struct in_addr gateway
Gateway address, or zero for no gateway.
Definition: ip.h:88
static struct net_device * netdev
Definition: gdbudp.c:52
uint8_t verhdrlen
Definition: ip.h:36
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
Linked lists.
static size_t raw_len
Definition: base16.h:53
struct list_head ipv4_miniroutes
List of IPv4 miniroutes.
Definition: ipv4.c:57
IP address structure.
Definition: in.h:41
A network device.
Definition: netdevice.h:352
int parse_ipv4_setting(const struct setting_type *type, const char *value, void *buf, size_t len)
unsigned char uint8_t
Definition: stdint.h:10
struct in_addr dest
Definition: ip.h:45
An IPv4 pseudo header.
Definition: ip.h:49
A network-layer protocol.
Definition: netdevice.h:64
Network device management.
uint8_t protocol
Definition: ip.h:42
uint32_t len
Length.
Definition: ena.h:14
uint32_t type
Operating system type.
Definition: ena.h:12
uint8_t protocol
Definition: ip.h:53
__be32 raw[7]
Definition: CIB_PRM.h:28
uint8_t ttl
Definition: ip.h:41
struct in_addr src
Definition: ip.h:50
uint8_t service
Definition: ip.h:37
A setting type.
Definition: settings.h:191
A persistent I/O buffer.
Definition: iobuf.h:33