The following reply was made to PR bin/111493; it has been noted by GNATS.

From: Bruce Simpson <b...@incunabulum.net>
To: freebsd-gnats-sub...@freebsd.org
Cc:  
Subject: Re: bin/111493: [patch] routed(8) doesn't use multicasts for RIPv2
 via P2P interfaces
Date: Sat, 10 Apr 2010 14:27:00 +0100

 This is a multi-part message in MIME format.
 --------------090908040401060704000003
 Content-Type: text/plain; charset=ISO-8859-1; format=flowed
 Content-Transfer-Encoding: 7bit
 
 Pulled up proposed patch on HEAD.
 
 FreeBSD's routed has deviated from vendor branch too much, and the 
 vendor branch history got lost in the noise of the SVN conversion.
 
 
 --------------090908040401060704000003
 Content-Type: text/plain;
  name="routed-gre.diff"
 Content-Transfer-Encoding: 7bit
 Content-Disposition: attachment;
  filename="routed-gre.diff"
 
 diff -uNr -x '.svn*' -x 'Makefile*' -x md5.c routed/output.c routedx/output.c
 --- routed/output.c    2010-04-10 14:21:52.000000000 +0100
 +++ routedx/output.c   2007-08-13 16:33:55.000000000 +0100
 @@ -140,8 +142,8 @@
                flags = MSG_DONTROUTE;
                break;
        case OUT_MULTICAST:
 -              if ((ifp->int_if_flags & (IFF_POINTOPOINT|IFF_MULTICAST)) ==
 -                  IFF_POINTOPOINT) {
 +              if ((ifp->int_if_flags & IFF_POINTOPOINT)
 +                  && !(ifp->int_if_flags & IFF_MULTICAST)) {
                        msg = "Send pt-to-pt";
                } else if (ifp->int_state & IS_DUP) {
                        trace_act("abort multicast output via %s"
 @@ -862,9 +877,10 @@
                } else if (ifp->int_if_flags & IFF_POINTOPOINT) {
                        /* point-to-point hardware interface */
                        dst.sin_addr.s_addr = ifp->int_dstaddr;
 -                      if (vers == RIPv2 &&
 -                          ifp->int_if_flags & IFF_MULTICAST &&
 -                          !(ifp->int_state  & IS_NO_RIP_MCAST)) {
 +                      /* use multicast if the interface allows (e.g. GRE) */
 +                      if (vers == RIPv2
 +                          && (ifp->int_if_flags & IFF_MULTICAST)
 +                          && !(ifp->int_state & IS_NO_RIP_MCAST)) {
                                type = OUT_MULTICAST;
                        } else {
                                type = OUT_UNICAST;
 @@ -957,7 +973,14 @@
                } else if (ifp->int_if_flags & IFF_POINTOPOINT) {
                        /* point-to-point hardware interface */
                        dst.sin_addr.s_addr = ifp->int_dstaddr;
 -                      type = OUT_UNICAST;
 +                      /* use multicast if the interface allows (e.g. GRE) */
 +                      if (buf.rip_vers == RIPv2
 +                          && (ifp->int_if_flags & IFF_MULTICAST)
 +                          && !(ifp->int_state & IS_NO_RIP_MCAST)) {
 +                              type = OUT_MULTICAST;
 +                      } else {
 +                              type = OUT_UNICAST;
 +                      }
  
                } else if (ifp->int_state & IS_REMOTE) {
                        /* remote interface */
 
 --------------090908040401060704000003--
_______________________________________________
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to