TC set is accessible.
authorThomas Lopatic <thomas@lopatic.de>
Wed, 13 Apr 2005 22:53:13 +0000 (22:53 +0000)
committerThomas Lopatic <thomas@lopatic.de>
Wed, 13 Apr 2005 22:53:13 +0000 (22:53 +0000)
lib/tas/data/show.lsp
lib/tas/src/glua_ext.c
lib/tas/src/plugin.c
lib/tas/src/plugin.h

index 687ec9e..630e3db 100644 (file)
@@ -162,6 +162,91 @@ i = i + 1
 
 end
 
+?>
+
+    </table>
+
+    <h2>Topology</h2>
+
+    <table border="1">
+      <tr>
+        <td>
+          <b>Main</b>
+        </td>
+        <td>
+          <b>Destination</b>
+        </td>
+        <td>
+          <b>ETX</b>
+        </td>
+      <tr>
+
+<?lua
+
+i = 0
+
+while olsr_state["topology"][i] do
+
+?>
+
+      <tr>
+        <td>
+          <?lua tas.write(olsr_state["topology"][i]["main"]) ?>
+        </td>
+        <td>
+
+          <?lua
+
+           k = 0
+
+           while olsr_state["topology"][i]["destinations"][k] do
+
+            tas.write(olsr_state["topology"][i]["destinations"][k]["address"])
+
+          ?>
+
+          <br>
+
+          <?lua
+
+            k = k + 1
+
+           end
+
+          ?>
+
+        </td>
+        <td>
+
+          <?lua
+
+           k = 0
+
+           while olsr_state["topology"][i]["destinations"][k] do
+
+            tas.write(olsr_state["topology"][i]["destinations"][k]["etx"])
+
+          ?>
+
+          <br>
+
+          <?lua
+
+            k = k + 1
+
+           end
+
+          ?>
+
+        </td>
+      </tr>
+
+<?lua
+
+i = i + 1
+
+end
+
 ?>
 
     </table>
index 707a055..fd38f59 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: glua_ext.c,v 1.2 2005/04/12 19:57:26 tlopatic Exp $
+ * $Id: glua_ext.c,v 1.3 2005/04/13 22:53:13 tlopatic Exp $
  */
 
 #include "lua/lua.h"
@@ -127,7 +127,12 @@ static void addSubTable(lua_State *lua, char **walker)
     return;
   }
 
-  lua_pushstring(lua, token);
+  if (stringToInt(&val, token) < 0)
+    lua_pushstring(lua, token);
+
+  else
+    lua_pushnumber(lua, val);
+
   lua_newtable(lua);
 
   while (**walker != 0)
@@ -233,6 +238,7 @@ int tasOlsrGetInfo(lua_State *lua)
   addTable(lua, "routes", iterRouteTabInit, iterRouteTabNext);
   addTable(lua, "links", iterLinkTabInit, iterLinkTabNext);
   addTable(lua, "neighbors", iterNeighTabInit, iterNeighTabNext);
+  addTable(lua, "topology", iterTcTabInit, iterTcTabNext);
 
   return 1;
 }
index 033ba77..13c1023 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: plugin.c,v 1.3 2005/04/13 22:10:23 tlopatic Exp $
+ * $Id: plugin.c,v 1.4 2005/04/13 22:53:13 tlopatic Exp $
  */
 
 #include <string.h>
@@ -75,7 +75,6 @@ static union olsr_ip_addr *mainAddr;
 
 static struct interface *intTab = NULL;
 static struct neighbor_entry *neighTab = NULL;
-static struct neighbor_2_entry *neigh2Tab = NULL;
 static struct mid_entry *midTab = NULL;
 static struct tc_entry *tcTab = NULL;
 static struct hna_entry *hnaTab = NULL;
@@ -106,7 +105,6 @@ static int iterIndex;
 static struct interface *iterIntTab = NULL;
 static struct link_entry *iterLinkTab = NULL;
 static struct neighbor_entry *iterNeighTab = NULL;
-static struct neighbor_2_entry *iterNeigh2Tab = NULL;
 static struct mid_entry *iterMidTab = NULL;
 static struct tc_entry *iterTcTab = NULL;
 static struct hna_entry *iterHnaTab = NULL;
@@ -117,6 +115,15 @@ static void __attribute__((constructor)) banner(void)
   printf("Tiny Application Server 0.1 by olsr.org\n");
 }
 
+static double lqToEtx(double lq, double nlq)
+{
+  if (lq < MIN_LINK_QUALITY || nlq < MIN_LINK_QUALITY)
+    return 0.0;
+
+  else
+    return 1.0 / (lq * nlq);
+}
+
 int iterLinkTabNext(char *buff, int len)
 {
   double etx;
@@ -124,13 +131,8 @@ int iterLinkTabNext(char *buff, int len)
   if (iterLinkTab == NULL)
     return -1;
 
-  if (iterLinkTab->loss_link_quality < MIN_LINK_QUALITY ||
-      iterLinkTab->neigh_link_quality < MIN_LINK_QUALITY)
-    etx = 0.0;
-
-  else
-    etx = 1.0 / (iterLinkTab->loss_link_quality *
-                 iterLinkTab->neigh_link_quality);
+  etx = lqToEtx(iterLinkTab->loss_link_quality,
+                iterLinkTab->neigh_link_quality);
 
   snprintf(buff, len, "local~%s~remote~%s~main~%s~hysteresis~%f~lq~%f~nlq~%f~etx~%f~",
            rawIpAddrToString(&iterLinkTab->local_iface_addr, ipAddrLen),
@@ -275,6 +277,78 @@ void iterRouteTabInit(void)
     }
 }
 
+int iterTcTabNext(char *buff, int len)
+{
+  int res;
+  int i;
+  struct topo_dst *dest;
+  
+  if (iterTcTab == NULL)
+    return -1;
+
+  res = snprintf(buff, len,
+                 "main~%s~[~destinations~",
+                 rawIpAddrToString(&iterTcTab->T_last_addr, ipAddrLen));
+
+  i = 0;
+
+  len -= res;
+  buff += res;
+
+  len -= 2;
+
+  for (dest = iterTcTab->destinations.next; dest != &iterTcTab->destinations;
+       dest = dest->next)
+  {
+    res = snprintf(buff, len, "[~%d~address~%s~etx~%f~]~", i,
+                   rawIpAddrToString(&dest->T_dest_addr, ipAddrLen),
+                   lqToEtx(dest->link_quality, dest->inverse_link_quality));
+
+    if (res < len)
+      buff += res;
+
+    len -= res;
+
+    if (len <= 0)
+      break;
+
+    i++;
+  }
+
+  strcpy(buff, "]~");
+
+  iterTcTab = iterTcTab->next;
+
+  if (iterTcTab == &tcTab[iterIndex])
+  {
+    iterTcTab = NULL;
+    
+    while (++iterIndex < HASHSIZE)
+      if (tcTab[iterIndex].next != &tcTab[iterIndex])
+      {
+        iterTcTab = tcTab[iterIndex].next;
+        break;
+      }
+  }
+
+  return 0;
+}
+
+void iterTcTabInit(void)
+{
+  iterTcTab = NULL;
+
+  if (tcTab == NULL)
+    return;
+
+  for (iterIndex = 0; iterIndex < HASHSIZE; iterIndex++)
+    if (tcTab[iterIndex].next != &tcTab[iterIndex])
+    {
+      iterTcTab = tcTab[iterIndex].next;
+      break;
+    }
+}
+
 static void parserFunc(unsigned char *mess, struct interface *inInt,
                        union olsr_ip_addr *neighIntAddr)
 {
@@ -425,7 +499,6 @@ int register_olsr_data(struct olsr_plugin_data *data)
 
   pluginIo(GETD__IFNET, &intTab, sizeof (intTab));
   pluginIo(GETD__NEIGHBORTABLE, &neighTab, sizeof (neighTab));
-  pluginIo(GETD__TWO_HOP_NEIGHBORTABLE, &neigh2Tab, sizeof (neigh2Tab));
   pluginIo(GETD__MID_SET, &midTab, sizeof (midTab));
   pluginIo(GETD__TC_TABLE, &tcTab, sizeof (tcTab));
   pluginIo(GETD__HNA_SET, &hnaTab, sizeof (hnaTab));
index 938d73c..5fa21f4 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: plugin.h,v 1.1 2005/04/12 17:17:26 tlopatic Exp $
+ * $Id: plugin.h,v 1.2 2005/04/13 22:53:13 tlopatic Exp $
  */
 
 extern void sendMessage(const char *service, const char *string);
@@ -47,3 +47,5 @@ extern void iterRouteTabInit(void);
 extern int iterRouteTabNext(char *buff, int len);
 extern void iterNeighTabInit(void);
 extern int iterNeighTabNext(char *buff, int len);
+extern void iterTcTabInit(void);
+extern int iterTcTabNext(char *buff, int len);