aboutsummaryrefslogtreecommitdiff
path: root/sys/net/if_ipsec.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/net/if_ipsec.c')
-rw-r--r--sys/net/if_ipsec.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/sys/net/if_ipsec.c b/sys/net/if_ipsec.c
index 737d840bbac7..d863b26eaff9 100644
--- a/sys/net/if_ipsec.c
+++ b/sys/net/if_ipsec.c
@@ -170,6 +170,9 @@ static int ipsec_set_addresses(struct ifnet *, struct sockaddr *,
static int ipsec_set_reqid(struct ipsec_softc *, uint32_t);
static void ipsec_set_running(struct ipsec_softc *);
+#ifdef VIMAGE
+static void ipsec_reassign(struct ifnet *, struct vnet *, char *);
+#endif
static void ipsec_srcaddr(void *, const struct sockaddr *, int);
static int ipsec_ioctl(struct ifnet *, u_long, caddr_t);
static int ipsec_transmit(struct ifnet *, struct mbuf *);
@@ -201,12 +204,30 @@ ipsec_clone_create(struct if_clone *ifc, int unit, caddr_t params)
ifp->if_transmit = ipsec_transmit;
ifp->if_qflush = ipsec_qflush;
ifp->if_output = ipsec_output;
+#ifdef VIMAGE
+ ifp->if_reassign = ipsec_reassign;
+#endif
if_attach(ifp);
bpfattach(ifp, DLT_NULL, sizeof(uint32_t));
return (0);
}
+#ifdef VIMAGE
+static void
+ipsec_reassign(struct ifnet *ifp, struct vnet *new_vnet __unused,
+ char *unused __unused)
+{
+ struct ipsec_softc *sc;
+
+ sx_xlock(&ipsec_ioctl_sx);
+ sc = ifp->if_softc;
+ if (sc != NULL)
+ ipsec_delete_tunnel(sc);
+ sx_xunlock(&ipsec_ioctl_sx);
+}
+#endif /* VIMAGE */
+
static void
ipsec_clone_destroy(struct ifnet *ifp)
{