On 26/03/20(Thu) 13:34, Vitaliy Makkoveev wrote: > Add missing #ifdefs to pppx_if_destroy() as it done in > pipex_destroy_session(). Also remove unnecessary cast.
What's the point of such #ifdef? I understand the current code is not coherent, but does this reduce the binary size? For a case in a switch? Because it clearly complicates the understanding of the code. If one is going to remove support for any of the two, grepping for PIPEX_PROTO_* will be necessary. So maybe having #if defined(PIPEX_PPTP) || defined(PIPEX_L2TP) there as well as in pppx_add_session() and pipex_destroy_session() is the way to go. But the underlying question would it make sense to have pppx_if_destroy() and pipex_destroy_session() call the same function to clear sessions? The same could be add for pipex_add_session() and pppx_add_session(). Any cleanup here is welcome, building understanding of the data structures used by those pseudo-drivers is the way to get they out of the KERNEL_LOCK(). If you're curious the entry point is pipexintr(). Getting that out of KERNEL_LOCK() will at least improve latency of the system and is a required step to improve performances. > 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 10:07:26 -0000 > @@ -967,13 +967,14 @@ pppx_if_destroy(struct pppx_dev *pxd, st > > LIST_REMOVE(session, id_chain); > LIST_REMOVE(session, session_list); > - switch (session->protocol) { > - case PIPEX_PROTO_PPTP: > - case PIPEX_PROTO_L2TP: > - LIST_REMOVE((struct pipex_session *)session, > - peer_addr_chain); > - break; > - } > +#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) > + LIST_REMOVE(session, peer_addr_chain); > +#endif > > /* if final session is destroyed, stop timer */ > if (LIST_EMPTY(&pipex_session_list)) >