a 'Dg>+@sddlZddlZddlZddlmZmZmZmZddlm Z ddl m Z e e ZeZeZGdddejdZGdd d eZGd d d eZGd d d eZdS)N)net performancesubputil)ifconfig)Iproute2c@seZdZdZedddZddedddd Zej e dd d d Z e d ddZ e d ddZe ed ddZddZddedddZedddZedddZe eddd Ze d d!d"Zedd#d$Zedd%d&Ze d d'd(Zdd)e eed*d+d,Ze ed-d.d/Ze ed-d0d1Zej e ed-d2d3Ze ed-d4d5Ze ed-d6d7Ze ed-d8d9Z e ed-d:d;Z!ej dd<ddd=d>Z"d?d)e edd@dAdBZ#ej e ed-dCdDZ$dS)E NetworkingaThe root of the Networking hierarchy in cloud-init. This is part of an ongoing refactor in the cloud-init codebase, for more details see "``cloudinit.net`` -> ``cloudinit.distros.networking`` Hierarchy" in CONTRIBUTING.rst for full details. returncCstSN)r_get_current_rename_infoselfr@/usr/lib/python3.9/site-packages/cloudinit/distros/networking.pyr sz#Networking._get_current_rename_infoN current_info)renamesr cCstj||dS)Nr)r_rename_interfaces)rrrrrrrszNetworking._rename_interfacesnetcfgr cCsdS)z7Read the network config and rename devices accordingly.Nrrrrrrapply_network_config_names sz%Networking.apply_network_config_names)devnamecCs t|Sr )r device_devidrrrrrr$szNetworking.device_devidcCs t|Sr )r device_driverrrrrr'szNetworking.device_drivercCs t|Sr )rextract_physdevsrrrrr*szNetworking.extract_physdevscCstSr )rfind_fallback_nicr rrrr-szNetworking.find_fallback_nicF config_drivercCs tj|dS)Nr)rgenerate_fallback_config)rr rrrr!0sz#Networking.generate_fallback_configcCstSr )rget_devicelistr rrrr"3szNetworking.get_devicelistcCstSr )rget_ib_hwaddrs_by_interfacer rrrr#6sz&Networking.get_ib_hwaddrs_by_interface)rethernet_formatcCs t||Sr )rget_ib_interface_hwaddr)rrr$rrrr%9sz"Networking.get_ib_interface_hwaddrcCs t|Sr )rget_interface_macrrrrr&>szNetworking.get_interface_maccCstSr )rget_interfacesr rrrr'AszNetworking.get_interfacescCstSr )rget_interfaces_by_macr rrrr(Dsz Networking.get_interfaces_by_maccCs t|Sr )r get_masterrrrrr)GszNetworking.get_masterstrict)rr+r cCstj||dS)Nr*)rinterface_has_own_mac)rrr+rrrr,Jsz Networking.interface_has_own_macrr cCs t|Sr )ris_bondrrrrr.OszNetworking.is_bondcCs t|Sr )r is_bridgerrrrr/RszNetworking.is_bridgecCsdS)z Is ``devname`` a physical network device? Examples of non-physical network devices: bonds, bridges, tunnels, loopback devices. Nrrrrr is_physicalUszNetworking.is_physicalcCs t|Sr )r is_renamedrrrrr1^szNetworking.is_renamedcCs t|Sr )ris_uprrrrr2aszNetworking.is_upcCs t|Sr )ris_vlanrrrrr3dszNetworking.is_vlancCs t|Sr )rmaster_is_bridge_or_bondrrrrr4gsz#Networking.master_is_bridge_or_bondexistscCsdS)aWait for device population in the system to complete. :param exists: An optional optimisation. If given, only perform as much of the settle process as is required for the given DeviceName to be present in the system. (This may include skipping the settle process entirely, if the device already exists.) :type exists: Optional[DeviceName] Nrrr6rrrsettlejszNetworking.settleT)rr+r c Cs||}tdd|D}t|}|}tdD]}||rZtddS| |}td||D]P} || } d | } t j | dd |j | d Wdqt1s0Yqt|}qz0Networking.wait_for_physdevs..z*net: all expected physical devices presentNz)net: waiting for expected net devices: %szWaiting for settle or {} existsalways)Zlog_moder5z-Not all expected physical devices present: %s)rdictsetkeysr(rangeissubsetLOGdebug differenceformatrZTimedr8Zwarning RuntimeError) rrr+ZphysdevsZexpected_ifacesZ expected_macsZ present_macs_missingZmacrmsgrrrwait_for_physdevsvs(         , zNetworking.wait_for_physdevscCsdS)z=Try setting the link to up explicitly and return if it is up.Nrrrrrtry_set_link_upszNetworking.try_set_link_up)%__name__ __module__ __qualname____doc__r?r listrabcabstractmethod NetworkConfigr DeviceNamerrrrboolr!r"r#r%r&r'r(r)r,r.r/r0r1r2r3r4r8rLrMrrrrrsP    2r) metaclasscseZdZdZfddZeedddZddZe d d d d Z e e d ddZ e e d ddZe e d ddZe e d ddZe e d ddZd dd dddZe e d ddZZS) BSDNetworkingz>Implementation of networking functionality shared across BSDs.cst|_i|_tdSr )rZIfconfigifc_ifssuper__init__r  __class__rrr]s zBSDNetworking.__init__r cCs|js||jSr )r[ _update_ifsr rrrifsszBSDNetworking.ifscCs,tddg}|dr(|j|d|_dS)Nrz-ar)rrZparser[)rZifconfrrrr`szBSDNetworking._update_ifsNrcCstddS)Nz Cannot rename network interface.)rDrErrrrrsz(BSDNetworking.apply_network_config_namesr-cCs |j|jSr )rar0rrrrr0szBSDNetworking.is_physicalcCs |j|jSr )rar.rrrrr.szBSDNetworking.is_bondcCs |j|jSr )rar/rrrrr/szBSDNetworking.is_bridgecCs |j|jSr )rar3rrrrr3szBSDNetworking.is_vlancCs |j|jSr )rauprrrrr2szBSDNetworking.is_upr5cCsdS)z0BSD has no equivalent to `udevadm settle`; noop.Nrr7rrrr8szBSDNetworking.settlecCstd|dg||S)Try setting the link to up explicitly and return if it is up. Not guaranteed to bring the interface up. The caller is expected to add wait times before retrying.rrc)rr2rrrrrMszBSDNetworking.try_set_link_up)rNrOrPrQr]propertyr?rar`rUrrVrWr0r.r/r3r2r8rM __classcell__rrr^rrYs rYc@s,eZdZeddddZeedddZdS)FreeBSDNetworkingNrcCsdSr rrrrrrsz,FreeBSDNetworking.apply_network_config_namesr-cCsB|j|jsdStjdd|gddgd\}}|d|kr>dSdS) NFZdevinfoz-prr9)Zrcszdevinfo: {}: Not found T)rar0rrG)rrrIerrrrrr1s  zFreeBSDNetworking.is_renamed)rNrOrPrUrrVrWr1rrrrrgsrgc@seZdZdZeddddZeedddZee dd d Z ee dd d Z ee dd dZ ee dddZ ee dddZee dddZddddddZee dddZdS)LinuxNetworkingzCImplementation of networking functionality common to Linux distros.Nrc CsLz|||Wn2tyF}ztd||WYd}~n d}~00dS)zRead the network config and rename devices accordingly. Renames are only attempted for interfaces of type 'physical'. It is expected that the network system will create other devices with the correct name in place. z(Failed to apply network config names: %sN)rrrH)rrerrrrsz*LinuxNetworking.apply_network_config_namesr-cCs t|Sr )rget_dev_featuresrrrrrksz LinuxNetworking.get_dev_featurescCs t|Sr )rhas_netfail_standby_featurerrrrrlsz+LinuxNetworking.has_netfail_standby_featurecCs t|Sr )ris_netfailoverrrrrrmszLinuxNetworking.is_netfailovercCs t|Sr )ris_netfail_masterrrrrrnsz!LinuxNetworking.is_netfail_mastercCs t|Sr )ris_netfail_primaryrrrrrosz"LinuxNetworking.is_netfail_primarycCs t|Sr )ris_netfail_standbyrrrrrp!sz"LinuxNetworking.is_netfail_standbycCstjt|dS)NZdevice)ospathr6r sys_dev_pathrrrrr0$szLinuxNetworking.is_physicalr5r cCs"|durt|}tj|ddS)Nr5)rrsrZudevadm_settler7rrrr8's zLinuxNetworking.settlecCst|||S)rd)rZlink_upr2rrrrrM,s zLinuxNetworking.try_set_link_up)rNrOrPrQrUrrVstrrkrWrlrmrnrorpr0r8rMrrrrrisri)rSZloggingrqZ cloudinitrrrrZcloudinit.distros.parsersrZcloudinit.net.netops.iproute2rZ getLoggerrNrDrtrVr?rUABCMetarrYrgrirrrrs   2!