82 lines
2.4 KiB
C
82 lines
2.4 KiB
C
![]() |
/* Copyright (C) 2012-2013 B.A.T.M.A.N. contributors:
|
||
|
*
|
||
|
* Martin Hundebøll, Jeppe Ledet-Pedersen
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of version 2 of the GNU General Public
|
||
|
* License as published by the Free Software Foundation.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful, but
|
||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
|
* General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this program; if not, write to the Free Software
|
||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||
|
* 02110-1301, USA
|
||
|
*/
|
||
|
|
||
|
#include "main.h"
|
||
|
#include "network-coding.h"
|
||
|
|
||
|
static void batadv_nc_worker(struct work_struct *work);
|
||
|
|
||
|
/**
|
||
|
* batadv_nc_start_timer - initialise the nc periodic worker
|
||
|
* @bat_priv: the bat priv with all the soft interface information
|
||
|
*/
|
||
|
static void batadv_nc_start_timer(struct batadv_priv *bat_priv)
|
||
|
{
|
||
|
queue_delayed_work(batadv_event_workqueue, &bat_priv->nc.work,
|
||
|
msecs_to_jiffies(10));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* batadv_nc_init - initialise coding hash table and start house keeping
|
||
|
* @bat_priv: the bat priv with all the soft interface information
|
||
|
*/
|
||
|
int batadv_nc_init(struct batadv_priv *bat_priv)
|
||
|
{
|
||
|
INIT_DELAYED_WORK(&bat_priv->nc.work, batadv_nc_worker);
|
||
|
batadv_nc_start_timer(bat_priv);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* batadv_nc_init_bat_priv - initialise the nc specific bat_priv variables
|
||
|
* @bat_priv: the bat priv with all the soft interface information
|
||
|
*/
|
||
|
void batadv_nc_init_bat_priv(struct batadv_priv *bat_priv)
|
||
|
{
|
||
|
atomic_set(&bat_priv->network_coding, 1);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* batadv_nc_worker - periodic task for house keeping related to network coding
|
||
|
* @work: kernel work struct
|
||
|
*/
|
||
|
static void batadv_nc_worker(struct work_struct *work)
|
||
|
{
|
||
|
struct delayed_work *delayed_work;
|
||
|
struct batadv_priv_nc *priv_nc;
|
||
|
struct batadv_priv *bat_priv;
|
||
|
|
||
|
delayed_work = container_of(work, struct delayed_work, work);
|
||
|
priv_nc = container_of(delayed_work, struct batadv_priv_nc, work);
|
||
|
bat_priv = container_of(priv_nc, struct batadv_priv, nc);
|
||
|
|
||
|
/* Schedule a new check */
|
||
|
batadv_nc_start_timer(bat_priv);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* batadv_nc_free - clean up network coding memory
|
||
|
* @bat_priv: the bat priv with all the soft interface information
|
||
|
*/
|
||
|
void batadv_nc_free(struct batadv_priv *bat_priv)
|
||
|
{
|
||
|
cancel_delayed_work_sync(&bat_priv->nc.work);
|
||
|
}
|