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