wpa_supplicant / hostapd 2.0
Data Structures | Functions | Variables

l2_packet.h File Reference

WPA Supplicant - Layer2 packet interface definition. More...

Go to the source code of this file.

Data Structures

struct  l2_ethhdr

Functions

struct l2_packet_datal2_packet_init (const char *ifname, const u8 *own_addr, unsigned short protocol, void(*rx_callback)(void *ctx, const u8 *src_addr, const u8 *buf, size_t len), void *rx_callback_ctx, int l2_hdr)
 Initialize l2_packet interface.
void l2_packet_deinit (struct l2_packet_data *l2)
 Deinitialize l2_packet interface.
int l2_packet_get_own_addr (struct l2_packet_data *l2, u8 *addr)
 Get own layer 2 address.
int l2_packet_send (struct l2_packet_data *l2, const u8 *dst_addr, u16 proto, const u8 *buf, size_t len)
 Send a packet.
int l2_packet_get_ip_addr (struct l2_packet_data *l2, char *buf, size_t len)
 Get the current IP address from the interface.
void l2_packet_notify_auth_start (struct l2_packet_data *l2)
 Notify l2_packet about start of authentication.

Variables

struct l2_ethhdr STRUCT_PACKED

Detailed Description

WPA Supplicant - Layer2 packet interface definition.

Copyright
Copyright (c) 2003-2005, Jouni Malinen <j@w1.fi>

This software may be distributed under the terms of the BSD license. See README for more details.

This file defines an interface for layer 2 (link layer) packet sending and receiving. l2_packet_linux.c is one implementation for such a layer 2 implementation using Linux packet sockets and l2_packet_pcap.c another one using libpcap and libdnet. When porting wpa_supplicant to other operating systems, a new l2_packet implementation may need to be added.


Function Documentation

void l2_packet_deinit ( struct l2_packet_data l2)

Deinitialize l2_packet interface.

Parameters:
l2Pointer to internal l2_packet data from l2_packet_init()
int l2_packet_get_ip_addr ( struct l2_packet_data l2,
char *  buf,
size_t  len 
)

Get the current IP address from the interface.

Parameters:
l2Pointer to internal l2_packet data from l2_packet_init()
bufBuffer for the IP address in text format
lenMaximum buffer length
Returns:
0 on success, -1 on failure

This function can be used to get the current IP address from the interface bound to the l2_packet. This is mainly for status information and the IP address will be stored as an ASCII string. This function is not essential for wpa_supplicant operation, so full implementation is not required. l2_packet implementation will need to define the function, but it can return -1 if the IP address information is not available.

int l2_packet_get_own_addr ( struct l2_packet_data l2,
u8 *  addr 
)

Get own layer 2 address.

Parameters:
l2Pointer to internal l2_packet data from l2_packet_init()
addrBuffer for the own address (6 bytes)
Returns:
0 on success, -1 on failure
struct l2_packet_data* l2_packet_init ( const char *  ifname,
const u8 *  own_addr,
unsigned short  protocol,
void(*)(void *ctx, const u8 *src_addr, const u8 *buf, size_t len)  rx_callback,
void *  rx_callback_ctx,
int  l2_hdr 
) [read]

Initialize l2_packet interface.

Parameters:
ifnameInterface name
own_addrOptional own MAC address if available from driver interface or NULL if not available
protocolEthernet protocol number in host byte order
rx_callbackCallback function that will be called for each received packet
rx_callback_ctxCallback data (ctx) for calls to rx_callback()
l2_hdr1 = include layer 2 header, 0 = do not include header
Returns:
Pointer to internal data or NULL on failure

rx_callback function will be called with src_addr pointing to the source address (MAC address) of the the packet. If l2_hdr is set to 0, buf points to len bytes of the payload after the layer 2 header and similarly, TX buffers start with payload. This behavior can be changed by setting l2_hdr=1 to include the layer 2 header in the data buffer.

void l2_packet_notify_auth_start ( struct l2_packet_data l2)

Notify l2_packet about start of authentication.

Parameters:
l2Pointer to internal l2_packet data from l2_packet_init()

This function is called when authentication is expected to start, e.g., when association has been completed, in order to prepare l2_packet implementation for EAPOL frames. This function is used mainly if the l2_packet code needs to do polling in which case it can increasing polling frequency. This can also be an empty function if the l2_packet implementation does not benefit from knowing about the starting authentication.

int l2_packet_send ( struct l2_packet_data l2,
const u8 *  dst_addr,
u16  proto,
const u8 *  buf,
size_t  len 
)

Send a packet.

Parameters:
l2Pointer to internal l2_packet data from l2_packet_init()
dst_addrDestination address for the packet (only used if l2_hdr == 0)
protoProtocol/ethertype for the packet in host byte order (only used if l2_hdr == 0)
bufPacket contents to be sent; including layer 2 header if l2_hdr was set to 1 in l2_packet_init() call. Otherwise, only the payload of the packet is included.
lenLength of the buffer (including l2 header only if l2_hdr == 1)
Returns:
>=0 on success, <0 on failure
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines