Project

General

Profile

« Previous | Next » 

Revision 7b47bd4c

Added by Ermal LUÇI about 13 years ago

Make vips vhid be unique per parent interface!

View differences:

usr/local/www/xmlrpc.php
182 182
	$vipbackup = array();
183 183
	$oldvips = array();
184 184
	if (isset($params[0]['virtualip'])) {
185
		if(is_array($config['virtualip']['vip'])) {
185
		if (is_array($config['virtualip']['vip'])) {
186 186
			foreach ($config['virtualip']['vip'] as $vipindex => $vip) {
187 187
				if ($vip['mode'] == "carp")
188
					$oldvips[$vip['vhid']] = "{$vip['password']}{$vip['advskew']}{$vip['subnet']}{$vip['subnet_bits']}{$vip['advbase']}";
189
				else if ($vip['mode'] == "ipalias" && substr($vip['interface'], 0, 3) == "vip")
188
					$oldvips["{$vip['interface']}_vip{$vip['vhid']}"] = "{$vip['password']}{$vip['advskew']}{$vip['subnet']}{$vip['subnet_bits']}{$vip['advbase']}";
189
				else if ($vip['mode'] == "ipalias" && strstr($vip['interface'], "_vip"))
190 190
					$oldvips[$vip['subnet']] = "{$vip['interface']}{$vip['subnet']}{$vip['subnet_bits']}";
191
				else if (($vip['mode'] == "ipalias" || $vip['mode'] == 'proxyarp') && substr($vip['interface'], 0, 3) != "vip")
191
				else if (($vip['mode'] == "ipalias" || $vip['mode'] == 'proxyarp') && !strstr($vip['interface'], "_vip"))
192 192
					$vipbackup[] = $vip;
193 193
			}
194 194
		}
......
219 219
		$carp_setuped = false;
220 220
		$anyproxyarp = false;
221 221
		foreach ($config['virtualip']['vip'] as $vip) {
222
			if ($vip['mode'] == "carp" && isset($oldvips[$vip['vhid']])) {
223
				if ($oldvips[$vip['vhid']] == "{$vip['password']}{$vip['advskew']}{$vip['subnet']}{$vip['subnet_bits']}{$vip['advbase']}") {
222
			if ($vip['mode'] == "carp" && isset($oldvips["{$vip['interface']}_vip{$vip['vhid']}"])) {
223
				if ($oldvips["{$vip['interface']}_vip{$vip['vhid']}"] == "{$vip['password']}{$vip['advskew']}{$vip['subnet']}{$vip['subnet_bits']}{$vip['advbase']}") {
224 224
					if (does_vip_exist($vip)) {
225
						unset($oldvips[$vip['vhid']]);
225
						unset($oldvips["{$vip['interface']}_vip{$vip['vhid']}"]);
226 226
						continue; // Skip reconfiguring this vips since nothing has changed.
227 227
					}
228 228
				}
229
				unset($oldvips[$vip['vhid']]);
230
			} else if ($vip['mode'] == "ipalias" && substr($vip['interface'], 0, 3) == "vip" && isset($oldvips[$vip['subnet']])) {
229
				unset($oldvips["{$vip['interface']}_vip{$vip['vhid']}"]);
230
			} else if ($vip['mode'] == "ipalias" && strstr($vip['interface'], "_vip") && isset($oldvips[$vip['subnet']])) {
231 231
				if ($oldvips[$vip['subnet']] = "{$vip['interface']}{$vip['subnet']}{$vip['subnet_bits']}") {
232 232
					if (does_vip_exist($vip)) {
233 233
						unset($oldvips[$vip['subnet']]);
......
256 256
		}
257 257
		/* Cleanup remaining old carps */
258 258
		foreach ($oldvips as $oldvipif => $oldvippar) {
259
			if (!is_ipaddr($oldvipif) && does_interface_exist("vip{$oldvipif}"))
260
				pfSense_interface_destroy("vip{$oldvipif}");
259
			if (!is_ipaddr($oldvipif) && does_interface_exist($oldvipif))
260
					pfSense_interface_destroy($oldvipif);
261 261
		}
262 262
		if ($carp_setuped == true)
263 263
			interfaces_carp_setup();

Also available in: Unified diff