]> git.puffer.fish Git - mirror/frr.git/commitdiff
increase buffer size for kernel reads
authorgdt <gdt>
Tue, 6 Jan 2004 00:36:51 +0000 (00:36 +0000)
committergdt <gdt>
Tue, 6 Jan 2004 00:36:51 +0000 (00:36 +0000)
zebra/ChangeLog
zebra/kernel_socket.c

index 0bf262fb74af458c4e2158cfaf2c3e47d76fe885..c346ce1a39d335d6e33c0a74bf5c11ebce86f4a8 100644 (file)
@@ -1,3 +1,10 @@
+2004-01-05  Greg Troxel  <gdt@fnord.ir.bbn.com>
+
+       * kernel_socket.c (kernel_read): Add a sockaddr_dl to the ifmsg
+       structure, because on Solaris sockaddr_dl is far larger than the
+       base sockaddr structure.  (The code had previously been failing to
+       read all the data.)
+
 2004-01-05  Greg Troxel  <gdt@ahi.ir.bbn.com>
 
        * kernel_socket.c (kernel_read): Look up interfaces by index
index e2e25d49e4ff2ddc0dfcfff601dae8e490cf76cd..59bb023bbd4e7233b232ad6e3406366fc201a800 100644 (file)
@@ -872,6 +872,13 @@ kernel_read (struct thread *thread)
   int nbytes;
   struct rt_msghdr *rtm;
 
+  /*
+   * This must be big enough for any message the kernel might send.
+   * The code previously used RTAX_MAX struct sockaddrs in all cases,
+   * but now that sockaddrs are variable size, this doesn't work
+   * (Solaris has 244 bytes of sdl_data!).  For now, add a struct
+   * sockaddr_dl to the case where it is used.
+   */
   union 
   {
     /* Routing information. */
@@ -885,7 +892,8 @@ kernel_read (struct thread *thread)
     struct
     {
       struct if_msghdr ifm;
-      struct sockaddr addr[RTAX_MAX];
+      struct sockaddr_dl;
+      struct sockaddr addr[RTAX_MAX-1];
     } im;
 
     /* Interface address information. */