From: gdt Date: Tue, 6 Jan 2004 00:36:51 +0000 (+0000) Subject: increase buffer size for kernel reads X-Git-Tag: frr-2.0-rc1~3812 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=dbee01fe8b0dc1fd0a5de7e9edcbf319f55a4c92;p=matthieu%2Ffrr.git increase buffer size for kernel reads --- diff --git a/zebra/ChangeLog b/zebra/ChangeLog index 0bf262fb74..c346ce1a39 100644 --- a/zebra/ChangeLog +++ b/zebra/ChangeLog @@ -1,3 +1,10 @@ +2004-01-05 Greg Troxel + + * 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 * kernel_socket.c (kernel_read): Look up interfaces by index diff --git a/zebra/kernel_socket.c b/zebra/kernel_socket.c index e2e25d49e4..59bb023bbd 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. */