DHCPC plugin for PPPD 2.4.2
===========================

Overview:

This plugin is a hybrid DHCP client and proxy server.  It allows a ppp
server to request an IP address from a local or remote DHCP server on
behalf of the client.  To the DHCP server it appears to be a DHCP/BOOTP
relay agent.  The peer's authentication name is used as the DHCP client
identifier (to allow static leases to be granted to some users).



Installation:

Place files in a pppd/plugins/dhcp directory of a built and installed PPPD
distribution.  Run 'make' followed by 'make install'.



Configuration:

In your ppp options file, add the line:

  plugin dhcpc.so


Following the above line, you should give the options for the plugin:


  dhcp-interface   <interface name>

        This option specifies which interface DHCP requests should be
        broadcast.  The default is 'eth0'.

  dhcp-relay-address   <local ip address>

        This option specified the local IP address of the system running
        this proxy, as should be identified to the DHCP server in the
        'giaddr' field of DHCP requests.  Normal server behavor should
        be to send DHCP responses to this address.  The default is the 
        primary address bound to the dhcp interface.

        N.B.  If you are using ISC DHCPD on the local system, this should
              NOT be set to the loopback address (127.0.0.1).  The ISC
              DHCPD treats this as a special debugging mode and does 
              behave according to the RFCs.

  dhcp-server   <server ip address>   

	Address of the DHCP server.  Specifying this option will disable
        normal DHCP broadcast behaviour and force all requests to be sent
        to the specified IP address only.  The default behaviour is to
        send DHCP broadcasts on the specified dhcp interface.

  dhcp-subnet-selection  <network ip address>

        This specifies the address of the network for which to request
        leases.  (The address should be specified without a netmask.)        
        Your DHCP server must support the 'Subnet Selection' DHCP
        option as per RFC 3011 for this option to work. 

        If subnet selection is not used, most DHCP servers will allocate
        leases from the same subnet as that in which 'dhcp-relay-address'
        resides.




CURRENT LIMITATIONS


Presently, there is a potential problem if a user is able to establish
multiple simultaneous connections under the same login credentials.  
Because the username is used as the client identifier, if the user
establishes a second connection without first closing the original
connection, this new connection will still be allocated the same lease and
IP address as the original connection.  Clearly only one connection will
be routeable at a time.

The problem is compounded when either of the connections is closed.  This
will trigger a release of the DHCP lease, even though there is still a
current connection using it.  The lease could then potentially be
reallocated to another users connection.

It is my intention to introduce a mechanism in the next version to 
overcome this limitation.
