increase buffer size for kernel reads
diff --git a/zebra/ChangeLog b/zebra/ChangeLog
index 0bf262f..c346ce1 100644
--- a/zebra/ChangeLog
+++ b/zebra/ChangeLog
@@ -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
diff --git a/zebra/kernel_socket.c b/zebra/kernel_socket.c
index e2e25d4..59bb023 100644
--- a/zebra/kernel_socket.c
+++ b/zebra/kernel_socket.c
@@ -872,6 +872,13 @@
   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 @@
     struct
     {
       struct if_msghdr ifm;
-      struct sockaddr addr[RTAX_MAX];
+      struct sockaddr_dl;
+      struct sockaddr addr[RTAX_MAX-1];
     } im;
 
     /* Interface address information. */