wpa_supplicant / hostapd  2.5
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Data Structures | Functions
l2_packet_pcap.c File Reference

WPA Supplicant - Layer2 packet handling with libpcap/libdnet and WinPcap. More...

#include "includes.h"
#include <sys/ioctl.h>
#include <pcap.h>
#include <dnet.h>
#include "common.h"
#include "eloop.h"
#include "l2_packet.h"

Data Structures

struct  l2_packet_data
 

Functions

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...
 
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...
 
void l2_packet_deinit (struct l2_packet_data *l2)
 Deinitialize l2_packet interface. 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...
 

Detailed Description

WPA Supplicant - Layer2 packet handling with libpcap/libdnet and WinPcap.

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.

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.