作者:闫兴安
1.4 代码流程分析
1.4.1 dhcp port如何进行bind_port
plugin中,在创建port时会进行bind_port。所谓bind是指端口id、主机名、网络属性进行绑定。
其中网络属性包括:网络ID、网络类型、物理网络名称、网络segment-id。
bind_port的过程:
1) 按序遍历所有mech_driver,挨个进行bind_port。
2) 如果某个mech_driver报异常,记log,然后继续进行下一个mech driver的bind。
3) 如果某个mech_driver没有进行绑定,继续进行下一个mech driver的bind。
4) 只要有一个mech_driver bind成功,就返回。(ovs driver不支持多层bind)
5) 如果所有的mech_driver都绑定失败,记vif_type为binding_failed。
我们的环境中mech_driver只有openvswitch,所以来看下ovs driver的binding:
1) 遍历所有agent,如果是down的,不进行绑定,记Log;如果是active的,执行下面步骤。
2) 检查agent的上报过来的配置。包括:网络类型是否在agent的配置文件中配置;如果是flat和vlan类型的网络,还检查物理网络名称是否在agent的配置文件中配置;
3) 如果上述检查不通过,不进行绑定;如果检查通过,进行绑定。
4) 只要有一个agent绑定成功,就返回,表示ovs driver绑定成功。
5) 如果所有的agent都没有进行绑定,就会出现binding_failed。
1.4.2 dhcp-agent与plugin的同步
dhcp-agent主动同步过程:
1) 启动时,首先从namespace名字中获取网络信息,记录到cache(内存)中。后续从plugin获取的所有信息都记录在cache里。之后进行同步时依据的就是这个cache。
2) 可以同步指定的网