TC, MID and HNA generation now uses a jitter prior to sending data. This opens up...
authorAndreas Tonnesen <andreto@olsr.org>
Sat, 25 Sep 2004 21:52:27 +0000 (21:52 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Sat, 25 Sep 2004 21:52:27 +0000 (21:52 +0000)
src/defs.h
src/generate_msg.c
src/net.h
src/olsr.c
src/olsr.h
src/scheduler.c

index fee94d5..99c59c8 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: defs.h,v 1.12 2004/09/22 20:57:50 kattemat Exp $
+ * $Id: defs.h,v 1.13 2004/09/25 21:52:27 kattemat Exp $
  *
  */
 
 #define UDP_IP_HDRSIZE          28
 
 #define OLSR_SELECT_TIMEOUT     2       /* The timeout for the main select loop */
-/* Debug helper macro */
 
+#define MAX_IFS                 32
+
+
+/* Debug helper macro */
 #ifdef DEBUG
 #define debug(format,args...) \
    olsr_printf(1, "%s (%s:%d): ", __func__, __FILE__, __LINE__); \
@@ -198,7 +201,7 @@ int ioctl_s;
 extern float hello_int, tc_int, polling_int, hna_int;
 
 
-struct timeval fwdtimer      /* forwarding timer */
+struct timeval fwdtimer[MAX_IFS];      /* forwarding timer */
 
 extern struct timeval hold_time_fwd;
 
index b926f02..de5ce9d 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: generate_msg.c,v 1.7 2004/09/25 21:06:07 kattemat Exp $
+ * $Id: generate_msg.c,v 1.8 2004/09/25 21:52:27 kattemat Exp $
  *
  */
 
@@ -303,8 +303,10 @@ generate_tc()
       olsr_build_tc_packet(&tcpacket);
       tc_build(&tcpacket, ifn);
 
-      if(net_output_pending(ifn))
-       net_output(ifn);
+      if(net_output_pending(ifn) && TIMED_OUT(&fwdtimer[ifn->if_nr]))
+       {
+         set_buffer_timer(ifn);
+       }
     }
 }
 
@@ -319,8 +321,11 @@ generate_mid()
     {
       //printf("\nSending MID seq: %i\n", ifn->seqnums.mid_seqnum);
       mid_build(ifn);
-      if(net_output_pending(ifn))
-       net_output(ifn);
+
+      if(net_output_pending(ifn) && TIMED_OUT(&fwdtimer[ifn->if_nr]))
+       {
+         set_buffer_timer(ifn);
+       }
     }
 
 return;
@@ -338,8 +343,10 @@ generate_hna()
     { 
       hna_build(ifn);
       
-      if(net_output_pending(ifn))
-       net_output(ifn);
+      if(net_output_pending(ifn) && TIMED_OUT(&fwdtimer[ifn->if_nr]))
+       {
+         set_buffer_timer(ifn);
+       }
     }
   return;
 }
index 546ac37..b67467c 100644 (file)
--- a/src/net.h
+++ b/src/net.h
@@ -20,7 +20,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: net.h,v 1.9 2004/09/25 21:06:07 kattemat Exp $
+ * $Id: net.h,v 1.10 2004/09/25 21:52:27 kattemat Exp $
  *
  */
 
@@ -35,8 +35,6 @@
 #include <net/if.h>
 
 
-#define MAX_IFS          32
-
 /* Packet transform functions */
 
 struct ptf
index 37aa89b..3f76418 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: olsr.c,v 1.12 2004/09/25 21:06:07 kattemat Exp $
+ * $Id: olsr.c,v 1.13 2004/09/25 21:52:27 kattemat Exp $
  *
  */
 
@@ -44,9 +44,6 @@
 #include <signal.h>
 
 
-static int
-buffer_forward(struct interface *, union olsr_message *, olsr_u16_t);
-
 /**
  *Checks if a timer has timed out.
  */
@@ -359,14 +356,27 @@ olsr_forward_message(union olsr_message *m,
              /* Send */
              net_output(ifn);
              /* Buffer message */
-             buffer_forward(ifn, m, msgsize);
+             set_buffer_timer(ifn);
+             
+             if(net_outbuffer_push(ifn, (olsr_u8_t *)m, msgsize) != msgsize)
+               {
+                 olsr_printf(1, "Received message to big to be forwarded in %s(%d bytes)!", ifn->int_name, msgsize);
+                 olsr_syslog(OLSR_LOG_ERR, "Received message to big to be forwarded on %s(%d bytes)!", ifn->int_name, msgsize);
+               }
+
            }
        }
       
       else
        {
          /* No forwarding pending */
-         buffer_forward(ifn, m, msgsize);
+         set_buffer_timer(ifn);
+         
+         if(net_outbuffer_push(ifn, (olsr_u8_t *)m, msgsize) != msgsize)
+           {
+             olsr_printf(1, "Received message to big to be forwarded in %s(%d bytes)!", ifn->int_name, msgsize);
+             olsr_syslog(OLSR_LOG_ERR, "Received message to big to be forwarded on %s(%d bytes)!", ifn->int_name, msgsize);
+           }
        }
     }
 
@@ -375,9 +385,8 @@ olsr_forward_message(union olsr_message *m,
 }
 
 
-
-static int
-buffer_forward(struct interface *ifn, union olsr_message *m, olsr_u16_t msgsize)
+void
+set_buffer_timer(struct interface *ifn)
 {
   float jitter;
   struct timeval jittertimer;
@@ -387,23 +396,9 @@ buffer_forward(struct interface *ifn, union olsr_message *m, olsr_u16_t msgsize)
   jitter *= max_jitter;
 
   olsr_init_timer((olsr_u32_t) (jitter*1000), &jittertimer);
-  
-  timeradd(&now, &jittertimer, &fwdtimer);
-  
-  
-#ifdef DEBUG
-  olsr_printf(3, "Adding jitter for forwarding: %f size: %d\n", jitter, fwdsize);
-#endif
 
-  /* Copy message to outputbuffer */
-  if(net_outbuffer_push(ifn, (olsr_u8_t *)m, msgsize) != msgsize)
-    {
-      olsr_printf(1, "Received message to big to be forwarded in %s(%d bytes)!", ifn->int_name, msgsize);
-      olsr_syslog(OLSR_LOG_ERR, "Received message to big to be forwarded on %s(%d bytes)!", ifn->int_name, msgsize);
-      fwdtimer = now;
-    }
+  timeradd(&now, &jittertimer, &fwdtimer[ifn->if_nr]);
 
-  return 1;
 }
 
 
index ee55939..5b4106c 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: olsr.h,v 1.7 2004/09/25 21:06:07 kattemat Exp $
+ * $Id: olsr.h,v 1.8 2004/09/25 21:52:27 kattemat Exp $
  *
  */
 
@@ -95,6 +95,9 @@ olsr_forward_message(union olsr_message *,
                     struct interface *, 
                     union olsr_ip_addr *);
 
+void
+set_buffer_timer(struct interface *);
+
 void
 olsr_init_tables();
 
index 95710e5..97c4d8d 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: scheduler.c,v 1.9 2004/09/25 21:06:07 kattemat Exp $
+ * $Id: scheduler.c,v 1.10 2004/09/25 21:52:27 kattemat Exp $
  *
  */
 
@@ -197,16 +197,11 @@ scheduler()
 
 
 
-      /* looping trough interfaces */
+      /* looping trough interfaces and emmittin pending data */
       for (ifn = ifnet; ifn ; ifn = ifn->int_next) 
        { 
-         if(net_output_pending(ifn) && TIMED_OUT(&fwdtimer)) 
-           { 
-#ifdef DEBUG
-             olsr_printf(3, "Forwarding message - size %d\n", fwdsize);
-#endif   
-             net_output(ifn);
-           }
+         if(net_output_pending(ifn) && TIMED_OUT(&fwdtimer[ifn->if_nr])) 
+           net_output(ifn);
        }
 
       /* C R I T I C A L - S E C T I O N - E N D */