static void* fwp_vres_tx_thread(void *_vres);
typedef enum {
- USED,
UNTOUCHED,
CHANGED,
QUEUED,
struct fwp_msgq msg_queue;
};
-typedef
-struct fwp_vres_table {
- unsigned int max_vres;
- fwp_vres_t *entry;
- pthread_mutex_t lock;
-} fwp_vres_table_t;
-
-/* Global variable - vres table */
-static fwp_vres_table_t fwp_vres_table = {
- .max_vres = 0,
- .entry = NULL,
- .lock = PTHREAD_MUTEX_INITIALIZER,
-};
-
/**< mapping priority to ac*/
static const int prio_to_ac[8] = {2,3,3,2,1,1,0,0};
/**< IP tos for AC_VI, AC_VO, AC_BE, AC_BK */
static inline void fwp_vres_free(fwp_vres_t *vres)
{
- /* Clear USED flag */
- clear_all_flags(vres);
-}
-
-static inline int fwp_vres_is_valid(fwp_vres_t *vres)
-{
- int id = vres - fwp_vres_table.entry;
-
- if ((id < 0) || (id > fwp_vres_table.max_vres - 1) ||
- (!get_flag(vres, USED)))
- return 0;
-
- return 1;
+ free(vres);
}
/*inline int fwp_vres_get(fwp_vres_id_t vres_id, fwp_vres_t **vres )
}
*/
-int fwp_vres_table_init(unsigned int max_vres)
-{
- unsigned int table_size = max_vres * sizeof(fwp_vres_t);
-
- fwp_vres_table.entry = (fwp_vres_t*) malloc(table_size);
- if (!fwp_vres_table.entry)
- return -1; /* Errno is set by malloc */
-
- memset((void*) fwp_vres_table.entry, 0, table_size);
- fwp_vres_table.max_vres = max_vres;
- return 0;
-}
-
/**
* Allocate vres
*
*/
fwp_vres_t *fwp_vres_alloc()
{
- int i;
- unsigned int max_vres;
-
- /* find free vres id */
- pthread_mutex_lock(&fwp_vres_table.lock);
- i = 0;
- max_vres = fwp_vres_table.max_vres;
- while ((i < max_vres) &&
- (get_flag(&fwp_vres_table.entry[i], USED))) {
- i++;
- }
-
- if (i == max_vres) {
- pthread_mutex_unlock(&fwp_vres_table.lock);
- errno = ENOBUFS;
- return NULL;
- }
-
- FWP_DEBUG("Allocated vres id = %d\n",i);
- set_flag(&fwp_vres_table.entry[i], USED);
- pthread_mutex_unlock(&fwp_vres_table.lock);
- return (&fwp_vres_table.entry[i]);
+ fwp_vres_t *vres = malloc(sizeof(fwp_vres_t));
+ if (vres)
+ FWP_DEBUG("Allocated vres\n");
+ return vres;
}
static int apply_params(fwp_vres_t *vres)
{
int rv = 0;
- if (!fwp_vres_is_valid(vres)) {
+ if (!vres) {
errno = EINVAL;
return -1;
}
*/
int fwp_vres_destroy(fwp_vres_t *vres)
{
- if (!fwp_vres_is_valid(vres)) {
+ if (!vres) {
errno = EINVAL;
return -1;
}
{
int rv = 0;
- if (!fwp_vres_is_valid(vres)) {
+ if (!vres) {
errno = EINVAL;
rv = -1;
goto err;
int fwp_vres_unbind(fwp_vres_t *vres)
{
- if (!fwp_vres_is_valid(vres)) {
+ if (!vres) {
errno = EINVAL;
return -1;
}