a ì)g¶ã@s¦ddlmZmZmZeZddlZddlmZddl m Z ddl m Z dd„e ddƒDƒZd d „Zd d „Zd d„Zdd„Zddd„Zdd„Zdd„Zdd„Zdd„ZdS)é)Úabsolute_importÚdivisionÚprint_functionN)Úpack)Ú inet_ntoa)ÚzipcCsg|]}dd|‘qS)éé©)Ú.0Úir r úG/usr/lib/python3.9/site-packages/ansible/module_utils/common/network.pyÚ óré c CsXt|ƒ d¡}t|ƒdksdS|D]0}zt|ƒtvr8t‚Wq"tyPYdS0q"dS)NÚ.éFT)ÚstrÚsplitÚlenÚintÚ VALID_MASKSÚ ValueError)ÚvalÚpartsÚpartr r r Ú is_netmasks    rcCs8zdt|ƒkodknWSty2YdS0dS)Nré F)rr)rr r r Ú is_masklen s rcCsFt|ƒstdƒ‚d}tdt|ƒdƒD]}|d|>O}q&ttd|ƒƒS)z! converts a masklen to a netmask zinvalid value for masklenrréz>I)rrÚrangerrr)rÚbitsr r r r Ú to_netmask's r"cCsNt|ƒstd|ƒ‚tƒ}| d¡D] }tt|ƒƒ d¡}| |¡q$t|ƒS)z! converts a netmask to a masklen zinvalid value for netmask: %srÚ1) rrÚlistrÚbinrÚcountÚappendÚsum)rr!ÚxÚoctetr r r Ú to_masklen3s  r+FcCs°z t|ƒst‚t|ƒ}t|ƒ}Wnty:t|ƒ}Yn0| d¡}| d¡}tƒ}t||ƒD]"\}}| t t|ƒt|ƒ@ƒ¡q`|rždd  |¡t|ƒfSdd  |¡|fS)z: coverts an addr / mask pair to a subnet in cidr notation rz%s %sz%s/%s) rrrr"r+rr$rr'rÚjoin)ÚaddrÚmaskZdotted_notationZcidrÚnetworkZs_addrZs_maskr r r Ú to_subnet@s    r0cCsš| d¡d}g}| d¡D]}| |¡t|ƒdkrqÚstructrZsocketrZansible.module_utils.six.movesrr rrrr"r+r0r8r:r=rCr r r r Ús