diff options
| author | Michael Biebl <biebl@debian.org> | 2018-10-20 01:30:31 +0200 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2018-10-20 01:30:31 +0200 |
| commit | 6518e361171f64bcaaa4bf868139362ed95cc2e0 (patch) | |
| tree | d2d5b53faf80646a40ec2c0c7f2a42b3959612f5 /examples | |
| parent | e126f3e804c35480c4f075777430419d6ece23da (diff) | |
New upstream version 1.14.2 upstream/1.14.2
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/C/glib/monitor-nm-running-gdbus.c | 6 | ||||
| -rw-r--r-- | examples/C/glib/monitor-nm-state-gdbus.c | 6 | ||||
| -rwxr-xr-x | examples/dispatcher/10-ifcfg-rh-routes.sh | 110 | ||||
| -rw-r--r-- | examples/python/nmex.py | 72 |
4 files changed, 105 insertions, 89 deletions
diff --git a/examples/C/glib/monitor-nm-running-gdbus.c b/examples/C/glib/monitor-nm-running-gdbus.c index 16e1cfad..ad05a9e4 100644 --- a/examples/C/glib/monitor-nm-running-gdbus.c +++ b/examples/C/glib/monitor-nm-running-gdbus.c @@ -32,8 +32,8 @@ static void on_name_appeared (GDBusConnection *connection, - const gchar *name, - const gchar *name_owner, + const char *name, + const char *name_owner, gpointer user_data) { g_print ("Name '%s' on the system bus is owned by %s => NM is running\n", @@ -42,7 +42,7 @@ on_name_appeared (GDBusConnection *connection, static void on_name_vanished (GDBusConnection *connection, - const gchar *name, + const char *name, gpointer user_data) { g_print ("Name '%s' does not exist on the system bus => NM is not running\n", name); diff --git a/examples/C/glib/monitor-nm-state-gdbus.c b/examples/C/glib/monitor-nm-state-gdbus.c index fdb4d95d..4593f1a6 100644 --- a/examples/C/glib/monitor-nm-state-gdbus.c +++ b/examples/C/glib/monitor-nm-state-gdbus.c @@ -59,15 +59,15 @@ nm_state_to_string (NMState state) static void on_signal (GDBusProxy *proxy, - gchar *sender_name, - gchar *signal_name, + char *sender_name, + char *signal_name, GVariant *parameters, gpointer user_data) { guint32 new_state; /* Print all signals */ - //gchar *parameters_str; + //char *parameters_str; //parameters_str = g_variant_print (parameters, TRUE); //g_print (" *** Received Signal: %s: %s\n", signal_name, parameters_str); //g_free (parameters_str); diff --git a/examples/dispatcher/10-ifcfg-rh-routes.sh b/examples/dispatcher/10-ifcfg-rh-routes.sh index b1d0314d..d72400ae 100755 --- a/examples/dispatcher/10-ifcfg-rh-routes.sh +++ b/examples/dispatcher/10-ifcfg-rh-routes.sh @@ -1,17 +1,51 @@ -#!/bin/sh - -# This ifcfg-rh-specific script runs -# /etc/sysconfig/network-scripts/ifup-routes when bringing up -# interfaces that have routing rules associated with them that can't -# be expressed by NMSettingIPConfig. (Eg, policy-based routing.) +#!/bin/bash +# This script applies policy-based routing rules defined for the +# connection in the /etc/sysconfig/network-scripts/ directory. +# # This should be installed in both dispatcher.d/ and # dispatcher.d/pre-up.d/ - +# # pre-up scripts delay activation of the device. To reduce the delay, # it is advised to install the script as symlink to no-wait.d directory. +# +# This file is derived from scripts 'if{up,down}-routes' from +# Fedora/RHEL initscripts. + +MATCH='^[[:space:]]*(\#.*)?$' + +handle_file () { + . $1 + routenum=0 + while [ "x$(eval echo '$'ADDRESS$routenum)x" != "xx" ]; do + eval $(ipcalc -p $(eval echo '$'ADDRESS$routenum) $(eval echo '$'NETMASK$routenum)) + line="$(eval echo '$'ADDRESS$routenum)/$PREFIX" + if [ "x$(eval echo '$'GATEWAY$routenum)x" != "xx" ]; then + line="$line via $(eval echo '$'GATEWAY$routenum)" + fi + line="$line dev $2" + /sbin/ip route add $line + routenum=$(($routenum+1)) + done +} + +handle_ip_file() { + local f t type= file=$1 proto="-4" + f=${file##*/} + t=${f%%-*} + type=${t%%6} + if [ "$type" != "$t" ]; then + proto="-6" + fi + { cat "$file" ; echo ; } | while read line; do + if [[ ! "$line" =~ $MATCH ]]; then + /sbin/ip $proto $type add $line + fi + done +} + -if [ "$2" != "pre-up" -a "$2" != "down" ]; then +if [ "$2" != "pre-up" ] && [ "$2" != "down" ]; then exit 0 fi @@ -19,19 +53,73 @@ dir=$(dirname "$CONNECTION_FILENAME") if [ "$dir" != "/etc/sysconfig/network-scripts" ]; then exit 0 fi + profile=$(basename "$CONNECTION_FILENAME" | sed -ne 's/^ifcfg-//p') if [ -z "$profile" ]; then exit 0 fi -if ! [ -f "$dir/rule-$profile" -o -f "$dir/rule6-$profile" ]; then + +if [ ! -f "$dir/rule-$profile" ] && [ ! -f "$dir/rule6-$profile" ]; then exit 0 fi case "$2" in pre-up) - /etc/sysconfig/network-scripts/ifup-routes "$DEVICE_IP_IFACE" "$profile" + # Routes + FILES="/etc/sysconfig/network-scripts/route-$DEVICE_IP_IFACE" + FILES="$FILES /etc/sysconfig/network-scripts/route6-$DEVICE_IP_IFACE" + if [ "$profile" != "$DEVICE_IP_IFACE" ]; then + FILES="$FILES /etc/sysconfig/network-scripts/route-$profile" + FILES="$FILES /etc/sysconfig/network-scripts/route6-$profile" + fi + + for file in $FILES; do + if [ -f "$file" ]; then + if grep -Eq '^[[:space:]]*ADDRESS[0-9]+=' $file ; then + # new format + handle_file $file ${1%:*} + else + # older format + handle_ip_file $file + fi + fi + done + + # Rules + FILES="/etc/sysconfig/network-scripts/rule-$DEVICE_IP_IFACE" + FILES="$FILES /etc/sysconfig/network-scripts/rule6-$DEVICE_IP_IFACE" + if [ "$profile" != "$DEVICE_IP_IFACE" ]; then + FILES="$FILES /etc/sysconfig/network-scripts/rule-$profile" + FILES="$FILES /etc/sysconfig/network-scripts/rule6-$profile" + fi + + for file in $FILES; do + if [ -f "$file" ]; then + handle_ip_file $file + fi + done ;; down) - /etc/sysconfig/network-scripts/ifdown-routes "$DEVICE_IP_IFACE" "$profile" + # Routes are deleted by NetworkManager + # Rules + FILES="/etc/sysconfig/network-scripts/rule-$DEVICE_IP_IFACE" + FILES="$FILES /etc/sysconfig/network-scripts/rule6-$DEVICE_IP_IFACE" + if [ "$profile" != "$DEVICE_IP_IFACE" ]; then + FILES="$FILES /etc/sysconfig/network-scripts/rule-$profile" + FILES="$FILES /etc/sysconfig/network-scripts/rule6-$profile" + fi + for file in $FILES; do + if [ -f "$file" ]; then + proto= + if [ "$file" != "${file##*/rule6-}" ]; then + proto="-6" + fi + { cat "$file" ; echo ; } | while read line; do + if [[ ! "$line" =~ $MATCH ]]; then + /sbin/ip $proto rule del $line + fi + done + fi + done ;; esac diff --git a/examples/python/nmex.py b/examples/python/nmex.py deleted file mode 100644 index a85eecaf..00000000 --- a/examples/python/nmex.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python -# -*- Mode: Python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- -# vim: ft=python ts=4 sts=4 sw=4 et ai - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -# Copyright 2018 Red Hat, Inc. - -############################################################################### -# nmex.py contains helper functions used by some examples. The helper functions -# should be simple and independent, so that the user can extract them easily -# when modifying the example to his needs. -############################################################################### - -def _sys_clock_gettime_ns_lazy(): - import ctypes - - class timespec(ctypes.Structure): - _fields_ = [ - ('tv_sec', ctypes.c_long), - ('tv_nsec', ctypes.c_long) - ] - - librt = ctypes.CDLL('librt.so.1', use_errno=True) - clock_gettime = librt.clock_gettime - clock_gettime.argtypes = [ctypes.c_int, ctypes.POINTER(timespec)] - - t = timespec() - def f(clock_id): - if clock_gettime(clock_id, ctypes.pointer(t)) != 0: - import os - errno_ = ctypes.get_errno() - raise OSError(errno_, os.strerror(errno_)) - return (t.tv_sec * 1000000000) + t.tv_nsec - return f - -_sys_clock_gettime_ns = None - -# call POSIX clock_gettime() and return it as integer (in nanoseconds) -def sys_clock_gettime_ns(clock_id): - global _sys_clock_gettime_ns - if _sys_clock_gettime_ns is None: - _sys_clock_gettime_ns = _sys_clock_gettime_ns_lazy() - return _sys_clock_gettime_ns(clock_id) - -def nm_boot_time_ns(): - # NetworkManager exposes some timestamps as CLOCK_BOOTTIME. - # Try that first (number 7). - try: - return sys_clock_gettime_ns(7) - except OSError as e: - # On systems, where this is not available, fallback to - # CLOCK_MONOTONIC (numeric 1). - # That is what NetworkManager does as well. - import errno - if e.errno == errno.EINVAL: - return sys_clock_gettime_ns(1) - raise -def nm_boot_time_us(): - return nm_boot_time_ns() / 1000 -def nm_boot_time_ms(): - return nm_boot_time_ns() / 1000000 -def nm_boot_time_s(): - return nm_boot_time_ns() / 1000000000 - -############################################################################### |