Trunk Network的实现模型如下图
![](https://i-blog.csdnimg.cn/blog_migrate/315b7e50b2dc9f942f44a02cb0cac8e2.png)
br-trunk和br-int之间的接口和接口模式分两类:Parent Port和Sub Port,分别对应Trunk模型中的Parent Port和Sub Port。这两类接口都是Access模式。需要特别指定的是,1个需要aware VLAN的VM,对应一个Trunk Bridge,两者是1:1的关系。
下面通过一个计算节点内外VLAN ID转换的示例来说明转换方法。如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/ea1d5f85827d081eb5c0ac8ff07cf7bd.png)
TP1对应Trunk Networking中的Parent Port,TS1对应Trunk Network中的Sub Port。同时,我们假设VM3的内外VLAN ID转换规则如下表所示。
![](https://i-blog.csdnimg.cn/blog_migrate/3abc50460376b318870cdda9d9adfe73.png)
为了方便描述,易于理解,这里只列举1个Sub Port、1个aware VLAN ID。
不管带不带tag的报文,Neutron的设计需要追求一点:对于br-int来说,保持透明,保持不变。所以,br-trunk与br-int之间的VLAN接口模式是Access。从br-int的视角来看,报文是从VM发出直接到达br-int,还是中间经过了br-trunk的转换,它都不关心,也看不到。它只知道从它的不同端口进入了Untag报文,它需要给这些报文打上不同的Tag(而且这些Tag还不能重复),然后送到br-ethx(或者br-tun)中去。
下面分4种情况,简单介绍Trunk Network方案的内外VID的转换。
一 普通报文从VM发出
如下图
![](https://i-blog.csdnimg.cn/blog_migrate/de7b5a9811fca0fa75830725f0581f68.png)
二 普通报文进入VM
如下图
![](https://i-blog.csdnimg.cn/blog_migrate/feda15141f87847e0af02195f5159f2f.png)
三 VLAN报文从VM发出
如下图
![](https://i-blog.csdnimg.cn/blog_migrate/3e64ee8c2997edff2b5670d171e4c7ba.png)
四 VLAN报文进入VM
如下图
![](https://i-blog.csdnimg.cn/blog_migrate/a343d4548cde85a151e9f0b9a748715c.png)
五 Trunk network小结
只是通过新增而不是通过修改原来代码的方式以增加新特性(功能),对于任何一个软件系统来说,都不是一个简单的事情。Neutron在Newton版本通过Trunk Network方案以支持VLAN aware VM新特性,就做到这一点。
Trunk Network方案没有修改原来的实现模型和资源模型,而是在原来的实现模型中引入了Trunk Bridge。在原来的资源模型中引入了Trunk资源模型,对原来的代码并没做太大的修改,就支持了VLAN aware VM新特性,做的非常漂亮。
我们用一个表格来总结Trunk Networking所面临的问题及其解决方案。
![](https://i-blog.csdnimg.cn/blog_migrate/8d33cabea05afa3dd34b39ae096b2b52.png)