carp 0.1.0 Services: CARP (failover) CARP (failover) CARP is a tool to help achieve system redundancy, by having multiple computers creating a single, virtual network interface between them, so that if any machine fails, another can respond instead, and/or allowing a degree of load sharing between systems. CARP is an improvement over the Virtual Router Redundancy Protocol (VRRP) standard. It was developed after VRRP was deemed to be not free enough because of a possibly-overlapping Cisco patent.
Services
carp.xml
CARP Virtual IPs /pkg_edit.php?xml=carp.xml CARP Status carp_status.php CARP Settings pkg_edit.php?xml=carp_settings.xml&id=0 /usr/local/pkg/ a+x http://www.pfsense.com/packages/config/carp_settings.xml /usr/local/pkg/pf/ a+x http://www.pfsense.com/packages/config/carp_sync_client.php /usr/local/pkg/ a+x http://www.pfsense.com/packages/config/carp_sync_server.php /usr/local/pkg/pf/ a+x http://www.pfsense.com/packages/config/carp_rules.php /usr/local/www/ a+x http://www.pfsense.com/packages/config/carp_status.php ['installedpackages']['carp']['config'] VHID Group vhid Virtual IP Address ipaddress Advertising Frequency advskew Netmask netmask Virtual IP Address ipaddress Enter the IP Address that you would like to share on both machines input Virtual IP Netmask netmask Enter the IP Address's netmask that you would like to share on both machines select 24 Virtual IP Password password Enter the VHID group password. password VHID Group vhid Enter the VHID group that the machines will share select 1 Advertising Frequency advskew The frequency that this machine will advertise select 0 function sync_package_carp() { /* * XXX: find out how many carp and pfsync interfaces are established * and destroy/down them before sweeping through the list */ conf_mount_rw(); config_lock(); $fout = fopen("/usr/local/etc/rc.d/carp.sh","w"); fwrite($fout, "#!/bin/sh \n"); global $config; $carp_instances_counter = 0; $pfsync_instances_counter = 0; if($config['installedpackages']['carpsettings']['config'] != "") foreach($config['installedpackages']['carpsettings']['config'] as $carp) if($carp['pfsyncenabled'] != "") { $pfsync = 1; if($carp['premption'] != "") $preempt = 1; if($carp['balancing'] != "") $using_arp_balance = 1; $carp_sync_int = convert_friendly_interface_to_real_interface_name($carp['pfsyncinterface']); fwrite($fout, "/sbin/ifconfig pfsync0 create\n"); fwrite($fout, "/sbin/ifconfig pfsync0 syncif " . $carp_sync_int . "\n"); fwrite($fout, "/sbin/ifconfig {$carp_sync_int} up\n"); fwrite($fout, "/sbin/ifconfig pfsync0 up\n"); $pfsync_instances_counter++; } if($config['installedpackages']['carp']['config'] != "") { foreach($config['installedpackages']['carp']['config'] as $carp) { /* * create the carp interface */ fwrite($fout, "echo Creating {$carp_instances_counter} ...\n"); fwrite($fout, "/sbin/ifconfig carp" . $carp_instances_counter . " create\n"); $broadcast_address = gen_subnet_max($carp['ipaddress'], $carp['netmask']); if($carp['password'] != "") { $password = " pass " . $carp['password']; } $carp_command = "/sbin/ifconfig carp" . $carp_instances_counter . " " . $carp['ipaddress'] . "/" . $carp['netmask']; $carp_command .= " broadcast " . $broadcast_address . " vhid " . $carp['vhid'] . " advskew " . $carp['advskew'] . $password; if($carp['balancing'] == "true") $using_arp_balance = 1; if($carp['preempt'] == "true") $using_preempt = 1; fwrite($fout, $carp_command . "\n"); fwrite($fout, "/sbin/ifconfig carp{$carp_instances_counter} up\n"); if($carp['pfsync'] != "") $pfsync = 1; $carp_instances_counter++; } } fclose($fout); chmod("/usr/local/etc/rc.d/carp.sh", 0755); mwexec("/usr/local/etc/rc.d/carp.sh"); if($using_arp_balance == 1) mwexec("sysctl net.inet.arpbalance=1"); if($preempt == 1) mwexec("sysctl net.inet.carp.preempt=1"); conf_mount_ro(); config_unlock(); } sync_package_carp(); sync_package_carp(); unlink_if_exists("/usr/local/www/carp*"); unlink_if_exists("/usr/local/pkg/carp*"); unlink_if_exists("/usr/local/pkg/pf/carp*"); unlink_if_exists("/usr/local/etc/rc.d/carp*");