diff options
author | ngie <ngie@FreeBSD.org> | 2015-10-05 00:11:49 +0000 |
---|---|---|
committer | ngie <ngie@FreeBSD.org> | 2015-10-05 00:11:49 +0000 |
commit | e3bac3a30a41f56ac36f4791a7df260f2155c8db (patch) | |
tree | ac20948d4aa368300bc16ece67336a1bed25e992 /sys/net/if_gre.c | |
parent | ca6cf0ba737487849f2ee102afce74545600850c (diff) | |
parent | 85fa330dc74592563cea8d7cf0e628fd30683993 (diff) | |
download | FreeBSD-src-e3bac3a30a41f56ac36f4791a7df260f2155c8db.zip FreeBSD-src-e3bac3a30a41f56ac36f4791a7df260f2155c8db.tar.gz |
MFhead @ r281414
Diffstat (limited to 'sys/net/if_gre.c')
-rw-r--r-- | sys/net/if_gre.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/net/if_gre.c b/sys/net/if_gre.c index c38ec3a..ffd94d8 100644 --- a/sys/net/if_gre.c +++ b/sys/net/if_gre.c @@ -179,6 +179,8 @@ 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; + GRE2IFP(sc)->if_capabilities |= IFCAP_LINKSTATE; + GRE2IFP(sc)->if_capenable |= IFCAP_LINKSTATE; if_attach(GRE2IFP(sc)); bpfattach(GRE2IFP(sc), DLT_NULL, sizeof(u_int32_t)); GRE_LIST_LOCK(); @@ -623,7 +625,7 @@ gre_set_tunnel(struct ifnet *ifp, struct sockaddr *src, default: return (EAFNOSUPPORT); } - if (sc->gre_family != src->sa_family) + if (sc->gre_family != 0) gre_detach(sc); GRE_WLOCK(sc); if (sc->gre_family != 0) @@ -648,8 +650,10 @@ gre_set_tunnel(struct ifnet *ifp, struct sockaddr *src, break; #endif } - if (error == 0) + if (error == 0) { ifp->if_drv_flags |= IFF_DRV_RUNNING; + if_link_state_change(ifp, LINK_STATE_UP); + } return (error); } @@ -668,6 +672,7 @@ gre_delete_tunnel(struct ifnet *ifp) free(sc->gre_hdr, M_GRE); } ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + if_link_state_change(ifp, LINK_STATE_DOWN); } int |