Ticket #1381: ip_output.c.diff

File ip_output.c.diff, 783 bytes (added by Gene Smith, on Feb 16, 2009 at 8:18:15 PM)

Fix based on BSD code

  • .c

    old new  
    3131 */
    3232
    3333/*
    34  *      $Id: ip_output.c,v 1.11 2008/12/22 07:47:28 ralf Exp $
     34 *      $Id: ip_output.c,v 1.10 2008/09/01 06:36:17 ralf Exp $
    3535 */
    3636
    3737#define _IP_VHL
     
    163163                ifp = ia->ia_ifp;
    164164                ip->ip_ttl = 1;
    165165                isbroadcast = in_broadcast(dst->sin_addr, ifp);
     166        } else if (IN_MULTICAST(ntohl(ip->ip_dst.s_addr)) &&
     167            imo != NULL && imo->imo_multicast_ifp != NULL) {
     168                /*
     169                 * Bypass the normal routing lookup for multicast
     170                 * packets if the interface is specified.
     171                 */
     172                ifp = imo->imo_multicast_ifp;
     173                IFP_TO_IA(ifp, ia);
     174                isbroadcast = 0;        /* fool gcc */
    166175        } else {
    167176                /*
    168177                 * If this is the case, we probably don't want to allocate