diff options
Diffstat (limited to 'zebra')
| -rw-r--r-- | zebra/ChangeLog | 7 | ||||
| -rw-r--r-- | zebra/kernel_socket.c | 10 | 
2 files changed, 16 insertions, 1 deletions
diff --git a/zebra/ChangeLog b/zebra/ChangeLog index 0bf262fb..c346ce1a 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 e2e25d49..59bb023b 100644 --- a/zebra/kernel_socket.c +++ b/zebra/kernel_socket.c @@ -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. */  | 
