#ifndef interface_interface_h #define interface_interface_h /* Cesar project {{{ * * Copyright (C) 2008 Spidcom * * <<>> * * }}} */ /** * \file interface/interface.h * \brief Interface module public functions. * \ingroup interface * * The interface module allows the communication between Actors and * the Data plane. */ #include "hle/hle.h" #include "cl/cl.h" #include "mac/sar/sar.h" #include "bsu/bsu.h" #include "interface/interface_module.h" #include "interface/forward.h" /** * Function to call when the interface receives a new MME. * \param ctx the interface context * \param tei the station's source TEI. * \param buffer the buffer containing the MME. * \param length the MME length * \param mme_data data use by the CL. * \param encrypted inform if the packet comes from the PWL if it has been * crypted. */ typedef void (*interface_mme_recv_cb_t) (void *user_data, uint tei, u8 *buffer, uint length, bool mme_recv, bool encryption); /** * Function to call when the interface receives a empty buffer. * \param user_data the data registered by the actor in the init function. * \param buffer the buffer to add. */ typedef void (*interface_mme_buffer_add_cb_t) (void *user_data, u8 *buffer); BEGIN_DECLS /** * Initialise the interface module. * \param hle the hle context. * \param cl the cl context. * \param sar the sar context. * \param mac_config the mac config context. * \return the interface module context. */ interface_t* interface_init (hle_t *hle, cl_t *cl, sar_t *sar, mac_config_t *mac_config); /** * Interface uninit. * \param ctx the interface context. */ void interface_uninit (interface_t *ctx); /** * Initialise the callbacks functions. * \param ctx the interface context. * \param mme_recv_cb the function to call on reception of a MME. * \param buffer_add_cb the function to call on buffer reception. * \param beacon_add_cb the function to call on beacon reception * \param user_data the data to provide on each callback function. */ void interface_callback_init (interface_t *ctx, interface_mme_recv_cb_t mme_recv_cb, interface_mme_buffer_add_cb_t buffer_add_cb, void *user_data); /** Receives an MME from the PWL or the HLE. * \param ctx the interface context * \param tei the station's source TEI. * \param buffer the buffer containing the MME. * \param length the MME length * \param mme_data data use by the CL. * \param encrypted inform if the packet comes from the PWL if it has been * crypted. */ void interface_mme_recv (interface_t *ctx, uint tei, u8 *buffer, uint length, bool mme_data, bool encrypted); /** * Inform the Data plane when the MME as been processed by the CP. * \param ctx the interface context * \param buffer the buffer to give back. * \param mme_recv the cl data (as a void pointer). */ void interface_mme_recv_done (interface_t *ctx, u8 *buffer, bool mme_recv); /** Provides a MME to send to the CL. This MME can be send as a MME or a data. * \param ctx the interface context. * \param buffer the buffer containing the MME. * \param length the length of the MME. * \param tei the destination TEI. */ void interface_mme_send (interface_t *ctx, u8* buffer, uint length, uint tei); /** * Sends a beacon, the interface will provide it to the SAR. * \param ctx the interface context. * \param beacon the beacon to send. * \param params the bsu parameters. */ void interface_beacon (interface_t *ctx, pb_beacon_t *beacon, bsu_params_t *params); /** * Sends a message to the IPMbox * \param ctx the interface context * \param data the message to post in the ipmbox. * \param length the length of the data in bytes. */ void interface_hle_send (interface_t *ctx, uint *data, uint length); END_DECLS #endif /* interface_interface_h */