From nobody Mon Mar 27 10:50:16 2023 X-Original-To: dev-commits-src-all@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 4PlV2d0k4nz426J5; Mon, 27 Mar 2023 10:50:17 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4PlV2d05zwz3G6N; Mon, 27 Mar 2023 10:50:17 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1679914217; 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=UJ/PRzscS2BW96E8fibRYcFM392XxNy9L7MI3Kniz40=; b=gbk+53qKlI6xua6cN8D4M36qtVLLI9iJ6GK5st1EdpiL8RR+eqHCIGauKw1DbL8RzqbiXF TTSz0XgpgxTJZjhGu50Q0YlpzVp8hj31vztzd469oeO7Dejsh9/rPPr/9ZbfvqNMDgwx+1 d/XPtUoaBe3PgXE4fKXFNgWtUIcXJwpbPQGMwjzMmNhFgyFZGIOihyBpG0s5P2UqAs+2jm HRyqcKk1bKVgQtvzUgRynLz6/ADxyHFceMPN3jvGJUekk3f8lP/1/L2CD2tgspUXsSSKww fGAgOyYyTLaz6DmkCMljVHa/MWOJSEx2rDV0CQ+bo0l6s3Mo6haWu5k2OAMinw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1679914217; 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=UJ/PRzscS2BW96E8fibRYcFM392XxNy9L7MI3Kniz40=; b=JRliXbAALfIdoRwgFAvqp6bWqwFI4WnskXPwekv54LHQKxE1KOtOxvEW+2OCgb0iawazVI 2gAuEMMztpYw41DIJ9FqMhmFXQLcTL3cgjQaY+phj/u03qmpOKdYa4wj8rxkPV/XbKA6Z4 IPWxcbh8nJ98fQ6BU1XykLUWFM96S18fprfGI2Rx836Wd7mliIsGWqed/uf5XiODBOPtHf L8LwNoh1pPzVEcLc2yrhVtojF7+t3sgQVwGN6P0UaukRTEVTtebkiG3L4AEWykAEQIWiKs QmSqW3X1Y7wTUuanFzCCGmO35IQ/TVzfsVLCnA0uWuL/9zxTF4SJET5etYn4gg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1679914217; a=rsa-sha256; cv=none; b=bK9dAIxjoHYvg3sqqb8gdqWObCgpgL3E1y51ZJlHjgY0/+WZ5ezSL2/93tyUUGNoo39q38 iCRzCSYSy9ZXAWyxVSkPYbzq5QPhNuvnAq9hL5Q72sbv+0f6wASR1OH2IBG606fRRXphJM LmDQVBDcdRdxmXOZ7yYCzNAi5hoRrJIypXp9QQOnACsxcs3BvztgT/QufEmfseJ7S1frdY zipPQ6fiyDXEY0wjli7ljMaoUOLalRSvBh8DDlRjAvmligHfeTk8INoDIsDbim2N8Xpk6/ TnSYZLRntg/S8kXGCk7l4P9xgvmpWHrR4eoVk+o0XZocRtjJjDPBD9VDEhKvFg== 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 4PlV2c6HQfzJfB; Mon, 27 Mar 2023 10:50:16 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 32RAoG8T001160; Mon, 27 Mar 2023 10:50:16 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 32RAoGnk001156; Mon, 27 Mar 2023 10:50:16 GMT (envelope-from git) Date: Mon, 27 Mar 2023 10:50:16 GMT Message-Id: <202303271050.32RAoGnk001156@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: "Alexander V. Chernikov" Subject: git: 544f1492c026 - main - netlink: ensure genetlink control family always registers under the same ID. List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: melifaro X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 544f1492c026f358507d812b63943eea08d3155d Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by melifaro: URL: https://cgit.FreeBSD.org/src/commit/?id=544f1492c026f358507d812b63943eea08d3155d commit 544f1492c026f358507d812b63943eea08d3155d Author: Alexander V. Chernikov AuthorDate: 2023-03-27 10:48:24 +0000 Commit: Alexander V. Chernikov CommitDate: 2023-03-27 10:48:24 +0000 netlink: ensure genetlink control family always registers under the same ID. MFC after: 2 weeks --- sys/netlink/netlink_generic.c | 52 ++++++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/sys/netlink/netlink_generic.c b/sys/netlink/netlink_generic.c index a2bd624f99d9..16b49d5aa9ce 100644 --- a/sys/netlink/netlink_generic.c +++ b/sys/netlink/netlink_generic.c @@ -47,6 +47,8 @@ __FBSDID("$FreeBSD$"); #include _DECLARE_DEBUG(LOG_DEBUG); +#define CTRL_FAMILY_NAME "nlctrl" + #define MAX_FAMILIES 20 #define MAX_GROUPS 64 @@ -96,6 +98,28 @@ find_family(const char *family_name) return (NULL); } +static struct genl_family * +find_empty_family_id(const char *family_name) +{ + struct genl_family *gf = NULL; + + if (!strcmp(family_name, CTRL_FAMILY_NAME)) { + gf = &families[0]; + gf->family_id = GENL_MIN_ID; + } else { + /* Index 0 is reserved for the control family */ + for (int i = 1; i < MAX_FAMILIES; i++) { + struct genl_family *gf = &families[i]; + if (gf->family_name == NULL) { + gf->family_id = GENL_MIN_ID + i; + break; + } + } + } + + return (gf); +} + uint32_t genl_register_family(const char *family_name, size_t hdrsize, int family_version, int max_attr_idx) @@ -107,21 +131,18 @@ genl_register_family(const char *family_name, size_t hdrsize, int family_version return (0); GENL_LOCK(); - for (int i = 0; i < MAX_FAMILIES; i++) { - struct genl_family *gf = &families[i]; - if (gf->family_name == NULL) { - gf->family_name = family_name; - gf->family_version = family_version; - gf->family_hdrsize = hdrsize; - gf->family_attr_max = max_attr_idx; - gf->family_id = i + GENL_MIN_ID; - NL_LOG(LOG_DEBUG2, "Registered family %s id %d", - gf->family_name, gf->family_id); - family_id = gf->family_id; - nlctrl_notify(gf, CTRL_CMD_NEWFAMILY); - break; - } - } + + struct genl_family *gf = find_empty_family_id(family_name); + MPASS(gf != NULL); + + gf->family_name = family_name; + gf->family_version = family_version; + gf->family_hdrsize = hdrsize; + gf->family_attr_max = max_attr_idx; + NL_LOG(LOG_DEBUG2, "Registered family %s id %d", gf->family_name, gf->family_id); + family_id = gf->family_id; + nlctrl_notify(gf, CTRL_CMD_NEWFAMILY); + GENL_UNLOCK(); return (family_id); @@ -377,7 +398,6 @@ enomem: /* Declare ourself as a user */ -#define CTRL_FAMILY_NAME "nlctrl" static uint32_t ctrl_family_id; static uint32_t ctrl_group_id;