1.命令行以及代码解析

neutron net-create public --shared --provider:physical_network public
--provider:network_type flat

如果是vlan,还需要加上segment_id

neutron net-create public --shared --provider:physical_network public
--provider:network_type vlan --provider:segmentation_id 110

当然, 如果你是vxlan,命令行需要这么敲:

https://www.server-world.info/en/note?os=CentOS_7&p=openstack_pike&f=20

注意,这个是没有physical_network的!!,然后segmentation_id也是数据库自己给的


# create internal network
[root@dlp ~(keystone)]# openstack network create int_net --provider-network-type vxlan
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | UP                                   |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2017-09-06T07:49:58Z                 |
| description               |                                      |
| dns_domain                | None                                 |
| id                        | b70e8cdc-8c61-4a3b-8dfc-060cba8f82f9 |
| ipv4_address_scope        | None                                 |
| ipv6_address_scope        | None                                 |
| is_default                | False                                |
| is_vlan_transparent       | None                                 |
| mtu                       | 1450                                 |
| name                      | int_net                              |
| port_security_enabled     | True                                 |
| project_id                | 09158bee8c6441519bf3a3743d936566     |
| provider:network_type     | vxlan                                |
| provider:physical_network | None                                 |
| provider:segmentation_id  | 89                                   |
| qos_policy_id             | None                                 |
| revision_number           | 2                                    |
| router:external           | Internal                             |
| segments                  | None                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tags                      |                                      |
| updated_at                | 2017-09-06T07:49:58Z                 |
+---------------------------+--------------------------------------+

如果是创建外部网络 (provider-network,无论是vlan还是flat都是可以的)

[root@dlp ~(keystone)]# openstack network create \
--provider-physical-network physnet1 \
--provider-network-type flat --external ext_net
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | UP                                   |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2017-09-06T07:51:02Z                 |
| description               |                                      |
| dns_domain                | None                                 |
| id                        | e27d7f02-773f-4e11-8aa9-e70ebc05ab76 |
| ipv4_address_scope        | None                                 |
| ipv6_address_scope        | None                                 |
| is_default                | False                                |
| is_vlan_transparent       | None                                 |
| mtu                       | 1500                                 |
| name                      | ext_net                              |
| port_security_enabled     | True                                 |
| project_id                | 09158bee8c6441519bf3a3743d936566     |
| provider:network_type     | flat                                 |
| provider:physical_network | physnet1                             |
| provider:segmentation_id  | None                                 |
| qos_policy_id             | None                                 |
| revision_number           | 3                                    |
| router:external           | External                             |
| segments                  | None                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tags                      |                                      |
| updated_at                | 2017-09-06T07:51:02Z                 |
+---------------------------+--------------------------------------+

看一看plugin:

    def create_network(self, context, network):net_data = network['network']segments = self._process_provider_create(net_data)tenant_id = self._get_tenant_id_for_create(context, net_data)session = context.sessionwith session.begin(subtransactions=True):self._ensure_default_security_group(context, tenant_id)result = super(Ml2Plugin, self).create_network(context, network)network_id = result['id']self._process_l3_create(context, result, net_data)# REVISIT(rkukura): Consider moving all segment management# to TypeManager.if segments:for segment in segments:self.type_manager.reserve_provider_segment(session,segment)db.add_network_segment(session, network_id, segment)else:segment = self.type_manager.allocate_tenant_segment(session)db.add_network_segment(session, network_id, segment)

看一看

self.type_manager.reserve_provider_segment(session, segment)\

    def reserve_provider_segment(self, session, segment):network_type = segment.get(api.NETWORK_TYPE)driver = self.drivers.get(network_type)driver.obj.reserve_provider_segment(session, segment)

1.获取driver

2.执行reserve_provider_segment(session, segment)

看看type_vlan下面的driver:

    def reserve_provider_segment(self, session, segment):physical_network = segment[api.PHYSICAL_NETWORK]vlan_id = segment[api.SEGMENTATION_ID]with session.begin(subtransactions=True):try:alloc = (session.query(VlanAllocation).filter_by(physical_network=physical_network,vlan_id=vlan_id).with_lockmode('update').one())if alloc.allocated:raise exc.VlanIdInUse(vlan_id=vlan_id,physical_network=physical_network)LOG.debug(_("Reserving specific vlan %(vlan_id)s on physical ""network %(physical_network)s from pool"),{'vlan_id': vlan_id,'physical_network': physical_network})alloc.allocated = Trueexcept sa.orm.exc.NoResultFound:LOG.debug(_("Reserving specific vlan %(vlan_id)s on physical ""network %(physical_network)s outside pool"),{'vlan_id': vlan_id,'physical_network': physical_network})alloc = VlanAllocation(physical_network=physical_network,vlan_id=vlan_id,allocated=True)session.add(alloc)

新的vlan_id应该是在数据库中不存在的,这样就可以直接在数据库中创建了

再看一看self.type_manager.allocate_tenant_segment(session):

    def allocate_tenant_segment(self, session):for network_type in self.tenant_network_types:driver = self.drivers.get(network_type)segment = driver.obj.allocate_tenant_segment(session)if segment:return segmentraise exc.NoNetworkAvailable()def allocate_tenant_segment(self, session):with session.begin(subtransactions=True):alloc = (session.query(VlanAllocation).filter_by(allocated=False).with_lockmode('update').first())if alloc:LOG.debug(_("Allocating vlan %(vlan_id)s on physical network ""%(physical_network)s from pool"),{'vlan_id': alloc.vlan_id,'physical_network': alloc.physical_network})alloc.allocated = Truereturn {api.NETWORK_TYPE: p_const.TYPE_VLAN,api.PHYSICAL_NETWORK: alloc.physical_network,api.SEGMENTATION_ID: alloc.vlan_id}

2.配置文件

https://www.server-world.info/en/note?os=CentOS_6&p=openstack_icehouse&f=16

[root@dlp ~(keystone)]# vi /etc/neutron/plugins/ml2/ml2_conf.ini
# line 36: add
[ml2_type_vlan]
network_vlan_ranges = physnet1:1000:2999
# add at the last line
[ovs]
tenant_network_type = vlan
bridge_mappings = physnet1:br-eth1

让我们看看这三个参数都有什么用,首先这三个都是很重要的配置文件

neutron\plugins\openvswitch\common\config.py:

DEFAULT_BRIDGE_MAPPINGS = []
DEFAULT_VLAN_RANGES = []
DEFAULT_TUNNEL_RANGES = []
DEFAULT_TUNNEL_TYPES = []ovs_opts = [cfg.StrOpt('integration_bridge', default='br-int',help=_("Integration bridge to use")),cfg.BoolOpt('enable_tunneling', default=False,help=_("Enable tunneling support")),cfg.StrOpt('tunnel_bridge', default='br-tun',help=_("Tunnel bridge to use")),cfg.StrOpt('int_peer_patch_port', default='patch-tun',help=_("Peer patch port in integration bridge for tunnel ""bridge")),cfg.StrOpt('tun_peer_patch_port', default='patch-int',help=_("Peer patch port in tunnel bridge for integration ""bridge")),cfg.StrOpt('local_ip', default='',help=_("Local IP address of GRE tunnel endpoints.")),cfg.ListOpt('bridge_mappings',default=DEFAULT_BRIDGE_MAPPINGS,help=_("List of <physical_network>:<bridge>")),cfg.StrOpt('tenant_network_type', default='local',help=_("Network type for tenant networks ""(local, vlan, gre, vxlan, or none)")),cfg.ListOpt('network_vlan_ranges',default=DEFAULT_VLAN_RANGES,help=_("List of <physical_network>:<vlan_min>:<vlan_max> ""or <physical_network>")),cfg.ListOpt('tunnel_id_ranges',default=DEFAULT_TUNNEL_RANGES,help=_("List of <tun_min>:<tun_max>")),cfg.StrOpt('tunnel_type', default='',help=_("The type of tunnels to use when utilizing tunnels, ""either 'gre' or 'vxlan'")),
]

1.bridge_mappings = physnet1: br-eth1

    def setup_physical_bridges(self, bridge_mappings):'''Setup the physical network bridges.Creates physical network bridges and links them to theintegration bridge using veths.:param bridge_mappings: map physical network names to bridge names.'''self.phys_brs = {}self.int_ofports = {}self.phys_ofports = {}ip_wrapper = ip_lib.IPWrapper(self.root_helper)# 分成了physical_network 和 bridgefor physical_network, bridge in bridge_mappings.iteritems():LOG.info(_("Mapping physical network %(physical_network)s to ""bridge %(bridge)s"),{'physical_network': physical_network,'bridge': bridge})# setup physical bridgeif not ip_lib.device_exists(bridge, self.root_helper):LOG.error(_("Bridge %(bridge)s for physical network ""%(physical_network)s does not exist. Agent ""terminated!"),{'physical_network': physical_network,'bridge': bridge})sys.exit(1)br = ovs_lib.OVSBridge(bridge, self.root_helper) # 名字叫做br-eth1br.remove_all_flows()br.add_flow(priority=1, actions="normal")self.phys_brs[physical_network] = br# create veth to patch physical bridge with integration bridgeint_veth_name = self.get_veth_name(constants.VETH_INTEGRATION_PREFIX, bridge)self.int_br.delete_port(int_veth_name)phys_veth_name = self.get_veth_name(constants.VETH_PHYSICAL_PREFIX, bridge)br.delete_port(phys_veth_name)if ip_lib.device_exists(int_veth_name, self.root_helper):ip_lib.IPDevice(int_veth_name, self.root_helper).link.delete()# Give udev a chance to process its rules here, to avoid# race conditions between commands launched by udev rules# and the subsequent call to ip_wrapper.add_vethutils.execute(['/sbin/udevadm', 'settle', '--timeout=10'])int_veth, phys_veth = ip_wrapper.add_veth(int_veth_name,phys_veth_name)self.int_ofports[physical_network] = self.int_br.add_port(int_veth)self.phys_ofports[physical_network] = br.add_port(phys_veth)# block all untranslated traffic over veth between bridgesself.int_br.add_flow(priority=2,in_port=self.int_ofports[physical_network],actions="drop")br.add_flow(priority=2,in_port=self.phys_ofports[physical_network],actions="drop")# enable veth to pass trafficint_veth.link.set_up()phys_veth.link.set_up()if self.veth_mtu:# set up mtu size for veth interfacesint_veth.link.set_mtu(self.veth_mtu)phys_veth.link.set_mtu(self.veth_mtu)

2.network_vlan_ranges = physnet1:1000:2999

[总结篇3]Provider_network的含义相关推荐

  1. 网络篇-网络分层的含义

    OSI 七层模型 这是一个理想化的模型,给我们的网络划分了层次. 我们可以将复杂的内容简单化,每一层都专人做专事 [最底层]物理层:只关心如何传输数据,传输的是比特流 数据链路层:主要关心的是将两个设 ...

  2. php正则表达式 包含特殊字符,php正则表达式的特殊字符含义

    一篇关于正则表达式特殊字符含义的文章,希望对大家有所帮助. 字符/ 意义:对于字符,通常表示按字面意义,指出接着的字符为特殊字符,不作解释. 例如:/b/匹配字符'b',通过在b 前面加一个反斜杠,也 ...

  3. 车载以太网之DoIP协议_第一篇

    车载以太网之DoIP协议_第一篇 1.DoIP含义 1.1 DoIP使用场景 1.2 DoIP在Autosar中的位置 2.以太网协议 2.1 物理层与数据链路层 2.2 网络层与传输层 2.3 Do ...

  4. 2017,AI偏见为何如此受关注?

    来源:亿欧 概要:从荒谬到令人不寒而栗,算法偏见在社会中产生越来越大的影响,而且这一问题已经暴露多年.但直到2017年,人们对AI算法偏见的公众意识似乎才达到了一个临界点. 佛罗里达州的一项犯罪预测算 ...

  5. 在excel工作表中c1单元格_已知Excel工作表中A1单元格和B1单元格的值分别为“电子科技大学”、“信息中心”,要求在C1单元格显示“...

    已知Excel工作表中A1单元格和B1单元格的值分别为"电子科技大学"."信息中心",要求在C1单元格显示" 更多相关问题 所谓犯罪现象的特性,是指为 ...

  6. NLP︱句子级、词语级以及句子-词语之间相似性(相关名称:文档特征、词特征、词权重)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 关于相似性以及文档特征.词特征有太多种说法.弄 ...

  7. 优秀课件笔记之视听巧记汉英成语2

    *i 恭敬 成语 五体投地 英译 admire somebody from the bottom of one's heart 解释 比喻崇敬钦佩到极点. 例句 他的文章写得真好,同学们个个佩服得五体 ...

  8. java环境变量user.home详解

    java环境变量user.home详解 java user.home user.home含义 查看user.home 修改user.home log4j中使用 java user.home 今天梳理项 ...

  9. STM32深入实践教程目录

    更新时间:2021年8月5日 目前总文章数为88篇,后序会不断更新并整理目录,感谢支持! 目录 更新时间:2021年8月5日 STM32 HAL库学习系列 STM32CubeMX学习使用 STM32C ...

最新文章

  1. 分享 10 个超实用的 Python 编程技巧
  2. 迁移学习:如何为您的机器学习问题选择正确的预训练模型
  3. jodd忽略ssl证书_Jodd - Java界的瑞士军刀,无法想象的轻量级工具包
  4. WDS系列--Windows Deployment Services概述篇
  5. JavaScript实现MaximumSubarray最大子阵列(Brute Force蛮力解决方案)算法(附完整源码)
  6. word 公式编号 右侧对齐_写论文要求公式居中编号右对齐的方法
  7. Centos搭建SVN服务器及配置文件
  8. using(){},Close(),Dispose()的区别
  9. 56 SD配置-科目分配-定义物料科目设置组
  10. java 数据源调用_实战分享: Spring boot 调用之间实现动态数据源
  11. 萌新学习Python爬取B站弹幕+R语言分词demo说明
  12. mysql为何不支持开窗函数?
  13. 课节3: 图游走类模型1-deepwalk与node2vec
  14. windows批处理运行java程序
  15. 设计模式入门-工厂模式
  16. php soapenv:server.userexception,SoapFault - faultcode: 'soap:Server' faultstring
  17. C#局域网聊天软件 适合公司内部聊天 类qq旺旺 可实时监控桌面 商用
  18. 对我启发最大的数学学习方法
  19. 深度学习框架:动态图 vs 静态图
  20. centos8 配置DNS服务

热门文章

  1. 完成动态根据类别动态填充区域颜色
  2. 几款最新的解谜单机小游戏
  3. JavaScript学习与实践(8)
  4. 设计模式实战 - 责任链模式
  5. 简解Css - 多变的边框
  6. Laravel之路——file缓存修改为redis缓存
  7. python中eval与json.loads对json的处理
  8. LAMP中apache的配置步骤
  9. 刚开始走向工作岗位初遇到的一些问题
  10. dns服务器ip地址 常用列表