On 2009/09/29 22:38, Laurent CARON wrote:
> On 29/09/2009 00:33, Stuart Henderson wrote:
> >The only change to ifstated between 4.4 and 4.5 was a minor change
> >to the config parser. (there was another change after 4.5, so if 4.5
> >works for someone but -current doesn't, they can try reverting it).
> >
> 
> Hi,
> 
> Here is what i temporarily did in the config file to circumvent the "bug"
> 
> carp_up = '( "ifconfig carp0 | grep -q MASTER" every 10)'
> carp_down = '( "ifconfig carp0 | grep -q BACKUP" every 10)'
> 
> 
> It is not really state of the art, nor clean...but works.

yep, using ifconfig like that isn't really very clean -
does this help at all?

Index: ifstated.c
===================================================================
RCS file: /cvs/src/usr.sbin/ifstated/ifstated.c,v
retrieving revision 1.35
diff -u -p -r1.35 ifstated.c
--- ifstated.c  25 Jun 2009 17:14:57 -0000      1.35
+++ ifstated.c  29 Sep 2009 20:53:37 -0000
@@ -219,6 +219,7 @@ void
 rt_msg_handler(int fd, short event, void *arg)
 {
        char msg[2048];
+       char *next, *lim;
        struct rt_msghdr *rtm = (struct rt_msghdr *)&msg;
        struct if_msghdr ifm;
        int len;
@@ -229,14 +230,18 @@ rt_msg_handler(int fd, short event, void
        if (len < sizeof(struct rt_msghdr))
                return;
 
-       if (rtm->rtm_version != RTM_VERSION)
-               return;
+       lim = (char *)&msg + len;
+       for (next = (char *)&msg; next < lim; next += rtm->rtm_msglen) {
+               rtm = (struct rt_msghdr *)next;
+               if (rtm->rtm_version != RTM_VERSION)
+                       continue;
 
-       if (rtm->rtm_type != RTM_IFINFO)
-               return;
+               if (rtm->rtm_type != RTM_IFINFO)
+                       continue;
 
-       memcpy(&ifm, rtm, sizeof(ifm));
-       scan_ifstate(ifm.ifm_index, ifm.ifm_data.ifi_link_state, 1);
+               memcpy(&ifm, rtm, sizeof(ifm));
+               scan_ifstate(ifm.ifm_index, ifm.ifm_data.ifi_link_state, 1);
+       }
 }
 
 void

Reply via email to