wpa_supplicant / hostapd  2.5
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Data Structures | Enumerations | 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
 

Enumerations

enum  l2_packet_filter_type { L2_PACKET_FILTER_DHCP, L2_PACKET_FILTER_NDISC }
 

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. More...
 
struct l2_packet_datal2_packet_init_bridge (const char *br_ifname, 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)
 Like l2_packet_init() but with bridge workaround. More...
 
void l2_packet_deinit (struct l2_packet_data *l2)
 Deinitialize l2_packet interface. More...
 
int l2_packet_get_own_addr (struct l2_packet_data *l2, u8 *addr)
 Get own layer 2 address. More...
 
int l2_packet_send (struct l2_packet_data *l2, const u8 *dst_addr, u16 proto, const u8 *buf, size_t len)
 Send a packet. More...
 
int l2_packet_get_ip_addr (struct l2_packet_data *l2, char *buf, size_t len)
 Get the current IP address from the interface. More...
 
void l2_packet_notify_auth_start (struct l2_packet_data *l2)
 Notify l2_packet about start of authentication. More...
 
int l2_packet_set_packet_filter (struct l2_packet_data *l2, enum l2_packet_filter_type type)
 Set socket filter for l2_packet. More...
 

Variables

struct l2_ethhdr STRUCT_PACKED
 

Detailed Description

WPA Supplicant - Layer2 packet interface definition.

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 
)

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.

struct l2_packet_data* l2_packet_init_bridge ( const char *  br_ifname,
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 
)

Like l2_packet_init() but with bridge workaround.

This version of l2_packet_init() can be used to enable a workaround for Linux packet socket in case of a station interface in a bridge.

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
int l2_packet_set_packet_filter ( struct l2_packet_data l2,
enum l2_packet_filter_type  type 
)

Set socket filter for l2_packet.

Parameters
l2Pointer to internal l2_packet data from l2_packet_init()
typeenum l2_packet_filter_type, type of filter
Returns
0 on success, -1 on failure

This function is used to set the socket filter for l2_packet socket.