class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2,
external_net_db.External_net_db_mixin,
sg_db_rpc.SecurityGroupServerRpcMixin,
agentschedulers_db.DhcpAgentSchedulerDbMixin,
addr_pair_db.AllowedAddressPairsMixin,
extradhcpopt_db.ExtraDhcpOptMixin):
从Ml2Plugin的定义来看,它通过继承众多的Mixin,能够支持很多功能。由于具体设备的操作由Agent来完成,ML2 Plugin本身实际上大都是完成基于数据库的一些操作,致力于正确有效管理network/port/subnet这些资源及相互关系,同时正确地与Agent交互从而完成虚拟网络部署。类Ml2Plugin的众多基类中,除了SecurityGroupServerRpcMixin,其他都是与数据库操作相关。
除了三种核心的资源,ML2也支持许多扩展的资源,类Ml2Plugin需要实现这些资源的操作接口,以供收到用户请求时资源对应的Controller来调用。ML2支持的扩展资源在类Ml2Plugin里有定义:
_supported_extension_aliases = ["provider", "external-net", "binding",