Revision fc443c7a

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
}
b/kvm-ifdown
7 7
source /usr/lib/snf-network/common.sh
8 8

  
9 9
GANETI_INSTANCE_NAME=$INSTANCE
10
ONLY_LOCAL=$2
11

  
12
if ! $ONLY_LOCAL; then
13
  GLOBAL=globaly
14
fi
10 15

  
11 16
if [ "x$INTERFACE" = "x" ]; then
12 17
  $SNF_NETWORK_LOG $0 "INTERFACE not set. Aborting"
18
  exit 0
13 19
else
14
  $SNF_NETWORK_LOG $0 "Unconfiguring interface $INTERFACE of $GANETI_INSTANCE_NAME"
20
  $SNF_NETWORK_LOG $0 "Unconfiguring $INTERFACE of $GANETI_INSTANCE_NAME $GLOBAL"
15 21
fi
16 22

  
17 23
FROM=FROM${INTERFACE^^}
18 24
TO=TO${INTERFACE^^}
19 25

  
20
ONLY_LOCAL=$2
21 26

  
22 27
if [ "$MODE" = "routed" ]; then
23 28
  TABLE=$LINK
......
27 32
fi
28 33

  
29 34

  
35
get_info
36

  
30 37
for tag in $NETWORK_TAGS; do
31 38
  case $tag in
32 39
  $IP_LESS_ROUTED_TAG)
......
45 52
  ;;
46 53
  $DNS_TAG)
47 54
    if ! $ONLY_LOCAL; then
48
      get_rev4_info "$IP"
49
      get_eui64 "$MAC" "$NETWORK_SUBNET6"
50
      get_rev6_info "$EUI64"
51
      $SNF_NETWORK_LOG $0 "delete dns entry for $GANETI_INSTANCE_NAME $IP $EUI64"
52 55
      update_all delete
53 56
    fi
54 57
  ;;
b/kvm-ifup
30 30
  DROPDHCPREQCMD="runlocked $RUNLOCKED_OPTS ebtables -A $FROM -p ipv4 --ip-protocol udp --ip-destination-port 67 -j DROP"
31 31
fi
32 32

  
33
get_info
33 34

  
34 35
for tag in $NETWORK_TAGS; do
35 36
  case $tag in
......
51 52
    try setup_masq
52 53
  ;;
53 54
  $DNS_TAG)
54
    get_rev4_info "$IP"
55
    get_eui64 "$MAC" "$NETWORK_SUBNET6"
56
    get_rev6_info "$EUI64"
57
    $SNF_NETWORK_LOG $0 "update dns for $GANETI_INSTANCE_NAME $IP $EUI64"
58 55
    update_all add
59 56
  ;;
60 57

  
b/vif-custom
45 45
  DROPDHCPREQCMD="runlocked $RUNLOCKED_OPTS ebtables -A $FROM -p ipv4 --ip-protocol udp --ip-destination-port 67 -j DROP"
46 46
fi
47 47

  
48
get_info
48 49

  
49 50
for tag in $NETWORK_TAGS; do
50 51
  case $tag in
......
66 67
    try setup_masq
67 68
  ;;
68 69
  $DNS_TAG)
69
    get_rev4_info "$IP"
70
    get_eui64 "$MAC" "$NETWORK_SUBNET6"
71
    get_rev6_info "$EUI64"
72 70
    $SNF_NETWORK_LOG $0 "update dns for $GANETI_INSTANCE_NAME $IP $EUI64"
73 71
    update_all add
74 72
  ;;

Also available in: Unified diff