commit: 4ddfad307887e80a296a611832cf3780ccaf9616
Author: Kirill Semenkov <semenkovk <AT> gmail <DOT> com>
AuthorDate: Mon Jan 21 08:42:56 2019 +0000
Commit: Robin H. Johnson <robbat2 <AT> gentoo <DOT> org>
CommitDate: Sun Apr 21 04:10:41 2019 +0000
URL: https://gitweb.gentoo.org/proj/netifrc.git/commit/?id=4ddfad30
Two separate peer variables for every peer in veth
Signed-off-by: Robin H. Johnson <robbat2 <AT> gentoo.org>
doc/net.example.Linux.in | 7 ++++---
net/veth.sh | 35 +++++++++++------------------------
2 files changed, 15 insertions(+), 27 deletions(-)
diff --git a/doc/net.example.Linux.in b/doc/net.example.Linux.in
index 6fc6094..8896acf 100644
--- a/doc/net.example.Linux.in
+++ b/doc/net.example.Linux.in
@@ -916,7 +916,7 @@
#-----------------------------------------------------------------------------
# Virtual interface device (veth)
-# For veth support install iproute2 and awk
+# For veth support install iproute2
#
# The script uses "standard" ways of IP-address assignement in net.lo script.
Network namespaces are not implemented here
# because net.lo currently knows nothing about network namespaces.
@@ -925,10 +925,11 @@
# The interface type must be set for both peers
#type_veth0="veth"
# Here we declare peers for "ip link add" command
-#veth_veth0="veth0 veth1"
+#veth_veth0_peer1="veth0"
+#veth_veth0_peer2="veth1"
#config_veth0="192.168.0.1/24"
#
-# Avoids race
+# Prevents race
#rc_net_veth1_need="net.veth0"
#type_veth1="veth"
# Both peers are created when the first one starts, we don't need to create
the second peer
diff --git a/net/veth.sh b/net/veth.sh
index d969a14..5ff6587 100644
--- a/net/veth.sh
+++ b/net/veth.sh
@@ -3,7 +3,7 @@
veth_depend()
{
- program ip awk
+ program ip
}
_config_vars="$_config_vars veth"
@@ -72,19 +72,13 @@ _bring_peer_down()
#Create and bring the veth pair up
_create_peers()
{
- local peers
- peers="$(_get_array "veth_${IFVAR}")"
-
- # veth has exactly two peers.
- # For POSIX compatibility we evade bash arrays
- local npeers
- npeers=$(echo "$peers" | awk '{print NF}')
- if [ "$npeers" != 2 ]; then
- eerror "veth interface must have exactly two peers"
- return 1
- fi
+ local peer1
+ peer1="$(_get_array "veth_${IFVAR}_peer1")"
+
+ local peer2
+ peer2="$(_get_array "veth_${IFVAR}_peer2")"
- for x in ${peers}; do
+ for x in $peer1 $peer2; do
if _exists "$x" ; then
eerror "Interface $x already exists. Can't continue"
return 1
@@ -104,12 +98,6 @@ _create_peers()
return 1
fi
- local peer1
- peer1=$(echo "$peers" | awk '{print $1}')
- local peer2
- peer2=$(echo "$peers" | awk '{print $2}')
-
-
ip link add "$peer1" type veth peer name "$peer2" > /dev/null 2>&1 || {
eerror "Can't create veth peer $peer1 or $peer2"
return 1
@@ -177,14 +165,13 @@ veth_post_stop()
return 0
fi
- local peers
- peers="$(_get_array "veth_${IFVAR}")"
- local first
- first=$(echo "$peers" | awk '{print $1}')
+ local peer1
+ peer1="$(_get_array "veth_${IFVAR}_peer1")"
+
local netns1
netns1="$(_get_array "veth_${IFVAR}_ns1")"
- if ! _bring_peer_down "$first" "$netns1"
+ if ! _bring_peer_down "$peer1" "$netns1"
then
eerror "Can't delete the veth pair ${IFVAR}"
eend 1