]>
Commit | Line | Data |
---|---|---|
12de71be | 1 | #!/bin/sh |
b0443108 | 2 | # |
ec8b15cb | 3 | # $Id$ |
b0443108 | 4 | # |
625871bd ER |
5 | # Adds all addresses of device. |
6 | # Called from ifup-post. | |
7742e157 | 7 | |
de1fc6ce JR |
8 | # Add all addresses |
9 | for IP_ADDR in $IPADDR_ALIASES; do | |
5e6dfc29 JR |
10 | [ -z "$IP_ADDR" ] && continue |
11 | # Be sure that primary address is added | |
12 | if [ "$IP_ADDR" = "$IP4ADDR" -o "$IP_ADDR" = "$IP6ADDR" ]; then | |
a51d5138 | 13 | if (ip addr show dev $DEVICE | grep -qE "[[:space:]]${IP_ADDR}[[:space:]]"); then |
5e6dfc29 JR |
14 | continue |
15 | fi | |
de1fc6ce | 16 | fi |
5e6dfc29 | 17 | if is_yes "${IPV4_NETWORKING}"; then |
2f6bb78f | 18 | ip -4 addr add ${IP_ADDR} dev ${DEVICE} brd + |
de1fc6ce | 19 | fi |
f3002e12 JK |
20 | done |
21 | ||
de1fc6ce | 22 | for IP_ADDR in $IPV6_ADDR; do |
5e6dfc29 JR |
23 | [ -z "$IP_ADDR" ] && continue |
24 | # Be sure that primary address is added | |
25 | if [ "$IP_ADDR" = "$IP4ADDR" -o "$IP_ADDR" = "$IP6ADDR" ]; then | |
a51d5138 | 26 | if (ip addr show dev $DEVICE | grep -qE "[[:space:]]${IP_ADDR}[[:space:]]"); then |
5e6dfc29 JR |
27 | continue |
28 | fi | |
de1fc6ce | 29 | fi |
5e6dfc29 JR |
30 | # Check for IPv6 address |
31 | if (echo $IP_ADDR | grep -q ":"); then | |
32 | if is_yes "${IPV6_NETWORKING}"; then | |
2f6bb78f | 33 | ip -6 addr add ${IP_ADDR} dev ${DEVICE} |
5e6dfc29 JR |
34 | fi |
35 | elif is_yes "${IPV4_NETWORKING}"; then | |
2f6bb78f | 36 | ip -4 addr add ${IP_ADDR} dev ${DEVICE} brd + |
74a7f2e4 | 37 | fi |
f3002e12 JK |
38 | done |
39 | ||
13118158 | 40 | for nr in $(awk 'BEGIN { max=0; }; /^IPADDR[0-9]+=/ { s = $0; gsub(/^IPADDR/, "", s); gsub(/=.*/, "", s); if (int(s) > int(max)) { max=s; }; }; END { for(j=1; j<=int(max); j++) print j } ' $CONFIG); do |
5e6dfc29 | 41 | eval IP_ADDR="\$IPADDR${nr}" |
13118158 AM |
42 | [ -z "$IP_ADDR" ] && continue |
43 | ||
5e6dfc29 JR |
44 | eval IP_ADDR_OPT="\$IP_AOPTS${nr}" |
45 | eval IP_ROUTE_OPT="\$IP_ROPTS${nr}" | |
b72b148f | 46 | eval IP_ADDR_LABEL="\$IP_LABEL${nr}" |
5e6dfc29 | 47 | |
5e6dfc29 JR |
48 | # Be sure that primary address is added |
49 | if [ "$IP_ADDR" = "$IP4ADDR" -o "$IP_ADDR" = "$IP6ADDR" ]; then | |
a51d5138 | 50 | if (ip addr show dev $DEVICE | grep -qE "[[:space:]]${IP_ADDR}[[:space:]]"); then |
5e6dfc29 JR |
51 | continue |
52 | fi | |
de1fc6ce | 53 | fi |
5e6dfc29 | 54 | # Check for IPv6 address |
2450b5fc | 55 | if echo $IP_ADDR | grep -q ":"; then |
5e6dfc29 JR |
56 | if is_yes "${IPV6_NETWORKING}"; then |
57 | ip -6 addr add ${IP_ADDR} dev ${DEVICE} ${IP_ADDR_OPT} | |
4cd28431 JR |
58 | if [ -n "${IP_ADDR_LABEL}" ]; then |
59 | ip -6 addrlabel add prefix ${IP_ADDR} dev ${DEVICE} label ${IP_ADDR_LABEL} | |
60 | fi | |
5e6dfc29 JR |
61 | fi |
62 | elif is_yes "${IPV4_NETWORKING}"; then | |
63 | # If broadcast is missing then autocalculate it | |
a51d5138 | 64 | if ! (echo $IP_ADDR_OPT | grep -qE "brd|broadcast"); then |
5e6dfc29 JR |
65 | IP_ADDR_OPT="brd + ${IP_ADDR_OPT}" |
66 | fi | |
67 | ip -4 addr add ${IP_ADDR} dev ${DEVICE} ${IP_ADDR_OPT} | |
de1fc6ce JR |
68 | fi |
69 | done | |
70 | ||
71 | # Setup IPv4-compatible addresses | |
16eb00d9 | 72 | if is_yes "$IPV6_NETWORKING" && [ "$BOOTPROTO6" = "v4compat" ]; then |
5e6dfc29 JR |
73 | # enable automatic tunnels |
74 | ip link set sit0 up | |
de1fc6ce | 75 | |
5e6dfc29 JR |
76 | # add v4compat addresses to device |
77 | for addr in $(ip -4 addr show scope global dev $DEVICE | \ | |
78 | awk '/inet/ { print $2 }' | awk -F"/" '{ print $1 }'); do | |
79 | ip -6 addr add ::$addr dev $DEVICE | |
80 | done | |
5726f160 | 81 | fi |