a399b7655a1d835aa8606c2b29e4e777baac8635zf/*
a399b7655a1d835aa8606c2b29e4e777baac8635zf * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
a399b7655a1d835aa8606c2b29e4e777baac8635zf * Use is subject to license terms.
a399b7655a1d835aa8606c2b29e4e777baac8635zf */
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf/*
a399b7655a1d835aa8606c2b29e4e777baac8635zf * Copyright (c) 2003-2004, Jouni Malinen <jkmaline@cc.hut.fi>
a399b7655a1d835aa8606c2b29e4e777baac8635zf * Sun elects to license this software under the BSD license.
a399b7655a1d835aa8606c2b29e4e777baac8635zf * See README for more details.
a399b7655a1d835aa8606c2b29e4e777baac8635zf */
a399b7655a1d835aa8606c2b29e4e777baac8635zf#ifndef __L2_PACKET_H
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define __L2_PACKET_H
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#pragma ident "%Z%%M% %I% %E% SMI"
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#ifdef __cplusplus
a399b7655a1d835aa8606c2b29e4e777baac8635zfextern "C" {
a399b7655a1d835aa8606c2b29e4e777baac8635zf#endif
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#include <sys/types.h>
a399b7655a1d835aa8606c2b29e4e777baac8635zf#include <net/if.h>
a399b7655a1d835aa8606c2b29e4e777baac8635zf#include <libdlpi.h>
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define IEEE80211_MTU_MAX 2304
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zfstruct l2_packet_data {
a399b7655a1d835aa8606c2b29e4e777baac8635zf dlpi_handle_t dh; /* dlpi handle for EAPOL frames */
a399b7655a1d835aa8606c2b29e4e777baac8635zf char ifname[DLPI_LINKNAME_MAX];
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t own_addr[IEEE80211_ADDR_LEN];
a399b7655a1d835aa8606c2b29e4e777baac8635zf void (*rx_callback)(void *, unsigned char *,
a399b7655a1d835aa8606c2b29e4e777baac8635zf unsigned char *, size_t);
a399b7655a1d835aa8606c2b29e4e777baac8635zf void *rx_callback_ctx;
a399b7655a1d835aa8606c2b29e4e777baac8635zf};
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#pragma pack(1)
a399b7655a1d835aa8606c2b29e4e777baac8635zfstruct l2_ethhdr {
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t h_dest[IEEE80211_ADDR_LEN];
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t h_source[IEEE80211_ADDR_LEN];
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint16_t h_proto;
a399b7655a1d835aa8606c2b29e4e777baac8635zf};
a399b7655a1d835aa8606c2b29e4e777baac8635zf#pragma pack()
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zfstruct l2_packet_data *l2_packet_init(
a399b7655a1d835aa8606c2b29e4e777baac8635zf const char *, unsigned short,
a399b7655a1d835aa8606c2b29e4e777baac8635zf void (*rx_callback)(void *, unsigned char *,
a399b7655a1d835aa8606c2b29e4e777baac8635zf unsigned char *, size_t),
a399b7655a1d835aa8606c2b29e4e777baac8635zf void *);
a399b7655a1d835aa8606c2b29e4e777baac8635zfvoid l2_packet_deinit(struct l2_packet_data *);
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zfint l2_packet_get_own_addr(struct l2_packet_data *, uint8_t *);
a399b7655a1d835aa8606c2b29e4e777baac8635zfint l2_packet_send(struct l2_packet_data *, uint8_t *, size_t);
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#ifdef __cplusplus
a399b7655a1d835aa8606c2b29e4e777baac8635zf}
a399b7655a1d835aa8606c2b29e4e777baac8635zf#endif
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#endif /* __L2_PACKET_H */