Added printout function for HELLO messages, only HELLO LQ missing now
authorAndreas Tonnesen <andreto@olsr.org>
Sat, 28 May 2005 14:01:59 +0000 (14:01 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Sat, 28 May 2005 14:01:59 +0000 (14:01 +0000)
src/olsr.c
src/olsr.h
src/print_packet.c

index bb5d06b..dca3fa1 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsr.c,v 1.44 2005/05/26 09:55:11 kattemat Exp $
+ * $Id: olsr.c,v 1.45 2005/05/28 14:01:59 kattemat Exp $
  */
 
 /**
@@ -519,6 +519,54 @@ olsr_msgtype_to_string(olsr_u8_t msgtype)
 }
 
 
+const char *
+olsr_link_to_string(olsr_u8_t linktype)
+{
+  static char type[20];
+
+  switch(linktype)
+    {
+    case(UNSPEC_LINK):
+      return "UNSPEC";
+    case(ASYM_LINK):
+      return "ASYM";
+    case(SYM_LINK):
+      return "SYM";
+    case(LOST_LINK):
+      return "LOST";
+    case(HIDE_LINK):
+      return "HIDE";
+    default:
+      break;
+    }
+
+  snprintf(type, 20, "UNKNOWN(%d)", linktype);
+  return type;
+}
+
+
+const char *
+olsr_status_to_string(olsr_u8_t status)
+{
+  static char type[20];
+
+  switch(status)
+    {
+    case(NOT_NEIGH):
+      return "NOT NEIGH";
+    case(SYM_NEIGH):
+      return "NEIGHBOR";
+    case(MPR_NEIGH):
+      return "MPR";
+    default:
+      break;
+    }
+
+  snprintf(type, 20, "UNKNOWN(%d)", status);
+  return type;
+}
+
+
 /**
  *Termination function to be called whenever a error occures
  *that requires the daemon to terminate
index 73a9c2c..e419bb6 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsr.h,v 1.22 2005/05/26 09:55:11 kattemat Exp $
+ * $Id: olsr.h,v 1.23 2005/05/28 14:01:59 kattemat Exp $
  */
 
 
@@ -87,6 +87,12 @@ olsr_calculate_willingness(void);
 const char *
 olsr_msgtype_to_string(olsr_u8_t);
 
+const char *
+olsr_link_to_string(olsr_u8_t);
+
+const char *
+olsr_status_to_string(olsr_u8_t);
+
 void
 olsr_exit(const char *, int);
 
index 45b7196..f5ac436 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: print_packet.c,v 1.4 2005/05/27 08:29:22 kattemat Exp $
+ * $Id: print_packet.c,v 1.5 2005/05/28 14:01:59 kattemat Exp $
  */
 
 #include "print_packet.h"
@@ -189,19 +189,68 @@ print_messagedump(FILE *handle, olsr_u8_t *msg, olsr_16_t size)
 static void
 print_hellomsg(FILE *handle, olsr_u8_t *data, olsr_16_t totsize)
 {
-  int remsize = totsize - ((olsr_cnf->ip_version == AF_INET) ? OLSR_MSGHDRSZ_IPV4 : OLSR_MSGHDRSZ_IPV6);
+  union olsr_ip_addr *haddr;
+  int hellosize = totsize - ((olsr_cnf->ip_version == AF_INET) ? OLSR_MSGHDRSZ_IPV4 : OLSR_MSGHDRSZ_IPV6);
 
-  data +=2 ;
-  remsize -= 2;
-  fprintf(handle, "    +Htime: %0.2f\n", ME_TO_DOUBLE(*data));
+  fprintf(handle, "    +Htime: %0.2f\n", ME_TO_DOUBLE(data[2]));
 
-  data += 1;
-  remsize -= 1;
-  fprintf(handle, "    +Willingness: %d\n", *data);
+  fprintf(handle, "    +Willingness: %d\n", data[3]);
 
-  /* ToDo: print neighor sets */
+  if(olsr_cnf->ip_version == AF_INET)
+    {
+      /* IPv4 */
+      struct hellomsg *h;
+      struct hellinfo *hinf;
+
+      h = (struct hellomsg *)data;
+
+      for (hinf = h->hell_info; 
+          (char *)hinf < ((char *)data + hellosize); 
+          hinf = (struct hellinfo *)((char *)hinf + ntohs(hinf->size)))
+       {
+
+         fprintf(handle, "    ++ Link: %s, Status: %s, Size: %d\n", 
+                 olsr_link_to_string(EXTRACT_LINK(hinf->link_code)), 
+                 olsr_status_to_string(EXTRACT_STATUS(hinf->link_code)),
+                 ntohs(hinf->size));
+
+         for (haddr = (union olsr_ip_addr  *)&hinf->neigh_addr; 
+              (char *)haddr < (char *)hinf + ntohs(hinf->size); 
+              haddr = (union olsr_ip_addr *)&haddr->v6.s6_addr[4])
+           {
+
+             fprintf(handle, "    ++ %s\n", olsr_ip_to_string(haddr));
+           }
+       }
+
+      
+    }
+  else
+    {
+      /* IPv6 */
+      struct hellomsg6 *h6;
+      struct hellinfo6 *hinf6;
+
+      h6 = (struct hellomsg6 *)data;
+
+      for (hinf6 = h6->hell_info; (char *)hinf6 < ((char *)data + (hellosize)); 
+          hinf6 = (struct hellinfo6 *)((char *)hinf6 + ntohs(hinf6->size)))
+       {
+         fprintf(handle, "    ++ Link: %s, Status: %s, Size: %d\n", 
+                 olsr_link_to_string(EXTRACT_LINK(hinf6->link_code)), 
+                 olsr_status_to_string(EXTRACT_STATUS(hinf6->link_code)),
+                 ntohs(hinf6->size));
+
+         for (haddr = (union olsr_ip_addr *)hinf6->neigh_addr; 
+              (char *)haddr < (char *)hinf6 + ntohs(hinf6->size); 
+              haddr++)
+           {
+             fprintf(handle, "    ++ %s\n", olsr_ip_to_string(haddr));
+           }
+       }
+
+    }
 
-  /* TESTING TESTING */
 }
 
 static void