Message ID | 1519383935-3556-2-git-send-email-jonatan.schlag@ipfire.org |
---|---|
State | New |
Headers |
Return-Path: <network-bounces@lists.ipfire.org> Received: from mail01.ipfire.org (unknown [172.28.1.200]) by web02.i.ipfire.org (Postfix) with ESMTP id 0BC9660AB7 for <patchwork@web02.i.ipfire.org>; 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 <network.lists.ipfire.org> List-Unsubscribe: <https://lists.ipfire.org/mailman/options/network>, <mailto:network-request@lists.ipfire.org?subject=unsubscribe> List-Archive: <https://lists.ipfire.org/pipermail/network/> List-Post: <mailto:network@lists.ipfire.org> List-Help: <mailto:network-request@lists.ipfire.org?subject=help> List-Subscribe: <https://lists.ipfire.org/mailman/listinfo/network>, <mailto:network-request@lists.ipfire.org?subject=subscribe> From: Jonatan Schlag via network <network@lists.ipfire.org> Reply-To: Jonatan Schlag <jonatan.schlag@ipfire.org> Errors-To: network-bounces@lists.ipfire.org Sender: "network" <network-bounces@lists.ipfire.org> |
Series |
[1/3] Add new function: device_get_by_assigned_ip_address()
|
|
Commit Message
Jonatan Schlag via network
23 Feb 2018, 10:05 p.m. UTC
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 <jonatan.schlag@ipfire.org>
---
src/functions/functions.ip | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
Comments
On Fri, 2018-02-23 at 11:05 +0000, Jonatan Schlag via network wrote: > 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 <jonatan.schlag@ipfire.org> > --- > 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} I think this assertion isn't needed because "ip" will check this and just throw an error. > + local line > + local ips It would be nicer if the "ips" variable would be called "addresses" because that is the term that we actually use most of the time. > + # 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]}")" You could also achieve this by passing the line argument up to the first space and use the "%" and "#" parameters in the brackets. I am not sure if the conversion to the array has any implications. > + done <<< "$(ip addr show to "${net}" ${args})" > + > + # We sort the list to get the lowest IP as first item > + print "$(list_sort ${ips})" You don't need to call print here. This will create a subshell for the list_sort call, but list_sort already prints the output, so you can just write: list_sort ${ips} That will be a lot faster. > +} -Michael
Hi, Am Sa, 24. Feb, 2018 um 12:53 schrieb Michael Tremer <michael.tremer@ipfire.org>: > On Fri, 2018-02-23 at 11:05 +0000, Jonatan Schlag via network wrote: >> 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 <jonatan.schlag@ipfire.org> >> --- >> 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} > > I think this assertion isn't needed because "ip" will check this and > just throw > an error. But can we catch the error in a nice way? I could have a look at this but using $? should be harder then to use our normal functions. > >> + local line >> + local ips > > It would be nicer if the "ips" variable would be called "addresses" > because that > is the term that we actually use most of the time. Ok > > >> + # 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]}")" > > You could also achieve this by passing the line argument up to the > first space > and use the "%" and "#" parameters in the brackets. > > I am not sure if the conversion to the array has any implications. So how can we make shure that this has no implications? > > >> + done <<< "$(ip addr show to "${net}" ${args})" >> + >> + # We sort the list to get the lowest IP as first item >> + print "$(list_sort ${ips})" > > You don't need to call print here. This will create a subshell for > the list_sort > call, but list_sort already prints the output, so you can just write: > > list_sort ${ips} > > That will be a lot faster. Ok > > >> +} > > -Michael Hi,<br><br>Am Sa, 24. Feb, 2018 um 12:53 schrieb Michael Tremer <michael.tremer@ipfire.org>:<br> <blockquote type="cite"><div class="plaintext" style="white-space: pre-wrap;">On Fri, 2018-02-23 at 11:05 +0000, Jonatan Schlag via network wrote: <blockquote> 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 <<a href="mailto:jonatan.schlag@ipfire.org">jonatan.schlag@ipfire.org</a>> --- 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} </blockquote> I think this assertion isn't needed because "ip" will check this and just throw an error. </div></blockquote><div><br></div><div>But can we catch the error in a nice way? I could have a look at this but using $? should be harder then to use our normal functions. </div><div><br></div><blockquote type="cite"><div class="plaintext" style="white-space: pre-wrap;"> <blockquote> + local line + local ips </blockquote> It would be nicer if the "ips" variable would be called "addresses" because that is the term that we actually use most of the time.</div></blockquote><div><br></div>Ok<div><br><blockquote type="cite"><div class="plaintext" style="white-space: pre-wrap;"> <blockquote> + # 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]}")" </blockquote> You could also achieve this by passing the line argument up to the first space and use the "%" and "#" parameters in the brackets. I am not sure if the conversion to the array has any implications.</div></blockquote><div><br></div><div>So how can we make shure that this has no <span style="white-space: pre-wrap;">implications?</span></div><div><br></div><blockquote type="cite"><div class="plaintext" style="white-space: pre-wrap;"> <blockquote> + done <<< "$(ip addr show to "${net}" ${args})" + + # We sort the list to get the lowest IP as first item + print "$(list_sort ${ips})" </blockquote> You don't need to call print here. This will create a subshell for the list_sort call, but list_sort already prints the output, so you can just write: list_sort ${ips} That will be a lot faster.</div></blockquote><div><br></div>Ok<div><br><blockquote type="cite"><div class="plaintext" style="white-space: pre-wrap;"> <blockquote> +} </blockquote> -Michael </div></blockquote></div></div>
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})" +}