mirror of the now-defunct rocklinux.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
1.7 KiB

  1. #!/bin/bash
  2. rocknet_debug=0
  3. rocknet_base="/etc/network"
  4. rocknet_tmp_base="/var/run/rocknet"
  5. [ -d $rocknet_tmp_base ] || mkdir -p $rocknet_tmp_base
  6. unset code_snipplets_idx code_snipplets_dat code_snipplets_counter
  7. declare -a code_snipplets_idx='()'
  8. declare -a code_snipplets_dat='()'
  9. code_snipplets_counter=0
  10. lineno=0
  11. ignore=0
  12. if [ "$3" != "up" -a "$3" != "down" ]; then
  13. echo "Usage: $0 { profile | default } { interface | auto } { up | down }"
  14. exit 1
  15. fi
  16. profile=$1
  17. interface=$2
  18. mode=$3
  19. #
  20. # addcode mode major-priority minor-priority code1
  21. #
  22. addcode() {
  23. [ "$mode" != "$1" ] && return
  24. [ "$ignore" -gt 0 ] && return
  25. if [ "$1" = "up" ]; then udo="+"; else udo="-"; fi
  26. code_snipplets_idx[code_snipplets_counter]="`
  27. printf '%04d.%04d.%04d' $((5000$udo$2)) $((5000$udo$lineno)) \
  28. $((5000$udo$3))` $code_snipplets_counter"
  29. code_snipplets_dat[code_snipplets_counter]="$4"
  30. (( code_snipplets_counter++ ))
  31. }
  32. #
  33. # isfirst unique-id
  34. #
  35. isfirst() {
  36. [ "$ignore" -gt 0 ] && return 0
  37. eval "\$isfirst_$1"
  38. eval "isfirst_$1='return 1'"
  39. return 0
  40. }
  41. #
  42. # error error-message
  43. #
  44. error() {
  45. echo "$*"
  46. }
  47. for x in "$rocknet_base"/modules/*.sh; do . "$x"; done
  48. while read cmd para
  49. do
  50. (( lineno++ ))
  51. if [ -n "$cmd" ]; then
  52. cmd="${cmd//-/_}"
  53. para="$( echo "$para" | sed 's,[\*\?],\\&,g' )"
  54. if declare -f public_$cmd > /dev/null
  55. then
  56. public_$cmd $para
  57. else
  58. error "Unknown statement in config file: $cmd"
  59. fi
  60. fi
  61. done < <( sed 's,\(^\|[ \t]\)#.*$,,' < "$rocknet_base"/config )
  62. while read id1 id2; do
  63. if [ "$rocknet_debug" = 1 ]; then
  64. echo ">> $id1 -> $id2: ${code_snipplets_dat[id2]}"
  65. fi
  66. eval "${code_snipplets_dat[id2]}"
  67. done < <(
  68. for x in "${code_snipplets_idx[@]}"; do echo "$x"
  69. done | sort
  70. )