On Thu, Mar 26, 2020 at 01:46:29PM +0100, Martin Pieuchot wrote: > Does the diff below works for you? Are you ok with the direction? Any > comment?
Diff works for me, Except you missed switch in the and of pppx_add_session() and pipex_add_session(). Index: sys/net/if_pppx.c =================================================================== RCS file: /cvs/src/sys/net/if_pppx.c,v retrieving revision 1.76 diff -u -p -r1.76 if_pppx.c --- sys/net/if_pppx.c 20 Feb 2020 16:56:52 -0000 1.76 +++ sys/net/if_pppx.c 26 Mar 2020 13:21:32 -0000 @@ -675,12 +675,9 @@ pppx_add_session(struct pppx_dev *pxd, s 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, s 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, s 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, s 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, st 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)) Index: sys/net/pipex.c =================================================================== RCS file: /cvs/src/sys/net/pipex.c,v retrieving revision 1.108 diff -u -p -r1.108 pipex.c --- sys/net/pipex.c 25 Mar 2020 11:39:58 -0000 1.108 +++ sys/net/pipex.c 26 Mar 2020 13:21:33 -0000 @@ -283,12 +283,8 @@ pipex_add_session(struct pipex_session_r 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_r 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_r 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_r 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_sessi 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();