From patchwork Fri Feb 23 22:05:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonatan Schlag via network X-Patchwork-Id: 1672 Return-Path: Received: from mail01.ipfire.org (unknown [172.28.1.200]) by web02.i.ipfire.org (Postfix) with ESMTP id 0BC9660AB7 for ; Fri, 23 Feb 2018 12:05:56 +0100 (CET) X-Virus-Scanned: ClamAV at mail01.ipfire.org Received: from mail01.i.ipfire.org (localhost [IPv6:::1]) by mail01.ipfire.org (Postfix) with ESMTP id 60033108B8A1; Fri, 23 Feb 2018 11:06:11 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=lists.ipfire.org; s=201801; t=1519383971; x=1521975971; bh=d2aZQjFJCmw6U7895hEcqsqUkk0rt1C9G/k+8olx1rg=; h=To:Subject:Date:Message-Id:In-Reply-To:From:Reply-To:Sender:From: To:Cc:Date:Content-Type:Message-ID:In-Reply-To:Subject:Reply-To: Sender; b=iHWbybxXQCKP+q0eZSos0xzy2Fti8HA5RK7PICNBbdOXxB7uHdOApFp3Xmzt3F+bK ar5ca6WJVe0fl8yDYYAWj6/RqmKmh9pkzgIseZ4nb51iDb1ESQIQbl8HZBO0NGhJZ+ nr1SowrolJ0cyHj1jd6Uc25n7og6bFdIYpMHHHZeEuyKsZRIqhHpQzyEFiNt+NMeGZ lYCtjXgKlAI/mnrOhqwZ08Ti3Hx6D66W3AlNxZ8+u500+NI50fgDCTiMA6dzYimmEm fDOz+3A/s/Z6cZUi5BWmV9pffufdu3qAP7lgHEBDRu65sg7VRCQW5jL70knT59WfYu uj2mWxVDsQ3MQ== X-Virus-Scanned: ClamAV at mail01.ipfire.org Received: from localhost.localdomain (unknown [10.172.1.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (Client did not present a certificate) by mail01.ipfire.org (Postfix) with ESMTPSA id DB25F108B8A1; Fri, 23 Feb 2018 11:06:09 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ipfire.org; s=201801; t=1519383970; x=1521975970; bh=d2aZQjFJCmw6U7895hEcqsqUkk0rt1C9G/k+8olx1rg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:From:To:Cc:Date: Content-Type:Message-ID:In-Reply-To:Subject:Reply-To:Sender; b=dM98805FldbQmuZ2aNWjev8gjp7NzuSNwlbD4PMrvRyCboXn2VV011PKSCEJI6szj MYB4NNZoNMyiR+iS53bXseG7qTJzuxC45ohVfH/DjNuvopcJE5znzwGJSwTKWtRJ0W +8RHPU07R2pPG5x2NzknL8J84PXY87nlszJoOXTTnBxiM8XH1FqpgJuwCqoAEd3zmH qva9Y7H26c1QRJIWPTo0PfIY19T5q/XyUfcAg18KDIUr8MFsbo5XhBOBGrj/ZK2S1N zPVpaUGbUSLTQubAT9FgunW9dAf4l9bYyP7HwyHF7tUqUxe81UrxRGqpAi/fiCQrFc FYRuRYl8uYPhw== To: network@lists.ipfire.org Subject: [PATCH 2/3] Add new function ip_get__assigned_addresses_from_net() Date: Fri, 23 Feb 2018 11:05:34 +0000 Message-Id: <1519383935-3556-2-git-send-email-jonatan.schlag@ipfire.org> X-Mailer: git-send-email 2.6.3 In-Reply-To: <1519383935-3556-1-git-send-email-jonatan.schlag@ipfire.org> References: <1519383935-3556-1-git-send-email-jonatan.schlag@ipfire.org> X-BeenThere: network@lists.ipfire.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List for the network package List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jonatan Schlag via network From: Jonatan Schlag via network Reply-To: Jonatan Schlag Errors-To: network-bounces@lists.ipfire.org Sender: "network" This function is neede by IPsec to set the routes correctly. We can now now find a source IP for a given net. This way is ugly because the source IP is unpredictable if we get multiple IPs. Signed-off-by: Jonatan Schlag --- src/functions/functions.ip | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/functions/functions.ip b/src/functions/functions.ip index 3b43da7..ef40bcc 100644 --- a/src/functions/functions.ip +++ b/src/functions/functions.ip @@ -205,3 +205,28 @@ ip_address_del() { return ${EXIT_OK} } + +# Get all currently assigned addresse for a given network +ip_get_assigned_addresses_from_net() { + local net=${1} + shift + local args="$@" + + assert ip_net_is_valid ${net} + + local line + local ips + + # We read the output of $(ip addr show to ${net} ${args}) + while read -r line; do + # We are only interested in lines which start with inet or inet6 + [[ "${line}" =~ ^(inet6 |inet ) ]] || continue + + # We need the second word the line + line=(${line}) + list_append "ips" "$(ip_split_prefix "${line[1]}")" + done <<< "$(ip addr show to "${net}" ${args})" + + # We sort the list to get the lowest IP as first item + print "$(list_sort ${ips})" +}