From 576b96ccd32ea3e38f6c030f48baeaaec2c47c25 Mon Sep 17 00:00:00 2001 From: Martin Pieuchot Date: Thu, 26 Mar 2020 16:50:47 +0000 Subject: Unify #ifdef guarding code to remove PPTP and L2TP sessions. This makes a pattern emerge that should help when starting to protect the global `session' list with something else than the KERNEL_LOCK(). from Vitaliy Makkoveev. --- sys/net/if_pppx.c | 15 ++++++++------- sys/net/pipex.c | 23 ++++++++++------------- 2 files changed, 18 insertions(+), 20 deletions(-) (limited to 'sys/net') diff --git a/sys/net/if_pppx.c b/sys/net/if_pppx.c index a43475945cd..282d9fbd0f1 100644 --- a/sys/net/if_pppx.c +++ b/sys/net/if_pppx.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_pppx.c,v 1.76 2020/02/20 16:56:52 visa Exp $ */ +/* $OpenBSD: if_pppx.c,v 1.77 2020/03/26 16:50:46 mpi Exp $ */ /* * Copyright (c) 2010 Claudio Jeker @@ -675,12 +675,9 @@ pppx_add_session(struct pppx_dev *pxd, struct pipex_session_req *req) return (EINVAL); break; #endif -#ifdef PIPEX_PPTP +#if defined(PIPEX_PPTP) || defined(PIPEX_L2TP) case PIPEX_PROTO_PPTP: -#endif -#ifdef PIPEX_L2TP case PIPEX_PROTO_L2TP: -#endif switch (req->pr_peer_address.ss_family) { case AF_INET: if (req->pr_peer_address.ss_len != sizeof(struct sockaddr_in)) @@ -701,6 +698,7 @@ pppx_add_session(struct pppx_dev *pxd, struct pipex_session_req *req) req->pr_local_address.ss_len) return (EINVAL); break; +#endif /* defined(PIPEX_PPTP) || defined(PIPEX_L2TP) */ default: return (EPROTONOSUPPORT); } @@ -854,6 +852,7 @@ pppx_add_session(struct pppx_dev *pxd, struct pipex_session_req *req) chain = PIPEX_ID_HASHTABLE(session->session_id); LIST_INSERT_HEAD(chain, session, id_chain); LIST_INSERT_HEAD(&pipex_session_list, session, session_list); +#if defined(PIPEX_PPTP) || defined(PIPEX_L2TP) switch (req->pr_protocol) { case PIPEX_PROTO_PPTP: case PIPEX_PROTO_L2TP: @@ -862,6 +861,7 @@ pppx_add_session(struct pppx_dev *pxd, struct pipex_session_req *req) LIST_INSERT_HEAD(chain, session, peer_addr_chain); break; } +#endif /* if first session is added, start timer */ if (LIST_NEXT(session, session_list) == NULL) @@ -967,13 +967,14 @@ pppx_if_destroy(struct pppx_dev *pxd, struct pppx_if *pxi) LIST_REMOVE(session, id_chain); LIST_REMOVE(session, session_list); +#if defined(PIPEX_PPTP) || defined(PIPEX_L2TP) switch (session->protocol) { case PIPEX_PROTO_PPTP: case PIPEX_PROTO_L2TP: - LIST_REMOVE((struct pipex_session *)session, - peer_addr_chain); + LIST_REMOVE(session, peer_addr_chain); break; } +#endif /* if final session is destroyed, stop timer */ if (LIST_EMPTY(&pipex_session_list)) diff --git a/sys/net/pipex.c b/sys/net/pipex.c index a1df79f6931..3da8ed8b774 100644 --- a/sys/net/pipex.c +++ b/sys/net/pipex.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pipex.c,v 1.108 2020/03/25 11:39:58 mpi Exp $ */ +/* $OpenBSD: pipex.c,v 1.109 2020/03/26 16:50:46 mpi Exp $ */ /*- * Copyright (c) 2009 Internet Initiative Japan Inc. @@ -283,12 +283,8 @@ pipex_add_session(struct pipex_session_req *req, break; #endif #if defined(PIPEX_L2TP) || defined(PIPEX_PPTP) -#ifdef PIPEX_PPTP case PIPEX_PROTO_PPTP: -#endif -#ifdef PIPEX_L2TP case PIPEX_PROTO_L2TP: -#endif switch (req->pr_peer_address.ss_family) { case AF_INET: if (req->pr_peer_address.ss_len != @@ -311,7 +307,7 @@ pipex_add_session(struct pipex_session_req *req, req->pr_local_address.ss_len) return (EINVAL); break; -#endif +#endif /* defined(PIPEX_PPTP) || defined(PIPEX_L2TP) */ default: return (EPROTONOSUPPORT); } @@ -450,6 +446,7 @@ pipex_add_session(struct pipex_session_req *req, chain = PIPEX_ID_HASHTABLE(session->session_id); LIST_INSERT_HEAD(chain, session, id_chain); LIST_INSERT_HEAD(&pipex_session_list, session, session_list); +#if defined(PIPEX_PPTP) || defined(PIPEX_L2TP) switch (req->pr_protocol) { case PIPEX_PROTO_PPTP: case PIPEX_PROTO_L2TP: @@ -457,6 +454,7 @@ pipex_add_session(struct pipex_session_req *req, pipex_sockaddr_hash_key(&session->peer.sa)); LIST_INSERT_HEAD(chain, session, peer_addr_chain); } +#endif /* if first session is added, start timer */ if (LIST_NEXT(session, session_list) == NULL) @@ -581,16 +579,15 @@ pipex_destroy_session(struct pipex_session *session) LIST_REMOVE(session, id_chain); LIST_REMOVE(session, session_list); -#ifdef PIPEX_PPTP - if (session->protocol == PIPEX_PROTO_PPTP) { - LIST_REMOVE(session, peer_addr_chain); - } -#endif -#ifdef PIPEX_L2TP - if (session->protocol == PIPEX_PROTO_L2TP) { +#if defined(PIPEX_PPTP) || defined(PIPEX_L2TP) + switch (session->protocol) { + case PIPEX_PROTO_PPTP: + case PIPEX_PROTO_L2TP: LIST_REMOVE(session, peer_addr_chain); + break; } #endif + /* if final session is destroyed, stop timer */ if (LIST_EMPTY(&pipex_session_list)) pipex_timer_stop(); -- cgit v1.2.3