l2_packet_linux.c File Reference

WPA Supplicant - Layer2 packet handling with Linux packet sockets. More...

#include "includes.h"
#include <sys/ioctl.h>
#include <netpacket/packet.h>
#include <net/if.h>
#include "common.h"
#include "eloop.h"
#include "l2_packet.h"
Include dependency graph for l2_packet_linux.c:

Go to the source code of this file.

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.
int l2_packet_send (struct l2_packet_data *l2, const u8 *dst_addr, u16 proto, const u8 *buf, size_t len)
 Send a packet.
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_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.

Detailed Description

WPA Supplicant - Layer2 packet handling with Linux packet sockets.

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

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.

Alternatively, this software may be distributed under the terms of BSD license.

See README and COPYING for more details.

Definition in file l2_packet_linux.c.


Function Documentation

void l2_packet_deinit ( struct l2_packet_data l2  ) 

Deinitialize l2_packet interface.

Parameters:
l2 Pointer to internal l2_packet data from l2_packet_init()

Definition at line 154 of file l2_packet_linux.c.

Here is the call graph for this function:

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:
l2 Pointer to internal l2_packet data from l2_packet_init()
buf Buffer for the IP address in text format
len Maximum 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.

Definition at line 168 of file l2_packet_linux.c.

Here is the call graph for this function:

int l2_packet_get_own_addr ( struct l2_packet_data l2,
u8 *  addr 
)

Get own layer 2 address.

Parameters:
l2 Pointer to internal l2_packet data from l2_packet_init()
addr Buffer for the own address (6 bytes)
Returns:
0 on success, -1 on failure

Definition at line 39 of file l2_packet_linux.c.

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:
ifname Interface name
own_addr Optional own MAC address if available from driver interface or NULL if not available
protocol Ethernet protocol number in host byte order
rx_callback Callback function that will be called for each received packet
rx_callback_ctx Callback data (ctx) for calls to rx_callback()
l2_hdr 1 = 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.

Definition at line 94 of file l2_packet_linux.c.

Here is the call graph for this function:

void l2_packet_notify_auth_start ( struct l2_packet_data l2  ) 

Notify l2_packet about start of authentication.

Parameters:
l2 Pointer 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.

Definition at line 199 of file l2_packet_linux.c.

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:
l2 Pointer to internal l2_packet data from l2_packet_init()
dst_addr Destination address for the packet (only used if l2_hdr == 0)
proto Protocol/ethertype for the packet in host byte order (only used if l2_hdr == 0)
buf Packet 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.
len Length of the buffer (including l2 header only if l2_hdr == 1)
Returns:
>=0 on success, <0 on failure

Definition at line 46 of file l2_packet_linux.c.

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines

Generated on Sat Nov 21 23:21:56 2009 for hostapd by  doxygen 1.6.1