An upcoming commit becomes the second user of the new functions. Signed-off-by: Gurucharan Shetty <gshe...@nicira.com> --- utilities/ovs-lib.in | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ utilities/ovs-save | 63 +++++++------------------------------------------- 2 files changed, 73 insertions(+), 55 deletions(-)
diff --git a/utilities/ovs-lib.in b/utilities/ovs-lib.in index acfaa4d..32d621e 100644 --- a/utilities/ovs-lib.in +++ b/utilities/ovs-lib.in @@ -250,3 +250,68 @@ daemon_is_running () { pidfile=$rundir/$1.pid test -e "$pidfile" && pid=`cat "$pidfile"` && pid_exists "$pid" && pid_comm_check $1 $pid } >/dev/null 2>&1 + +# Prints commands needed to restore the ip address of an interface. +save_ip_address () { + dev="$1" + + # IP addresses (including IPv6). + echo "ip addr flush dev $dev 2>/dev/null" # Suppresses "Nothing to flush". + ip addr show dev $dev | while read addr; do + set -- $addr + + # Check and trim family. + family=$1 + shift + case $family in + inet | inet6) ;; + *) continue ;; + esac + + # Trim device off the end--"ip" insists on having "dev" precede it. + addrcmd= + while test $# != 0; do + case $1 in + dynamic) + # Omit kernel-maintained route. + continue 2 + ;; + scope) + if test "$2" = link -a "$family" != inet6; then + # Omit route derived from IP address, e.g. + # 172.16.0.0/16 derived from 172.16.12.34, + # but preserve IPv6 link-local address. + continue 2 + fi + ;; + "$dev"|"$dev:"*) + # Address label string + addrcmd="$addrcmd label $1" + shift + continue + ;; + esac + addrcmd="$addrcmd $1" + shift + done + if test "$1" != "$dev"; then + addrcmd="$addrcmd $1" + fi + + echo ip -f $family addr add $addrcmd dev $dev + done +} + +# Prints commands needed to restore the ip route of an interface. +save_ip_routes () { + dev="$1" + echo "ip route flush dev $dev proto boot 2>/dev/null" # Suppresses "Nothing to flush". + ip route show dev $dev | while read route; do + # "proto kernel" routes are installed by the kernel automatically. + case $route in + *" proto kernel "*) continue ;; + esac + + echo "ip route add $route dev $dev" + done +} diff --git a/utilities/ovs-save b/utilities/ovs-save index 7c6390d..33faa9c 100755 --- a/utilities/ovs-save +++ b/utilities/ovs-save @@ -14,6 +14,12 @@ # See the License for the specific language governing permissions and # limitations under the License. +case $0 in + */*) dir0=`echo "$0" | sed 's,/[^/]*$,,'` ;; + *) dir0=./ ;; +esac +. "$dir0/ovs-lib" || exit 1 + usage() { UTIL=$(basename $0) cat <<EOF @@ -78,62 +84,9 @@ save_interfaces () { echo ip link set dev $dev $linkcmd fi - # IP addresses (including IPv6). - echo "ip addr flush dev $dev 2>/dev/null" # Suppresses "Nothing to flush". - ip addr show dev $dev | while read addr; do - set -- $addr - - # Check and trim family. - family=$1 - shift - case $family in - inet | inet6) ;; - *) continue ;; - esac - - # Trim device off the end--"ip" insists on having "dev" precede it. - addrcmd= - while test $# != 0; do - case $1 in - dynamic) - # Omit kernel-maintained route. - continue 2 - ;; - scope) - if test "$2" = link -a "$family" != inet6; then - # Omit route derived from IP address, e.g. - # 172.16.0.0/16 derived from 172.16.12.34, - # but preserve IPv6 link-local address. - continue 2 - fi - ;; - "$dev"|"$dev:"*) - # Address label string - addrcmd="$addrcmd label $1" - shift - continue - ;; - esac - addrcmd="$addrcmd $1" - shift - done - if test "$1" != "$dev"; then - addrcmd="$addrcmd $1" - fi - - echo ip -f $family addr add $addrcmd dev $dev - done - - # Routes. - echo "ip route flush dev $dev proto boot 2>/dev/null" # Suppresses "Nothing to flush". - ip route show dev $dev | while read route; do - # "proto kernel" routes are installed by the kernel automatically. - case $route in - *" proto kernel "*) continue ;; - esac + save_ip_address $dev - echo "ip route add $route dev $dev" - done + save_ip_routes $dev echo done -- 1.9.1 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev