From nobody Fri Jun 26 23:36:12 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4gnBrX4mwXz6j8VL for ; Fri, 26 Jun 2026 23:36:12 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gnBrX49pKz42D3 for ; Fri, 26 Jun 2026 23:36:12 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1782516972; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=/+bltYmKudJ6bzfA09rfpUHKLQHQPU9FTuyT8AjHs5c=; b=uVTOrNmrjJGE71kahKeo1Extz2VWA6KkgaA5tnA2+S7wDMUpx4eSeEVOuzlU0GNzVzzmZI +esemPi1ovyXGyhwl7/jT2/4ZRWfQnkyKRkAU6ZFtXWfDqVYWzD+ldHu6+IrRhPmsvh2yb +OnmTeyjpXFDuXLHUwdyq9w1KFJxZIMQ5C2TZUXkD2+S1LkYLvw3Xw+XX0goG8DHAKbnES 9NKg1idaykvVR1mxHnPZoZ7yNw3LJImsYPxnI5zdywzFBJXsl/yflONJS4PTcDG6ESTekv rdCGwMUFWJaY/oYlffawYQNMcGZRVWo5G/OJm2gIYA6VO2Zh7UtGCQPE4r6ycQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1782516972; a=rsa-sha256; cv=none; b=J4KCNP6voQkVxa+jz9x0Tp4ILC1eJvEXDknyy3Q7PFQQ/EDDh5Jsn2jM3sFSNKkEAVVd8m +6T+bPbqtiqG1ApZaXo9pDm9MuTzopKBSLakJUy6kMuX5aPv5QIbYEPjN5wcGzFTBZoFu3 FWf9KPrlkkDsHSpRl5iuSpOYaZOazwmxeRDJ7KzbxXUqabuBAwzdmLlFwsOfeBsehDpe+R ycFXG/JBn/UmpSh2kotsSeZoWfoqAGtF6m2d8riIrYJqODk1YfBM10553ZUz8Iq1Bbauid jPXRSJNhgybFkg5ZQh+vJSLHUwR2yJLhyB234fLQmpUucweqrVO1d16fmxgB6w== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1782516972; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=/+bltYmKudJ6bzfA09rfpUHKLQHQPU9FTuyT8AjHs5c=; b=HsyhFvc6b3oP43AImXO/aRfhanUciO448HeYlZPLJhjxuDJwfsIO6Z1AFufa/MYao6qKNZ hN2kzfQUx3jxW+u/cegWVjtORbqhgqF8RdmRfFBGjRvAYsmplvPanl2rCAwAa05rHkEb6v dtYEi1WSWpUPp4p7tFjk7DjIY5PTt+HcZXL5H5YMXDC6e6DDbOEEtdB+M2sPrkmQHRhL39 2FC4zcKQlSXyZIzAfa25XY/P1nXH31QNr3Zy4y+Wp4Tyk8Re4ZLAv49/WCjvLDAUJVRhON 49vSu9DfYwQkTSiZHvT8DMUU5ohY1AnHpiGD+Zh2dO4DD+vp/ie0A6nwvhXeVQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gnBrX38t7z10Vw for ; Fri, 26 Jun 2026 23:36:12 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 38752 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 26 Jun 2026 23:36:12 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Gleb Smirnoff Subject: git: 41bc52c89320 - main - ng_socket: simplify protosw(9) methods List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: glebius X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 41bc52c89320807c1162f5547b07c29fcb718e19 Auto-Submitted: auto-generated Date: Fri, 26 Jun 2026 23:36:12 +0000 Message-Id: <6a3f0cec.38752.6d879af7@gitrepo.freebsd.org> The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=41bc52c89320807c1162f5547b07c29fcb718e19 commit 41bc52c89320807c1162f5547b07c29fcb718e19 Author: Gleb Smirnoff AuthorDate: 2026-06-26 19:01:30 +0000 Commit: Gleb Smirnoff CommitDate: 2026-06-26 23:35:32 +0000 ng_socket: simplify protosw(9) methods - so_pcb can't be non-NULL in pr_attach. - so_pcb can't be NULL in all other methods. - Short circuit data socket attach down to the common attach. - Short circuit both detach methods down to common one. - Inline control socket attach. - Inline control pr_bind. - Inline data pr_connect. - Rely on pr_connect_notsupp() for control connect(2). - Don't use cast on so_pcb, it is void *. Should be no functional change. --- sys/netgraph/ng_socket.c | 130 +++++++++-------------------------------------- 1 file changed, 24 insertions(+), 106 deletions(-) diff --git a/sys/netgraph/ng_socket.c b/sys/netgraph/ng_socket.c index c570584d4b44..e08027693f32 100644 --- a/sys/netgraph/ng_socket.c +++ b/sys/netgraph/ng_socket.c @@ -118,14 +118,9 @@ static ng_rcvdata_t ngs_rcvdata; static ng_disconnect_t ngs_disconnect; /* Internal methods */ -static int ng_attach_data(struct socket *so); -static int ng_attach_cntl(struct socket *so); -static int ng_attach_common(struct socket *so, int type); -static void ng_detach_common(struct ngpcb *pcbp, int type); +static int ng_attach_common(struct socket *, int, struct thread *); +static void ng_detach_common(struct socket *); static void ng_socket_free_priv(struct ngsock *priv); -static int ng_connect_data(struct sockaddr *nam, struct ngpcb *pcbp); -static int ng_bind(struct sockaddr *nam, struct ngpcb *pcbp); - static int ngs_mod_event(module_t mod, int event, void *data); static void ng_socket_item_applied(void *context, int error); @@ -158,8 +153,6 @@ static LIST_HEAD(, ngpcb) ngsocklist; static struct mtx ngsocketlist_mtx; -#define sotongpcb(so) ((struct ngpcb *)(so)->so_pcb) - /* If getting unexplained errors returned, set this to "kdb_enter("X"); */ #ifndef TRAP_ERROR #define TRAP_ERROR @@ -190,34 +183,11 @@ struct ngsock { Control sockets ***************************************************************/ -static int -ngc_attach(struct socket *so, int proto, struct thread *td) -{ - struct ngpcb *const pcbp = sotongpcb(so); - int error; - - error = priv_check(td, PRIV_NETGRAPH_CONTROL); - if (error) - return (error); - if (pcbp != NULL) - return (EISCONN); - return (ng_attach_cntl(so)); -} - -static void -ngc_detach(struct socket *so) -{ - struct ngpcb *const pcbp = sotongpcb(so); - - KASSERT(pcbp != NULL, ("ngc_detach: pcbp == NULL")); - ng_detach_common(pcbp, NG_CONTROL); -} - static int ngc_send(struct socket *so, int flags, struct mbuf *m, struct sockaddr *addr, struct mbuf *control, struct thread *td) { - struct ngpcb *const pcbp = sotongpcb(so); + struct ngpcb *const pcbp = so->so_pcb; struct ngsock *const priv = NG_NODE_PRIVATE(pcbp->sockdata->node); struct sockaddr_ng *const sap = (struct sockaddr_ng *) addr; struct ng_mesg *msg; @@ -365,56 +335,16 @@ release: return (error); } -static int -ngc_bind(struct socket *so, struct sockaddr *nam, struct thread *td) -{ - struct ngpcb *const pcbp = sotongpcb(so); - - if (pcbp == NULL) - return (EINVAL); - return (ng_bind(nam, pcbp)); -} - -static int -ngc_connect(struct socket *so, struct sockaddr *nam, struct thread *td) -{ - /* - * At this time refuse to do this.. it used to - * do something but it was undocumented and not used. - */ - printf("program tried to connect control socket to remote node\n"); - return (EINVAL); -} - /*************************************************************** Data sockets ***************************************************************/ -static int -ngd_attach(struct socket *so, int proto, struct thread *td) -{ - struct ngpcb *const pcbp = sotongpcb(so); - - if (pcbp != NULL) - return (EISCONN); - return (ng_attach_data(so)); -} - -static void -ngd_detach(struct socket *so) -{ - struct ngpcb *const pcbp = sotongpcb(so); - - KASSERT(pcbp != NULL, ("ngd_detach: pcbp == NULL")); - ng_detach_common(pcbp, NG_DATA); -} - static int ngd_send(struct socket *so, int flags, struct mbuf *m, struct sockaddr *addr, struct mbuf *control, struct thread *td) { struct epoch_tracker et; - struct ngpcb *const pcbp = sotongpcb(so); + struct ngpcb *const pcbp = so->so_pcb; struct sockaddr_ng *const sap = (struct sockaddr_ng *) addr; int len, error; hook_p hook = NULL; @@ -491,16 +421,6 @@ release: return (error); } -static int -ngd_connect(struct socket *so, struct sockaddr *nam, struct thread *td) -{ - struct ngpcb *const pcbp = sotongpcb(so); - - if (pcbp == NULL) - return (EINVAL); - return (ng_connect_data(nam, pcbp)); -} - /* * Used for both data and control sockets */ @@ -508,11 +428,10 @@ static int ng_getsockaddr(struct socket *so, struct sockaddr *sa) { struct sockaddr_ng *sg = (struct sockaddr_ng *)sa; - struct ngpcb *pcbp; + struct ngpcb *pcbp = so->so_pcb; int error = 0; - pcbp = sotongpcb(so); - if ((pcbp == NULL) || (pcbp->sockdata == NULL)) + if (pcbp->sockdata == NULL) /* XXXGL: can this still happen? */ return (EINVAL); @@ -545,21 +464,24 @@ ng_getsockaddr(struct socket *so, struct sockaddr *sa) */ static int -ng_attach_cntl(struct socket *so) +ngc_attach(struct socket *so, int type, struct thread *td) { struct ngsock *priv; struct ngpcb *pcbp; node_p node; int error; + if ((error = priv_check(td, PRIV_NETGRAPH_CONTROL)) != 0) + return (error); + /* Setup protocol control block */ - if ((error = ng_attach_common(so, NG_CONTROL)) != 0) + if ((error = ng_attach_common(so, type, td)) != 0) return (error); - pcbp = sotongpcb(so); + pcbp = so->so_pcb; /* Make the generic node components */ if ((error = ng_make_node_common(&typestruct, &node)) != 0) { - ng_detach_common(pcbp, NG_CONTROL); + ng_detach_common(so); return (error); } @@ -590,18 +512,12 @@ ng_attach_cntl(struct socket *so) return (0); } -static int -ng_attach_data(struct socket *so) -{ - return (ng_attach_common(so, NG_DATA)); -} - /* * Set up a socket protocol control block. * This code is shared between control and data sockets. */ static int -ng_attach_common(struct socket *so, int type) +ng_attach_common(struct socket *so, int type, struct thread *td) { struct ngpcb *pcbp; int error; @@ -633,14 +549,15 @@ ng_attach_common(struct socket *so, int type) * then shut down the entire node. Shared code for control and data sockets. */ static void -ng_detach_common(struct ngpcb *pcbp, int which) +ng_detach_common(struct socket *so) { + struct ngpcb *pcbp = so->so_pcb; struct ngsock *priv = pcbp->sockdata; if (priv != NULL) { mtx_lock(&priv->mtx); - switch (which) { + switch (pcbp->type) { case NG_CONTROL: priv->ctlsock = NULL; break; @@ -695,8 +612,9 @@ ng_socket_free_priv(struct ngsock *priv) * Connect the data socket to a named control socket node. */ static int -ng_connect_data(struct sockaddr *nam, struct ngpcb *pcbp) +ngd_connect(struct socket *so, struct sockaddr *nam, struct thread *td) { + struct ngpcb *const pcbp = so->so_pcb; struct sockaddr_ng *sap; node_p farnode; struct ngsock *priv; @@ -754,8 +672,9 @@ ng_connect_data(struct sockaddr *nam, struct ngpcb *pcbp) * Binding a socket means giving the corresponding node a name */ static int -ng_bind(struct sockaddr *nam, struct ngpcb *pcbp) +ngc_bind(struct socket *so, struct sockaddr *nam, struct thread *td) { + struct ngpcb *const pcbp = so->so_pcb; struct ngsock *const priv = pcbp->sockdata; struct sockaddr_ng *const sap = (struct sockaddr_ng *) nam; @@ -1140,8 +1059,7 @@ static struct protosw ngcontrol_protosw = { .pr_flags = PR_ATOMIC | PR_ADDR /* | PR_RIGHTS */, .pr_attach = ngc_attach, .pr_bind = ngc_bind, - .pr_connect = ngc_connect, - .pr_detach = ngc_detach, + .pr_detach = ng_detach_common, .pr_disconnect = dummy_disconnect, .pr_send = ngc_send, .pr_sockaddr = ng_getsockaddr, @@ -1150,9 +1068,9 @@ static struct protosw ngdata_protosw = { .pr_type = SOCK_DGRAM, .pr_protocol = NG_DATA, .pr_flags = PR_ATOMIC | PR_ADDR, - .pr_attach = ngd_attach, + .pr_attach = ng_attach_common, .pr_connect = ngd_connect, - .pr_detach = ngd_detach, + .pr_detach = ng_detach_common, .pr_disconnect = dummy_disconnect, .pr_send = ngd_send, .pr_sockaddr = ng_getsockaddr,