summaryrefslogtreecommitdiff
path: root/package/base-files/files/lib/preinit/10_indicate_preinit
blob: 206243390ebf3ecfd00d94d6478f14507311cae3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/bin/sh
# Copyright (C) 2006 OpenWrt.org
# Copyright (C) 2010 Vertical Communications

preinit_ip_config() {
	grep -q "$1" /proc/net/dev || return

	ip link set dev $1 up
	ip -4 address add $pi_ip/$pi_netmask broadcast $pi_broadcast dev $1
}

preinit_config_board() {
	/bin/board_detect /tmp/board.json

	[ -f "/tmp/board.json" ] || return

	. /usr/share/libubox/jshn.sh

	json_init
	json_load "$(cat /tmp/board.json)"

	json_select network
		json_select "lan"
			json_get_vars ifname
		json_select ..
	json_select ..

	[ -n "$ifname" ] || return

	# only use the first one
	ifname=${ifname%% *}

	# trim any vlan ids
	ifname=${ifname%\.*}

	preinit_ip_config $ifname
}

preinit_ip() {
	# if the preinit interface isn't specified and ifname is set in
	# preinit.arch use that interface
	if [ -z "$pi_ifname" ]; then
		pi_ifname=$ifname
	fi

	if [ -n "$pi_ifname" ]; then
		preinit_ip_config $pi_ifname
	elif [ -d "/etc/board.d/" ]; then
		preinit_config_board
	fi
}

preinit_ip_deconfig() {
	[ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && {
		ip -4 address flush dev $pi_ifname
		ip link set dev $pi_ifname down
	}
}

preinit_net_echo() {
	[ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && {
		{
			[ "$pi_preinit_net_messages" = "y" ] || {
				[ "$pi_failsafe_net_message" = "true" ] &&
					[ "$pi_preinit_no_failsafe_netmsg" != "y" ]
			}
		} && netmsg $pi_broadcast "$1"
	}
}

preinit_echo() {
	preinit_net_echo $1
	echo $1
}

pi_indicate_preinit() {
	preinit_net_echo "Doing Lede Preinit\n"
	set_state preinit
}

boot_hook_add preinit_main preinit_ip
boot_hook_add preinit_main pi_indicate_preinit