|
@@ -0,0 +1,81 @@
|
|
|
+/* 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);
|
|
|
+}
|