在H版本中,ML2 Plugin被添加意图取代所有的Core Plugin,它采用了更加灵活的结构进行实现,下图即为ML2 Plugin的实现框架。
作为一个Core Plugin,ML2自然会实现network/subnet/port三种核心资源,同时它也实现了包括Port Binding等在内的部分扩展资源。
ML2解耦了网络拓扑类型与底层的虚拟网络实现机制,并分别通过Driver的形式进行扩展,其中,不同的网络拓扑类型对应着Type Driver,由Type Manager管理,不同的网络实现机制对应着Mechanism Driver,由Mechanism Manager管理。
目前,Neutron中已经实现了Flat/GRE/VLAN/VsLAN等拓扑类型的Type Driver,也实现了Linux Birdge/Open vSwitch以及众多厂商的Mechanism Driver,通过这些众多的Driver,ML2 Plugin实现了其他Core Plugin的功能。
ML2 Plugin的源码结构为:
# neutron/plugins/ml2/
--common
--config.py -一些配置选项定义
--db.py
--driver_api.py -定义了TypeDriver和MechanismDriver基类
--driver_context.py
--drivers -各种TypeDriver和MechanismDriver的实现
--managers.py -定义TypeManager和MechanismManager类
--models.py
--plugin.py -类ML2Plugin实现
--rpc.py -与Agent进行RPC交互