****, 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"; ?>>&nbsp;
      </td>
      <td>
       <b>Enable Static ARP entries</b>
      </td>
     </tr>
     <tr>
      <td>
       &nbsp;
      </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]

Reply via email to