olsrd_dot_draw.c should also consider OLSR_TC_EDGE_DOWN flag
authorThomas Martin <thomas.martin@rohde-schwarz.com>
Fri, 30 May 2008 12:50:58 +0000 (14:50 +0200)
committerThomas Martin <thomas.martin@rohde-schwarz.com>
Fri, 30 May 2008 12:50:58 +0000 (14:50 +0200)
lib/dot_draw/src/olsrd_dot_draw.c

index 95c20d5..5003ff9 100644 (file)
  * Dynamic linked library for the olsr.org olsr daemon
  */
 
+#ifdef _WRS_KERNEL
+#include <vxWorks.h>
+#include <sockLib.h>
+#include <wrn/coreip/netinet/in.h>
+#else
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
@@ -57,6 +61,7 @@
 #include <unistd.h>
 #include <errno.h>
 #include <stdarg.h>
+#endif
 
 #include "olsr.h"
 #include "ipcalc.h"
 #define close(x) closesocket(x)
 #endif
 
+#ifdef _WRS_KERNEL
+static int ipc_open;
+static int ipc_socket_up;
+#define DOT_DRAW_PORT 2004
+#endif
 
 static int ipc_socket;
 static int ipc_connection;
 
-
-
 /* IPC initialization function */
 static int
 plugin_ipc_init(void);
@@ -120,8 +128,11 @@ ipc_send_fmt(const char *format, ...) __attribute__((format(printf,1,2)));
  *This function is called by the my_init
  *function in uolsrd_plugin.c
  */
-int
-olsrd_plugin_init(void)
+#ifdef _WRS_KERNEL
+int olsrd_dotdraw_init(void)
+#else
+int olsrd_plugin_init(void)
+#endif
 {
   /* Initial IPC value */
   ipc_socket = -1;
@@ -139,8 +150,11 @@ olsrd_plugin_init(void)
 /**
  * destructor - called at unload
  */
-void
-olsr_plugin_exit(void)
+#ifdef _WRS_KERNEL
+void olsrd_dotdraw_exit(void)
+#else
+void olsr_plugin_exit(void)
+#endif
 {
   if (ipc_connection != -1) {
     CLOSE(ipc_connection);
@@ -161,7 +175,7 @@ ipc_print_neigh_link(const struct neighbor_entry *neighbor)
   struct link_entry* link;
   struct lqtextbuffer lqbuffer;
   
-  if (neighbor->status == 0) { // non SYM
+  if (neighbor->status == 0) { /* non SYM */
     style = "dashed";
   } else {   
     link = get_best_link_to_neighbor(&neighbor->neighbor_main_addr);
@@ -237,7 +251,9 @@ plugin_ipc_init(void)
   }
 
   /* Register with olsrd */
-  //printf("Adding socket with olsrd\n");
+#if 0
+  printf("Adding socket with olsrd\n");
+#endif
   add_olsr_socket(ipc_socket, &ipc_action);
 
   return 1;
@@ -259,11 +275,13 @@ ipc_action(int fd __attribute__((unused)))
     olsr_printf(1, "(DOT DRAW)IPC accept: %s\n", strerror(errno));
     return;
   }
+#ifndef _WRS_KERNEL
   if (!ip4equal(&pin.sin_addr, &ipc_accept_ip.v4)) {
     olsr_printf(0, "Front end-connection from foreign host (%s) not allowed!\n", inet_ntoa(pin.sin_addr));
     CLOSE(ipc_connection);
     return;
   }
+#endif
   olsr_printf(1, "(DOT DRAW)IPC: Connection from %s\n", inet_ntoa(pin.sin_addr));
   close(ipc_connection); /* close connection after one output */
   pcf_event(1, 1, 1);
@@ -300,6 +318,8 @@ pcf_event(int changes_neighborhood,
     /* Topology */  
     OLSR_FOR_ALL_TC_ENTRIES(tc) {
       OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge) {
+        if (tc_edge->edge_inv &&
+          ((tc_edge->flags | tc_edge->edge_inv->flags) & OLSR_TC_EDGE_DOWN)==0) {
         ipc_print_tc_link(tc, tc_edge);
       } OLSR_FOR_ALL_TC_EDGE_ENTRIES_END(tc, tc_edge);
     } OLSR_FOR_ALL_TC_ENTRIES_END(tc);
@@ -366,7 +386,8 @@ static void
 ipc_send(const char *data, int size)
 {
   if (ipc_connection != -1) {
-#if defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ || defined __MacOSX__
+#if defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ || defined __MacOSX__ || \
+defined _WRS_KERNEL
 #define FLAGS 0
 #else
 #define FLAGS MSG_NOSIGNAL