that was very useful

thank you.


/jim
"Shout it out G.L.O.R.I.A." (Them [Van Morrison])


On Wed, 27 Jun 2001, JINMEI Tatuya / [ISO-2022-JP] 神明達哉 wrote:

> The following is a summary of discussions about the semantics of
> sin6_scope_id (aka flat 32 vs 4+28 split issue) we have had in the API
> list.  Since some of key members of this issue are (accidentally) not
> on the list, I think this list is the best place to get a consensus.
> 
> Please note that the text below is not the conclusion, but just a
> memo.  I'd like to hear from others about the issues on this list
> based on the memo, discuss further if necessary, and try to get a
> consensus hopefully in a week or so.  Then the result will (probably)
> be in the next revision of the scope architecture draft.
> 
> In the following memo, I'll first show you definitions of the
> semantics, which will fall into 3 categories.  I'll then describe (a
> summary of) opinions about each definition that I've heard in the
> discussions.  I tried to be fair when describing them, but if I was
> wrong on some points or I missed something, please point it out.
> 
> DEFINITIONS
> 
> We have seen 3 definitions of semantics.  I call them
> (A) the flat 32
> (B) the strict 4+28 split
> (C) the flexible 4+28 split
> respectively.
> 
> (A) The flat 32 uses the whole space (i.e. 32 bits) per scope.  The
> uniqueness of IDs are only ensured in a single scope.
> 
> Both (B) and (C) embed a scope type (4 bits) into the ID space.  IDs
> in a particular scope is specified by the remaining 28 bits.  And the
> 28-bit ID for a particular zone must also be unique in the scope.
> We can choose the 28-bit ID for a particular zone in any way, but
> Francis showed a concrete example: the interface index of a particular
> interface that belongs to the zone.  I'll use this definition in the
> following examples, with the smallest interface index in the zone as
> the particular one.
> 
> The only difference between (B) and (C) is about the usage.  In "the
> strict strip",
> - if an ID is given with a (non-unspecified) address, the ID must be
>   in the same scope type as the address in any context (including in a
>   sockaddr_in6 structure).
> - even if the accompanying address is unspecified, we do not allow a
>   non-zero ID for specifying a particular (or any) zone of a particular
>   scope type.
> 
> "The flexible split", on the other hand, does not have any such
> restriction; we allow any combination of a (scoped) address and a zone
> ID, provided that the scope type of the ID is equal to or smaller than
> the scope type of the address.
> 
> Examples.
> 
> The following topology is described in the scope architecture draft.
> 
>       --------------------------------------------------------------- 
>      | a node                                                        | 
>      |                                                               | 
>      |                                                               | 
>      |                                                               | 
>      |                                                               | 
>      |                                                               | 
>      |  /--------------------site1--------------------\ /--site2--\  | 
>      |                                                               | 
>      |  /--link1--\ /--------link2--------\ /--link3--\ /--link4--\  | 
>      |                                                               | 
>      |  /--intf1--\ /--intf2--\ /--intf3--\ /--intf4--\ /--intf5--\  | 
>       --------------------------------------------------------------- 
>              :           |           |           |           | 
>              :           |           |           |           | 
>              :           |           |           |           | 
>          (imaginary    =================      a point-       a 
>           loopback        an Ethernet         to-point     tunnel 
>             link)                               link 
> 
> A) Using the "flat 32", the zone indices are as follows:
> 
>   ID(intf1) = 1, ID(intf2) = 2, ..., ID(intf5) = 5
>   ID(link1) = 1, ID(link2) = 2, ..., ID(link4) = 4
>   ID(site1) = 1, ID(site2) = 2
> 
> where ID(x) means the zone identifier for the zone "x".
> 
> B&C) Using the strict/flexible 4+28 split, the zone indices are
> 
>   ID(intf1) = 0x10000001, ID(intf2) = 0x10000002, ..., ID(intf5) = 0x10000005
>   ID(link1) = 0x20000001, ID(link2) = 0x20000002,
>       ID(link3) = 0x20000004, ID(link4) = 0x20000005
>   ID(site1) = 0x50000001, ID(site2) = 0x50000005
> 
> (assuming scope types like the "scop" field for multicast addresses.)
> 
> And, if we take (B), the strict 4+28 split, then
>   if we have a sockaddr_in6 structure, whose sin6_addr member is
>   "fec0::1234", then its sin6_scope_id must be in the site scope, like
>   0x50000001.
>   if we have a sockaddr_in6 structure, whose sin6_addr member is
>   in6addr_any, then its sin6_scope_id must be 0.
> 
> If we take (C), the flexible split, then
>   if we have a sockaddr_in6 structure, whose sin6_addr member is
>   "fec0::1234", then the scope type of its sin6_scope_id can be any
>   scope which is equal to or smaller than the site scope.
>   if we have a sockaddr_in6 structure, whose sin6_addr member is
>   in6addr_any, the the sin6_scope_id is in any type of scope.
> 
> Example usages of the flexibility are:
> 
>   1) binding to "any interface in a given scope zone".  This would mean,
>      when sa.sin6_addr = unspecified, and sa.sin6_scope_id = 0x50000001,
>      then bind(&sa) specifies the kernel to accept any packet arrived at
>      the interface which belongs to the site zone 1.
>   2) when sa.sin6_addr = fec0::1234, and sa.sin6_scope_id =
>      0x20000002, then sendto(&sa) specifies the kernel to send the
>      corresponding packet to one of the interfaces in the link zone 2.
>   3) allow IPV6_MULTICAST_IF (and IPV6_JOIN_GROUP) to use a scope
>      id rather than just an ifindex, to let the stack choose the
>      best interface in a given scope zone, similar to passing
>      0 today.  
> 
> OPINIONS
> 
> Opinions from those who support A (including Steve and I):
> 
> A-1 It provides backward compatibility to existing implementations that
>     use interface indices as link indices, assuming one-to-one mapping
>     between interfaces and links.
> A-2 There is no chance of misusages such as specifying a site zone ID
>     for a link-local address.
> A-3 Since the IDs are typically specified with a (non-unspecified)
>     address, like in the sockaddr_in6 structure, and the accompanying
>     address itself provides the appropriate scope type, the strict
>     split does not have much merit.  We'd rather keep it "simple" to
>     avoid misconfiguration described in A-2.
> A-4 The flexible split would make comparison of two scoped addresses
>     (in a same scope type) more complicated; we may have a
>     chance to compare {sin6_addr = fec0::1234, sin6_scope_id =
>     0x50000001} and {sin6_addr = fec0::1234, sin6_scope_id = 0x20000002}
>     which may or may not specify a same single node, and we can't just
>     compare the scope ID part by a "simple" operator '='.
> A-5 It would be the most readable, especially when we use digit integers
>     for IDs, as specified in the current scope architecture draft.
>     (e.g. recall the fact that 0x50000001 = 1342177281).  Even if we
>     allow hex integers or a dotted notation like 5.1, the flat ID
>     would still be the most readable, and we'll see some situations
>     that we want to type the ID itself, not an alias name of the ID,
>     in some configuration files or something.
> A-6 We've never seen realistic examples of the flexibility that the
>     flexible split would provide.  On the other hand, we will see (or
>     even have seen) some situations where we just want to disambigute
>     scoped addresses (with the same scope type of the address).  We
>     should implement the "advanced" flexibility in a kind of advanced
>     API, not using a part of the basic API; sin6_scope_id.
> 
> (Note: I'm probably biased, and might not be fair, in this section.  I
> have to say that some people pointed out that some of the points were
> just a matter of taste, and some points did not provide much
> difference.  Also, please make additions in the items below, and
> corrections to the items above.)
> 
> Opinions from those who support B (including Francis and Vlad - please
> add if I miss anyone):
> 
> B-1 It provides global uniqueness.
> B-2 It provides zone IDs by themselves.
> B-3 It has no possible conflict with the interface index space.
> B-4 As for the readability, we should change the current definition,
>     so that hex integers or the dotted notation would be allowed.
> B-5 It can provide the backward compatibility described in A-2 above and
>     the readability in A-5, by specifying that the scope type 0 means
>     the same scope type of the corresponding address (assuming a non
>     unspecified address is given).
> B-6 the flexibility that the flexible split would provide is a "too
>     much" or "too clever" stuff, and should not be in the basic API
>     (basically the same argument as A-6 above)
> 
> Opinions from those who support C (including Dave and Markku - please
> add if I miss anyone):
> 
> C-1: the same benefits as B-1 to B-3 are applied to C.
> C-2: the same argument as B-4 as for the readability.
> C-3: the example usages described in "Example usages of the
>      flexibility" above really benefits of this approach.
> C-4: we should not add API knobs to implement the flexibility, because
>      it would confuse the users.
> 
>                                       JINMEI, Tatuya
>                                       Communication Platform Lab.
>                                       Corporate R&D Center, Toshiba Corp.
>                                       [EMAIL PROTECTED]
> --------------------------------------------------------------------
> IETF IPng Working Group Mailing List
> IPng Home Page:                      http://playground.sun.com/ipng
> FTP archive:                      ftp://playground.sun.com/pub/ipng
> Direct all administrative requests to [EMAIL PROTECTED]
> --------------------------------------------------------------------
> 

--------------------------------------------------------------------
IETF IPng Working Group Mailing List
IPng Home Page:                      http://playground.sun.com/ipng
FTP archive:                      ftp://playground.sun.com/pub/ipng
Direct all administrative requests to [EMAIL PROTECTED]
--------------------------------------------------------------------

Reply via email to