From nobody Thu Oct 06 14:01:35 2022 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 4MjtQm0XSWz4dgKF; Thu, 6 Oct 2022 14:01:36 +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 4MjtQl5sfRz3Hcx; Thu, 6 Oct 2022 14:01:35 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1665064895; 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=Zo6UMNFwKXWCzkt5F0zhY2bnxy+nXprWLuKO3SV70GQ=; b=LRaKwGd+HPBZtSBrQNktZUbVQHI1yF1gb3oz5iKyLb0UsA57k1HRV2OG0mqhINmabUpux2 v5QfCKUnnlrD7VqY9jvrAOcFb7e/pYjjUmlXwbA2y2Zgk32+d4D4t1pVZ90Hx4HFYahG8D nlsaoyxSFGryiG6rGVNFnPSp6XM5+TCm7SNRgj9iwpiRdrGvI/f/IAarUT+ur6tTVGCBjd je+tV2FVGF2jf+U5oRN3Tyy2ZGonLfkaV09ySrKlgcYv1x1kYGelZFKpdS2pbaib6PClt9 l9A0mH1HxjGuvwQKdsgid7AB90//ZtzELbWiYnsmttq8UV8ao3PLblkW9P5K1Q== 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 4MjtQl4vTTzGm2; Thu, 6 Oct 2022 14:01:35 +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 296E1Zhl055101; Thu, 6 Oct 2022 14:01:35 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 296E1ZJi055100; Thu, 6 Oct 2022 14:01:35 GMT (envelope-from git) Date: Thu, 6 Oct 2022 14:01:35 GMT Message-Id: <202210061401.296E1ZJi055100@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Cy Schubert Subject: git: 95dfabe85a54 - stable/12 - ipfilter/ippool: Dump a copy of ippool in ippool.conf format 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: cy X-Git-Repository: src X-Git-Refname: refs/heads/stable/12 X-Git-Reftype: branch X-Git-Commit: 95dfabe85a544f77c926ce799442da5c1ff05756 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1665064895; 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=Zo6UMNFwKXWCzkt5F0zhY2bnxy+nXprWLuKO3SV70GQ=; b=TZbM/uyITE6HUs9zgxVdXk9Kqfxra3+OZ99Tvxz83hjTml2l4cf1FWvp5rv0svYbDieUOT tGnXKhfa2/yXtffU3o1/YwgAB6LDHjRo11Pn8Fj3asuUgYHoD85IoYh+L7O2a9Zo5z6eh/ PEMOkYUI+5x5OcmOzJHeA9DdC3xWCgtmQa2pqZuiQOVzFPNSfT3EhsQQTtF7pmTFvH91XI BsAmOvwyHjyV05bFRc7vy+AFLVyc87Vj1gsp3xcqVpryeKf4+clnscrVc3CkJ3flE9QCR9 pzN8hClJFh9wTRLGQNyhe14wXlK5Rl2ZUr91a/9FNE1NnkaXEMioLF5zbbSzeA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1665064895; a=rsa-sha256; cv=none; b=nyX6rpDfoZlo4yLZpelRuFei1aP7Q3ZF2vO28rv+20+w8RhbfM96p9g4+nVJxqwwZzBEao cVAZiIrBZbjgwaAOPJ2gAPFbACytnQuHea7IWNk09afPHj41Cgvd1GHR+Cfvd4DAhM8HUK Ltq+YjCPRmro8CM4Gfpf9/xeFRKgnUxl/3NKVlujn+2tzBjeL5uD28zije5P4u0pwpG/ae 4Pq1FYl8UA/EW9+ddNRIuLONwKL3Mgui16X7nGLTahvCeJ3GxzUMpegSrdtzmVZdjIa4/j 7IFc/xkr5A0v1vMq5ldWLPGhykbjy7aSXkfDljqd48TBmQe/FUwH00dwsto27A== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/12 has been updated by cy: URL: https://cgit.FreeBSD.org/src/commit/?id=95dfabe85a544f77c926ce799442da5c1ff05756 commit 95dfabe85a544f77c926ce799442da5c1ff05756 Author: Cy Schubert AuthorDate: 2022-09-21 15:33:11 +0000 Commit: Cy Schubert CommitDate: 2022-10-06 14:00:00 +0000 ipfilter/ippool: Dump a copy of ippool in ippool.conf format Add an ippool(8) option to dump a copy of the inm-memory ippool tables in an ippool(5) format so that it can be reloaded using ippool -f. (cherry picked from commit 7531c434a593b2f369d69c85551e7ad1ebb7499a) --- sbin/ipf/ippool/ippool.8 | 8 ++++++-- sbin/ipf/ippool/ippool.c | 5 ++++- sbin/ipf/libipf/printpool_live.c | 12 ++++++++++-- sbin/ipf/libipf/printpooldata.c | 10 ++++++++-- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/sbin/ipf/ippool/ippool.8 b/sbin/ipf/ippool/ippool.8 index 3fe2ee841720..be67e3658c50 100644 --- a/sbin/ipf/ippool/ippool.8 +++ b/sbin/ipf/ippool/ippool.8 @@ -18,7 +18,7 @@ ippool \- user interface to the IPFilter pools -F [-dv] [-o ] [-t ] .br .B ippool --l [-dv] [-m ] [-t ] [-o ] [-M ] [-N ] +-l [-dDv] [-m ] [-t ] [-o ] [-M ] [-N ] .br .B ippool -r [-dnv] [-m ] [-o ] [-t ] -i [/] @@ -120,7 +120,11 @@ as a number of seconds. .B -u When parsing a configuration file, rather than load new pool data into the kernel, unload it. -.DT +.TP +.B -D +When used in conjuction with -l, dump the ippool configuration to stdout in +a format that can be subsequently used as input into ippool -f. +.TP .SH FILES .br /dev/iplookup diff --git a/sbin/ipf/ippool/ippool.c b/sbin/ipf/ippool/ippool.c index 3e8918e1fcfa..384146d729c9 100644 --- a/sbin/ipf/ippool/ippool.c +++ b/sbin/ipf/ippool/ippool.c @@ -670,12 +670,15 @@ poollist(int argc, char *argv[]) poolname = NULL; role = IPL_LOGALL; - while ((c = getopt(argc, argv, "dm:M:N:o:t:v")) != -1) + while ((c = getopt(argc, argv, "dDm:M:N:o:t:v")) != -1) switch (c) { case 'd' : opts |= OPT_DEBUG; break; + case 'D' : + opts |= OPT_SAVEOUT; + break; case 'm' : poolname = optarg; break; diff --git a/sbin/ipf/libipf/printpool_live.c b/sbin/ipf/libipf/printpool_live.c index 324deb629d0b..c1d770b4ef77 100644 --- a/sbin/ipf/libipf/printpool_live.c +++ b/sbin/ipf/libipf/printpool_live.c @@ -26,7 +26,9 @@ printpool_live(ip_pool_t *pool, int fd, char *name, int opts, if ((pool->ipo_flags & IPOOL_DELETE) != 0) PRINTF("# "); - if ((opts & OPT_DEBUG) == 0) + if (opts & OPT_SAVEOUT) + PRINTF("{\n"); + else if ((opts & OPT_DEBUG) == 0) PRINTF("\t{"); obj.ipfo_rev = IPFILTER_VERSION; @@ -48,9 +50,13 @@ printpool_live(ip_pool_t *pool, int fd, char *name, int opts, while (!last && (ioctl(fd, SIOCLOOKUPITER, &obj) == 0)) { if (entry.ipn_next == NULL) last = 1; + if (opts & OPT_SAVEOUT) + PRINTF("\t"); (void) printpoolnode(&entry, opts, fields); if ((opts & OPT_DEBUG) == 0) putchar(';'); + if (opts & OPT_SAVEOUT) + PRINTF("\n"); printed++; } } @@ -58,7 +64,9 @@ printpool_live(ip_pool_t *pool, int fd, char *name, int opts, if (printed == 0) putchar(';'); - if ((opts & OPT_DEBUG) == 0) + if (opts & OPT_SAVEOUT) + PRINTF("};\n"); + else if ((opts & OPT_DEBUG) == 0) PRINTF(" };\n"); (void) ioctl(fd,SIOCIPFDELTOK, &iter.ili_key); diff --git a/sbin/ipf/libipf/printpooldata.c b/sbin/ipf/libipf/printpooldata.c index ce754f9a89bb..bd5af316eb19 100644 --- a/sbin/ipf/libipf/printpooldata.c +++ b/sbin/ipf/libipf/printpooldata.c @@ -12,7 +12,9 @@ void printpooldata(ip_pool_t *pool, int opts) { - if ((opts & OPT_DEBUG) == 0) { + if (opts & OPT_SAVEOUT) { + PRINTF("pool "); + } else if ((opts & OPT_DEBUG) == 0) { if ((pool->ipo_flags & IPOOL_ANON) != 0) PRINTF("# 'anonymous' tree %s\n", pool->ipo_name); if ((pool->ipo_flags & IPOOL_DELETE) != 0) @@ -32,7 +34,11 @@ printpooldata(ip_pool_t *pool, int opts) printunit(pool->ipo_unit); - if ((opts & OPT_DEBUG) == 0) { + if ((opts & OPT_SAVEOUT)) { + PRINTF("/tree (%s \"\%s\";)\n", + (!*pool->ipo_name || ISDIGIT(*pool->ipo_name)) ? \ + "number" : "name", pool->ipo_name); + } else if ((opts & OPT_DEBUG) == 0) { PRINTF(" type=tree %s=%s\n", (!*pool->ipo_name || ISDIGIT(*pool->ipo_name)) ? \ "number" : "name", pool->ipo_name);