1 /* 2 * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 6 /* 7 * Copyright (c) 2003-2004, Jouni Malinen <jkmaline@cc.hut.fi> 8 * Sun elects to license this software under the BSD license. 9 * See README for more details. 10 */ 11 #ifndef __L2_PACKET_H 12 #define __L2_PACKET_H 13 14 #pragma ident "%Z%%M% %I% %E% SMI" 15 16 #ifdef __cplusplus 17 extern "C" { 18 #endif 19 20 #include <sys/types.h> 21 #include <net/if.h> 22 #include <libdlpi.h> 23 24 #define IEEE80211_MTU_MAX 2304 25 26 struct l2_packet_data { 27 dlpi_handle_t dh; /* dlpi handle for EAPOL frames */ 28 char ifname[DLPI_LINKNAME_MAX]; 29 uint8_t own_addr[IEEE80211_ADDR_LEN]; 30 void (*rx_callback)(void *, unsigned char *, 31 unsigned char *, size_t); 32 void *rx_callback_ctx; 33 }; 34 35 #pragma pack(1) 36 struct l2_ethhdr { 37 uint8_t h_dest[IEEE80211_ADDR_LEN]; 38 uint8_t h_source[IEEE80211_ADDR_LEN]; 39 uint16_t h_proto; 40 }; 41 #pragma pack() 42 43 struct l2_packet_data *l2_packet_init( 44 const char *, unsigned short, 45 void (*rx_callback)(void *, unsigned char *, 46 unsigned char *, size_t), 47 void *); 48 void l2_packet_deinit(struct l2_packet_data *); 49 50 int l2_packet_get_own_addr(struct l2_packet_data *, uint8_t *); 51 int l2_packet_send(struct l2_packet_data *, uint8_t *, size_t); 52 53 #ifdef __cplusplus 54 } 55 #endif 56 57 #endif /* __L2_PACKET_H */ 58