Added new generic message/packet print functions. individual packet print functions...
authorAndreas Tonnesen <andreto@olsr.org>
Thu, 26 May 2005 09:55:11 +0000 (09:55 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Thu, 26 May 2005 09:55:11 +0000 (09:55 +0000)
src/net_olsr.c
src/olsr.c
src/olsr.h
src/parser.c
src/print_packet.c [new file with mode: 0644]
src/print_packet.h [new file with mode: 0644]

index 0ccaddd..57fb812 100644 (file)
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: net_olsr.c,v 1.1 2005/05/25 20:59:46 kattemat Exp $
+ * $Id: net_olsr.c,v 1.2 2005/05/26 09:55:11 kattemat Exp $
  */
 
 #include "net_olsr.h"
 #include "log.h"
 #include "olsr.h"
 #include "net_os.h"
+#include "print_packet.h"
 #include <stdlib.h>
 
 #ifdef WIN32
@@ -388,7 +389,6 @@ net_output(struct interface *ifp)
   struct sockaddr_in6 *sin6;  
   struct sockaddr_in6 dst6;
   struct ptf *tmp_ptf_list;
-  int i, x;
   union olsr_packet *outmsg;
 
   sin = NULL;
@@ -444,38 +444,8 @@ net_output(struct interface *ifp)
    *we print the contetnt of the packets
    */
   if(disp_pack_out)
-    {
-      switch(netbufs[ifp->if_nr]->buff[4])
-       {
-       case(HELLO_MESSAGE):printf("\n\tHELLO ");break;
-       case(TC_MESSAGE):printf("\n\tTC ");break;
-       case(MID_MESSAGE):printf("\n\tMID ");break;
-       case(HNA_MESSAGE):printf("\n\tHNA ");break;
-       default:printf("\n\tTYPE: %d ", netbufs[ifp->if_nr]->buff[4]); break;
-       }
-      if(olsr_cnf->ip_version == AF_INET)
-       printf("to %s size: %d\n\t", ip_to_string((olsr_u32_t *)&sin->sin_addr.s_addr), netbufs[ifp->if_nr]->pending);
-      else
-       printf("to %s size: %d\n\t", ip6_to_string(&sin6->sin6_addr), netbufs[ifp->if_nr]->pending);
-
-      x = 0;
-
-      for(i = 0; i < netbufs[ifp->if_nr]->pending;i++)
-       {
-         if(x == 4)
-           {
-             x = 0;
-             printf("\n\t");
-           }
-         x++;
-         if(olsr_cnf->ip_version == AF_INET)
-           printf(" %3i", (u_char) netbufs[ifp->if_nr]->buff[i]);
-         else
-           printf(" %2x", (u_char) netbufs[ifp->if_nr]->buff[i]);
-       }
-      
-      printf("\n");
-    }
+    print_olsr_serialized_packet(stdout, (union olsr_packet *)netbufs[ifp->if_nr]->buff, 
+                                netbufs[ifp->if_nr]->pending, &ifp->ip_addr); 
   
   if(olsr_cnf->ip_version == AF_INET)
     {
index 6741f5c..bb5d06b 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.43 2005/03/06 19:33:35 kattemat Exp $
+ * $Id: olsr.c,v 1.44 2005/05/26 09:55:11 kattemat Exp $
  */
 
 /**
@@ -59,6 +59,7 @@
 #include "misc.h"
 #include "neighbor_table.h"
 #include "log.h"
+#include "lq_packet.h"
 
 #include <stdarg.h>
 #include <signal.h>
@@ -490,6 +491,32 @@ olsr_calculate_willingness()
   return (ainfo.battery_percentage / 26);
 }
 
+const char *
+olsr_msgtype_to_string(olsr_u8_t msgtype)
+{
+  static char type[20];
+
+  switch(msgtype)
+    {
+    case(HELLO_MESSAGE):
+      return "HELLO";
+    case(TC_MESSAGE):
+      return "TC";
+    case(MID_MESSAGE):
+      return "MID";
+    case(HNA_MESSAGE):
+      return "HNA";
+    case(LQ_HELLO_MESSAGE):
+      return("LQ-HELLO");
+    case(LQ_TC_MESSAGE):
+      return("LQ-TC");
+    default:
+      break;
+    }
+
+  snprintf(type, 20, "UNKNOWN(%d)", msgtype);
+  return type;
+}
 
 
 /**
index b9c6346..73a9c2c 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.21 2005/03/06 19:33:35 kattemat Exp $
+ * $Id: olsr.h,v 1.22 2005/05/26 09:55:11 kattemat Exp $
  */
 
 
@@ -84,6 +84,9 @@ olsr_update_willingness(void *);
 olsr_u8_t
 olsr_calculate_willingness(void);
 
+const char *
+olsr_msgtype_to_string(olsr_u8_t);
+
 void
 olsr_exit(const char *, int);
 
index 51a1f13..9772cbc 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: parser.c,v 1.22 2005/03/10 07:01:48 kattemat Exp $
+ * $Id: parser.c,v 1.23 2005/05/26 09:55:11 kattemat Exp $
  */
 
 #include "parser.h"
@@ -50,6 +50,7 @@
 #include "rebuild_packet.h"
 #include "net_os.h"
 #include "log.h"
+#include "print_packet.h"
 
 #ifdef WIN32
 #undef EWOULDBLOCK
@@ -154,9 +155,6 @@ parse_packet(struct olsr *olsr, int size, struct interface *in_if, union olsr_ip
   int msgsize;
   int processed;
   struct parse_function_entry *entry;
-  char *packet = (char*)olsr;
-  int i;
-  int x = 0;
 
   count = size - ((char *)m - (char *)olsr);
 
@@ -176,25 +174,7 @@ parse_packet(struct olsr *olsr, int size, struct interface *in_if, union olsr_ip
       
   /* Display packet */
   if(disp_pack_in)
-    {
-      printf("\n\tfrom: %s\n\tsize: %d\n\tcontent(decimal):\n\t", olsr_ip_to_string(from_addr), size);
-       
-      for(i = 0; i < size;i++)
-       {
-         if(x == 4)
-           {
-             x = 0;
-             printf("\n\t");
-           }
-         x++;
-         if(olsr_cnf->ip_version == AF_INET)
-           printf(" %03i", (u_char) packet[i]);
-         else
-           printf(" %02x", (u_char) packet[i]);
-       }
-           
-      printf("\n");
-    }
+    print_olsr_serialized_packet(stdout, (union olsr_packet *)olsr, size, from_addr);
 
   if(olsr_cnf->ip_version == AF_INET)
     msgsize = ntohs(m->v4.olsr_msgsize);
diff --git a/src/print_packet.c b/src/print_packet.c
new file mode 100644 (file)
index 0000000..b001848
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+ * The olsr.org Optimized Link-State Routing daemon(olsrd)
+ * Copyright (c) 2004, Andreas T√łnnesen(andreto@olsr.org)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions 
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright 
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright 
+ *   notice, this list of conditions and the following disclaimer in 
+ *   the documentation and/or other materials provided with the 
+ *   distribution.
+ * * Neither the name of olsr.org, olsrd nor the names of its 
+ *   contributors may be used to endorse or promote products derived 
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Visit http://www.olsr.org for more information.
+ *
+ * If you find this software useful feel free to make a donation
+ * to the project. For more information see the website or contact
+ * the copyright holders.
+ *
+ * $Id: print_packet.c,v 1.1 2005/05/26 09:55:11 kattemat Exp $
+ */
+
+#include "print_packet.h"
+#include "mantissa.h"
+#include "defs.h"
+#include "olsr.h"
+#include "lq_packet.h"
+
+static void
+print_messagedump(FILE *, olsr_u8_t *, olsr_16_t);
+
+
+/* Entire packet */
+olsr_8_t
+print_olsr_serialized_packet(FILE *handle, union olsr_packet *pkt, 
+                            olsr_u16_t size, union olsr_ip_addr *from_addr)
+{
+  olsr_16_t remainsize = size - OLSR_HEADERSIZE;
+  union olsr_message *msg;
+
+  /* Print packet header (no IP4/6 difference) */
+  fprintf(handle, "  ============== OLSR PACKET ==============\n   source: %s\n   length: %d bytes\n   seqno: %d\n\n",
+         from_addr ? olsr_ip_to_string(from_addr) : "UNKNOWN",
+         ntohs(pkt->v4.olsr_packlen), ntohs(pkt->v4.olsr_seqno));
+
+  /* Check size */
+  if(size != ntohs(pkt->v4.olsr_packlen))
+    fprintf(handle, "   SIZE MISSMATCH(%d != %d)!\n", size, ntohs(pkt->v4.olsr_packlen));
+
+  msg = (union olsr_message *)pkt->v4.olsr_msg;
+
+  /* Print all messages */
+  while((remainsize > 0) && ntohs(msg->v4.olsr_msgsize))
+    {
+      print_olsr_serialized_message(handle, msg);
+      remainsize -= ntohs(msg->v4.olsr_msgsize);
+      msg = (union olsr_message *)((int)msg + (int)ntohs(msg->v4.olsr_msgsize));
+    }
+
+  /* Done */
+  fprintf(handle, "  =========================================\n\n");
+  return 1;
+}
+
+/* Single message */
+olsr_8_t
+print_olsr_serialized_message(FILE *handle, union olsr_message *msg)
+{
+
+  fprintf(handle, "   ------------ OLSR MESSAGE ------------\n");
+
+  fprintf(handle, "    Type: %s, size: %d, vtime: %0.2f\n", 
+         olsr_msgtype_to_string(msg->v4.olsr_msgtype), 
+         ntohs(msg->v4.olsr_msgsize),
+         ME_TO_DOUBLE(msg->v4.olsr_vtime));
+
+  switch(msg->v4.olsr_msgtype)
+    {
+      /* ToDo: add print functions for individual messagetypes */
+    case(HELLO_MESSAGE):
+    case(TC_MESSAGE):
+    case(MID_MESSAGE):
+    case(HNA_MESSAGE):
+    case(LQ_HELLO_MESSAGE):
+    case(LQ_TC_MESSAGE):
+    default:
+      print_messagedump(handle, (olsr_u8_t *)msg, ntohs(msg->v4.olsr_msgsize));
+    }
+
+  fprintf(handle, "   --------------------------------------\n\n");
+  return 1;
+}
+
+
+static void
+print_messagedump(FILE *handle, olsr_u8_t *msg, olsr_16_t size)
+{
+  int i, x = 0;
+
+  fprintf(handle, "     Data dump:\n     ");
+  for(i = 0; i < size; i++)
+    {
+      if(x == 4)
+       {
+         x = 0;
+         fprintf(handle, "\n     ");
+       }
+      x++;
+      if(olsr_cnf->ip_version == AF_INET)
+       printf(" %-3i ", (u_char) msg[i]);
+      else
+       printf(" %-2x ", (u_char) msg[i]);
+    }
+  fprintf(handle, "\n");
+}
diff --git a/src/print_packet.h b/src/print_packet.h
new file mode 100644 (file)
index 0000000..41b3f47
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * The olsr.org Optimized Link-State Routing daemon(olsrd)
+ * Copyright (c) 2004, Andreas T√łnnesen(andreto@olsr.org)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions 
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright 
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright 
+ *   notice, this list of conditions and the following disclaimer in 
+ *   the documentation and/or other materials provided with the 
+ *   distribution.
+ * * Neither the name of olsr.org, olsrd nor the names of its 
+ *   contributors may be used to endorse or promote products derived 
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Visit http://www.olsr.org for more information.
+ *
+ * If you find this software useful feel free to make a donation
+ * to the project. For more information see the website or contact
+ * the copyright holders.
+ *
+ * $Id: print_packet.h,v 1.1 2005/05/26 09:55:11 kattemat Exp $
+ */
+
+#ifndef _PRINT_PACKET
+#define _PRINT_PACKET
+
+#include "olsr_types.h"
+#include "olsr_protocol.h"
+#include <stdio.h>
+
+olsr_8_t
+print_olsr_serialized_packet(FILE *, union olsr_packet *, olsr_u16_t, union olsr_ip_addr *);
+
+olsr_8_t
+print_olsr_serialized_message(FILE *, union olsr_message *);
+
+#endif