Revision 5b3472ad

b/common.sh
24 24

  
25 25
function delete_neighbor_proxy {
26 26

  
27
  get_uplink $LINK "-6"
28
  get_eui64 $MAC $NETWORK_SUBNET6
29

  
30
  if [ -z "$EUI64" -z -o "$UPLINK" ]; then
27
  if [ -z "$EUI64" -z -o "$UPLINK6" ]; then
31 28
    return
32 29
  fi
33 30

  
34
  $SNF_NETWORK_LOG $0 "ip -6 neigh del proxy $EUI64 dev $UPLINK"
35
  ip -6 neigh del proxy $EUI64 dev $UPLINK
31
  $SNF_NETWORK_LOG $0 "ip -6 neigh del proxy $EUI64 dev $UPLINK6"
32
  ip -6 neigh del proxy $EUI64 dev $UPLINK6
36 33

  
37 34
}
38 35

  
......
87 84

  
88 85
function send_garp {
89 86

  
90
  get_uplink $TABLE
91 87
  if [ -z "$IP" -o -z "$UPLINK" ]; then
92 88
    return
93 89
  fi
......
101 97
}
102 98

  
103 99
function routed_setup_ipv6 {
104
	# Add a routing entry for the eui-64
105
  get_uplink $TABLE "-6"
106
  get_eui64 $MAC $NETWORK_SUBNET6
107 100

  
108
  if [ -z "$EUI64" -o -z "$TABLE" -o -z "$INTERFACE" -o -z "$UPLINK" ]
101
  if [ -z "$EUI64" -o -z "$TABLE" -o -z "$INTERFACE" -o -z "$UPLINK6" ]
109 102
  then
110 103
    return
111 104
  fi
112

  
105
	# Add a routing entry for the eui-64
113 106
	ip -6 rule add dev $INTERFACE table $TABLE
114 107
	ip -6 ro replace $EUI64/128 dev $INTERFACE table $TABLE
115
	ip -6 neigh add proxy $EUI64 dev $UPLINK
108
	ip -6 neigh add proxy $EUI64 dev $UPLINK6
116 109

  
117 110
	# disable proxy NDP since we're handling this on userspace
118 111
	# this should be the default, but better safe than sorry
119 112
	echo 0 > /proc/sys/net/ipv6/conf/$INTERFACE/proxy_ndp
120 113

  
121 114
  # Send Unsolicited Neighbor Advertisement
122
  $SNF_NETWORK_LOG $0 "ndsend $EUI64 $UPLINK"
123
  ndsend $EUI64 $UPLINK
115
  $SNF_NETWORK_LOG $0 "ndsend $EUI64 $UPLINK6"
116
  ndsend $EUI64 $UPLINK6
124 117

  
125 118
}
126 119

  
......
209 202
SUBNET=$NETWORK_SUBNET
210 203
GATEWAY6=$NETWORK_GATEWAY6
211 204
SUBNET6=$NETWORK_SUBNET6
212
EUI64=$($MAC2EUI64 $MAC $NETWORK_SUBNET6 2>/dev/null)
205
EUI64=$EUI64
213 206
EOF
214 207

  
215 208
}
......
217 210
function get_uplink {
218 211

  
219 212
  local table=$1
220
  local version=$2
221
  UPLINK=$(ip $version route list table $table | grep "default via" | awk '{print $5}')
222
  $SNF_NETWORK_LOG $0 "* uplink for table $table is $UPLINK"
213
  UPLINK=$(ip route list table $table | grep "default via" | awk '{print $5}')
214
  UPLINK6=$(ip -6 route list table $table | grep "default via" | awk '{print $5}')
215
  $SNF_NETWORK_LOG $0 "* Table $table: uplink -> $UPLINK, uplink6 -> $UPLINK6"
223 216

  
224 217
}
225 218

  
......
236 229
    EUI64=
237 230
  else
238 231
    EUI64=$($MAC2EUI64 $mac $prefix)
239
    $SNF_NETWORK_LOG $0 "* eui64 for $mac inside $prefix is $EUI64"
232
    $SNF_NETWORK_LOG $0 "* $mac + $prefix -> $EUI64"
240 233
  fi
241 234

  
242 235
}
......
308 301
update_all () {
309 302

  
310 303
  local action=$1
304
  $SNF_NETWORK_LOG $0 "Update ($action) dns for $GANETI_INSTANCE_NAME $IP $EUI64"
311 305
  update_arecord $action
312 306
  update_aaaarecord $action
313 307
  update_ptrrecord $action
......
360 354
}
361 355

  
362 356

  
357
# Use environment variables to calculate desired info
358
# IP, MAC, LINK, TABLE, BRIDGE,
359
# NETWORK_SUBNET, NETWORK_GATEWAY, NETWORK_SUBNET6, NETWORK_GATEWAY6
360
function get_info {
361

  
362
  $SNF_NETWORK_LOG $0 "Getting info for $INTERFACE of $GANETI_INSTANCE_NAME"
363
  get_rev4_info $IP
364
  get_eui64 $MAC $NETWORK_SUBNET6
365
  get_rev6_info $EUI64
366
  get_uplink $TABLE
367

  
368
}
369

  
370

  
363 371
# Query nameserver for entries related to the specific instance
364 372
# An example output is the following:
365 373
# www.google.com has address 173.194.113.114
b/kvm-vif-bridge
29 29
  # DROPDHCPREQCMD="runlocked $RUNLOCKED_OPTS ebtables -A $FROM -p ipv4 --ip-protocol udp --ip-destination-port 67 -j DROP"
30 30
fi
31 31

  
32
GANETI_INSTANCE_NAME=$INSTANCE
33
get_info
32 34

  
33 35
for tag in $NETWORK_TAGS; do
34 36
  case $tag in
b/snf-network-dnshook
113 113
  eval LINK=\$$link
114 114
  eval NETWORK_SUBNET=\$$subnet
115 115
  eval NETWORK_SUBNET6=\$$subnet6
116
  eval TAGS=\$$tags
116
  eval NETWORK_TAGS=\$$tags
117 117

  
118
  for tag in $TAGS; do
118
  for tag in $NETWORK_TAGS; do
119 119
    case $tag in
120 120
    $DNS_TAG)
121 121

  
122
      get_rev4_info "$IP"
123
      get_eui64 "$MAC" "$NETWORK_SUBNET6"
124
      get_rev6_info "$EUI64"
122
      get_info
125 123
      $SNF_NETWORK_LOG dnshook "update dns for $GANETI_INSTANCE_NAME $IP $EUI64"
126 124
      update_dns
127 125

  
b/snf-network-hook
20 20
  eval MAC=\$$mac
21 21
  eval MODE=\$$mode
22 22
  eval LINK=\$$link
23
  eval NETWORK=\$$network
24
  eval SUBNET6=\$$subnet6
25
  eval TAGS=\$$tags
23
  eval NETWORK_SUBNET=\$$network
24
  eval NETWORK_SUBNET6=\$$subnet6
25
  eval NETWORK_TAGS=\$$tags
26 26

  
27
  for tag in $TAGS; do
27
  for tag in $NETWORK_TAGS; do
28 28
    case $tag in
29 29
    $IP_LESS_ROUTED_TAG)
30 30
      if [ "$GANETI_OLD_PRIMARY" == "$host.$domain" ]; then
31 31
        # This runs on the source node
32
        # We invoke get_info here in order not to log and calculate things
33
        # that are not needed eventually
34
        get_info
32 35
        delete_neighbor_proxy
33 36
      elif [ "$GANETI_NEW_PRIMARY" == "$host.$domain" ]; then
34 37
        $SNF_NETWORK_LOG $0 "Do nothing in new primary. All done by if-up script"
b/vif-custom
46 46
  DROPDHCPREQCMD="runlocked $RUNLOCKED_OPTS ebtables -A $FROM -p ipv4 --ip-protocol udp --ip-destination-port 67 -j DROP"
47 47
fi
48 48

  
49
get_info
49 50

  
50 51
for tag in $NETWORK_TAGS; do
51 52
  case $tag in

Also available in: Unified diff