diff options
author | Scott Ullrich <sullrich@pfsense.org> | 2008-05-25 00:05:18 +0000 |
---|---|---|
committer | Scott Ullrich <sullrich@pfsense.org> | 2008-05-25 00:05:18 +0000 |
commit | 3fceab6c8948caf7669b282abd4f00cd3ca934e7 (patch) | |
tree | e75ec43d54294767927f4a20128d6780288a6b93 /etc | |
parent | 03aebc4c5075dfbb1537f9a78f8fe54c21e97082 (diff) | |
download | pfsense-3fceab6c8948caf7669b282abd4f00cd3ca934e7.zip pfsense-3fceab6c8948caf7669b282abd4f00cd3ca934e7.tar.gz |
CarpDEV fixes. It now works!!
Diffstat (limited to 'etc')
-rw-r--r-- | etc/inc/filter.inc | 48 | ||||
-rw-r--r-- | etc/inc/interfaces.inc | 8 | ||||
-rw-r--r-- | etc/inc/system.inc | 3 |
3 files changed, 46 insertions, 13 deletions
diff --git a/etc/inc/filter.inc b/etc/inc/filter.inc index 16bb287..26917c5 100644 --- a/etc/inc/filter.inc +++ b/etc/inc/filter.inc @@ -335,14 +335,29 @@ function filter_generate_aliases() { if($config['interfaces']['lan']) $aliases .= "lan = \"{ {$config['interfaces']['lan']['if']}{$lan_aliases} }\"\n"; + $wanif = $config['interfaces']['wan']['if']; + + /* carpdev support on WAN */ + if($config['interfaces']['wan']['ipaddr'] == "carpdev-dhcp") { + $viparr = &$config['virtualip']['vip']; + $counter = 0; + foreach ($viparr as $vip) { + if ($vip['mode'] == "carpdev-dhcp") { + if($vip['interface'] == "wan") + $wanif = " carp{$counter}"; + $counter++; + } + } + } + if($config['interfaces']['wan']['ipaddr'] == "pppoe") { - $aliases .= "pppoe0 = \"{ " . $config['interfaces']['wan']['if'] . " " .get_real_wan_interface() . " }\" \n"; - $aliases .= "wan = \"{ " . $config['interfaces']['wan']['if'] . "{$wan_aliases} pppoe0 }\"\n"; + $aliases .= "pppoe0 = \"{ " . $wanif . " " . get_real_wan_interface() . " }\" \n"; + $aliases .= "wan = \"{ " . $wanif . "{$wan_aliases} pppoe0 }\"\n"; } else if ($config['interfaces']['wan']['ipaddr'] == "pptp") { - $aliases .= "pptp0 = \"{ " . $config['interfaces']['wan']['if'] . " " . get_real_wan_interface() . " }\" \n"; - $aliases .= "wan = \"{ " . $config['interfaces']['wan']['if'] . "{$wan_aliases} pptp0 }\"\n"; + $aliases .= "pptp0 = \"{ " . $wanif . " " . get_real_wan_interface() . " }\" \n"; + $aliases .= "wan = \"{ " . $wanif . "{$wan_aliases} pptp0 }\"\n"; } else { - $aliases .= "wan = \"{ " . get_real_wan_interface() . "{$wan_aliases} }\"\n"; + $aliases .= "wan = \"{ " . get_real_wan_interface() . "{$wan_aliases} }\"\n"; } $aliases .= "enc0 = \"{ enc0 }\"\n"; @@ -517,10 +532,25 @@ function filter_nat_rules_generate_if($if, $src = "any", $srcport = "", $dst = " return; /* Use interface name if IP isn't specified */ - if ($natip != "") - $tgt = "{$natip}/32"; - else - $tgt = "($if)"; + if ($natip != "") + $tgt = "{$natip}/32"; + else + $tgt = "($if)"; + + if($if == $config['interfaces']['wan']['if']) { + /* carpdev support on WAN */ + if($config['interfaces']['wan']['ipaddr'] == "carpdev-dhcp") { + $viparr = &$config['virtualip']['vip']; + $counter = 0; + foreach ($viparr as $vip) { + if ($vip['mode'] == "carpdev-dhcp") { + if($vip['interface'] == "wan") + $tgt = "carp{$counter}"; + $counter++; + } + } + } + } /* Add the hard set source port (useful for ISAKMP) */ if ($natport != "") diff --git a/etc/inc/interfaces.inc b/etc/inc/interfaces.inc index 9e85efd..4b86879 100644 --- a/etc/inc/interfaces.inc +++ b/etc/inc/interfaces.inc @@ -508,8 +508,8 @@ function interfaces_carp_configure() { mwexec("/sbin/ifconfig pfsync0 syncdev lo0 up"); } $fd = fopen("/tmp/carp.sh", "w"); + $viparr = &$config['virtualip']['vip']; if($config['virtualip']['vip']) { - $viparr = &$config['virtualip']['vip']; mwexec("/sbin/sysctl net.inet.carp.allow=1"); } else { $viparr = array(); @@ -1685,7 +1685,7 @@ function get_real_wan_interface() { $wanif = "pppoe0"; if ($wancfg['ipaddr'] == "pptp") $wanif = "pptp0"; - + return $wanif; } @@ -1696,8 +1696,8 @@ function get_current_wan_address($interface = "wan") { $interface = filter_translate_type_to_real_interface($interface); - if($wancfg['ipaddr'] == "carpdev-dhcp") - return "\${$interface}"; + if($wancfg['ipaddr'] == "carpdev-dhcp") + return "\$" . convert_real_interface_to_friendly_interface_name($interface); $ifinfo = ""; if(in_array($wancfg['ipaddr'], array('dhcp'))) { diff --git a/etc/inc/system.inc b/etc/inc/system.inc index 721372e..31ff8a8 100644 --- a/etc/inc/system.inc +++ b/etc/inc/system.inc @@ -230,6 +230,9 @@ function system_routing_configure() { $dont_remove_route = true; } + if($config['interfaces']['wan']['ipaddr'] == "carpdev-dhcp") + $dont_remove_route = true; + if($dont_remove_route == false) { /* remove default route */ mwexec("/sbin/route delete default"); |