前言:

当nova服务发送了创建port的restful调用信息之后,在neutron服务中有相应的处理函数来处理调用。根据restful的工作原理,是按照

paste.ini文件中配置好的流程去处理该条调用。本节从neutron代码中的create_port()函数开始说起。

简要流程:

下面是调用的流程图。

 详细代码:

以上是简要流程图,下面是具体的代码分析。

create_port()

功能:

  1. 调用create_port_db()函数产生port数据。
  2. 更新安全组
  3. 绑定port

_create_port_db()

功能:

  1. 获取dhcp配置
  2. 调用create_port_db()函数
  3. 转化port_db为字典数据形式

create_port_db()

功能:

  1. nova传入的port信息
  2. 生成port的uuid
  3. 获取租户并判断是否合法
  4. 构造port数据字典
  5. 判断是否制定mac地址,指定了mac则用该mac创建port,没有则先生成再创建port
  6. 创建port数据结构
  7. create_db_port_obj函数中生成mac地址
  8. allocate_ips_for_port_and_store函数中生成ip地址填充port

----------------------------------------------------------------------mac地址创建分析开始---------------------------------------------------------------

create_db_port_obj()

功能:

  1. 判断mac地址是否为空
  2. mac地址不为空,判断mac地址是否在使用当中
  3. mac地址为空则调用generate_mac()函数生成mac

generate_mac()

功能:

  1. 返回get_random_mac()函数
  2. get_random_mac()函数生成mac地址。

mac地址生成分析:

首先读取配置文件中的mac地址,前六位都是固定的。然后生成后六位,使用python的random函数生成随机数。最后将数据组装起来。

形成一个完成mac地址。

----------------------------------------------------------------------mac地址创建分析结束---------------------------------------------------------------

----------------------------------------------------------------------ip地址创建分析开始------------------------------------------------------------------

allocate_ips_for_port()

功能:

  1. 调用函数allocate_ips_for_port函数分配ip
  2. 将所有分配的ip地址写入到neutron数据ipallocations表中。

allocate_ips_for_port()

功能:

  1. 判断用户是否指定了ip地址
  2. 如果指定ip地址,调用-test_fixed_ips_for_port()函数验证其合法性
  3. 如果没有指定,则调用ip地址管理驱动ipam_allocate_ips()函数分配ip地址

关于ipam地址管理,里面有一些有意思的知识,看以查看这篇博文。

http://blog.csdn.net/u013553406/article/details/51700198

ipam_allocate_ips()

功能:

  1. 加载ipam框架,工厂方法等。
  2. 调用ipam_driver的allocate()函数产生ip地址

allocate()

功能:

调用generate_ip()函数生成ip地址。

generate_ip()

功能:

该函数是真正生成ip地址的函数。原理是从neutron数据库中的ip可用表中选择出多个ip地址,将ip地址添加到变量ip_allocations中,

然后经过一些列的数据转化,从所有候选的ip地址中选择第一个ip地址做为最总生成的ip。,然后将ip地址返回。

----------------------------------------------------------------------ip地址创建分析结束------------------------------------------------------------------

如下图是neutron数据库中有关ip地址的数据表,其中分为neutron-server管理的ipallocaion*和ipam插件管理的ipamallocation*。

每创建一个网络,都会在neutron-server中生成一条相关ip数据表。如下的子网在数据库中分别记录。VM虚机是选择了哪一个子网,在生成ip时就从该子网的数据库中分配ip地址。

总结:

以上是分析了在neutron-server中创建port里生成mac和ip地址的过程,简单总结

  • mac地址是根据配置文件和随机数函数生成
  • ip地址是根据数据库中的地址池分配

虚拟机创建流程中neutron代码分析(二)的更多相关文章

  1. 虚拟机创建流程中neutron代码分析(三)

    前言: 当neutron-server创建了port信息,将port信息写入数据库中.流程返回到nova服务端,接着nova创建的流程继续走.在计算节点中neutron-agent同样要完成很多的工作 ...

  2. 虚拟机创建流程中neutron代码分析(一)

    前言: 在openstack的学习当中有一说法就是网络占学习时间的百分之七十.这个说法或许有夸大的成分,但不可否认的是openstack中的 网络是及其重要的部分,并且难度也是相当大.试图通过nova ...

  3. linux内核中链表代码分析---list.h头文件分析(二)【转】

    转自:http://blog.chinaunix.net/uid-30254565-id-5637598.html linux内核中链表代码分析---list.h头文件分析(二) 16年2月28日16 ...

  4. OpenStack Nova虚拟机创建流程解析

    https://yikun.github.io/2017/09/27/OpenStack-Nova%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%9B%E5%BB%BA%E6%B5 ...

  5. Linux内核启动代码分析二之开发板相关驱动程序加载分析

    Linux内核启动代码分析二之开发板相关驱动程序加载分析 1 从linux开始启动的函数start_kernel开始分析,该函数位于linux-2.6.22/init/main.c  start_ke ...

  6. Android4.0图库Gallery2代码分析(二) 数据管理和数据加载

    Android4.0图库Gallery2代码分析(二) 数据管理和数据加载 2012-09-07 11:19 8152人阅读 评论(12) 收藏 举报 代码分析android相册优化工作 Androi ...

  7. 8 云计算系列之Horizon的安装与虚拟机创建流程

    preface 在上一章节中,我们可以在无web管理界面上创建并启动虚拟机,虽然可以这么做,但是敲命令太繁琐,所以此时我们可以安装openstack web管理界面,通过web界面的图形化操作open ...

  8. linux内核中链表代码分析---list.h头文件分析(一)【转】

    转自:http://blog.chinaunix.net/uid-30254565-id-5637596.html linux内核中链表代码分析---list.h头文件分析(一) 16年2月27日17 ...

  9. git 一般的开发流程中的代码管理

    一般的开发流程中的代码管理 1. 从版本库中下载代码 git clone ssh://wenbin@192.168.1.3:29418/mustang-web 2. 针对某个feature(比如ins ...

随机推荐

  1. [oracle 使用(1)] win7/10 下Oracle10g的安装与卸载

    1.安装前提 首先要确保你的电脑之前没有安装过,或者安装过但是已经卸载干净了.至于如何查看是否卸载干净可以看看我后面的Oracle卸载步骤. 2.Oracle的安装. 2.1.首先自己在Oracle官 ...

  2. ajax 轮询 和 php长连接

     只看加粗的字体 js   部分       1:  ajax 成功回调函数中 一定要用时间函数间隔调用  get_comment(). get_comments('init'); function ...

  3. MongoDB自动增长

    MongoDB 没有像SQL一样有自动增长的功能,如果我们需要实现ObjectId自动增长功能,可以通过编程的方式来实现.步骤如下: 1. 创建counters集合: db.createCollect ...

  4. BZOJ-2463

    2463: [中山市选2009]谁能赢呢? Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2321  Solved: 1711[Submit][Sta ...

  5. Linux中常见问题(磁盘 定时任务)

    第1章 linux无法上网 1)     第一步,先ping域名. ping www.baidu.com 2)再ping一个公网ip , ping 223.5.5.5/223.6.6.6/114.11 ...

  6. 实用 .htaccess 用法大全【转载】

    转载:http://www.techug.com/htaccess-snippets 这里收集的是各种实用的 .htaccess 代码片段,你能想到的用法几乎全在这里. 免责声明: 虽然将这些代码片段 ...

  7. scrollWidth,clientWidth,offsetWiddth,innerWinth 元素定位

    getBoundingClientRect()方法.它返回一个对象,其中包含了left.right.top.bottom四个属性,分别对应了该元素的左上角和右下角相对于浏览器窗口(viewport)左 ...

  8. Xcode修改个性化注释

    1.首先找到Xcode进入包内容 2.依次进入/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Develo ...

  9. 树莓派配置允许WINDOWS远程桌面 x11nvc+xrdp

    20171109 网上很多设置教程都比较老旧,于是自己整理一下顺便分享下 开启SSH后,使用PUTTY连接. 安装x11vnc sudo apt-get install x11vnc 设置密码 sud ...

  10. 使用dynamic特性处理XML文档

    处理XML文档是我们经常需要进行的一项工作,尤其是在进行网络服务相关编程时,比如更新RSS等.在.NET 3.5中引入了Linq To XML,使得XML文档的读写已经大大简化,而.NET 4.0中最 ...