Mistake on this page?
Report an issue in GitHub or email us
lwip/prot/etharp.h
Go to the documentation of this file.
1 /**
2  * @file
3  * ARP protocol definitions
4  */
5 
6 /*
7  * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
8  * All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without modification,
11  * are permitted provided that the following conditions are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright notice,
14  * this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright notice,
16  * this list of conditions and the following disclaimer in the documentation
17  * and/or other materials provided with the distribution.
18  * 3. The name of the author may not be used to endorse or promote products
19  * derived from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
22  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
23  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
24  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
29  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
30  * OF SUCH DAMAGE.
31  *
32  * This file is part of the lwIP TCP/IP stack.
33  *
34  * Author: Adam Dunkels <adam@sics.se>
35  *
36  */
37 #ifndef LWIP_HDR_PROT_ETHARP_H
38 #define LWIP_HDR_PROT_ETHARP_H
39 
40 #include "lwip/arch.h"
41 #include "lwip/prot/ethernet.h"
42 
43 #ifdef __cplusplus
44 extern "C" {
45 #endif
46 
47 #ifndef ETHARP_HWADDR_LEN
48 #define ETHARP_HWADDR_LEN ETH_HWADDR_LEN
49 #endif
50 
51 /**
52  * struct ip4_addr_wordaligned is used in the definition of the ARP packet format in
53  * order to support compilers that don't have structure packing.
54  */
55 #ifdef PACK_STRUCT_USE_INCLUDES
56 # include "arch/bpstruct.h"
57 #endif
60  PACK_STRUCT_FIELD(u16_t addrw[2]);
63 #ifdef PACK_STRUCT_USE_INCLUDES
64 # include "arch/epstruct.h"
65 #endif
66 
67 /** MEMCPY-like copying of IP addresses where addresses are known to be
68  * 16-bit-aligned if the port is correctly configured (so a port could define
69  * this to copying 2 u16_t's) - no NULL-pointer-checking needed. */
70 #ifndef IPADDR_WORDALIGNED_COPY_TO_IP4_ADDR_T
71 #define IPADDR_WORDALIGNED_COPY_TO_IP4_ADDR_T(dest, src) SMEMCPY(dest, src, sizeof(ip4_addr_t))
72 #endif
73 
74  /** MEMCPY-like copying of IP addresses where addresses are known to be
75  * 16-bit-aligned if the port is correctly configured (so a port could define
76  * this to copying 2 u16_t's) - no NULL-pointer-checking needed. */
77 #ifndef IPADDR_WORDALIGNED_COPY_FROM_IP4_ADDR_T
78 #define IPADDR_WORDALIGNED_COPY_FROM_IP4_ADDR_T(dest, src) SMEMCPY(dest, src, sizeof(ip4_addr_t))
79 #endif
80 
81 #ifdef PACK_STRUCT_USE_INCLUDES
82 # include "arch/bpstruct.h"
83 #endif
85 /** the ARP message, see RFC 826 ("Packet format") */
86 struct etharp_hdr {
87  PACK_STRUCT_FIELD(u16_t hwtype);
88  PACK_STRUCT_FIELD(u16_t proto);
89  PACK_STRUCT_FLD_8(u8_t hwlen);
90  PACK_STRUCT_FLD_8(u8_t protolen);
91  PACK_STRUCT_FIELD(u16_t opcode);
92  PACK_STRUCT_FLD_S(struct eth_addr shwaddr);
94  PACK_STRUCT_FLD_S(struct eth_addr dhwaddr);
98 #ifdef PACK_STRUCT_USE_INCLUDES
99 # include "arch/epstruct.h"
100 #endif
101 
102 #define SIZEOF_ETHARP_HDR 28
103 
104 /* ARP message types (opcodes) */
105 enum etharp_opcode {
106  ARP_REQUEST = 1,
107  ARP_REPLY = 2
108 };
109 
110 #ifdef __cplusplus
111 }
112 #endif
113 
114 #endif /* LWIP_HDR_PROT_ETHARP_H */
the ARP message, see RFC 826 ("Packet format")
#define PACK_STRUCT_BEGIN
Packed structs support.
Definition: arch.h:307
#define PACK_STRUCT_FLD_S(x)
Packed structs support.
Definition: arch.h:356
struct ip4_addr_wordaligned is used in the definition of the ARP packet format in order to support co...
#define PACK_STRUCT_STRUCT
Packed structs support.
Definition: arch.h:328
#define PACK_STRUCT_END
Packed structs support.
Definition: arch.h:316
#define PACK_STRUCT_FLD_8(x)
Packed structs support.
Definition: arch.h:347
Ethernet protocol definitions.
Support for different processor and compiler architectures.
An Ethernet MAC address.
Important Information for this Arm website

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.