[netperf-dev] netperf2 commit notice r280 - trunk/src

raj at netperf.org raj at netperf.org
Thu May 22 11:26:11 PDT 2008


Author: raj
Date: 2008-05-22 11:26:11 -0700 (Thu, 22 May 2008)
New Revision: 280

Modified:
   trunk/src/netrt_rtnetlink.c
Log:
fix some silly bugs found by Thomas Graf

Modified: trunk/src/netrt_rtnetlink.c
===================================================================
--- trunk/src/netrt_rtnetlink.c	2008-05-21 22:34:40 UTC (rev 279)
+++ trunk/src/netrt_rtnetlink.c	2008-05-22 18:26:11 UTC (rev 280)
@@ -78,11 +78,14 @@
     rtap = (struct rtattr *)request.buf;
     rtap->rta_type = RTA_DST;
     if (AF_INET == in4->sin_family) {
-      rtap->rta_len = RTA_LENGTH(sizeof(in4->sin_addr));
+      /* while a sin_addr is a multiple of 4 bytes in length, we
+	 should still use RTA_SPACE rather than RTA_LENGTH. kudos to
+	 Thomas Graf for pointing that out */
+      rtap->rta_len = RTA_SPACE(sizeof(in4->sin_addr));
       memcpy(RTA_DATA(rtap), &(in4->sin_addr), sizeof(in4->sin_addr));
     }
     else if (AF_INET6 == in6->sin6_family) {
-      rtap->rta_len = RTA_LENGTH(sizeof(in6->sin6_addr));
+      rtap->rta_len = RTA_SPACE(sizeof(in6->sin6_addr));
       memcpy(RTA_DATA(rtap), &(in6->sin6_addr), sizeof(in6->sin6_addr));
     }
     else {
@@ -96,7 +99,7 @@
   }
 
   /* add the length of our request to our overall message length. it
-     should already be suitably padded by the previous RTA_LENGTH */
+     should already be suitably padded by the previous RTA_SPACE */
   request.nl.nlmsg_len += rtap->rta_len;
 
   /* now the src */
@@ -105,14 +108,18 @@
        current value of rta_len */
     in4 = (struct sockaddr_in *)source;
     in6 = (struct sockaddr_in6 *)source;
-    rtap +=  rtap->rta_len;
+
+    /* pointer math is fun.  silly me initially tried to to rtap +=
+       rtap->rta_len but since rtap isn't pointing at bytes... again
+       kudos to Thomas Graf for finding that mistake */
+    rtap = (struct rtattr *)((char *)rtap + (rtap->rta_len));
     rtap->rta_type = RTA_SRC;
     if (AF_INET == in4->sin_family) {
-      rtap->rta_len = RTA_LENGTH(sizeof(in4->sin_addr));
+      rtap->rta_len = RTA_SPACE(sizeof(in4->sin_addr));
       memcpy(RTA_DATA(rtap), &(in4->sin_addr), sizeof(in4->sin_addr));
     }
     else if (AF_INET6 == in6->sin6_family) {
-      rtap->rta_len = RTA_LENGTH(sizeof(in6->sin6_addr));
+      rtap->rta_len = RTA_SPACE(sizeof(in6->sin6_addr));
       memcpy(RTA_DATA(rtap), &(in6->sin6_addr), sizeof(in6->sin6_addr));
     }
     else {
@@ -122,7 +129,7 @@
 
     /* add the length of the just added attribute to the overall
      message length. it should already be suitably padded by the
-     previous RTA_LENGTH */
+     previous RTA_SPACE */
     request.nl.nlmsg_len += rtap->rta_len;
   }
   



More information about the netperf-dev mailing list