10_indicate_preinit 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #!/bin/sh
  2. # Copyright (C) 2006 OpenWrt.org
  3. # Copyright (C) 2010 Vertical Communications
  4. preinit_ip_config() {
  5. local netdev vid
  6. netdev=${1%\.*}
  7. vid=${1#*\.}
  8. if [ "$vid" = "$netdev" ]; then
  9. vid=
  10. fi
  11. grep -q "$netdev" /proc/net/dev || return
  12. if [ -n "$vid" ]; then
  13. ip link add link $netdev name $1 type vlan id $vid
  14. fi
  15. ip link set dev $netdev up
  16. ip -4 address add $pi_ip/$pi_netmask broadcast $pi_broadcast dev $1
  17. }
  18. preinit_config_board() {
  19. /bin/board_detect /tmp/board.json
  20. [ -f "/tmp/board.json" ] || return
  21. . /usr/share/libubox/jshn.sh
  22. json_init
  23. json_load "$(cat /tmp/board.json)"
  24. json_select network
  25. json_select "lan"
  26. json_get_vars ifname
  27. json_select ..
  28. json_select ..
  29. [ -n "$ifname" ] || return
  30. # only use the first one
  31. ifname=${ifname%% *}
  32. # trim any vlan ids
  33. ifname=${ifname%\.*}
  34. preinit_ip_config $ifname
  35. }
  36. preinit_ip() {
  37. # if the preinit interface isn't specified and ifname is set in
  38. # preinit.arch use that interface
  39. if [ -z "$pi_ifname" ]; then
  40. pi_ifname=$ifname
  41. fi
  42. if [ -n "$pi_ifname" ]; then
  43. preinit_ip_config $pi_ifname
  44. elif [ -d "/etc/board.d/" ]; then
  45. preinit_config_board
  46. fi
  47. }
  48. preinit_ip_deconfig() {
  49. [ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && {
  50. local netdev vid
  51. netdev=${pi_ifname%\.*}
  52. vid=${pi_ifname#*\.}
  53. if [ "$vid" = "$netdev" ]; then
  54. vid=
  55. fi
  56. ip -4 address flush dev $pi_ifname
  57. ip link set dev $netdev down
  58. if [ -n "$vid" ]; then
  59. ip link delete $pi_ifname
  60. fi
  61. }
  62. }
  63. preinit_net_echo() {
  64. [ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && {
  65. {
  66. [ "$pi_preinit_net_messages" = "y" ] || {
  67. [ "$pi_failsafe_net_message" = "true" ] &&
  68. [ "$pi_preinit_no_failsafe_netmsg" != "y" ]
  69. }
  70. } && netmsg $pi_broadcast "$1"
  71. }
  72. }
  73. preinit_echo() {
  74. preinit_net_echo $1
  75. echo $1
  76. }
  77. pi_indicate_preinit() {
  78. preinit_net_echo "Doing Lede Preinit\n"
  79. set_state preinit
  80. }
  81. boot_hook_add preinit_main preinit_ip
  82. boot_hook_add preinit_main pi_indicate_preinit