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.

80 lines
1.6 KiB

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