aboutsummaryrefslogtreecommitdiff
path: root/sys/net/if_gre.c
diff options
context:
space:
mode:
authorAndrey V. Elsukov <ae@FreeBSD.org>2020-06-03 13:02:31 +0000
committerAndrey V. Elsukov <ae@FreeBSD.org>2020-06-03 13:02:31 +0000
commitdd4490fdab598b56c40619e1bbb51b2da4420518 (patch)
tree47920abadf4288ebffb4fb58e422cebd3241cb4c /sys/net/if_gre.c
parent693d10a29176e9128d5d09bbd74c9205addc091b (diff)
Notes
Diffstat (limited to 'sys/net/if_gre.c')
-rw-r--r--sys/net/if_gre.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/sys/net/if_gre.c b/sys/net/if_gre.c
index bd940b579393..aa3e4062b060 100644
--- a/sys/net/if_gre.c
+++ b/sys/net/if_gre.c
@@ -107,6 +107,9 @@ static void gre_clone_destroy(struct ifnet *);
VNET_DEFINE_STATIC(struct if_clone *, gre_cloner);
#define V_gre_cloner VNET(gre_cloner)
+#ifdef VIMAGE
+static void gre_reassign(struct ifnet *, struct vnet *, char *);
+#endif
static void gre_qflush(struct ifnet *);
static int gre_transmit(struct ifnet *, struct mbuf *);
static int gre_ioctl(struct ifnet *, u_long, caddr_t);
@@ -183,6 +186,9 @@ gre_clone_create(struct if_clone *ifc, int unit, caddr_t params)
GRE2IFP(sc)->if_ioctl = gre_ioctl;
GRE2IFP(sc)->if_transmit = gre_transmit;
GRE2IFP(sc)->if_qflush = gre_qflush;
+#ifdef VIMAGE
+ GRE2IFP(sc)->if_reassign = gre_reassign;
+#endif
GRE2IFP(sc)->if_capabilities |= IFCAP_LINKSTATE;
GRE2IFP(sc)->if_capenable |= IFCAP_LINKSTATE;
if_attach(GRE2IFP(sc));
@@ -190,6 +196,21 @@ gre_clone_create(struct if_clone *ifc, int unit, caddr_t params)
return (0);
}
+#ifdef VIMAGE
+static void
+gre_reassign(struct ifnet *ifp, struct vnet *new_vnet __unused,
+ char *unused __unused)
+{
+ struct gre_softc *sc;
+
+ sx_xlock(&gre_ioctl_sx);
+ sc = ifp->if_softc;
+ if (sc != NULL)
+ gre_delete_tunnel(sc);
+ sx_xunlock(&gre_ioctl_sx);
+}
+#endif /* VIMAGE */
+
static void
gre_clone_destroy(struct ifnet *ifp)
{