From nobody Sat Feb 01 09:02:13 2025 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 4YlRbV20yKz5mbX5; Sat, 01 Feb 2025 09:02:14 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4YlRbT4DFQz41BC; Sat, 01 Feb 2025 09:02:13 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1738400533; 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=cjdYL0aUPdZWSgct7OJRiU3Jd4x2FXFe2iH0z1WXcsY=; b=ChJFM2NowKqpkWf21jQNYpQ13+xpxNarnuvoH6ZdzAtRtUGyQmsKL8HzMjujLYkWshnWRO yxRiUBu3Ed89F8Uz0BmssFG2Ul8vyDMaXlNinx/fSpTiAVmdFVSAEtwaElBj2O+SHE2BBj uQRkCIjyO5gHV2MeGmXpE9bMsyr/O/9nq4WdHtfcRVJio4cIHtMZoIYcJscVXZHEtjWBQ3 rV1rwZGxZ89jFpnGCirQa3pM48+4eS0dFHj1h1iySa4O7RZ686FMzxvscxSPSXmO5CwH3u M4Jz5WbKcaHMbvFBrHZbxyv+p3NbeaVMxopi7UnrntKiPVnZxWmeTa1U9Pi53g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1738400533; 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=cjdYL0aUPdZWSgct7OJRiU3Jd4x2FXFe2iH0z1WXcsY=; b=Z9UScoMujlqOGPuPYkQkac9qedIEf+KlrvWdY7uOqj5dcvi/fuHWfuvTdE/eMHNf5INK6c V4vJf0Kw+Lfs3KsSGsYv9VlkMVEizqqYaERuTWvZFCUM7GAGHkjQ4vudKqRbVeLuhtYymt yuk0JXk3yPCv8M4u7dDTyYmI8iJNwKuYaAbK2+Wx9DY6fZtluLegYVsDBOMX7k3+4x+zG4 cNL+KYOP2U4tLPZm57/615NsDidi+hLCh1MV/GNeVgBNF69QlkMd1POz5x4o0Bq5JKaMjy y4F6zsaf5F2RoqpAgxJl+o0Wjvno0z8ffcya8B7A3jOyZsR41hV/dfNOjCXoMA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1738400533; a=rsa-sha256; cv=none; b=tIQ9NfLGMTZ9Uo6zHvSd8CyAwfgXQh2I+KBCUyw/vitqtJz6EcZx9THpOR0Tp1Ud8yc9AG XkS+kpEoizNJA/834y85QVqhIPJmH0HzhxoOpNwQLpO01Mwz4S4GMzxRn3uc5scy1GXJXr kP6hVRq22O1bsfZfv26sP8YSbEEuueFE6fhrzQ9dkl7jnupfBS6TfoEJAaaq1rize8dqXX Nw6vvjibt8MMbrXKS6cRJYos98fqyyIB4Qg0JzxBgrirYVWh6w6HA7mrLU2UgbfcB1MTL6 oI2FGQYWhCymgk3IDfmE/Ft5HdcLn9d/GTw1DzzaIu7obVV7ZSHuXP5STMeP6g== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4YlRbT3YMZzxsx; Sat, 01 Feb 2025 09:02:13 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 51192D8x048056; Sat, 1 Feb 2025 09:02:13 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 51192DRr048053; Sat, 1 Feb 2025 09:02:13 GMT (envelope-from git) Date: Sat, 1 Feb 2025 09:02:13 GMT Message-Id: <202502010902.51192DRr048053@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Gleb Smirnoff Subject: git: 54a567ad700e - main - krpc: let the kernel talk to the rpcbind(8) service via netlink(4) 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 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: 54a567ad700e0091540fa304a9028e6873320e66 Auto-Submitted: auto-generated The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=54a567ad700e0091540fa304a9028e6873320e66 commit 54a567ad700e0091540fa304a9028e6873320e66 Author: Gleb Smirnoff AuthorDate: 2025-02-01 01:02:24 +0000 Commit: Gleb Smirnoff CommitDate: 2025-02-01 09:00:26 +0000 krpc: let the kernel talk to the rpcbind(8) service via netlink(4) At the moment the only kernel service that wants to register RPC binding in the rpcbind(8) is kernel NLM. Kernel counterpart of the previous commit. Reviewed by: rmacklem Differential Revision: https://reviews.freebsd.org/D48557 --- sys/rpc/rpcb_clnt.c | 73 ++++++++--------------------------------------------- 1 file changed, 10 insertions(+), 63 deletions(-) diff --git a/sys/rpc/rpcb_clnt.c b/sys/rpc/rpcb_clnt.c index ee2253596f85..df962676c76a 100644 --- a/sys/rpc/rpcb_clnt.c +++ b/sys/rpc/rpcb_clnt.c @@ -59,56 +59,17 @@ static struct timeval tottimeout = { 60, 0 }; static const char nullstring[] = "\000"; +static CLIENT *rpcb_clnt; -static CLIENT *local_rpcb(void); - -/* XXX */ -#define IN4_LOCALHOST_STRING "127.0.0.1" -#define IN6_LOCALHOST_STRING "::1" - -/* - * This routine will return a client handle that is connected to the local - * rpcbind. Returns NULL on error and free's everything. - */ -static CLIENT * -local_rpcb(void) +static void +local_rpcb(void *v __unused) { - CLIENT *client; - struct socket *so; - size_t tsize; - struct sockaddr_un sun; - int error; - - /* - * Try connecting to the local rpcbind through a local socket - * first. If this doesn't work, try all transports defined in - * the netconfig file. - */ - memset(&sun, 0, sizeof sun); - so = NULL; - error = socreate(AF_LOCAL, &so, SOCK_STREAM, 0, curthread->td_ucred, - curthread); - if (error) - return (NULL); - sun.sun_family = AF_LOCAL; - strcpy(sun.sun_path, _PATH_RPCBINDSOCK); - sun.sun_len = SUN_LEN(&sun); - - tsize = __rpc_get_t_size(AF_LOCAL, 0, 0); - client = clnt_vc_create(so, (struct sockaddr *)&sun, (rpcprog_t)RPCBPROG, - (rpcvers_t)RPCBVERS, tsize, tsize, 1); - - if (client != NULL) { - /* Mark the socket to be closed in destructor */ - (void) CLNT_CONTROL(client, CLSET_FD_CLOSE, NULL); - return client; - } - - /* Nobody needs this socket anymore; free the descriptor. */ - soclose(so); - - return (NULL); + rpcb_clnt = client_nl_create("rpcbind", RPCBPROG, RPCBVERS); + KASSERT(rpcb_clnt, ("%s: netlink client already exist", __func__)); + clnt_control(rpcb_clnt, CLSET_RETRIES, &(int){6}); + clnt_control(rpcb_clnt, CLSET_WAITCHAN, "rpcb"); } +SYSINIT(rpcb_clnt, SI_SUB_VFS, SI_ORDER_SECOND, local_rpcb, NULL); /* * Set a mapping between program, version and address. @@ -119,7 +80,6 @@ rpcb_set(rpcprog_t program, rpcvers_t version, const struct netconfig *nconf, /* Network structure of transport */ const struct netbuf *address) /* Services netconfig address */ { - CLIENT *client; bool_t rslt = FALSE; RPCB parms; #if 0 @@ -137,10 +97,6 @@ rpcb_set(rpcprog_t program, rpcvers_t version, rpc_createerr.cf_stat = RPC_UNKNOWNADDR; return (FALSE); } - client = local_rpcb(); - if (! client) { - return (FALSE); - } /* convert to universal */ /*LINTED const castaway*/ @@ -148,7 +104,6 @@ rpcb_set(rpcprog_t program, rpcvers_t version, addresscopy = *address; parms.r_addr = taddr2uaddr(&nconfcopy, &addresscopy); if (!parms.r_addr) { - CLNT_DESTROY(client); rpc_createerr.cf_stat = RPC_N2AXLATEFAILURE; return (FALSE); /* no universal address */ } @@ -167,11 +122,10 @@ rpcb_set(rpcprog_t program, rpcvers_t version, parms.r_owner = ""; #endif - CLNT_CALL(client, (rpcproc_t)RPCBPROC_SET, (xdrproc_t) xdr_rpcb, + CLNT_CALL(rpcb_clnt, (rpcproc_t)RPCBPROC_SET, (xdrproc_t) xdr_rpcb, (char *)(void *)&parms, (xdrproc_t) xdr_bool, (char *)(void *)&rslt, tottimeout); - CLNT_DESTROY(client); free(parms.r_addr, M_RPC); return (rslt); } @@ -185,18 +139,12 @@ rpcb_set(rpcprog_t program, rpcvers_t version, bool_t rpcb_unset(rpcprog_t program, rpcvers_t version, const struct netconfig *nconf) { - CLIENT *client; bool_t rslt = FALSE; RPCB parms; #if 0 char uidbuf[32]; #endif - client = local_rpcb(); - if (! client) { - return (FALSE); - } - parms.r_prog = program; parms.r_vers = version; if (nconf) @@ -214,10 +162,9 @@ rpcb_unset(rpcprog_t program, rpcvers_t version, const struct netconfig *nconf) parms.r_owner = ""; #endif - CLNT_CALL(client, (rpcproc_t)RPCBPROC_UNSET, (xdrproc_t) xdr_rpcb, + CLNT_CALL(rpcb_clnt, (rpcproc_t)RPCBPROC_UNSET, (xdrproc_t) xdr_rpcb, (char *)(void *)&parms, (xdrproc_t) xdr_bool, (char *)(void *)&rslt, tottimeout); - CLNT_DESTROY(client); return (rslt); }