Revision 3e662cb0
Added by Ermal LUÇI about 13 years ago
etc/inc/interfaces.inc | ||
---|---|---|
100 | 100 |
|
101 | 101 |
switch ($vip['mode']) { |
102 | 102 |
case "carp": |
103 |
case "carpdev": |
|
104 | 103 |
$realif = "{$vip['interface']}_vip{$vip['vhid']}"; |
105 | 104 |
if (!does_interface_exist($realif)) { |
106 | 105 |
return false; |
... | ... | |
1049 | 1048 |
pfSense_interface_deladdress($vipif, $vip['subnet']); |
1050 | 1049 |
break; |
1051 | 1050 |
case "carp": |
1052 |
case "carpdev-dhcp": |
|
1053 | 1051 |
$vipif = "{$vip['interface']}_vip{$vip['vhid']}"; |
1054 | 1052 |
if (does_interface_exist($vipif)) |
1055 | 1053 |
pfSense_interface_destroy($vipif); |
... | ... | |
1091 | 1089 |
} |
1092 | 1090 |
} |
1093 | 1091 |
break; |
1094 |
case "carpdev-dhcp": |
|
1095 |
/* |
|
1096 |
* NB: When carpdev gets enabled it would be better to be handled as all |
|
1097 |
* other interfaces! |
|
1098 |
*/ |
|
1099 | 1092 |
case "dhcp": |
1100 | 1093 |
$pid = find_dhclient_process($realif); |
1101 | 1094 |
if($pid) |
... | ... | |
1945 | 1938 |
$carp_setuped = true; |
1946 | 1939 |
interface_carp_configure($vip); |
1947 | 1940 |
break; |
1948 |
case "carpdev-dhcp": |
|
1949 |
if ($interface <> "" && $vip['interface'] <> $interface) |
|
1950 |
continue; |
|
1951 |
interface_carpdev_configure($vip); |
|
1952 |
break; |
|
1953 | 1941 |
} |
1954 | 1942 |
} |
1955 | 1943 |
if ($carp_setuped == true) |
... | ... | |
1985 | 1973 |
sleep(1); |
1986 | 1974 |
interface_carp_configure($vip); |
1987 | 1975 |
break; |
1988 |
case "carpdev-dhcp": |
|
1989 |
interface_vip_bring_down($vip); |
|
1990 |
sleep(1); |
|
1991 |
interface_carpdev_configure($vip); |
|
1992 |
break; |
|
1993 | 1976 |
case "ipalias": |
1994 | 1977 |
interface_vip_bring_down($vip); |
1995 | 1978 |
sleep(1); |
... | ... | |
2079 | 2062 |
return $vipif; |
2080 | 2063 |
} |
2081 | 2064 |
|
2082 |
function interface_carpdev_configure(&$vip) { |
|
2083 |
global $g; |
|
2084 |
|
|
2085 |
if ($vip['mode'] != "carpdev-dhcp") |
|
2086 |
return; |
|
2087 |
|
|
2088 |
if (empty($vip['interface'])) |
|
2089 |
return; |
|
2090 |
|
|
2091 |
$realif = get_real_interface($vip['interface']); |
|
2092 |
interfaces_bring_up($realif); |
|
2093 |
|
|
2094 |
/* |
|
2095 |
* ensure the interface containing the VIP really exists |
|
2096 |
* prevents a panic if the interface is missing or invalid |
|
2097 |
*/ |
|
2098 |
if (!does_interface_exist($realif)) { |
|
2099 |
file_notice("CARP", sprintf(gettext("Interface specified for the virtual IP address %s does not exist. Skipping this VIP."), $vip['subnet']), "Firewall: Virtual IP", ""); |
|
2100 |
return; |
|
2101 |
} |
|
2102 |
|
|
2103 |
$vipif = "{$vip['interface']}_vip{$vip['vhid']}"; |
|
2104 |
if (does_interface_exist($vipif)) { |
|
2105 |
interface_bring_down($vipif); |
|
2106 |
} else { |
|
2107 |
$carpdevif = exec("/sbin/ifconfig carp create"); |
|
2108 |
mwexec("/sbin/ifconfig {$carpdevif} name {$vipif}"); |
|
2109 |
pfSense_ngctl_name("{$carpdevif}:", $vipif); |
|
2110 |
} |
|
2111 |
|
|
2112 |
$vip_password = $vip['password']; |
|
2113 |
$vip_password = str_replace(" ", "", $vip_password); |
|
2114 |
if ($vip['password'] != "") |
|
2115 |
$password = " pass \"" . $vip_password . "\""; |
|
2116 |
|
|
2117 |
|
|
2118 |
mwexec("/sbin/ifconfig {$vipif} carpdev {$realif} vhid {$vip['vhid']} advskew {$vip['advskew']} advbase {$vip['advbase']} {$password}"); |
|
2119 |
interfaces_bring_up($vipif); |
|
2120 |
|
|
2121 |
/* |
|
2122 |
* XXX: BIG HACK but carpdev needs ip services active |
|
2123 |
* before even starting something as dhclient. |
|
2124 |
* I do not know if this is a feature or a bug |
|
2125 |
* but better than track it make it work ;) . |
|
2126 |
*/ |
|
2127 |
//$fakeiptouse = "10.254.254." . ($carp_instances_counter+1); |
|
2128 |
//$cmdchain->add("CarpDEV hack", "/sbin/ifconfig {$carpint} inet {$fakeiptouse}", false); |
|
2129 |
|
|
2130 |
/* generate dhclient_wan.conf */ |
|
2131 |
$fd = fopen("{$g['varetc_path']}/dhclient_{$vipif}.conf", "w"); |
|
2132 |
if ($fd) { |
|
2133 |
$dhclientconf = ""; |
|
2134 |
|
|
2135 |
$dhclientconf .= <<<EOD |
|
2136 |
interface "{$vipif}" { |
|
2137 |
timeout 60; |
|
2138 |
retry 15; |
|
2139 |
select-timeout 0; |
|
2140 |
initial-interval 1; |
|
2141 |
script "/sbin/dhclient-script"; |
|
2142 |
} |
|
2143 |
|
|
2144 |
EOD; |
|
2145 |
|
|
2146 |
fwrite($fd, $dhclientconf); |
|
2147 |
fclose($fd); |
|
2148 |
|
|
2149 |
/* fire up dhclient */ |
|
2150 |
mwexec("/sbin/dhclient -c {$g['varetc_path']}/dhclient_{$vipif}.conf {$vipif} >{$g['tmp_path']}/{$vipif}_output 2>{$g['tmp_path']}/{$vipif}_error_output", false); |
|
2151 |
} else { |
|
2152 |
log_error(sprintf(gettext("Error: cannot open dhclient_%s.conf in interface_carpdev_configure() for writing.%s"), $vipif, "\n")); |
|
2153 |
mwexec("/sbin/dhclient -b {$vipif}"); |
|
2154 |
} |
|
2155 |
|
|
2156 |
return $vipif; |
|
2157 |
} |
|
2158 |
|
|
2159 | 2065 |
function interface_wireless_clone($realif, $wlcfg) { |
2160 | 2066 |
global $config, $g; |
2161 | 2067 |
/* Check to see if interface has been cloned as of yet. |
... | ... | |
2872 | 2778 |
unset($interface_snv6_arr_cache[$realif]); |
2873 | 2779 |
|
2874 | 2780 |
switch ($wancfg['ipaddr']) { |
2875 |
case 'carpdev-dhcp': |
|
2876 |
interface_carpdev_dhcp_configure($interface); |
|
2877 |
break; |
|
2878 | 2781 |
case 'dhcp': |
2879 | 2782 |
interface_dhcp_configure($interface); |
2880 | 2783 |
break; |
... | ... | |
2983 | 2886 |
return 0; |
2984 | 2887 |
} |
2985 | 2888 |
|
2986 |
function interface_carpdev_dhcp_configure($interface = "wan") { |
|
2987 |
global $config, $g; |
|
2988 |
|
|
2989 |
$wancfg = $config['interfaces'][$interface]; |
|
2990 |
$wanif = $wancfg['if']; |
|
2991 |
/* bring wan interface up before starting dhclient */ |
|
2992 |
if($wanif) |
|
2993 |
interfaces_bring_up($wanif); |
|
2994 |
else |
|
2995 |
log_error(gettext("Could not bring wanif up in interface_carpdev_dhcp_configure()")); |
|
2996 |
|
|
2997 |
return 0; |
|
2998 |
} |
|
2999 |
|
|
3000 | 2889 |
function interface_track6_configure($interface = "lan") { |
3001 | 2890 |
global $config, $g; |
3002 | 2891 |
$iflist = get_configured_interface_with_descr(false, true); |
... | ... | |
3608 | 3497 |
|
3609 | 3498 |
if (stristr($interface, "_vip")) { |
3610 | 3499 |
foreach ($config['virtualip']['vip'] as $counter => $vip) { |
3611 |
if ($vip['mode'] == "carpdev-dhcp" || $vip['mode'] == "carp") {
|
|
3500 |
if ($vip['mode'] == "carp") { |
|
3612 | 3501 |
if ($interface == "{$vip['interface']}_vip{$vip['vhid']}") |
3613 | 3502 |
return $vip['interface']; |
3614 | 3503 |
} |
... | ... | |
3668 | 3557 |
} else if (stristr($interface, "_vip")) { |
3669 | 3558 |
if (is_array($config['virtualip']['vip'])) { |
3670 | 3559 |
foreach ($config['virtualip']['vip'] as $counter => $vip) { |
3671 |
if ($vip['mode'] == "carpdev-dhcp" || $vip['mode'] == "carp") {
|
|
3560 |
if ($vip['mode'] == "carp") { |
|
3672 | 3561 |
if ($interface == "{$vip['interface']}_vip{$vip['vhid']}") |
3673 | 3562 |
return "{$vip['subnet']} - {$vip['descr']}"; |
3674 | 3563 |
} |
... | ... | |
3840 | 3729 |
*/ |
3841 | 3730 |
|
3842 | 3731 |
switch ($cfg['ipaddr']) { |
3843 |
case "carpdev-dhcp": |
|
3844 |
$viparr = &$config['virtualip']['vip']; |
|
3845 |
if(is_array($viparr)) |
|
3846 |
foreach ($viparr as $counter => $vip) { |
|
3847 |
if ($vip['mode'] == "carpdev-dhcp") { |
|
3848 |
if($vip['interface'] == $interface) { |
|
3849 |
$wanif = "carp{$counter}"; |
|
3850 |
break; |
|
3851 |
} |
|
3852 |
} |
|
3853 |
} |
|
3854 |
break; |
|
3855 | 3732 |
case "pppoe": |
3856 | 3733 |
case "pptp": |
3857 | 3734 |
case "l2tp": |
... | ... | |
3977 | 3854 |
global $config; |
3978 | 3855 |
if (is_array($config['virtualip']['vip'])) { |
3979 | 3856 |
foreach ($config['virtualip']['vip'] as $vip) { |
3980 |
if ($vip['mode'] == "carp" || $vip['mode'] == "carpdev") {
|
|
3857 |
if ($vip['mode'] == "carp") { |
|
3981 | 3858 |
if(is_ipaddrv4($ip)) { |
3982 | 3859 |
$carp_ip = get_interface_ip($vip['interface']); |
3983 | 3860 |
} |
... | ... | |
4044 | 3921 |
$first = 0; |
4045 | 3922 |
$carp_int = array(); |
4046 | 3923 |
foreach ($config['virtualip']['vip'] as $vip) { |
4047 |
if ($vip['mode'] == "carp" || $vip['mode'] == "carpdev") {
|
|
3924 |
if ($vip['mode'] == "carp") { |
|
4048 | 3925 |
$carp_ip = $vip['subnet']; |
4049 | 3926 |
$carp_sn = $vip['subnet_bits']; |
4050 | 3927 |
$carp_nw = gen_subnet($carp_ip, $carp_sn); |
... | ... | |
4436 | 4313 |
foreach($config['interfaces'] as $ifdescr => $ifname) { |
4437 | 4314 |
switch ($ifname['ipaddr']) { |
4438 | 4315 |
case "dhcp": |
4439 |
case "carpdev-dhcp": |
|
4440 | 4316 |
case "ppp"; |
4441 | 4317 |
case "pppoe": |
4442 | 4318 |
case "pptp": |
... | ... | |
4462 | 4338 |
$ifname = &$config['interfaces'][$friendly]; |
4463 | 4339 |
switch ($ifname['ipaddr']) { |
4464 | 4340 |
case "dhcp": |
4465 |
case "carpdev-dhcp": |
|
4466 | 4341 |
case "pppoe": |
4467 | 4342 |
case "pptp": |
4468 | 4343 |
case "l2tp": |
Also available in: Unified diff
Get rid of carpdev, it will never be