Subject: RE: [dhcwg] Question on Relay address field

From: "Bernie Volz (EUD)" <[email-masked]>
Date: Sat, 22 Sep 2001 12:46:45 -0500

Note that recent changes for the -20 text address this in two ways:

1) The address given to the server is used to determine the link on which the client is located. This really (IMHO) should be a global address. But, I would recommend that relay implementors allow this to be set for a link (as to which address should be used). By default, I agree with Jim - use the/a global address.

2) If a relay needs specific information that it cannot communicate simply by supplying the address, we have added a relay option where it can pass the server anything it wants to use to identify how the relay needs to return the packet to the client. This information is sent back by the server in the Relay-Reply.

And, as Jim commented, this isn't really just a DHCP issue - it is more of a network issue in general. But if a particular implementation has a way to solve it, DHCPv6 is OK because it can be used to pass it on (such that the relay can return the reply).

- Bernie Volz

-----Original Message-----
From: Jim Bound [mailto:[email-masked]]
Sent: Saturday, September 22, 2001 12:53 PM
To: Anil Kumar Reddy. S
Cc: Dhcwg (E-mail)
Subject: Re: [dhcwg] Question on Relay address field

Anil,

OK I get it.  Multiple issues here and they are not dhcp issues though.
We in dhcp must assume you can get the interface address it came in on
within an IPv6 implementation and thats not our job here to work that. But
let me try to suggest how I would do it.

First assume you can get the interface index from 2292-bis or you do it on
your implementation via some other means (sysctl/ioctl).  You then do an 
if_nameindex() call to get all interface names from the base api not the
advanced api.

4.3 Return All Interface Names and Indexes

The if_nameindex structure holds the information about a single
interface and is defined as a result of including the <net/if.h> header.

   struct if_nameindex {
     unsigned int   if_index;  /* 1, 2, ... */
     char          *if_name;   /* null terminated name: "le0", ... */
   };

The final function returns an array of if_nameindex structures, one
structure per interface.

   struct if_nameindex  *if_nameindex(void);

Then we would need to call our implementation defined functions to return
each address for each interface name.

At this point the relay needs to use the proper scoping to get to the
server.  Because we are embedding the address in the relay-forward option
we must do what IPv6 will do with source address selection for sending IP
packets in general which is select the proper scope for the relay-address.

I would argue until IPv6 scoping is more widely implemented and its not
even been tested at our bake-offs for interoperability just yet the relay
needs to configure a table for each interface at its node and depending on
the scope of the server IP dst address select the best relay-address for
that interface.  The default should be a global address for each address
interface at the relay.

The other thing we can do is add to 2292-bis or build draft in ipng for
extensiion to the base api to return all addresses to if_nameindex(). The
base API is frozen and in the IEEE becoming standard now. So we cannot
change that now or break existing production implementations.

But I do not think this systems programming implementation issue should
affect the dhcp ipv6 standard at all and we should move forward. This is
an API issue again not dhcpv6 protocol issue.

And we can all make this work.

My input to you.

/jim

On Sat, 22 Sep 2001, Anil Kumar Reddy. S wrote:

> Hi Jim,
> 
>     As per IPv6 rfc2292bis (draft), through the socket option IPV6_RECVPKTINFO
>     we can get the index of the interface through which the client packet is
>     received. But the index will be same for all aliases and the
>     primary address of the interface. So, if we get the interface index
>     and try to get the address of that, then we get the link local address only
> 
>     because the primary address of an interface is always link local.
>     (  Hope, I am clear in explaining   ;-))  )
> 
>     In this case, how the relay is expected to work, when an interface
>     is configured with the addresses given by Vijay ?? Which address it has
>     to consider ??
> 
> - Anil
> 
> Jim Bound wrote:
> 
> > Vijay,
> >
> > I am not clear why you can't tell the alias.  This will be a function of
> > the scoping code for IPv6 as the interface in your example is using
> > scoping (your aliases) and that is code that would have to be part of the
> > base IPv6 stack to return from the API index routines?
> >
> > I am not clear this is a dhcp problem but an IPv6 implementation problem
> > in general we all are working on now?
> >
> > Maybe I am missing your issue though?
> >
> > thanks
> >
> > /jim
> >
> > On Fri, 21 Sep 2001, Vijay Bhaskar A K wrote:
> >
> > > The latest draft on DHCPv6 says that, the client sends the
> > > request to All Agents multicast address. The Agents put its
> > > own address of the interface in which the client packet is
> > > recieved, in the Relay-forward packet.
> > >
> > > Assume the configuration one of the interface of the Agent is as follows.
> > >
> > > lan0   -  A link local address
> > > lan0:1 -  A site local address
> > > lan0:2 -  A gloabal address
> > >
> > > Assume the packet is received from the client in the lan0 interface of the
> > > agent.
> > > Using our latest IPv6 APIs, we can identify this.
> > > But, we CANT identify at what alias interface ( lan0 or lan0:1 or lan0:2)
> > > in which the packet is received.
> > >
> > > Here the problem is, the relay cannot put its own link local address
> > > in the relay address field in the relay forward packet, since this
> > > info is useless.
> > >
> > > The question, SHOULD the relay put the address in lan0:1 (site local
> > > address) or lan0:2 (global address)in the relay address field?
> > > The DECISION of the relay is very important that depending up on the
> > > address it is sending the relay address field only, the server can
> > > allocate address to the client. Is there any solution to this
> > > problem?
> > > ~Vijay
> > >
> > >
> > >
> > > ____Vijay_Bhaskar_A_K____
> > > ______Inet_Services______
> > > ________HP_ISO___________
> > > _____Phone:_2051424______
> > > ___Pager:_9624_371137____
> > >
> > >
> > > _______________________________________________
> > > dhcwg mailing list
> > > [email-masked]
> > > http://www1.ietf.org/mailman/listinfo/dhcwg
> > >
> >
> > _______________________________________________
> > dhcwg mailing list
> > [email-masked]
> > http://www1.ietf.org/mailman/listinfo/dhcwg
> 
> --
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
> |  Anil Kumar Reddy .S
> |  Senior Software Engineer,
> |  Hewlett-Packard,
> |  Bangalore, INDIA.
> |
> |  Telnet # 847-1426
> |  Ph. 2251554 Ext: 1426
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
> 
> 
> 

_______________________________________________
dhcwg mailing list
[email-masked]
http://www1.ietf.org/mailman/listinfo/dhcwg

---

From: Ralph Droms <[email-masked]>
Date: Tue, 25 Sep 2001 08:14:04 -0400

Let me see if I can successfully summarize the issues and give
my review:

Protocol specification - we need to make clear that the specification
for the relay agent allows for the relay agent to use any of its
addresses assigned to the same link as the client is attached.  The
current text from the -20 rev is, IMHO, almost right:

17.1. Relaying of client messages

    When a Relay receives a valid client message, it constructs a
    Relay-forward message.  The relay places an address with a prefix
    assigned to the link on which the client should be assigned an
    address in the link-prefix field.  This address will be used by the
    server to determine the link from which the client should be assigned
    an address and other configuration information.

I was about to suggest a clarification to edit the second sentence
to begin: "The relay places one of its own addresses with a prefix..."
But, I don't think that's necessary - the address in the link-prefix
field doesn't even need to belong to the relay.  All that's required
is that the prefix of the address be assigned to the right link.

Implementability - we need to make sure that what we've specified
in section 17.1 is actually implementable.  If we agree that the
text in 17.1 is OK, then there is no *requirement* that the address
be selected from the addresses assigned to the interfaces.  All that's
required is that the relay agent have some way to pick an appropriate
address for each inbound message from a client.  Implementors may
choose to use some static configuration, independent of interface
addresses, or may choose to develop a list at initialization in the
relay agent through the interface API, or may choose to look up the
list of addresses dynamically (again through the interface API) as
each message is received.

If we agree that the current text in 17.1 (rev -20) is implementable,
we can leave the text unchanged...

- Ralph

---

From: "Bernie Volz (EUD)" <[email-masked]>
Date: Tue, 25 Sep 2001 11:32:46 -0500

I think it is fine to leave the text in 17.1 as is.

The address does need to be meaningful to the DHCP server but that is made clear in the third sentence.

- Bernie

---

From: "Bernie Volz (EUD)" <[email-masked]>
Date: Tue, 25 Sep 2001 11:36:29 -0500

I don't think that DHCP servers need necessary know all of the architecture information. They and the relays must be configured appropriately such that the relays provide the DHCP server(s) the correct information.

In the particular cases mentioned, I agree with Ralph. In a either address should work. In b, the site-local is all that can be used.

I think it best we specify that a relay should be configureable to return specific information and if it hasn't been configured, it should use the most "global" information it has (either a global address or site-local). It can't use link-local addresses.

-----Original Message-----
From: Ralph Droms [mailto:[email-masked]]
Sent: Tuesday, September 25, 2001 12:24 PM
To: Dhcwg (E-mail)
Subject: RE: [dhcwg] Question on Relay address field

Good questions - here are my answers:

a) Doesn't matter - DHCP server MUST be configured with
    enough architecture information to be able to map
    any address to a link
b) Same answer - DHCP server MUST know site-local
    addresses to do the address->link mapping

Perhaps there's a need to include a few words explaining
about what the DHCP server MUST know about...

- Ralph

At 09:14 PM 9/25/2001 +0530, Vijay Bhaskar A K wrote:

>The question here is,
>a) If there are two global addresses of different subnet
>prefix in that interface, what address it has to choose?
>b) If there is no global address in that interface, can
>the relay choose a site-local address?