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 *,