[openstack-dev] [Neutron][L3] Representing a networks connected by routers

Tidwell, Ryan ryan.tidwell at hp.com
Thu Jul 23 17:01:54 UTC 2015

" John Belamaric made a good point that the closest thing that we have to representing an L3 domain right now is a subnet pool."

This is actually a really good point.  If you take the example of a L3 network that spans segments, you could put something like a /16 into a subnet pool.  That /16 can be allocated in smaller, non-uniformly sized chunks across multiple network segments.  As you allocate chunks of the /16 across network segments, you need only identify the subnets allocated from your subnet pool and their associated Neutron networks to be able to stitch those segments together to represent the whole L3 network.  Conveniently, we currently enforce the restriction that subnets on any given segment must all be allocated from the same subnet pool which makes stitching segments together in this way feasible.  This is an existing construct that seems to model the world the way you want.  I think we should at least explore this angle, there are still potentially some gotchas with regard to the interface with Nova that I haven't though.


-----Original Message-----
From: Carl Baldwin [mailto:carl at ecbaldwin.net] 
Sent: Thursday, July 23, 2015 9:26 AM
To: OpenStack Development Mailing List (not for usage questions)
Subject: Re: [openstack-dev] [Neutron][L3] Representing a networks connected by routers

On Wed, Jul 22, 2015 at 3:00 PM, Kevin Benton <blak111 at gmail.com> wrote:
> I proposed the port scheduling RFE to deal with the part about 
> selecting a network that is appropriate for the port based on provided 
> hints and host_id. [1]

Thanks for the pointer.  I hadn't paid much attention to this RFE yet.

>>the neutron network might have been conceived as being just "a 
>>broadcast  domain" but, in practice, it is L2 and L3.
> I disagree with this and I think we need to be very clear on what our 
> API constructs mean. If we don't, we will have constant proposals to 
> smear the boundaries between things, which is sort of what we are 
> running into already.

We ran in to this long ago.

> Today I can create a standalone network and attach ports to it. That 
> network is just an L2 broadcast domain and has no IP addresses or any 
> L3 info associated with it, but the ports can communicate via L2. The 
> network doesn't know anything about the l3 addresses and just forwards 
> the traffic according to L2 semantics.

Sure, a network *can* be just L2.  But, my point is that when you start adding L3 on top of that network by adding subnets, the subnets don't fully encapsulate the L3 part.  A subnet is just a cidr but that's not enough.  To illustrate, the IPv4 part of the L3 network can have several cidrs lumped together.  The full IPv4 story on that network includes the collection of all of the IPv4 subnets associated to the network.  That collection belongs to the network.  Without going to the network, there is no way to describe L3 addresses that is more than just a single cidr.

> The neutron subnet provides L3 addressing info that can be associated 
> with an arbitrary neutron network. To route between subnets, we attach 
> routers to subnets. It doesn't matter if those subnets are on the same 
> or different networks, because it's L3 and it doesn't matter.
> It is conceivable that we could remove the requirement for a subnet to 
> have an underlying network in the fully-routed case. However, that 
> would mean we would need to remove the requirement for a port to have 
> a network as well (unless this is only used for floating IPs).

If we remove the requirement then we have no way to group cidrs together.  A single cidr isn't sufficient to express the addressing needed for an L3 network.  My L3 network could be a bunch of disjoint or fragmented cidrs lumped together.  They should all be considered equivalent addresses, they just aren't lined up in a perfect little cidr.

John Belamaric made a good point that the closest thing that we have to representing an L3 domain right now is a subnet pool.  I'm still thinking about how we might be able to use this concept to help out this situation.


> 1. https://bugs.launchpad.net/neutron/+bug/1469668

OpenStack Development Mailing List (not for usage questions)
Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe

More information about the OpenStack-dev mailing list