~ubuntu-branches/ubuntu/hardy/wpasupplicant/hardy

« back to all changes in this revision

Viewing changes to src/l2_packet/l2_packet_none.c

  • Committer: Bazaar Package Importer
  • Author(s): Reinhard Tartler, Alexander Sack
  • Date: 2007-08-26 16:06:57 UTC
  • mfrom: (1.1.9 upstream)
  • Revision ID: james.westby@ubuntu.com-20070826160657-2m8pxoweuxe8f93t
Tags: 0.6.0+0.5.8-0ubuntu1
* New upstream release
* remove patch 11_erroneous_manpage_ref, applied upstream
* remove patch 25_wpas_dbus_unregister_iface_fix, applied upstream

[ Alexander Sack ]
* bumping upstream version to replace development version 0.6.0 with
  this package from stable release branch.
* attempt to fix wierd timeout and high latency issues by going
  back to stable upstream version (0.5.9) (LP: #140763,
  LP: #141233).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * WPA Supplicant - Layer2 packet handling example with dummy functions
3
 
 * Copyright (c) 2003-2005, Jouni Malinen <j@w1.fi>
4
 
 *
5
 
 * This program is free software; you can redistribute it and/or modify
6
 
 * it under the terms of the GNU General Public License version 2 as
7
 
 * published by the Free Software Foundation.
8
 
 *
9
 
 * Alternatively, this software may be distributed under the terms of BSD
10
 
 * license.
11
 
 *
12
 
 * See README and COPYING for more details.
13
 
 *
14
 
 * This file can be used as a starting point for layer2 packet implementation.
15
 
 */
16
 
 
17
 
#include "includes.h"
18
 
 
19
 
#include "common.h"
20
 
#include "eloop.h"
21
 
#include "l2_packet.h"
22
 
 
23
 
 
24
 
struct l2_packet_data {
25
 
        char ifname[17];
26
 
        u8 own_addr[ETH_ALEN];
27
 
        void (*rx_callback)(void *ctx, const u8 *src_addr,
28
 
                            const u8 *buf, size_t len);
29
 
        void *rx_callback_ctx;
30
 
        int l2_hdr; /* whether to include layer 2 (Ethernet) header data
31
 
                     * buffers */
32
 
        int fd;
33
 
};
34
 
 
35
 
 
36
 
int l2_packet_get_own_addr(struct l2_packet_data *l2, u8 *addr)
37
 
{
38
 
        os_memcpy(addr, l2->own_addr, ETH_ALEN);
39
 
        return 0;
40
 
}
41
 
 
42
 
 
43
 
int l2_packet_send(struct l2_packet_data *l2, const u8 *dst_addr, u16 proto,
44
 
                   const u8 *buf, size_t len)
45
 
{
46
 
        if (l2 == NULL)
47
 
                return -1;
48
 
 
49
 
        /*
50
 
         * TODO: Send frame (may need different implementation depending on
51
 
         * whether l2->l2_hdr is set).
52
 
         */
53
 
 
54
 
        return 0;
55
 
}
56
 
 
57
 
 
58
 
static void l2_packet_receive(int sock, void *eloop_ctx, void *sock_ctx)
59
 
{
60
 
        struct l2_packet_data *l2 = eloop_ctx;
61
 
        u8 buf[2300];
62
 
        int res;
63
 
 
64
 
        /* TODO: receive frame (e.g., recv() using sock */
65
 
        buf[0] = 0;
66
 
        res = 0;
67
 
 
68
 
        l2->rx_callback(l2->rx_callback_ctx, NULL /* TODO: src addr */,
69
 
                        buf, res);
70
 
}
71
 
 
72
 
 
73
 
struct l2_packet_data * l2_packet_init(
74
 
        const char *ifname, const u8 *own_addr, unsigned short protocol,
75
 
        void (*rx_callback)(void *ctx, const u8 *src_addr,
76
 
                            const u8 *buf, size_t len),
77
 
        void *rx_callback_ctx, int l2_hdr)
78
 
{
79
 
        struct l2_packet_data *l2;
80
 
 
81
 
        l2 = os_zalloc(sizeof(struct l2_packet_data));
82
 
        if (l2 == NULL)
83
 
                return NULL;
84
 
        os_strlcpy(l2->ifname, ifname, sizeof(l2->ifname));
85
 
        l2->rx_callback = rx_callback;
86
 
        l2->rx_callback_ctx = rx_callback_ctx;
87
 
        l2->l2_hdr = l2_hdr;
88
 
 
89
 
        /*
90
 
         * TODO: open connection for receiving frames
91
 
         */
92
 
        l2->fd = -1;
93
 
        eloop_register_read_sock(l2->fd, l2_packet_receive, l2, NULL);
94
 
 
95
 
        return l2;
96
 
}
97
 
 
98
 
 
99
 
void l2_packet_deinit(struct l2_packet_data *l2)
100
 
{
101
 
        if (l2 == NULL)
102
 
                return;
103
 
 
104
 
        if (l2->fd >= 0) {
105
 
                eloop_unregister_read_sock(l2->fd);
106
 
                /* TODO: close connection */
107
 
        }
108
 
                
109
 
        os_free(l2);
110
 
}
111
 
 
112
 
 
113
 
int l2_packet_get_ip_addr(struct l2_packet_data *l2, char *buf, size_t len)
114
 
{
115
 
        /* TODO: get interface IP address */
116
 
        return -1;
117
 
}
118
 
 
119
 
 
120
 
void l2_packet_notify_auth_start(struct l2_packet_data *l2)
121
 
{
122
 
        /* This function can be left empty */
123
 
}