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

Reply via email to