Re: Questions about server's use of giaddr

Jim Fletcher <jimf@dma.isg.mot.com> Sat, 03 February 1996 22:10 UTC

Received: from ietf.nri.reston.va.us by IETF.CNRI.Reston.VA.US id aa12714; 3 Feb 96 17:10 EST
Received: from CNRI.Reston.VA.US by IETF.CNRI.Reston.VA.US id aa12710; 3 Feb 96 17:10 EST
Received: from reef.bucknell.edu by CNRI.Reston.VA.US id aa01187; 3 Feb 96 17:10 EST
Received: from localhost by reef.bucknell.edu with SMTP (5.65/IDA-1.2.8) id AA09057; Sat, 3 Feb 1996 17:08:03 -0500
Date: Sat, 3 Feb 1996 17:08:03 -0500
Message-Id: <199601312036.PAA09880@macewans.dev.cdx.mot.com>
Errors-To: droms@bucknell.edu
Reply-To: dhcp-v4@bucknell.edu
Originator: dhcp-v4@bucknell.edu
X-Orig-Sender: dhcp-v4@bucknell.edu
Precedence: bulk
Sender: ietf-archive-request@IETF.CNRI.Reston.VA.US
From: Jim Fletcher <jimf@dma.isg.mot.com>
To: Multiple recipients of list <dhcp-v4@bucknell.edu>
Subject: Re: Questions about server's use of giaddr
X-Listprocessor-Version: 6.0c -- ListProcessor by Anastasios Kotsikonas
X-Comment: Discussion of DHCP for IPv4

> From droms@bucknell.edu  Wed Jan 31 05:55:54 1996
> Date: Wed, 31 Jan 1996 05:55:51 -0500
> To: jimf@dma.isg.mot.com
> From: droms@bucknell.edu (Ralph Droms)
> Subject: Re: Questions about server's use of giaddr
> Cc: dhcp-v4@bucknell.edu, dhcp-impl@bucknell.edu


Ralph Droms wrote in response to my questions...

> I think the prevailing opinion is that this function will need to be
> provided by DHCP servers.  The relay agents could also make a choice of
> which address to insert into 'giaddr'; to date, we've tried to make the
> requirements on relay agents as simple as possible and so relay agents
> don't look like good candidates.

> The idea, then, would be to include with DHCP servers some knowledge of how
> to select a client address based on 'giaddr'.  I.e., given a specific
> 'giaddr', the server has a pool of available subnets to choose from (all of
> the logical subnets that share the wire with the address in 'giaddr') and a
> policy for how to choose from that pool.

> - Ralph

Thanks for your reply Ralph.

Having a server which could make these choices would make
my problems go away.  For now however, I'll have to set giaddr
"intelligently" to try to distribute address assignments
throughout the address space defined by my logical subnets.

I think I have a way to do this giaddr assignment which will
work.  I would appreciate it if people could look this over
and let me know what they think.  Please respond to my email,
as I am still not on your lists, however I will be requesting
to get added.

First a little product background.  I am implementing the
relay agent in a Hybrid Fiber/Coax, or HFC router.
On the HFC side of the router, there are numerous pairs of
RF receivers/transmitters.  A set of IP Subnets are configured
for this HFC side of the router, however they can't be assigned
to particular RF pairs.  Hence the need for me to find a way
to set giaddr.  Note that the convention exists that the router
owns host address .1 for each subnet defined.

I think the following scheme can be used to set giaddr for
any client DHCP request I need to relay to a server.


 (1) If the packet contains the requested_ip_addr option, the router
     has a subnet defined which is valid for the address requested,
     and the address is not .1, then set giaddr to the router's
     address on the subnet.

                               ELSE

 (2) If the packet contains a non-zero ciaddr, the router has a subnet
     defined which is valid for the ciaddr present, and the ciaddr is
     not .1, then set giaddr to the router's address on the subnet.

                               ELSE

 (3) Choose giaddr from the group of subnet (.1) addresses configured
     on the router.  I will choose so that client assignments will be
     distributed across the address range defined by the set of configured
     subnets.  I think this case will only be hit for DISCOVER packets.
     If I choose giaddr from a subnet which has no more free addresses
     in it, I am assuming the client will receive no OFFERS, timeout,
     then send another DISCOVER which will get a different giaddr assignment.
     This may mean it could take a long time for a client assignment once
     my subnets start getting used up.  I'm hoping client timeouts are 
     configurable.


Thinking about how the different client packets would have giaddr set...

NOTE: Assumptions on the setting of ciaddr and requested_ip_addr option are
      based on the draft rewrite of RFC1541 (Nov 1995).  I know this is a
      no-no, but the current offical RFC isn't specific in some cases.  This
      could mean that there will be implementations where things are set 
      differently, but I think checking the option first, then ciaddr is
      the right thing to do.  I will be checking out how some current 
      implementations work, to be sure...

DISCOVER - giaddr will be set via (1) if the requested_ip_addr option is present,
           else giaddr will be selected via (3), since ciaddr is not set
           in DISCOVER packets.

REQUEST(SELECTING) - giaddr will be set via (1), as requested_ip_addr option
                     is present, and ciaddr is 0.0.0.0.  If I find this not
                     to be the case in current implementations, I'll have to
                     remember what the DISCOVER giaddr went out as, unless
                     ciaddr is set correctly, thus (2) will handle it.

REQUEST(INIT-REBOOT) - Same as REQUEST(SELECTING)

REQUEST(RENEWING) - giaddr will be set via (2), as ciaddr will be set.

REQUEST(REBINDING) - Same as REQUEST(RENEWING)

Again my big concern is that current client implementations don't
make appropriate use of ciaddr and requested_ip_addr option.  I still
think this will work, but the surest way is to analyze implementations
in the lab.

Thanks for you help,

Jim Fletcher

jimf@dma.isg.mot.com