Mistake on this page?
Report an issue in GitHub or email us
lwip/prot/ethernet.h
Go to the documentation of this file.
1 /**
2  * @file
3  * Ethernet 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_ETHERNET_H
38 #define LWIP_HDR_PROT_ETHERNET_H
39 
40 #include "lwip/arch.h"
41 #include "lwip/prot/ieee.h"
42 
43 #ifdef __cplusplus
44 extern "C" {
45 #endif
46 
47 #ifndef ETH_HWADDR_LEN
48 #ifdef ETHARP_HWADDR_LEN
49 #define ETH_HWADDR_LEN ETHARP_HWADDR_LEN /* compatibility mode */
50 #else
51 #define ETH_HWADDR_LEN 6
52 #endif
53 #endif
54 
55 #ifdef PACK_STRUCT_USE_INCLUDES
56 # include "arch/bpstruct.h"
57 #endif
59 /** An Ethernet MAC address */
60 struct eth_addr {
61  PACK_STRUCT_FLD_8(u8_t addr[ETH_HWADDR_LEN]);
64 #ifdef PACK_STRUCT_USE_INCLUDES
65 # include "arch/epstruct.h"
66 #endif
67 
68 /** Initialize a struct eth_addr with its 6 bytes (takes care of correct braces) */
69 #define ETH_ADDR(b0, b1, b2, b3, b4, b5) {{b0, b1, b2, b3, b4, b5}}
70 
71 #ifdef PACK_STRUCT_USE_INCLUDES
72 # include "arch/bpstruct.h"
73 #endif
75 /** Ethernet header */
76 struct eth_hdr {
77 #if ETH_PAD_SIZE
78  PACK_STRUCT_FLD_8(u8_t padding[ETH_PAD_SIZE]);
79 #endif
80  PACK_STRUCT_FLD_S(struct eth_addr dest);
81  PACK_STRUCT_FLD_S(struct eth_addr src);
82  PACK_STRUCT_FIELD(u16_t type);
85 #ifdef PACK_STRUCT_USE_INCLUDES
86 # include "arch/epstruct.h"
87 #endif
88 
89 #define SIZEOF_ETH_HDR (14 + ETH_PAD_SIZE)
90 
91 #ifdef PACK_STRUCT_USE_INCLUDES
92 # include "arch/bpstruct.h"
93 #endif
95 /** VLAN header inserted between ethernet header and payload
96  * if 'type' in ethernet header is ETHTYPE_VLAN.
97  * See IEEE802.Q */
98 struct eth_vlan_hdr {
99  PACK_STRUCT_FIELD(u16_t prio_vid);
100  PACK_STRUCT_FIELD(u16_t tpid);
103 #ifdef PACK_STRUCT_USE_INCLUDES
104 # include "arch/epstruct.h"
105 #endif
106 
107 #define SIZEOF_VLAN_HDR 4
108 #define VLAN_ID(vlan_hdr) (lwip_htons((vlan_hdr)->prio_vid) & 0xFFF)
109 
110 /** The 24-bit IANA IPv4-multicast OUI is 01-00-5e: */
111 #define LL_IP4_MULTICAST_ADDR_0 0x01
112 #define LL_IP4_MULTICAST_ADDR_1 0x00
113 #define LL_IP4_MULTICAST_ADDR_2 0x5e
114 
115 /** IPv6 multicast uses this prefix */
116 #define LL_IP6_MULTICAST_ADDR_0 0x33
117 #define LL_IP6_MULTICAST_ADDR_1 0x33
118 
119 #define eth_addr_cmp(addr1, addr2) (memcmp((addr1)->addr, (addr2)->addr, ETH_HWADDR_LEN) == 0)
120 
121 #ifdef __cplusplus
122 }
123 #endif
124 
125 #endif /* LWIP_HDR_PROT_ETHERNET_H */
IEEE assigned numbers.
#define PACK_STRUCT_BEGIN
Packed structs support.
Definition: arch.h:307
#define PACK_STRUCT_FLD_S(x)
Packed structs support.
Definition: arch.h:356
Ethernet header.
#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
#define PACK_STRUCT_FIELD(x)
Packed structs support.
Definition: arch.h:338
#define ETH_PAD_SIZE
ETH_PAD_SIZE: number of bytes added before the ethernet header to ensure alignment of payload after t...
Definition: opt.h:692
Support for different processor and compiler architectures.
An Ethernet MAC address.
VLAN header inserted between ethernet header and payload if &#39;type&#39; in ethernet header is ETHTYPE_VLAN...
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.