... without changing the address family at the same time Easier to read with diff -b.
This + previous fixes the ``ifconfig'' pflow regress test. OK? diff --git if_pflow.c if_pflow.c index 80758b60bd5..2933df9b444 100644 --- if_pflow.c +++ if_pflow.c @@ -372,46 +372,37 @@ pflow_set(struct pflow_softc *sc, struct pflowreq *pflowr) } if (pflowr->addrmask & PFLOW_MASK_SRCIP) { - if (sc->sc_flowsrc != NULL && - sc->sc_flowsrc->sa_family != pflowr->flowsrc.ss_family) { + if (sc->sc_flowsrc != NULL) free(sc->sc_flowsrc, M_DEVBUF, sc->sc_flowsrc->sa_len); - sc->sc_flowsrc = NULL; - if (sc->so != NULL) { - soclose(sc->so); - sc->so = NULL; - } - } - - if (sc->sc_flowsrc == NULL) { - switch(pflowr->flowsrc.ss_family) { - case AF_INET: - if ((sc->sc_flowsrc = malloc( - sizeof(struct sockaddr_in), - M_DEVBUF, M_NOWAIT)) == NULL) - return (ENOMEM); - memcpy(sc->sc_flowsrc, &pflowr->flowsrc, - sizeof(struct sockaddr_in)); - sc->sc_flowsrc->sa_len = sizeof(struct - sockaddr_in); - break; - case AF_INET6: - if ((sc->sc_flowsrc = malloc( - sizeof(struct sockaddr_in6), - M_DEVBUF, M_NOWAIT)) == NULL) - return (ENOMEM); - memcpy(sc->sc_flowsrc, &pflowr->flowsrc, - sizeof(struct sockaddr_in6)); - sc->sc_flowsrc->sa_len = sizeof(struct - sockaddr_in6); - break; - default: - break; - } - } + sc->sc_flowsrc = NULL; if (sc->so != NULL) { soclose(sc->so); sc->so = NULL; } + switch(pflowr->flowsrc.ss_family) { + case AF_INET: + if ((sc->sc_flowsrc = malloc( + sizeof(struct sockaddr_in), + M_DEVBUF, M_NOWAIT)) == NULL) + return (ENOMEM); + memcpy(sc->sc_flowsrc, &pflowr->flowsrc, + sizeof(struct sockaddr_in)); + sc->sc_flowsrc->sa_len = sizeof(struct + sockaddr_in); + break; + case AF_INET6: + if ((sc->sc_flowsrc = malloc( + sizeof(struct sockaddr_in6), + M_DEVBUF, M_NOWAIT)) == NULL) + return (ENOMEM); + memcpy(sc->sc_flowsrc, &pflowr->flowsrc, + sizeof(struct sockaddr_in6)); + sc->sc_flowsrc->sa_len = sizeof(struct + sockaddr_in6); + break; + default: + break; + } } if (sc->so == NULL) { -- I'm not entirely sure you are real.