summaryrefslogtreecommitdiff
path: root/cesar/tools/sniffer_phy/inc/lhle.h
blob: c6cd47f39ee3941be19ac9ef1085c9ef61d6293c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#ifndef inc_lhle_h
#define inc_lhle_h
/* Cesar project {{{
 *
 * Copyright (C) 2010 Spidcom
 *
 * <<<Licence>>>
 *
 * }}} */
/**
 * \file    inc/lhle.h
 * \brief   Sniffer light HLE.
 * \ingroup sniffer_phy
 */
#include "hal/hle/ipmbox.h"

#include "inc/forward.h"

/** Free buffer. */
struct lhle_free_buffer_t
{
    /** Pointer to buffer. */
    u8 *buffer;
    /** Pointer to next free buffer. */
    struct lhle_free_buffer_t *next;
};
typedef struct lhle_free_buffer_t lhle_free_buffer_t;

/** Light HLE context. */
struct lhle_t
{
    /** IPMBox context. */
    ipmbox_t *ipmbox;
    /** Head of free buffers list. */
    lhle_free_buffer_t *free_head;
    /** Tail of free buffers list. */
    lhle_free_buffer_t *free_tail;
};
typedef struct lhle_t lhle_t;

BEGIN_DECLS

/**
 * Initialise light HLE and activate.
 * \param  ctx  sniffer context
 */
void
lhle_init (sniffer_phy_t *ctx);

/**
 * Get a free buffer.
 * \param  ctx  sniffer context
 * \return  return NULL if none is available.
 */
u8 *
lhle_buffer_get (sniffer_phy_t *ctx);

/**
 * Send a frame to upper layers.
 * \param  ctx  sniffer context
 * \param  buffer  frame to send
 * \param  length  frame size
 */
void
lhle_send (sniffer_phy_t *ctx, u8 *buffer, uint length);

END_DECLS

#endif /* inc_lhle_h */