1 # Copyright (C) 2006 OpenWrt.org
2 # Copyright (C) 2010 Vertical Communications
10 if [ "$vid" = "$netdev" ]; then
14 grep -q "$netdev" /proc/net/dev || return
16 if [ -n "$vid" ]; then
17 ip link add link $netdev name $1 type vlan id $vid
20 ip link set dev $netdev up
21 if [ -n "$vid" ]; then
24 ip -4 address add $pi_ip/$pi_netmask broadcast $pi_broadcast dev $1
27 preinit_config_switch() {
28 local role roles ports device enable reset
36 json_get_vars enable reset
38 if [ "$reset" -eq "1" ]; then
39 swconfig dev $name set reset
41 swconfig dev $name set enable_vlan $enable
43 if json_is_a roles array; then
44 json_get_keys roles roles
47 for role in $roles; do
49 json_get_vars ports device
52 if [ "$device" = "$lan_if" ]; then
53 swconfig dev $name vlan $role set ports "$ports"
60 swconfig dev $name set apply
66 preinit_config_port() {
72 [ -d "/sys/devices/$path/net" ] || return
73 original="$(ls "/sys/devices/$path/net" | head -1)"
75 [ "$netdev" = "$original" ] && return
77 ip link set "$original" name "$netdev"
80 preinit_config_board() {
81 /bin/board_detect /tmp/board.json
83 [ -f "/tmp/board.json" ] || return
85 . /usr/share/libubox/jshn.sh
88 json_load "$(cat /tmp/board.json)"
90 # Find the current highest eth*
91 max_eth=$(grep -o '^ *eth[0-9]*:' /proc/net/dev | tr -dc '[0-9]\n' | sort -n | tail -1)
92 # Find and move netdevs using eth*s we are configuring
93 json_get_keys keys "network_device"
94 for netdev in $keys; do
95 json_select "network_device"
97 json_get_vars path path
98 if [ -n "$path" -a -h "/sys/class/net/$netdev" ]; then
99 ip link set "$netdev" down
100 ip link set "$netdev" name eth$((++max_eth))
106 # Move interfaces by path to their netdev name
107 json_get_keys keys "network_device"
108 for netdev in $keys; do
109 json_select "network_device"
110 json_select "$netdev"
111 json_get_vars path path
112 [ -n "$path" ] && preinit_config_port "$netdev" "$path"
120 json_get_values ports ports
124 [ -n "$device" -o -n "$ports" ] || return
126 # swconfig uses $device and DSA uses ports
131 # only use the first one
134 if [ -x /sbin/swconfig ]; then
135 # configure the switch, if present
137 json_get_keys keys switch
139 preinit_config_switch $key $ifname
144 # trim any vlan modifiers like :t
150 preinit_ip_config $pi_ifname
154 [ "$pi_preinit_no_failsafe" = "y" ] && return
156 # if the preinit interface isn't specified and ifname is set in
157 # preinit.arch use that interface
158 if [ -z "$pi_ifname" ]; then
162 if [ -n "$pi_ifname" ]; then
163 preinit_ip_config $pi_ifname
164 elif [ -d "/etc/board.d/" ]; then
168 preinit_net_echo "Doing OpenWrt Preinit\n"
171 preinit_ip_deconfig() {
172 [ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && {
175 netdev=${pi_ifname%\.*}
178 if [ "$vid" = "$netdev" ]; then
182 ip -4 address flush dev $pi_ifname
183 ip link set dev $netdev down
185 if [ -n "$vid" ]; then
186 ip link delete $pi_ifname
192 [ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && {
194 [ "$pi_preinit_net_messages" = "y" ] || {
195 [ "$pi_failsafe_net_message" = "true" ] &&
196 [ "$pi_preinit_no_failsafe_netmsg" != "y" ]
198 } && netmsg $pi_broadcast "$1"
202 pi_indicate_preinit() {
206 boot_hook_add preinit_main preinit_ip
207 boot_hook_add preinit_main pi_indicate_preinit