... without changing the address family at the same time
Easier to see with diff -b
OK?
diff --git if_pflow.c if_pflow.c
index 8e95aaf753f..80758b60bd5 100644
--- if_pflow.c
+++ if_pflow.c
@@ -335,32 +335,35 @@ pflow_set(struct pflow_softc *sc, struct pflowreq *pflowr)
}
}
- if (sc->sc_flowdst == NULL) {
- switch (pflowr->flowdst.ss_family) {
- case AF_INET:
+ switch (pflowr->flowdst.ss_family) {
+ case AF_INET:
+ if (sc->sc_flowdst == NULL) {
if ((sc->sc_flowdst = malloc(
sizeof(struct sockaddr_in),
M_DEVBUF, M_NOWAIT)) == NULL)
return (ENOMEM);
- memcpy(sc->sc_flowdst, &pflowr->flowdst,
- sizeof(struct sockaddr_in));
- sc->sc_flowdst->sa_len = sizeof(struct
- sockaddr_in);
- break;
- case AF_INET6:
+ }
+ memcpy(sc->sc_flowdst, &pflowr->flowdst,
+ sizeof(struct sockaddr_in));
+ sc->sc_flowdst->sa_len = sizeof(struct
+ sockaddr_in);
+ break;
+ case AF_INET6:
+ if (sc->sc_flowdst == NULL) {
if ((sc->sc_flowdst = malloc(
sizeof(struct sockaddr_in6),
M_DEVBUF, M_NOWAIT)) == NULL)
return (ENOMEM);
- memcpy(sc->sc_flowdst, &pflowr->flowdst,
- sizeof(struct sockaddr_in6));
- sc->sc_flowdst->sa_len = sizeof(struct
- sockaddr_in6);
- break;
- default:
- break;
}
+ memcpy(sc->sc_flowdst, &pflowr->flowdst,
+ sizeof(struct sockaddr_in6));
+ sc->sc_flowdst->sa_len = sizeof(struct
+ sockaddr_in6);
+ break;
+ default:
+ break;
}
+
if (sc->sc_flowdst != NULL) {
sc->send_nam->m_len = sc->sc_flowdst->sa_len;
sa = mtod(sc->send_nam, struct sockaddr *);
--
I'm not entirely sure you are real.