Added a small abstraction layer for the if geninfo stuff. Functions add_if_geninfo...
authorAndreas Tonnesen <andreto@olsr.org>
Sun, 6 Mar 2005 12:38:09 +0000 (12:38 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Sun, 6 Mar 2005 12:38:09 +0000 (12:38 +0000)
src/interfaces.c
src/interfaces.h

index 8d13b7c..0ddb841 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: interfaces.c,v 1.18 2005/03/04 17:02:19 kattemat Exp $
+ * $Id: interfaces.c,v 1.19 2005/03/06 12:38:09 kattemat Exp $
  */
 
 #include "defs.h"
@@ -54,6 +54,9 @@ struct ifchgf
   struct ifchgf *next;
 };
 
+static olsr_u32_t
+get_if_property_id(void);
+
 static struct ifchgf *ifchgf_list;
 
 /**
@@ -107,12 +110,81 @@ ifinit()
 }
 
 
-olsr_u32_t
-get_if_propery_id()
+static olsr_u32_t
+get_if_property_id()
 {
   return if_property_id++;
 }
 
+olsr_u32_t
+add_if_geninfo(struct interface *ifp, void *data)
+{
+  struct if_gen_property *igp = olsr_malloc(sizeof(struct if_gen_property), __func__);
+
+  igp->owner_id = get_if_property_id();
+  igp->data = data;
+
+  /* queue */
+  igp->next = ifp->gen_properties;
+  ifp->gen_properties = igp;
+
+  return igp->owner_id;
+}
+
+void *
+get_if_geninfo(struct interface *ifp, olsr_u32_t owner_id)
+{
+  struct if_gen_property *igp_list = ifp->gen_properties;
+
+
+  while(igp_list)
+    {
+      if(igp_list->owner_id == owner_id)
+       return igp_list->data;
+
+      igp_list = igp_list->next;
+    }
+
+  return NULL;
+}
+
+void *
+del_if_geninfo(struct interface *ifp, olsr_u32_t owner_id)
+{
+  void *data = NULL;
+  struct if_gen_property *igp_list = ifp->gen_properties;
+  struct if_gen_property *igp_prev = NULL;
+
+
+  while(igp_list)
+    {
+      if(igp_list->owner_id == owner_id)
+       break;
+
+      igp_prev = igp_list;
+      igp_list = igp_list->next;
+    }
+
+  /* Not found */
+  if(igp_list == NULL)
+    return NULL;
+
+  /* Dequeue */
+  if(igp_prev == NULL)
+    {
+      /* First elem */
+      ifp->gen_properties = igp_list->next;
+    }
+  else
+    {
+      igp_prev->next = igp_list->next;
+    }
+  data = igp_list->data;
+  free(igp_list);
+
+  return data;
+}
+
 
 void
 run_ifchg_cbs(struct interface *ifp, int flag)
index 2ad5883..295462b 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: interfaces.h,v 1.21 2005/03/04 17:02:19 kattemat Exp $
+ * $Id: interfaces.h,v 1.22 2005/03/06 12:38:09 kattemat Exp $
  */
 
 
@@ -168,7 +168,13 @@ int
 ifinit(void);
 
 olsr_u32_t
-get_if_propery_id(void);
+add_if_geninfo(struct interface *, void *);
+
+void *
+get_if_geninfo(struct interface *, olsr_u32_t);
+
+void *
+del_if_geninfo(struct interface *, olsr_u32_t);
 
 void
 run_ifchg_cbs(struct interface *, int);