Revision fc443c7a common.sh
b/common.sh | ||
---|---|---|
22 | 22 |
|
23 | 23 |
} |
24 | 24 |
|
25 |
function delete_neighbor_proxy { |
|
26 |
|
|
27 |
get_uplink $LINK "-6" |
|
28 |
get_eui64 $MAC $NETWORK_SUBNET6 |
|
29 |
if [ -n "$EUI64" -a -n "$UPLINK" ]; then |
|
30 |
$SNF_NETWORK_LOG $0 "* ip -6 neigh del proxy $EUI64 dev $UPLINK" |
|
31 |
ip -6 neigh del proxy $EUI64 dev $UPLINK |
|
32 |
fi |
|
33 |
|
|
34 |
} |
|
35 |
|
|
36 | 25 |
function clear_routed_setup_firewall { |
37 | 26 |
|
38 | 27 |
for oldchain in protected unprotected limited; do |
... | ... | |
84 | 73 |
function send_garp { |
85 | 74 |
|
86 | 75 |
# Send GARP from host to upstream router |
87 |
get_uplink $TABLE |
|
88 | 76 |
echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind |
89 | 77 |
# $SNF_NETWORK_LOG $0 "arping -c3 -I $UPLINK -U $IP" |
90 | 78 |
# arping -c3 -I $UPLINK -U $IP |
91 |
$SNF_NETWORK_LOG $0 "arpsend -U -c 1 -i $IP $UPLINK" |
|
79 |
$SNF_NETWORK_LOG $0 "* arpsend -U -c 1 -i $IP $UPLINK"
|
|
92 | 80 |
arpsend -U -c 1 -i $IP $UPLINK |
93 | 81 |
echo 0 > /proc/sys/net/ipv4/ip_nonlocal_bind |
94 | 82 |
|
... | ... | |
96 | 84 |
|
97 | 85 |
function routed_setup_ipv6 { |
98 | 86 |
# Add a routing entry for the eui-64 |
99 |
get_uplink $TABLE "-6" |
|
100 |
get_eui64 $MAC $NETWORK_SUBNET6 |
|
101 |
|
|
102 |
if [ -z "$EUI64" -o -z "$TABLE" -o -z "$INTERFACE" -o -z "$UPLINK" ] |
|
87 |
if [ -z "$EUI64" -o -z "$TABLE" -o -z "$INTERFACE" -o -z "$UPLINK6" ] |
|
103 | 88 |
then |
104 | 89 |
return |
105 | 90 |
fi |
106 | 91 |
|
107 | 92 |
ip -6 rule add dev $INTERFACE table $TABLE |
108 | 93 |
ip -6 ro replace $EUI64/128 dev $INTERFACE table $TABLE |
109 |
ip -6 neigh add proxy $EUI64 dev $UPLINK |
|
94 |
ip -6 neigh add proxy $EUI64 dev $UPLINK6
|
|
110 | 95 |
|
111 | 96 |
# disable proxy NDP since we're handling this on userspace |
112 | 97 |
# this should be the default, but better safe than sorry |
113 | 98 |
echo 0 > /proc/sys/net/ipv6/conf/$INTERFACE/proxy_ndp |
114 | 99 |
|
115 | 100 |
# Send Unsolicited Neighbor Advertisement |
116 |
$SNF_NETWORK_LOG $0 "ndsend $EUI64 $UPLINK" |
|
117 |
ndsend $EUI64 $UPLINK |
|
101 |
$SNF_NETWORK_LOG $0 "* ndsend $EUI64 $UPLINK6" |
|
102 |
ndsend $EUI64 $UPLINK6 |
|
103 |
|
|
104 |
} |
|
105 |
|
|
106 |
function delete_neighbor_proxy { |
|
107 |
|
|
108 |
if [ -n "$EUI64" -a -n "$UPLINK6" ]; then |
|
109 |
$SNF_NETWORK_LOG $0 "* ip -6 neigh del proxy $EUI64 dev $UPLINK6" |
|
110 |
ip -6 neigh del proxy $EUI64 dev $UPLINK6 |
|
111 |
fi |
|
118 | 112 |
|
119 | 113 |
} |
120 | 114 |
|
... | ... | |
196 | 190 |
SUBNET=$NETWORK_SUBNET |
197 | 191 |
GATEWAY6=$NETWORK_GATEWAY6 |
198 | 192 |
SUBNET6=$NETWORK_SUBNET6 |
199 |
EUI64=$($MAC2EUI64 $MAC $NETWORK_SUBNET6 2>/dev/null)
|
|
193 |
EUI64=$EUI64
|
|
200 | 194 |
EOF |
201 | 195 |
|
202 | 196 |
} |
... | ... | |
204 | 198 |
function get_uplink { |
205 | 199 |
|
206 | 200 |
local table=$1 |
207 |
local version=$2 |
|
208 |
UPLINK=$(ip $version route list table "$table" | grep "default via" | awk '{print $5}') |
|
209 |
$SNF_NETWORK_LOG $0 "* uplink for table $table is $UPLINK" |
|
201 |
|
|
202 |
UPLINK=$(ip route list table "$table" | grep "default via" | awk '{print $5}') |
|
203 |
UPLINK6=$(ip -6 route list table "$table" | grep "default via" | awk '{print $5}') |
|
204 |
$SNF_NETWORK_LOG $0 "* Table $table: uplink -> $UPLINK, uplink6 -> $UPLINK6" |
|
210 | 205 |
|
211 | 206 |
} |
212 | 207 |
|
... | ... | |
214 | 209 |
# we caclulate it based on the NIC's MAC and the IPv6 subnet (if any) |
215 | 210 |
# first argument MAC second IPv6 subnet |
216 | 211 |
# Changes global value EUI64 |
217 |
get_eui64 () {
|
|
212 |
function get_eui64 {
|
|
218 | 213 |
|
219 | 214 |
local mac=$1 |
220 | 215 |
local prefix=$2 |
... | ... | |
223 | 218 |
EUI64= |
224 | 219 |
else |
225 | 220 |
EUI64=$($MAC2EUI64 $mac $prefix) |
226 |
$SNF_NETWORK_LOG $0 "* eui64 for $mac inside $prefix is $EUI64"
|
|
221 |
$SNF_NETWORK_LOG $0 "* $mac + $prefix -> $EUI64"
|
|
227 | 222 |
fi |
228 | 223 |
|
229 | 224 |
} |
... | ... | |
233 | 228 |
|
234 | 229 |
# ommit zone statement |
235 | 230 |
# nsupdate will attempt determine the correct zone to update based on the rest of the input |
236 |
send_command () {
|
|
231 |
function send_command {
|
|
237 | 232 |
|
238 | 233 |
local command="$1" |
239 | 234 |
$SNF_NETWORK_LOG $0 "* $command" |
... | ... | |
246 | 241 |
} |
247 | 242 |
|
248 | 243 |
|
249 |
update_arecord () {
|
|
244 |
function update_arecord {
|
|
250 | 245 |
|
251 | 246 |
local action=$1 |
252 | 247 |
local command= |
... | ... | |
258 | 253 |
} |
259 | 254 |
|
260 | 255 |
|
261 |
update_aaaarecord () {
|
|
256 |
function update_aaaarecord {
|
|
262 | 257 |
|
263 | 258 |
local action=$1 |
264 | 259 |
local command= |
... | ... | |
270 | 265 |
} |
271 | 266 |
|
272 | 267 |
|
273 |
update_ptrrecord () {
|
|
268 |
function update_ptrrecord {
|
|
274 | 269 |
|
275 | 270 |
local action=$1 |
276 | 271 |
local command= |
... | ... | |
281 | 276 |
|
282 | 277 |
} |
283 | 278 |
|
284 |
update_ptr6record () {
|
|
279 |
function update_ptr6record {
|
|
285 | 280 |
|
286 | 281 |
local action=$1 |
287 | 282 |
local command= |
... | ... | |
292 | 287 |
|
293 | 288 |
} |
294 | 289 |
|
295 |
update_all () {
|
|
290 |
function update_all {
|
|
296 | 291 |
|
297 | 292 |
local action=$1 |
293 |
$SNF_NETWORK_LOG $0 "Update dns for $GANETI_INSTANCE_NAME $IP $EUI64" |
|
298 | 294 |
update_arecord $action |
299 | 295 |
update_aaaarecord $action |
300 | 296 |
update_ptrrecord $action |
... | ... | |
310 | 306 |
# R6REC=1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0.c.f.f.2.8.4.6.0.1.0.0.2.ip6.arpa |
311 | 307 |
# R6ZONE=1.0.0.0.c.f.f.2.8.4.6.0.1.0.0.2.ip6.arpa |
312 | 308 |
# R6LPART=1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0. |
313 |
get_rev6_info () {
|
|
309 |
function get_rev6_info {
|
|
314 | 310 |
|
315 | 311 |
local eui64=$1 |
316 | 312 |
if [ -z "$eui64" ]; then |
... | ... | |
329 | 325 |
# lets assume IP=203.0.113.1 |
330 | 326 |
# RZONE="113.0.203.in-add.arpa" |
331 | 327 |
# RLPART="1" |
332 |
get_rev4_info () {
|
|
328 |
function get_rev4_info {
|
|
333 | 329 |
|
334 | 330 |
local ip=$1 |
335 | 331 |
if [ -z "$ip" ]; then |
... | ... | |
355 | 351 |
# www.google.com has address 173.194.113.112 |
356 | 352 |
# www.google.com has address 173.194.113.113 |
357 | 353 |
# www.google.com has IPv6 address 2a00:1450:4001:80b::1012 |
358 |
query_dns () {
|
|
354 |
function query_dns {
|
|
359 | 355 |
|
360 | 356 |
HOSTQ="host -s -R 3 -W 3" |
361 | 357 |
HOST_IP_ALL=$($HOSTQ $GANETI_INSTANCE_NAME.$FZONE $SERVER | sed -n 's/.*has address //p') |
362 | 358 |
HOST_IP6_ALL=$($HOSTQ $GANETI_INSTANCE_NAME.$FZONE $SERVER | sed -n 's/.*has IPv6 address //p') |
363 | 359 |
|
364 | 360 |
} |
361 |
|
|
362 |
# Use environment variables to calculate desired info |
|
363 |
# IP, MAC, LINK, TABLE, BRIDGE, |
|
364 |
# NETWORK_SUBNET, NETWORK_GATEWAY, NETWORK_SUBNET6, NETWORK_GATEWAY6 |
|
365 |
function get_info { |
|
366 |
|
|
367 |
$SNF_NETWORK_LOG $0 "Getting info for $INTERFACE of $GANETI_INSTANCE_NAME" |
|
368 |
get_rev4_info $IP |
|
369 |
get_eui64 $MAC $NETWORK_SUBNET6 |
|
370 |
get_rev6_info $EUI64 |
|
371 |
get_uplink $TABLE |
|
372 |
|
|
373 |
} |
Also available in: Unified diff