| @@ -1,14 +1,14 @@ | | | @@ -1,14 +1,14 @@ |
1 | /* $NetBSD: if_spppsubr.c,v 1.186 2020/02/04 05:46:32 thorpej Exp $ */ | | 1 | /* $NetBSD: if_spppsubr.c,v 1.187 2020/03/06 10:26:59 knakahara Exp $ */ |
2 | | | 2 | |
3 | /* | | 3 | /* |
4 | * Synchronous PPP/Cisco link level subroutines. | | 4 | * Synchronous PPP/Cisco link level subroutines. |
5 | * Keepalive protocol implemented in both Cisco and PPP modes. | | 5 | * Keepalive protocol implemented in both Cisco and PPP modes. |
6 | * | | 6 | * |
7 | * Copyright (C) 1994-1996 Cronyx Engineering Ltd. | | 7 | * Copyright (C) 1994-1996 Cronyx Engineering Ltd. |
8 | * Author: Serge Vakulenko, <vak@cronyx.ru> | | 8 | * Author: Serge Vakulenko, <vak@cronyx.ru> |
9 | * | | 9 | * |
10 | * Heavily revamped to conform to RFC 1661. | | 10 | * Heavily revamped to conform to RFC 1661. |
11 | * Copyright (C) 1997, Joerg Wunsch. | | 11 | * Copyright (C) 1997, Joerg Wunsch. |
12 | * | | 12 | * |
13 | * RFC2472 IPv6CP support. | | 13 | * RFC2472 IPv6CP support. |
14 | * Copyright (C) 2000, Jun-ichiro itojun Hagino <itojun@iijlab.net>. | | 14 | * Copyright (C) 2000, Jun-ichiro itojun Hagino <itojun@iijlab.net>. |
| @@ -31,27 +31,27 @@ | | | @@ -31,27 +31,27 @@ |
31 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | | 31 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
32 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | | 32 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
33 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | | 33 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
34 | * POSSIBILITY OF SUCH DAMAGE. | | 34 | * POSSIBILITY OF SUCH DAMAGE. |
35 | * | | 35 | * |
36 | * From: Version 2.4, Thu Apr 30 17:17:21 MSD 1997 | | 36 | * From: Version 2.4, Thu Apr 30 17:17:21 MSD 1997 |
37 | * | | 37 | * |
38 | * From: if_spppsubr.c,v 1.39 1998/04/04 13:26:03 phk Exp | | 38 | * From: if_spppsubr.c,v 1.39 1998/04/04 13:26:03 phk Exp |
39 | * | | 39 | * |
40 | * From: Id: if_spppsubr.c,v 1.23 1999/02/23 14:47:50 hm Exp | | 40 | * From: Id: if_spppsubr.c,v 1.23 1999/02/23 14:47:50 hm Exp |
41 | */ | | 41 | */ |
42 | | | 42 | |
43 | #include <sys/cdefs.h> | | 43 | #include <sys/cdefs.h> |
44 | __KERNEL_RCSID(0, "$NetBSD: if_spppsubr.c,v 1.186 2020/02/04 05:46:32 thorpej Exp $"); | | 44 | __KERNEL_RCSID(0, "$NetBSD: if_spppsubr.c,v 1.187 2020/03/06 10:26:59 knakahara Exp $"); |
45 | | | 45 | |
46 | #if defined(_KERNEL_OPT) | | 46 | #if defined(_KERNEL_OPT) |
47 | #include "opt_inet.h" | | 47 | #include "opt_inet.h" |
48 | #include "opt_modular.h" | | 48 | #include "opt_modular.h" |
49 | #include "opt_compat_netbsd.h" | | 49 | #include "opt_compat_netbsd.h" |
50 | #include "opt_net_mpsafe.h" | | 50 | #include "opt_net_mpsafe.h" |
51 | #endif | | 51 | #endif |
52 | | | 52 | |
53 | | | 53 | |
54 | #include <sys/param.h> | | 54 | #include <sys/param.h> |
55 | #include <sys/proc.h> | | 55 | #include <sys/proc.h> |
56 | #include <sys/systm.h> | | 56 | #include <sys/systm.h> |
57 | #include <sys/kernel.h> | | 57 | #include <sys/kernel.h> |
| @@ -962,44 +962,41 @@ sppp_output(struct ifnet *ifp, struct mb | | | @@ -962,44 +962,41 @@ sppp_output(struct ifnet *ifp, struct mb |
962 | return error; | | 962 | return error; |
963 | } | | 963 | } |
964 | | | 964 | |
965 | static int | | 965 | static int |
966 | sppp_mediachange(struct ifnet *ifp) | | 966 | sppp_mediachange(struct ifnet *ifp) |
967 | { | | 967 | { |
968 | | | 968 | |
969 | return (0); | | 969 | return (0); |
970 | } | | 970 | } |
971 | | | 971 | |
972 | static void | | 972 | static void |
973 | sppp_mediastatus(struct ifnet *ifp, struct ifmediareq *imr) | | 973 | sppp_mediastatus(struct ifnet *ifp, struct ifmediareq *imr) |
974 | { | | 974 | { |
975 | struct sppp *sp = (struct sppp *)ifp; | | 975 | int link_state; |
976 | | | | |
977 | SPPP_LOCK(sp, RW_WRITER); | | | |
978 | | | 976 | |
979 | switch (ifp->if_link_state) { | | 977 | link_state = atomic_load_relaxed(&ifp->if_link_state); |
| | | 978 | switch (link_state) { |
980 | case LINK_STATE_UP: | | 979 | case LINK_STATE_UP: |
981 | imr->ifm_status = IFM_AVALID | IFM_ACTIVE; | | 980 | imr->ifm_status = IFM_AVALID | IFM_ACTIVE; |
982 | break; | | 981 | break; |
983 | case LINK_STATE_DOWN: | | 982 | case LINK_STATE_DOWN: |
984 | imr->ifm_status = IFM_AVALID; | | 983 | imr->ifm_status = IFM_AVALID; |
985 | break; | | 984 | break; |
986 | default: | | 985 | default: |
987 | /* Should be impossible as we set link state down in attach. */ | | 986 | /* Should be impossible as we set link state down in attach. */ |
988 | imr->ifm_status = 0; | | 987 | imr->ifm_status = 0; |
989 | break; | | 988 | break; |
990 | } | | 989 | } |
991 | | | | |
992 | SPPP_UNLOCK(sp); | | | |
993 | } | | 990 | } |
994 | | | 991 | |
995 | void | | 992 | void |
996 | sppp_attach(struct ifnet *ifp) | | 993 | sppp_attach(struct ifnet *ifp) |
997 | { | | 994 | { |
998 | struct sppp *sp = (struct sppp *) ifp; | | 995 | struct sppp *sp = (struct sppp *) ifp; |
999 | | | 996 | |
1000 | /* Initialize keepalive handler. */ | | 997 | /* Initialize keepalive handler. */ |
1001 | if (! spppq) { | | 998 | if (! spppq) { |
1002 | callout_init(&keepalive_ch, CALLOUT_MPSAFE); | | 999 | callout_init(&keepalive_ch, CALLOUT_MPSAFE); |
1003 | callout_reset(&keepalive_ch, hz * LCP_KEEPALIVE_INTERVAL, sppp_keepalive, NULL); | | 1000 | callout_reset(&keepalive_ch, hz * LCP_KEEPALIVE_INTERVAL, sppp_keepalive, NULL); |
1004 | } | | 1001 | } |
1005 | | | 1002 | |