Long time ago pipex(4) session can't be deleted until both pipex(4)
input and output queues become empty. Dead sessions were linked to the
stack and the `ip_forward' flag was used to prevent packets forwarding.
npppd(8) marked such sessions by doing PIPEXCSESSION ioctl(2) call.

But since we started to unlink close session from the stack, this logic
became unnecessary. Also pipex(4) session could be closed just after
close request.

npppd(8) was the only userland program which did PIPEXCSESSION ioctl(2)
call, and we removed it week ago. It's time to remove the remains from
kernel and pipex(4) man page. 

Now the `flags' member of 'pipex_session' structure became immutable.

Index: share/man/man4/pipex.4
===================================================================
RCS file: /cvs/src/share/man/man4/pipex.4,v
retrieving revision 1.14
diff -u -p -r1.14 pipex.4
--- share/man/man4/pipex.4      2 Jan 2021 13:15:15 -0000       1.14
+++ share/man/man4/pipex.4      10 Jul 2022 21:59:42 -0000
@@ -179,18 +179,6 @@ See
 section for a description of the
 .Vt pipex_statistics
 structure.
-.It Dv PIPEXCSESSION Fa "struct pipex_session_config_req *"
-Change the configuration of the specified session.
-The session and configuration are specified by a
-.Vt pipex_session_config_req
-structure, which has the following definition:
-.Bd -literal
-struct pipex_session_config_req {
-    int       pcr_protocol;           /* tunnel protocol  */
-    uint16_t  pcr_session_id;         /* session-id */
-    int       pcr_ip_forward;         /* ip_forwarding on/off */
-};
-.Ed
 .It Dv PIPEXGSTAT    Fa "struct pipex_session_stat_req *"
 Get statistics for the specified session.
 Specify the session using a
Index: sys/net/pipex.c
===================================================================
RCS file: /cvs/src/sys/net/pipex.c,v
retrieving revision 1.144
diff -u -p -r1.144 pipex.c
--- sys/net/pipex.c     10 Jul 2022 21:28:10 -0000      1.144
+++ sys/net/pipex.c     10 Jul 2022 21:59:56 -0000
@@ -173,11 +173,6 @@ pipex_ioctl(void *ownersc, u_long cmd, c
 
        NET_ASSERT_LOCKED();
        switch (cmd) {
-       case PIPEXCSESSION:
-               ret = pipex_config_session(
-                   (struct pipex_session_config_req *)data, ownersc);
-               break;
-
        case PIPEXGSTAT:
                ret = pipex_get_stat((struct pipex_session_stat_req *)data,
                    ownersc);
@@ -323,8 +318,6 @@ pipex_init_session(struct pipex_session 
        session->ppp_flags = req->pr_ppp_flags;
        session->ppp_id = req->pr_ppp_id;
 
-       session->flags |= PIPEX_SFLAGS_IP_FORWARD;
-
        session->stat_counters = counters_alloc(pxc_ncounters);
 
        session->ip_address.sin_family = AF_INET;
@@ -569,32 +562,6 @@ pipex_export_session_stats(struct pipex_
 }
 
 Static int
-pipex_config_session(struct pipex_session_config_req *req, void *ownersc)
-{
-       struct pipex_session *session;
-       int error = 0;
-
-       NET_ASSERT_LOCKED();
-
-       session = pipex_lookup_by_session_id(req->pcr_protocol,
-           req->pcr_session_id);
-       if (session == NULL)
-               return (EINVAL);
-
-       if (session->ownersc == ownersc) {
-               if (req->pcr_ip_forward != 0)
-                       session->flags |= PIPEX_SFLAGS_IP_FORWARD;
-               else
-                       session->flags &= ~PIPEX_SFLAGS_IP_FORWARD;
-       } else
-               error = EINVAL;
-
-       pipex_rele_session(session);
-
-       return error;
-}
-
-Static int
 pipex_get_stat(struct pipex_session_stat_req *req, void *ownersc)
 {
        struct pipex_session *session;
@@ -810,9 +777,7 @@ pipex_ip_output(struct mbuf *m0, struct 
                /*
                 * Multicast packet is a idle packet and it's not TCP.
                 */
-               if ((session->flags & (PIPEX_SFLAGS_IP_FORWARD |
-                   PIPEX_SFLAGS_IP6_FORWARD)) == 0)
-                       goto drop;
+
                /* reset idle timer */
                if (session->timeout_sec != 0) {
                        is_idle = 0;
@@ -850,9 +815,6 @@ pipex_ip_output(struct mbuf *m0, struct 
 
                        if (session_tmp->ownersc != session->ownersc)
                                goto next;
-                       if ((session->flags & (PIPEX_SFLAGS_IP_FORWARD |
-                           PIPEX_SFLAGS_IP6_FORWARD)) == 0)
-                               goto next;
 
                        refcnt_take(&session_tmp->pxs_refcnt);
                        mtx_leave(&pipex_list_mtx);
@@ -878,8 +840,6 @@ next:
        }
 
        return;
-drop:
-       m_freem(m0);
 dropped:
        counters_inc(session->stat_counters, pxc_oerrors);
 }
@@ -989,8 +949,6 @@ pipex_ppp_input(struct mbuf *m0, struct 
 
        switch (proto) {
        case PPP_IP:
-               if ((session->flags & PIPEX_SFLAGS_IP_FORWARD) == 0)
-                       goto drop;
                if (!decrypted && pipex_session_is_mppe_required(session))
                        /*
                         * if ip packet received when mppe
@@ -1001,8 +959,6 @@ pipex_ppp_input(struct mbuf *m0, struct 
                return;
 #ifdef INET6
        case PPP_IPV6:
-               if ((session->flags & PIPEX_SFLAGS_IP6_FORWARD) == 0)
-                       goto drop;
                if (!decrypted && pipex_session_is_mppe_required(session))
                        /*
                         * if ip packet received when mppe
Index: sys/net/pipex.h
===================================================================
RCS file: /cvs/src/sys/net/pipex.h,v
retrieving revision 1.32
diff -u -p -r1.32 pipex.h
--- sys/net/pipex.h     26 Jun 2022 15:50:21 -0000      1.32
+++ sys/net/pipex.h     10 Jul 2022 21:59:56 -0000
@@ -145,12 +145,6 @@ struct pipex_session_list_req {
        int     plr_ppp_id[PIPEX_MAX_LISTREQ];  /* PPP id */
 };
 
-struct pipex_session_config_req {
-       int             pcr_protocol;           /* tunnel protocol  */
-       uint16_t        pcr_session_id;         /* session-id */
-       int             pcr_ip_forward;         /* ip_forwarding on/off */
-};
-
 /* for pppx(4) */
 struct pppx_hdr {
        u_int32_t       pppx_proto;     /* write: protocol in PIPEX_PROTO_ */
@@ -167,7 +161,6 @@ struct pipex_session_descr_req {
 /* PIPEX ioctls */
 #define PIPEXASESSION  _IOW ('p',  3, struct pipex_session_req)
 #define PIPEXDSESSION  _IOWR('p',  4, struct pipex_session_close_req)
-#define PIPEXCSESSION  _IOW ('p',  5, struct pipex_session_config_req)
 #define PIPEXGSTAT     _IOWR('p',  6, struct pipex_session_stat_req)
 #define PIPEXGCLOSED   _IOR ('p',  7, struct pipex_session_list_req)
 #define PIPEXSIFDESCR  _IOW ('p',  8, struct pipex_session_descr_req)
Index: sys/net/pipex_local.h
===================================================================
RCS file: /cvs/src/sys/net/pipex_local.h,v
retrieving revision 1.47
diff -u -p -r1.47 pipex_local.h
--- sys/net/pipex_local.h       26 Jun 2022 15:50:21 -0000      1.47
+++ sys/net/pipex_local.h       10 Jul 2022 21:59:57 -0000
@@ -180,12 +180,9 @@ struct pipex_session {
 
        uint32_t        idle_time;      /* [L] idle time in seconds */
 
-       u_int           flags;          /* [N] flags, see below */
-#define PIPEX_SFLAGS_IP_FORWARD                0x01 /* [N] enable IP 
forwarding */
-#define PIPEX_SFLAGS_IP6_FORWARD       0x02 /* [N] enable IPv6 forwarding */
-#define PIPEX_SFLAGS_MULTICAST         0x04 /* [I] virtual entry for
-                                               multicast */
-#define PIPEX_SFLAGS_PPPX              0x08 /* [I] interface is
+       u_int           flags;          /* [I] flags, see below */
+#define PIPEX_SFLAGS_MULTICAST         0x01 /* virtual entry for multicast */
+#define PIPEX_SFLAGS_PPPX              0x02 /* interface is
                                                point2point(pppx) */
 
        uint16_t        protocol;               /* [I] tunnel protocol (PK) */
@@ -415,8 +412,6 @@ void                  pipex_unlink_sessi
 void                  pipex_unlink_session_locked(struct pipex_session *);
 void                  pipex_export_session_stats(struct pipex_session *,
                           struct pipex_statistics *);
-int                   pipex_config_session (struct pipex_session_config_req *,
-                          void *);
 int                   pipex_get_stat (struct pipex_session_stat_req *,
                           void *);
 int                   pipex_get_closed (struct pipex_session_list_req *,

Reply via email to