1 /* 2 * Copyright (c) 2022-2022 Huawei Device Co., Ltd. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without modification, 5 * are permitted provided that the following conditions are met: 6 * 7 * 1. Redistributions of source code must retain the above copyright notice, this list of 8 * conditions and the following disclaimer. 9 * 10 * 2. Redistributions in binary form must reproduce the above copyright notice, this list 11 * of conditions and the following disclaimer in the documentation and/or other materials 12 * provided with the distribution. 13 * 14 * 3. Neither the name of the copyright holder nor the names of its contributors may be used 15 * to endorse or promote products derived from this software without specific prior written 16 * permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 20 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 25 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 26 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 27 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 28 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 #ifndef _ADAPT_NETINET_IF_ETHER_H 32 #define _ADAPT_NETINET_IF_ETHER_H 33 34 #include <stdint.h> 35 36 #define ETH_ALEN 6 37 #define ETH_TLEN 2 38 #define ETH_HLEN 14 39 #define ETH_ZLEN 60 40 #define ETH_DATA_LEN 1500 41 #define ETH_FRAME_LEN 1514 42 #define ETH_FCS_LEN 4 43 #define ETH_MIN_MTU 68 44 #define ETH_MAX_MTU 0xFFFFU 45 46 struct ethhdr { 47 uint8_t h_dest[ETH_ALEN]; 48 uint8_t h_source[ETH_ALEN]; 49 uint16_t h_proto; 50 }; 51 52 #include <net/ethernet.h> 53 #include <net/if_arp.h> 54 55 struct ether_arp { 56 struct arphdr ea_hdr; 57 uint8_t arp_sha[ETH_ALEN]; 58 uint8_t arp_spa[4]; 59 uint8_t arp_tha[ETH_ALEN]; 60 uint8_t arp_tpa[4]; 61 }; 62 63 #define arp_hrd ea_hdr.ar_hrd 64 #define arp_pro ea_hdr.ar_pro 65 #define arp_hln ea_hdr.ar_hln 66 #define arp_pln ea_hdr.ar_pln 67 #define arp_op ea_hdr.ar_op 68 69 #define ETHER_MAP_IP_MULTICAST(ipaddr, enaddr) \ 70 do { \ 71 (enaddr)[0] = 0x01; \ 72 (enaddr)[1] = 0x00; \ 73 (enaddr)[2] = 0x5e; \ 74 (enaddr)[3] = ((uint8_t *)(ipaddr))[1] & 0x7f; \ 75 (enaddr)[4] = ((uint8_t *)(ipaddr))[2]; \ 76 (enaddr)[5] = ((uint8_t *)(ipaddr))[3]; \ 77 } while (0) 78 79 #endif /* !_ADAPT_NETINET_IF_ETHER_H */ 80