14d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* 24d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * From FreeBSD 2.2.7: Fundamental constants relating to ethernet. 34d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * 49984c42af1f24da360515edd81441ef5dfe23da4Dmitry Shmidt * Copyright (C) 1999-2010, Broadcom Corporation 54d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * 64d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * Unless you and Broadcom execute a separate written software license 74d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * agreement governing use of this software, this software is licensed to you 84d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * under the terms of the GNU General Public License version 2 (the "GPL"), 94d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * available at http://www.broadcom.com/licenses/GPLv2.php, with the 104d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * following added to such license: 114d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * 124d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * As a special exception, the copyright holders of this software give you 134d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * permission to link this software with independent modules, and to copy and 144d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * distribute the resulting executable under terms of your choice, provided that 154d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * you also meet, for each linked independent module, the terms and conditions of 164d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * the license of that module. An independent module is a module which is not 174d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * derived from this software. The special exception does not apply to any 184d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * modifications of the software. 194d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * 204d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * Notwithstanding the above, under no circumstances may you combine this 214d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * software in any way with any other Broadcom software provided under a license 224d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * other than the GPL, without Broadcom's express prior written consent. 234d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * 249984c42af1f24da360515edd81441ef5dfe23da4Dmitry Shmidt * $Id: ethernet.h,v 9.45.56.5 2010/02/22 22:04:36 Exp $ 254d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt */ 264d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 274d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 284d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#ifndef _NET_ETHERNET_H_ 294d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define _NET_ETHERNET_H_ 304d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 314d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#ifndef _TYPEDEFS_H_ 324d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#include "typedefs.h" 334d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#endif 344d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 354d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 364d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#include <packed_section_start.h> 374d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 384d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 394d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 404d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_ADDR_LEN 6 414d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 424d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 434d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_TYPE_LEN 2 444d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 454d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 464d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_CRC_LEN 4 474d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 484d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 494d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_HDR_LEN (ETHER_ADDR_LEN * 2 + ETHER_TYPE_LEN) 504d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 514d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 524d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_MIN_LEN 64 534d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 544d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 554d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_MIN_DATA 46 564d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 574d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 584d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_MAX_LEN 1518 594d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 604d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 614d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_MAX_DATA 1500 624d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 634d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 644d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_TYPE_MIN 0x0600 654d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_TYPE_IP 0x0800 664d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_TYPE_ARP 0x0806 674d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_TYPE_8021Q 0x8100 684d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_TYPE_BRCM 0x886c 694d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_TYPE_802_1X 0x888e 709984c42af1f24da360515edd81441ef5dfe23da4Dmitry Shmidt#define ETHER_TYPE_WAI 0x88b4 714d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#ifdef BCMWPA2 724d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_TYPE_802_1X_PREAUTH 0x88c7 734d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#endif 744d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 754d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 764d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_BRCM_SUBTYPE_LEN 4 774d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_BRCM_CRAM 1 784d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 794d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 804d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_DEST_OFFSET (0 * ETHER_ADDR_LEN) 814d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_SRC_OFFSET (1 * ETHER_ADDR_LEN) 824d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_TYPE_OFFSET (2 * ETHER_ADDR_LEN) 834d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 844d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 854d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_IS_VALID_LEN(foo) \ 864d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt ((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN) 874d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 884d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 894d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#ifndef __INCif_etherh 904d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 914d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry ShmidtBWL_PRE_PACKED_STRUCT struct ether_header { 924d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt uint8 ether_dhost[ETHER_ADDR_LEN]; 934d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt uint8 ether_shost[ETHER_ADDR_LEN]; 944d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt uint16 ether_type; 954d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt} BWL_POST_PACKED_STRUCT; 964d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 974d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 984d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry ShmidtBWL_PRE_PACKED_STRUCT struct ether_addr { 994d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt uint8 octet[ETHER_ADDR_LEN]; 1004d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt} BWL_POST_PACKED_STRUCT; 1014d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#endif 1024d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 1034d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 1044d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_SET_LOCALADDR(ea) (((uint8 *)(ea))[0] = (((uint8 *)(ea))[0] | 2)) 1054d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_IS_LOCALADDR(ea) (((uint8 *)(ea))[0] & 2) 1064d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_CLR_LOCALADDR(ea) (((uint8 *)(ea))[0] = (((uint8 *)(ea))[0] & 0xd)) 1074d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_TOGGLE_LOCALADDR(ea) (((uint8 *)(ea))[0] = (((uint8 *)(ea))[0] ^ 2)) 1084d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 1094d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 1104d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_SET_UNICAST(ea) (((uint8 *)(ea))[0] = (((uint8 *)(ea))[0] & ~1)) 1114d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 1124d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 1134d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ETHER_ISMULTI(ea) (((const uint8 *)(ea))[0] & 1) 1144d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 1154d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 1164d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 1174d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ether_cmp(a, b) (!(((short*)a)[0] == ((short*)b)[0]) | \ 1184d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt !(((short*)a)[1] == ((short*)b)[1]) | \ 1194d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt !(((short*)a)[2] == ((short*)b)[2])) 1204d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 1214d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 1224d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define ether_copy(s, d) { \ 1234d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt ((short*)d)[0] = ((short*)s)[0]; \ 1244d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt ((short*)d)[1] = ((short*)s)[1]; \ 1254d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt ((short*)d)[2] = ((short*)s)[2]; } 1264d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 1274d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 1284d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidtstatic const struct ether_addr ether_bcast = {{255, 255, 255, 255, 255, 255}}; 1294d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidtstatic const struct ether_addr ether_null = {{0, 0, 0, 0, 0, 0}}; 1304d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 131492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt#define ETHER_ISBCAST(ea) ((((uint8 *)(ea))[0] & \ 132492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt ((uint8 *)(ea))[1] & \ 133492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt ((uint8 *)(ea))[2] & \ 134492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt ((uint8 *)(ea))[3] & \ 135492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt ((uint8 *)(ea))[4] & \ 136492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt ((uint8 *)(ea))[5]) == 0xff) 137492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt#define ETHER_ISNULLADDR(ea) ((((uint8 *)(ea))[0] | \ 138492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt ((uint8 *)(ea))[1] | \ 139492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt ((uint8 *)(ea))[2] | \ 140492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt ((uint8 *)(ea))[3] | \ 141492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt ((uint8 *)(ea))[4] | \ 142492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt ((uint8 *)(ea))[5]) == 0) 1434d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 1444d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 1454d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 1464d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#include <packed_section_end.h> 1474d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt 1484d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#endif 149