... 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.

Reply via email to