]> git.proxmox.com Git - mirror_iproute2.git/blame - ip/ifcfg
man: tc-taprio.8: fix syntax error
[mirror_iproute2.git] / ip / ifcfg
CommitLineData
a8b970d7 1#! /bin/sh
6054c1eb 2# SPDX-License-Identifier: GPL-2.0
aba5acdf
SH
3
4CheckForwarding () {
5 local sbase fwd
6 sbase=/proc/sys/net/ipv4/conf
7 fwd=0
8 if [ -d $sbase ]; then
9 for dir in $sbase/*/forwarding; do
a8b970d7 10 fwd=$(( fwd + $(cat "$dir") ))
aba5acdf
SH
11 done
12 else
13 fwd=2
14 fi
15 return $fwd
16}
17
18RestartRDISC () {
19 killall -HUP rdisc || rdisc -fs
20}
21
22ABCMaskLen () {
23 local class;
24
25 class=${1%%.*}
26 if [ "$1" = "" -o $class -eq 0 -o $class -ge 224 ]; then return 0
27 elif [ $class -ge 224 ]; then return 0
28 elif [ $class -ge 192 ]; then return 24
29 elif [ $class -ge 128 ]; then return 16
30 else return 8; fi
31}
32
33label="label $1"
34ldev="$1"
35dev=${1%:*}
36if [ "$dev" = "" -o "$1" = "help" ]; then
37 echo "Usage: ifcfg DEV [[add|del [ADDR[/LEN]] [PEER] | stop]" 1>&2
38 echo " add - add new address" 1>&2
39 echo " del - delete address" 1>&2
40 echo " stop - completely disable IP" 1>&2
41 exit 1
42fi
43shift
44
45CheckForwarding
46fwd=$?
47if [ $fwd -ne 0 ]; then
48 echo "Forwarding is ON or its state is unknown ($fwd). OK, No RDISC." 1>&2
49fi
50
51
52deleting=0
53case "$1" in
54add) shift ;;
55stop)
56 if [ "$ldev" != "$dev" ]; then
57 echo "Cannot stop alias $ldev" 1>&2
58 exit 1;
59 fi
60 ip -4 addr flush dev $dev $label || exit 1
61 if [ $fwd -eq 0 ]; then RestartRDISC; fi
62 exit 0 ;;
63del*)
64 deleting=1; shift ;;
65*)
66esac
67
68ipaddr=
69pfxlen=
70if [ "$1" != "" ]; then
71 ipaddr=${1%/*}
72 if [ "$1" != "$ipaddr" ]; then
73 pfxlen=${1#*/}
74 fi
75 if [ "$ipaddr" = "" ]; then
76 echo "$1 is bad IP address." 1>&2
77 exit 1
78 fi
79fi
80shift
81
82peer=$1
83if [ "$peer" != "" ]; then
84 if [ "$pfxlen" != "" -a "$pfxlen" != "32" ]; then
85 echo "Peer address with non-trivial netmask." 1>&2
86 exit 1
87 fi
88 pfx="$ipaddr peer $peer"
89else
58bb642f
SH
90 if [ "$ipaddr" = "" ]; then
91 echo "Missing IP address argument." 1>&2
92 exit 1
93 fi
aba5acdf
SH
94 if [ "$pfxlen" = "" ]; then
95 ABCMaskLen $ipaddr
96 pfxlen=$?
97 fi
98 pfx="$ipaddr/$pfxlen"
99fi
100
101if [ "$ldev" = "$dev" -a "$ipaddr" != "" ]; then
102 label=
103fi
104
105if [ $deleting -ne 0 ]; then
106 ip addr del $pfx dev $dev $label || exit 1
107 if [ $fwd -eq 0 ]; then RestartRDISC; fi
108 exit 0
109fi
110
111
112if ! ip link set up dev $dev ; then
113 echo "Error: cannot enable interface $dev." 1>&2
114 exit 1
115fi
116if [ "$ipaddr" = "" ]; then exit 0; fi
117
118if ! arping -q -c 2 -w 3 -D -I $dev $ipaddr ; then
119 echo "Error: some host already uses address $ipaddr on $dev." 1>&2
120 exit 1
121fi
122
123if ! ip address add $pfx brd + dev $dev $label; then
124 echo "Error: failed to add $pfx on $dev." 1>&2
125 exit 1
126fi
127
128arping -q -A -c 1 -I $dev $ipaddr
129noarp=$?
130( sleep 2 ;
a8b970d7 131 arping -q -U -c 1 -I $dev $ipaddr ) >/dev/null 2>&1 </dev/null &
aba5acdf 132
a8b970d7
MF
133ip route add unreachable 224.0.0.0/24 >/dev/null 2>&1
134ip route add unreachable 255.255.255.255 >/dev/null 2>&1
1e3197e0 135if [ "`ip link ls $dev | grep -c MULTICAST`" -ge 1 ]; then
a8b970d7 136 ip route add 224.0.0.0/4 dev $dev scope global >/dev/null 2>&1
aba5acdf
SH
137fi
138
139if [ $fwd -eq 0 ]; then
140 if [ $noarp -eq 0 ]; then
141 ip ro append default dev $dev metric 30000 scope global
142 elif [ "$peer" != "" ]; then
143 if ping -q -c 2 -w 4 $peer ; then
144 ip ro append default via $peer dev $dev metric 30001
145 fi
146 fi
147 RestartRDISC
148fi
149
150exit 0