summaryrefslogtreecommitdiff
path: root/src/extras/rule_generator
diff options
context:
space:
mode:
Diffstat (limited to 'src/extras/rule_generator')
-rw-r--r--src/extras/rule_generator/rule_generator.functions126
-rw-r--r--src/extras/rule_generator/write_cd_rules112
-rw-r--r--src/extras/rule_generator/write_net_rules102
3 files changed, 170 insertions, 170 deletions
diff --git a/src/extras/rule_generator/rule_generator.functions b/src/extras/rule_generator/rule_generator.functions
index 0f1b73850e..2eec1b6abf 100644
--- a/src/extras/rule_generator/rule_generator.functions
+++ b/src/extras/rule_generator/rule_generator.functions
@@ -20,94 +20,94 @@ PATH='/usr/bin:/bin:/usr/sbin:/sbin'
# Read a single line from file $1 in the $DEVPATH directory.
# The function must not return an error even if the file does not exist.
sysread() {
- local file="$1"
- [ -e "/sys$DEVPATH/$file" ] || return 0
- local value
- read value < "/sys$DEVPATH/$file" || return 0
- echo "$value"
+ local file="$1"
+ [ -e "/sys$DEVPATH/$file" ] || return 0
+ local value
+ read value < "/sys$DEVPATH/$file" || return 0
+ echo "$value"
}
sysreadlink() {
- local file="$1"
- [ -e "/sys$DEVPATH/$file" ] || return 0
- readlink -f /sys$DEVPATH/$file 2> /dev/null || true
+ local file="$1"
+ [ -e "/sys$DEVPATH/$file" ] || return 0
+ readlink -f /sys$DEVPATH/$file 2> /dev/null || true
}
# Return true if a directory is writeable.
writeable() {
- if ln -s test-link $1/.is-writeable 2> /dev/null; then
- rm -f $1/.is-writeable
- return 0
- else
- return 1
- fi
+ if ln -s test-link $1/.is-writeable 2> /dev/null; then
+ rm -f $1/.is-writeable
+ return 0
+ else
+ return 1
+ fi
}
# Create a lock file for the current rules file.
lock_rules_file() {
- RUNDIR=$(udevadm info --run)
- [ -e "$RUNDIR" ] || return 0
-
- RULES_LOCK="$RUNDIR/.lock-${RULES_FILE##*/}"
-
- retry=30
- while ! mkdir $RULES_LOCK 2> /dev/null; do
- if [ $retry -eq 0 ]; then
- echo "Cannot lock $RULES_FILE!" >&2
- exit 2
- fi
- sleep 1
- retry=$(($retry - 1))
- done
+ RUNDIR=$(udevadm info --run)
+ [ -e "$RUNDIR" ] || return 0
+
+ RULES_LOCK="$RUNDIR/.lock-${RULES_FILE##*/}"
+
+ retry=30
+ while ! mkdir $RULES_LOCK 2> /dev/null; do
+ if [ $retry -eq 0 ]; then
+ echo "Cannot lock $RULES_FILE!" >&2
+ exit 2
+ fi
+ sleep 1
+ retry=$(($retry - 1))
+ done
}
unlock_rules_file() {
- [ "$RULES_LOCK" ] || return 0
- rmdir $RULES_LOCK || true
+ [ "$RULES_LOCK" ] || return 0
+ rmdir $RULES_LOCK || true
}
# Choose the real rules file if it is writeable or a temporary file if not.
# Both files should be checked later when looking for existing rules.
choose_rules_file() {
- RUNDIR=$(udevadm info --run)
- local tmp_rules_file="$RUNDIR/tmp-rules--${RULES_FILE##*/}"
- [ -e "$RULES_FILE" -o -e "$tmp_rules_file" ] || PRINT_HEADER=1
-
- if writeable ${RULES_FILE%/*}; then
- RO_RULES_FILE='/dev/null'
- else
- RO_RULES_FILE=$RULES_FILE
- RULES_FILE=$tmp_rules_file
- fi
+ RUNDIR=$(udevadm info --run)
+ local tmp_rules_file="$RUNDIR/tmp-rules--${RULES_FILE##*/}"
+ [ -e "$RULES_FILE" -o -e "$tmp_rules_file" ] || PRINT_HEADER=1
+
+ if writeable ${RULES_FILE%/*}; then
+ RO_RULES_FILE='/dev/null'
+ else
+ RO_RULES_FILE=$RULES_FILE
+ RULES_FILE=$tmp_rules_file
+ fi
}
# Return the name of the first free device.
raw_find_next_available() {
- local links="$1"
-
- local basename=${links%%[ 0-9]*}
- local max=-1
- for name in $links; do
- local num=${name#$basename}
- [ "$num" ] || num=0
- [ $num -gt $max ] && max=$num
- done
-
- local max=$(($max + 1))
- # "name0" actually is just "name"
- [ $max -eq 0 ] && return
- echo "$max"
+ local links="$1"
+
+ local basename=${links%%[ 0-9]*}
+ local max=-1
+ for name in $links; do
+ local num=${name#$basename}
+ [ "$num" ] || num=0
+ [ $num -gt $max ] && max=$num
+ done
+
+ local max=$(($max + 1))
+ # "name0" actually is just "name"
+ [ $max -eq 0 ] && return
+ echo "$max"
}
# Find all rules matching a key (with action) and a pattern.
find_all_rules() {
- local key="$1"
- local linkre="$2"
- local match="$3"
-
- local search='.*[[:space:],]'"$key"'"('"$linkre"')".*'
- echo $(sed -n -r -e 's/^#.*//' -e "${match}s/${search}/\1/p" \
- $RO_RULES_FILE \
- $([ -e $RULES_FILE ] && echo $RULES_FILE) \
- 2>/dev/null)
+ local key="$1"
+ local linkre="$2"
+ local match="$3"
+
+ local search='.*[[:space:],]'"$key"'"('"$linkre"')".*'
+ echo $(sed -n -r -e 's/^#.*//' -e "${match}s/${search}/\1/p" \
+ $RO_RULES_FILE \
+ $([ -e $RULES_FILE ] && echo $RULES_FILE) \
+ 2>/dev/null)
}
diff --git a/src/extras/rule_generator/write_cd_rules b/src/extras/rule_generator/write_cd_rules
index 3f93c7447a..645b9cd521 100644
--- a/src/extras/rule_generator/write_cd_rules
+++ b/src/extras/rule_generator/write_cd_rules
@@ -22,9 +22,9 @@
# debug, if UDEV_LOG=<debug>
if [ -n "$UDEV_LOG" ]; then
- if [ "$UDEV_LOG" -ge 7 ]; then
- set -x
- fi
+ if [ "$UDEV_LOG" -ge 7 ]; then
+ set -x
+ fi
fi
RULES_FILE="/etc/udev/rules.d/70-persistent-cd.rules"
@@ -32,70 +32,70 @@ RULES_FILE="/etc/udev/rules.d/70-persistent-cd.rules"
. /lib/udev/rule_generator.functions
find_next_available() {
- raw_find_next_available "$(find_all_rules 'SYMLINK\+=' "$1")"
+ raw_find_next_available "$(find_all_rules 'SYMLINK\+=' "$1")"
}
write_rule() {
- local match="$1"
- local link="$2"
- local comment="$3"
-
- {
- if [ "$PRINT_HEADER" ]; then
- PRINT_HEADER=
- echo "# This file was automatically generated by the $0"
- echo "# program, run by the cd-aliases-generator.rules rules file."
- echo "#"
- echo "# You can modify it, as long as you keep each rule on a single"
- echo "# line, and set the \$GENERATED variable."
- echo ""
- fi
-
- [ "$comment" ] && echo "# $comment"
- echo "$match, SYMLINK+=\"$link\", ENV{GENERATED}=\"1\""
- } >> $RULES_FILE
- SYMLINKS="$SYMLINKS $link"
+ local match="$1"
+ local link="$2"
+ local comment="$3"
+
+ {
+ if [ "$PRINT_HEADER" ]; then
+ PRINT_HEADER=
+ echo "# This file was automatically generated by the $0"
+ echo "# program, run by the cd-aliases-generator.rules rules file."
+ echo "#"
+ echo "# You can modify it, as long as you keep each rule on a single"
+ echo "# line, and set the \$GENERATED variable."
+ echo ""
+ fi
+
+ [ "$comment" ] && echo "# $comment"
+ echo "$match, SYMLINK+=\"$link\", ENV{GENERATED}=\"1\""
+ } >> $RULES_FILE
+ SYMLINKS="$SYMLINKS $link"
}
if [ -z "$DEVPATH" ]; then
- echo "Missing \$DEVPATH." >&2
- exit 1
+ echo "Missing \$DEVPATH." >&2
+ exit 1
fi
if [ -z "$ID_CDROM" ]; then
- echo "$DEVPATH is not a CD reader." >&2
- exit 1
+ echo "$DEVPATH is not a CD reader." >&2
+ exit 1
fi
if [ "$1" ]; then
- METHOD="$1"
+ METHOD="$1"
else
- METHOD='by-path'
+ METHOD='by-path'
fi
case "$METHOD" in
- by-path)
- if [ -z "$ID_PATH" ]; then
- echo "$DEVPATH not supported by path_id. by-id may work." >&2
- exit 1
- fi
- RULE="ENV{ID_PATH}==\"$ID_PATH\""
- ;;
-
- by-id)
- if [ "$ID_SERIAL" ]; then
- RULE="ENV{ID_SERIAL}==\"$ID_SERIAL\""
- elif [ "$ID_MODEL" -a "$ID_REVISION" ]; then
- RULE="ENV{ID_MODEL}==\"$ID_MODEL\", ENV{ID_REVISION}==\"$ID_REVISION\""
- else
- echo "$DEVPATH not supported by ata_id. by-path may work." >&2
- exit 1
- fi
- ;;
-
- *)
- echo "Invalid argument (must be either by-path or by-id)." >&2
- exit 1
- ;;
+ by-path)
+ if [ -z "$ID_PATH" ]; then
+ echo "$DEVPATH not supported by path_id. by-id may work." >&2
+ exit 1
+ fi
+ RULE="ENV{ID_PATH}==\"$ID_PATH\""
+ ;;
+
+ by-id)
+ if [ "$ID_SERIAL" ]; then
+ RULE="ENV{ID_SERIAL}==\"$ID_SERIAL\""
+ elif [ "$ID_MODEL" -a "$ID_REVISION" ]; then
+ RULE="ENV{ID_MODEL}==\"$ID_MODEL\", ENV{ID_REVISION}==\"$ID_REVISION\""
+ else
+ echo "$DEVPATH not supported by ata_id. by-path may work." >&2
+ exit 1
+ fi
+ ;;
+
+ *)
+ echo "Invalid argument (must be either by-path or by-id)." >&2
+ exit 1
+ ;;
esac
# Prevent concurrent processes from modifying the file at the same time.
@@ -110,13 +110,13 @@ match="SUBSYSTEM==\"block\", ENV{ID_CDROM}==\"?*\", $RULE"
comment="$ID_MODEL ($ID_PATH)"
- write_rule "$match" "cdrom$link_num" "$comment"
+ write_rule "$match" "cdrom$link_num" "$comment"
[ "$ID_CDROM_CD_R" -o "$ID_CDROM_CD_RW" ] && \
- write_rule "$match" "cdrw$link_num"
+ write_rule "$match" "cdrw$link_num"
[ "$ID_CDROM_DVD" ] && \
- write_rule "$match" "dvd$link_num"
+ write_rule "$match" "dvd$link_num"
[ "$ID_CDROM_DVD_R" -o "$ID_CDROM_DVD_RW" -o "$ID_CDROM_DVD_RAM" ] && \
- write_rule "$match" "dvdrw$link_num"
+ write_rule "$match" "dvdrw$link_num"
echo >> $RULES_FILE
unlock_rules_file
diff --git a/src/extras/rule_generator/write_net_rules b/src/extras/rule_generator/write_net_rules
index 437979241f..bcea4b09dc 100644
--- a/src/extras/rule_generator/write_net_rules
+++ b/src/extras/rule_generator/write_net_rules
@@ -33,9 +33,9 @@
# debug, if UDEV_LOG=<debug>
if [ -n "$UDEV_LOG" ]; then
- if [ "$UDEV_LOG" -ge 7 ]; then
- set -x
- fi
+ if [ "$UDEV_LOG" -ge 7 ]; then
+ set -x
+ fi
fi
RULES_FILE='/etc/udev/rules.d/70-persistent-net.rules'
@@ -43,42 +43,42 @@ RULES_FILE='/etc/udev/rules.d/70-persistent-net.rules'
. /lib/udev/rule_generator.functions
interface_name_taken() {
- local value="$(find_all_rules 'NAME=' $INTERFACE)"
- if [ "$value" ]; then
- return 0
- else
- return 1
- fi
+ local value="$(find_all_rules 'NAME=' $INTERFACE)"
+ if [ "$value" ]; then
+ return 0
+ else
+ return 1
+ fi
}
find_next_available() {
- raw_find_next_available "$(find_all_rules 'NAME=' "$1")"
+ raw_find_next_available "$(find_all_rules 'NAME=' "$1")"
}
write_rule() {
- local match="$1"
- local name="$2"
- local comment="$3"
-
- {
- if [ "$PRINT_HEADER" ]; then
- PRINT_HEADER=
- echo "# This file was automatically generated by the $0"
- echo "# program, run by the persistent-net-generator.rules rules file."
- echo "#"
- echo "# You can modify it, as long as you keep each rule on a single"
- echo "# line, and change only the value of the NAME= key."
- fi
-
- echo ""
- [ "$comment" ] && echo "# $comment"
- echo "SUBSYSTEM==\"net\", ACTION==\"add\"$match, NAME=\"$name\""
- } >> $RULES_FILE
+ local match="$1"
+ local name="$2"
+ local comment="$3"
+
+ {
+ if [ "$PRINT_HEADER" ]; then
+ PRINT_HEADER=
+ echo "# This file was automatically generated by the $0"
+ echo "# program, run by the persistent-net-generator.rules rules file."
+ echo "#"
+ echo "# You can modify it, as long as you keep each rule on a single"
+ echo "# line, and change only the value of the NAME= key."
+ fi
+
+ echo ""
+ [ "$comment" ] && echo "# $comment"
+ echo "SUBSYSTEM==\"net\", ACTION==\"add\"$match, NAME=\"$name\""
+ } >> $RULES_FILE
}
if [ -z "$INTERFACE" ]; then
- echo "missing \$INTERFACE" >&2
- exit 1
+ echo "missing \$INTERFACE" >&2
+ exit 1
fi
# Prevent concurrent processes from modifying the file at the same time.
@@ -89,49 +89,49 @@ choose_rules_file
# the DRIVERS key is needed to not match bridges and VLAN sub-interfaces
if [ "$MATCHADDR" ]; then
- match="$match, DRIVERS==\"?*\", ATTR{address}==\"$MATCHADDR\""
+ match="$match, DRIVERS==\"?*\", ATTR{address}==\"$MATCHADDR\""
fi
if [ "$MATCHDRV" ]; then
- match="$match, DRIVERS==\"$MATCHDRV\""
+ match="$match, DRIVERS==\"$MATCHDRV\""
fi
if [ "$MATCHDEVID" ]; then
- match="$match, ATTR{dev_id}==\"$MATCHDEVID\""
+ match="$match, ATTR{dev_id}==\"$MATCHDEVID\""
fi
if [ "$MATCHID" ]; then
- match="$match, KERNELS==\"$MATCHID\""
+ match="$match, KERNELS==\"$MATCHID\""
fi
if [ "$MATCHIFTYPE" ]; then
- match="$match, ATTR{type}==\"$MATCHIFTYPE\""
+ match="$match, ATTR{type}==\"$MATCHIFTYPE\""
fi
if [ -z "$match" ]; then
- echo "missing valid match" >&2
- unlock_rules_file
- exit 1
+ echo "missing valid match" >&2
+ unlock_rules_file
+ exit 1
fi
basename=${INTERFACE%%[0-9]*}
match="$match, KERNEL==\"$basename*\""
if [ "$INTERFACE_NAME" ]; then
- # external tools may request a custom name
- COMMENT="$COMMENT (custom name provided by external tool)"
- if [ "$INTERFACE_NAME" != "$INTERFACE" ]; then
- INTERFACE=$INTERFACE_NAME;
- echo "INTERFACE_NEW=$INTERFACE"
- fi
+ # external tools may request a custom name
+ COMMENT="$COMMENT (custom name provided by external tool)"
+ if [ "$INTERFACE_NAME" != "$INTERFACE" ]; then
+ INTERFACE=$INTERFACE_NAME;
+ echo "INTERFACE_NEW=$INTERFACE"
+ fi
else
- # if a rule using the current name already exists, find a new name
- if interface_name_taken; then
- INTERFACE="$basename$(find_next_available "$basename[0-9]*")"
- # prevent INTERFACE from being "eth" instead of "eth0"
- [ "$INTERFACE" = "${INTERFACE%%[ \[\]0-9]*}" ] && INTERFACE=${INTERFACE}0
- echo "INTERFACE_NEW=$INTERFACE"
- fi
+ # if a rule using the current name already exists, find a new name
+ if interface_name_taken; then
+ INTERFACE="$basename$(find_next_available "$basename[0-9]*")"
+ # prevent INTERFACE from being "eth" instead of "eth0"
+ [ "$INTERFACE" = "${INTERFACE%%[ \[\]0-9]*}" ] && INTERFACE=${INTERFACE}0
+ echo "INTERFACE_NEW=$INTERFACE"
+ fi
fi
write_rule "$match" "$INTERFACE" "$COMMENT"