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