base-files: allow failsafe to configure vlans
[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 local netdev vid
7
8 netdev=${1%\.*}
9 vid=${1#*\.}
10
11 if [ "$vid" = "$netdev" ]; then
12 vid=
13 fi
14
15 grep -q "$netdev" /proc/net/dev || return
16
17 if [ -n "$vid" ]; then
18 ip link add link $netdev name $1 type vlan id $vid
19 fi
20
21 ip link set dev $netdev up
22 ip -4 address add $pi_ip/$pi_netmask broadcast $pi_broadcast dev $1
23 }
24
25 preinit_config_board() {
26 /bin/board_detect /tmp/board.json
27
28 [ -f "/tmp/board.json" ] || return
29
30 . /usr/share/libubox/jshn.sh
31
32 json_init
33 json_load "$(cat /tmp/board.json)"
34
35 json_select network
36 json_select "lan"
37 json_get_vars ifname
38 json_select ..
39 json_select ..
40
41 [ -n "$ifname" ] || return
42
43 # only use the first one
44 ifname=${ifname%% *}
45
46 # trim any vlan ids
47 ifname=${ifname%\.*}
48
49 preinit_ip_config $ifname
50 }
51
52 preinit_ip() {
53 # if the preinit interface isn't specified and ifname is set in
54 # preinit.arch use that interface
55 if [ -z "$pi_ifname" ]; then
56 pi_ifname=$ifname
57 fi
58
59 if [ -n "$pi_ifname" ]; then
60 preinit_ip_config $pi_ifname
61 elif [ -d "/etc/board.d/" ]; then
62 preinit_config_board
63 fi
64 }
65
66 preinit_ip_deconfig() {
67 [ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && {
68 local netdev vid
69
70 netdev=${pi_ifname%\.*}
71 vid=${pi_ifname#*\.}
72
73 if [ "$vid" = "$netdev" ]; then
74 vid=
75 fi
76
77 ip -4 address flush dev $pi_ifname
78 ip link set dev $netdev down
79
80 if [ -n "$vid" ]; then
81 ip link delete $pi_ifname
82 fi
83 }
84 }
85
86 preinit_net_echo() {
87 [ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && {
88 {
89 [ "$pi_preinit_net_messages" = "y" ] || {
90 [ "$pi_failsafe_net_message" = "true" ] &&
91 [ "$pi_preinit_no_failsafe_netmsg" != "y" ]
92 }
93 } && netmsg $pi_broadcast "$1"
94 }
95 }
96
97 preinit_echo() {
98 preinit_net_echo $1
99 echo $1
100 }
101
102 pi_indicate_preinit() {
103 preinit_net_echo "Doing Lede Preinit\n"
104 set_state preinit
105 }
106
107 boot_hook_add preinit_main preinit_ip
108 boot_hook_add preinit_main pi_indicate_preinit