****, sorry for jacking an earlier thread. I will resend with a new mail. ________________________________
From: Wesley K. Joyce [mailto:[EMAIL PROTECTED] Sent: Sat 2/25/2006 8:31 AM To: [email protected] Subject: BUG : DHCP - Static ARP - Feature Request I would like to suggest making the DHCP - Static ARP feature more flexible. I am suggesting making that feature have 3 radio buttons. 1. Static ARP OFF 2. Static ARP for DHCP Reservations only 3. Static ARP for DHCP Reservations and no other clients are able to communicate with router Option 3 is the behavior experienced now. Here is how I think services.inc would like like to support this functionality. staticarpunlocked and staticarplocked are the new variables that represent options 2 and 3 respectively. The big difference is that with option 2 (staticarpunlocked), we do not set the 'staticarp' parameter on the interface. With option 3 (staticarplocked) we do set the 'staticarp' parameter on the interface. - /etc/inc/services.php function interfaces_staticarp_configure($if) { global $config, $g; if(isset($config['system']['developerspew'])) { $mt = microtime(); echo "interfaces_staticarp_configure($if) being called $mt\n"; } $ifcfg = $config['interfaces'][$if]; /* Enable staticarp, if enabled */ if(isset($config['dhcpd'][$if]['staticarpunlocked'])) { mwexec("/usr/sbin/arp -ad > /dev/null 2>&1 ");1 if (is_array($config['dhcpd'][$if]['staticmap'])) { foreach ($config['dhcpd'][$if]['staticmap'] as $arpent) { mwexec("/usr/sbin/arp -s " . escapeshellarg($arpent['ipaddr']) . " " . escapeshellarg($arpent['mac'])); } } } else { if (is_array($config['dhcpd'][$if]['staticmap'])) { foreach ($config['dhcpd'][$if]['staticmap'] as $arpent) { mwexec("/usr/sbin/arp -d " . escapeshellarg($arpent['ipaddr'])); } } } if(isset($config['dhcpd'][$if]['staticarplocked'])) { mwexec("/sbin/ifconfig " . escapeshellarg($ifcfg['if']) .. " staticarp " ); mwexec("/usr/sbin/arp -ad > /dev/null 2>&1 "); if (is_array($config['dhcpd'][$if]['staticmap'])) { foreach ($config['dhcpd'][$if]['staticmap'] as $arpent) { mwexec("/usr/sbin/arp -s " . escapeshellarg($arpent['ipaddr']) . " " . escapeshellarg($arpent['mac'])); } } } else { mwexec("/sbin/ifconfig " . escapeshellarg($ifcfg['if']) .. " -staticarp " ); if (is_array($config['dhcpd'][$if]['staticmap'])) { foreach ($config['dhcpd'][$if]['staticmap'] as $arpent) { mwexec("/usr/sbin/arp -d " . escapeshellarg($arpent['ipaddr'])); } } } return 0; } Line 60 of services_dhcp.php $pconfig['staticarp'] = isset($config['dhcpd'][$if]['staticarp']); I am not sure how this would need to be modified, somehow it has to hold 'staticarplocked' or 'staticarpunlocked' or NULL if the feature is off. Maybe like this - $pconfig['staticarplocked'] = isset($config['dhcpd'][$if]['staticarplocked'); $pconfig['staticarpunlocked'] = isset($config['dhcpd'][$if]['staticarpunlocked']); Lines 174 - 177 of services_dhcp.php would also appear to need to be modified. if($_POST['staticarp'] == "yes") $config['dhcpd'][$if]['staticarp'] = true; else unset($config['dhcpd'][$if]['staticarp']); write_config(); /* static arp configuration */ /* if (isset($config['dhcpd'][$if]['staticarp'])) */ interfaces_staticarp_configure($if); Maybe like this? if($_POST['staticarplocked'] == "yes") $config['dhcpd'][$if]['staticarplocked'] = true; else unset($config['dhcpd'][$if]['staticarp']); write_config(); if($_POST['staticarpunlocked'] == "yes") $config['dhcpd'][$if]['staticarpunlocked'] = true; else unset($config['dhcpd'][$if]['staticarpunlocked']); write_config(); /* static arp configuration */ /* if (isset($config['dhcpd'][$if]['staticarp'])) */ interfaces_staticarp_configure($if); Lines 356+ of services_dhcp.php would also appear to need to be modified to accomodate the 3 new radio buttons. I don't know how to do the radio buttons. <table> <tr> <td> <input valign="middle" type="checkbox" value="yes" name="staticarp" id="staticarp" <?php if($pconfig['staticarp']) echo " checked"; ?>> </td> <td> <b>Enable Static ARP entries</b> </td> </tr> <tr> <td> </td> <td> <span class="red"><strong>Note:</strong></span> This feature is under development. Only the machines listed below will be able to communicate with the firewall on this NIC. Disabling this has been tested to be broken, a reboot will be required to disable. Be warned! </td> </tr> </table> I am not sure what other files would need to be modified to accomodate this feature request. If this is feature request is deemed good and can be incorporated, I could test it. I just need a pfsense programmer to sanity check it first since you would probably do it alot faster than me and also know other files that need to change to accomodate this. ________________________________ From: Bill Marquette [mailto:[EMAIL PROTECTED] Sent: Sat 2/25/2006 12:26 AM To: [email protected] Subject: Re: [pfSense Support] BUG : DHCP - Static ARP ok, try this diff out then: Index: services_dhcp.php =================================================================== RCS file: /cvsroot/pfSense/usr/local/www/services_dhcp.php,v retrieving revision 1.38.2.9 diff -u -r1.38.2.9 services_dhcp.php --- services_dhcp.php 20 Feb 2006 21:02:12 -0000 1.38.2.9 +++ services_dhcp.php 25 Feb 2006 04:25:22 -0000 @@ -181,8 +181,7 @@ write_config(); /* static arp configuration */ - if (isset($config['dhcpd'][$if]['staticarp'])) - interfaces_staticarp_configure($if); + interfaces_staticarp_configure($if); $retval = 0; config_lock(); Let me know if it works properly and I'll commit it. --Bill On 2/24/06, Wesley K. Joyce <[EMAIL PROTECTED]> wrote: > > > Okay, I think I found it. The problem is with services_dhcp.php - > > if($_POST['staticarp'] == "yes") > $config['dhcpd'][$if]['staticarp'] = true; > else > unset($config['dhcpd'][$if]['staticarp']); > write_config(); > /* static arp configuration */ > if > (isset($config['dhcpd'][$if]['staticarp'])) > interfaces_staticarp_configure($if); > > The if statement in bold will always be false if staticarp is off (not > checked), in otherwords unset via > 'unset($config['dhcpd'][$if]['staticarp']);". So this > means that 'interfaces_staticarp_configure($if);' is never > executed when you turn off static arp, so the function > interfaces_staticarp_configure($if) is never called, so > it's else statement is never executed. > > So I would think the fix to be applied is either this > 1. > /* static arp configuration */ > /* if > (isset($config['dhcpd'][$if]['staticarp'])) */ > interfaces_staticarp_configure($if); > > or this > 2. > /* static arp configuration */ > if > (isset($config['dhcpd'][$if]['staticarp'])) > interfaces_staticarp_configure($if); > else > interfaces_staticarp_configure($if); > > I am hoping this will be corrected. Thanks. > > Let me know if I am posting this bug / resolution in the wrong place. > > ________________________________ > > From: Wesley K. Joyce [mailto:[EMAIL PROTECTED] > Sent: Fri 2/24/2006 11:53 PM > To: [email protected] > Subject: [pfSense Support] BUG : DHCP - Static ARP > > > > When I turn on the static arp feature, it executes the code in red. When I > turn off the feature, it does not execute the code in blue. This appears to > be why turning this off is broken, so my question is why? I don't know how > to debug php, but the if statement looks logical. > > TESTING-SNAPSHOT-02-19-06 > > /etc/inc/services.inc > > function interfaces_staticarp_configure($if) { > global $config, $g; > if(isset($config['system']['developerspew'])) { > $mt = microtime(); > echo "interfaces_staticarp_configure($if) being called > $mt\n"; > } > > $ifcfg = $config['interfaces'][$if]; > /* Enable staticarp, if enabled */ > if(isset($config['dhcpd'][$if]['staticarp'])) { > mwexec("/sbin/ifconfig " . escapeshellarg($ifcfg['if']) . " > staticarp " ); > mwexec("/usr/sbin/arp -ad > /dev/null 2>&1 "); > if > (is_array($config['dhcpd'][$if]['staticmap'])) { > foreach > ($config['dhcpd'][$if]['staticmap'] as $arpent) { > mwexec("/usr/sbin/arp -s " . > escapeshellarg($arpent['ipaddr']) . " " . > escapeshellarg($arpent['mac'])); > } > > } > } else { > mwexec("/sbin/ifconfig " . escapeshellarg($ifcfg['if']) . " > -staticarp " ); > mwexec("/usr/sbin/arp -ad > /dev/null 2>&1 "); > } > return 0; > } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
<<winmail.dat>>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
