Neutron - Automatic network mtu
现在neutron支持创建不同的网络指定不同的mtu,这个应用场景主要是vlan和vxlan混用的情况下。
具体配置
1、neutron.confnetwork_device_mtu=1450#生效的设备:neutron网络节点上的qdhcp和qrouternetworknamespace的qr,qg和ns接口以及对应的vethtap设备/usr/lib/python2.7/site-packages/neutron/agent/linux/interface.pyifself.conf.network_device_mtu:ns_dev.link.set_mtu(self.conf.network_device_mtu)ifself.conf.ovs_use_veth:root_dev.link.set_mtu(self.conf.network_device_mtu)
2、ml2_conf.inipath_mtu=9000segment_mtu=1500
flat网络类型如何获取MTU:/usr/lib/python2.7/site-packages/neutron/plugins/ml2/drivers/type_flat.pyclassFlatTypeDriver(helpers.BaseTypeDriver):#父类BaseTypeDriver"""ManagestateforflatnetworkswithML2.TheFlatTypeDriverimplementsthe'flat'network_type.FlatnetworksegmentsprovideconnectivitybetweenVMsandotherdevicesusinganyconnectedIEEE802.1Dconformantphysical_network,withouttheuseofVLANtags,tunneling,orothersegmentationmechanisms.Thereforeatmostoneflatnetworksegmentcanexistoneachavailablephysical_network."""def__init__(self):super(FlatTypeDriver,self).__init__()self._parse_networks(cfg.CONF.ml2_type_flat.flat_networks)#如果定义了flatprovider的physet_mtus,取physical_network_mtus和segment_mtu的最小值defget_mtu(self,physical_network):seg_mtu=super(FlatTypeDriver,self).get_mtu()mtu=[]ifseg_mtu>0:mtu.append(seg_mtu)ifphysical_networkinself.physnet_mtus:mtu.append(int(self.physnet_mtus[physical_network]))returnmin(mtu)ifmtuelse0/usr/lib/python2.7/site-packages/neutron/plugins/ml2/drivers/helpers.pyclassBaseTypeDriver(api.TypeDriver):"""BaseTypeDriverforfunctionscommontoSegmentandflat."""def__init__(self):try:self.physnet_mtus=utils.parse_mappings(cfg.CONF.ml2.physical_network_mtus)exceptException:self.physnet_mtus=[]defget_mtu(self,physical_network=None):returncfg.CONF.ml2.segment_mtu
vlan网络类型如何获取MTU:classVlanTypeDriver(helpers.SegmentTypeDriver):#父类SegmentTypeDriver"""ManagestateforVLANnetworkswithML2.TheVlanTypeDriverimplementsthe'vlan'network_type.VLANnetworksegmentsprovideconnectivitybetweenVMsandotherdevicesusinganyconnectedIEEE802.1Qconformantphysical_networksegmentedintovirtualnetworksviaIEEE802.1Qheaders.Upto4094VLANnetworksegmentscanexistoneachavailablephysical_network."""def__init__(self):super(VlanTypeDriver,self).__init__(VlanAllocation)self._parse_network_vlan_ranges()#vlan的获取mtu方式和flat一样defget_mtu(self,physical_network):seg_mtu=super(VlanTypeDriver,self).get_mtu()mtu=[]ifseg_mtu>0:mtu.append(seg_mtu)ifphysical_networkinself.physnet_mtus:mtu.append(int(self.physnet_mtus[physical_network]))returnmin(mtu)ifmtuelse0/usr/lib/python2.7/site-packages/neutron/plugins/ml2/drivers/helpers.pyclassBaseTypeDriver(api.TypeDriver):"""BaseTypeDriverforfunctionscommontoSegmentandflat."""def__init__(self):try:self.physnet_mtus=utils.parse_mappings(cfg.CONF.ml2.physical_network_mtus)exceptException:self.physnet_mtus=[]defget_mtu(self,physical_network=None):returncfg.CONF.ml2.segment_mtuclassSegmentTypeDriver(BaseTypeDriver):"""SegmentTypeDriverforsegmentallocation.Providemethodshelpingtoperformsegmentallocationfullyorpartiallyspecified."""def__init__(self,model):super(SegmentTypeDriver,self).__init__()self.model=modelself.primary_keys=set(dict(model.__table__.columns))self.primary_keys.remove("allocated")
vxlan网络类型如何获取MTU:classVxlanTypeDriver(type_tunnel.EndpointTunnelTypeDriver):#父类EndpointTunnelTypeDriverdef__init__(self):super(VxlanTypeDriver,self).__init__(VxlanAllocation,VxlanEndpoints)defget_type(self):returnp_const.TYPE_VXLANdefinitialize(self):try:self._initialize(cfg.CONF.ml2_type_vxlan.vni_ranges)exceptn_exc.NetworkTunnelRangeError:LOG.exception(_LE("Failedtoparsevni_ranges.""Serviceterminated!"))raiseSystemExit()defget_endpoints(self):"""Geteveryvxlanendpointsfromdatabase."""vxlan_endpoints=self._get_endpoints()return[{'ip_address':vxlan_endpoint.ip_address,'udp_port':vxlan_endpoint.udp_port,'host':vxlan_endpoint.host}forvxlan_endpointinvxlan_endpoints]defadd_endpoint(self,ip,host,udp_port=p_const.VXLAN_UDP_PORT):returnself._add_endpoint(ip,host,udp_port=udp_port)defget_mtu(self,physical_network=None):mtu=super(VxlanTypeDriver,self).get_mtu()returnmtu-p_const.VXLAN_ENCAP_OVERHEADifmtuelse0#mtu-vxlan开销,自动减去vxlanoverheadfromneutron.plugins.commonimportconstantsasp_const/usr/lib/python2.7/site-packages/neutron/plugins/common/constants.py#NetworkTypeMTUoverheadGENEVE_ENCAP_MIN_OVERHEAD=50GRE_ENCAP_OVERHEAD=42VXLAN_ENCAP_OVERHEAD=50#vxlan开销classEndpointTunnelTypeDriver(TunnelTypeDriver):classTunnelTypeDriver(helpers.SegmentTypeDriver):"""DefinestableabstractinterfaceforML2typedrivers.tunneltypenetworksrelyontunnelendpoints.Thisclassdefinesabstractmethodstomanagetheseendpoints."""defget_mtu(self,physical_network=None):seg_mtu=super(TunnelTypeDriver,self).get_mtu()mtu=[]ifseg_mtu>0:mtu.append(seg_mtu)ifcfg.CONF.ml2.path_mtu>0:mtu.append(cfg.CONF.ml2.path_mtu)returnmin(mtu)ifmtuelse0
gre网络类型如何获取MTU:classGreTypeDriver(type_tunnel.EndpointTunnelTypeDriver):#父类也是EndpointTunnelTypeDriverdef__init__(self):super(GreTypeDriver,self).__init__(GreAllocation,GreEndpoints)defget_type(self):returnp_const.TYPE_GREdefinitialize(self):try:self._initialize(cfg.CONF.ml2_type_gre.tunnel_id_ranges)exceptn_exc.NetworkTunnelRangeError:LOG.exception(_LE("Failedtoparsetunnel_id_ranges.""Serviceterminated!"))raiseSystemExit()defget_endpoints(self):"""Geteverygreendpointsfromdatabase."""gre_endpoints=self._get_endpoints()return[{'ip_address':gre_endpoint.ip_address,'host':gre_endpoint.host}forgre_endpointingre_endpoints]defadd_endpoint(self,ip,host):returnself._add_endpoint(ip,host)defget_mtu(self,physical_network=None):mtu=super(GreTypeDriver,self).get_mtu(physical_network)returnmtu-p_const.GRE_ENCAP_OVERHEADifmtuelse0#mtu-gre开销,自动减去greoverheadfromneutron.plugins.commonimportconstantsasp_const/usr/lib/python2.7/site-packages/neutron/plugins/common/constants.py#NetworkTypeMTUoverheadGENEVE_ENCAP_MIN_OVERHEAD=50GRE_ENCAP_OVERHEAD=42#gre开销,为什么是42,还不清楚VXLAN_ENCAP_OVERHEAD=50#vxlan开销L版发现neutron多了种网络类型geneve,Geneve简介,暂时还不知道怎么玩的http://blog.csdn.net/yeasy/article/details/39928153
3、neutron.confadvertise_mtu=true以前的做法:[root@controller2~(keystone_admin)]#cat/etc/neutron/dnsmasq-neutron.conf#对所有network都生效dhcp-option-force=26,1450#现在可以把这个去掉log-facility=/var/log/neutron/neutron-dnsmasq.log/usr/lib/python2.7/site-packages/neutron/agent/linux/dhcp.pyclassDnsmasq(DhcpLocalProcess):#Theportsthatneedtobeopenedwhensecuritypoliciesareactive#ontheNeutronportusedforDHCP.Theseareprovidedasaconvenience#forusersofthisclass.ifcfg.CONF.advertise_mtu:mtu=self.network.mtu#Donotadvertiseunknownmtuifmtu>0:cmd.append('--dhcp-option-force=option:mtu,%d'%mtu)#看这里#Capthelimitbecausecreatinglotsofsubnetscaninflate#thispossibleleasecap.cmd.append('--dhcp-lease-max=%d'%min(possible_leases,self.conf.dnsmasq_lease_max))cmd.append('--conf-file=%s'%self.conf.dnsmasq_config_file)ifself.conf.dnsmasq_dns_servers:cmd.extend('--server=%s'%serverforserverinself.conf.dnsmasq_dns_servers)
参考链接
http://www.cnblogs.com/sammyliu/p/5079898.html
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。