
    Vh                        d dl mZ d dlZd dlmZ d dlmZ d dlmZ  e	d d      D  cg c]
  } dd| z  z
   c} Z
d	 Zd
 Zd Zd ZddZd Zd Zd Zd Zyc c} w )    )annotationsN)pack)	inet_ntoa)zip	         c                    t        |       j                  d      }t        |      dk(  sy|D ]  }	 t        |      t        vrt
         y# t
        $ r Y  yw xY w)N.   FT)strsplitlenintVALID_MASKS
ValueError)valpartsparts      S/home/dcms/DCMS/lib/python3.12/site-packages/ansible/module_utils/common/network.py
is_netmaskr      sf    HNN3Eu:? 	4y+   ,   		s   A

	AAc                T    	 dt        |       cxk  xr dk  S c S # t        $ r Y yw xY w)Nr       F)r   r   )r   s    r   
is_masklenr      s3    CH""""" s     	''c                    t        |       st        d      d}t        dt        |       z
  d      D ]
  }|d|z  z  } t	        t        d|            S )z! converts a masklen to a netmask zinvalid value for masklenr   r      z>I)r   r   ranger   r   r   )r   bitsis      r   
to_netmaskr    &   sZ    c?455D2C="% a T$%&&    c                    t        |       st        d| z        t               }| j                  d      D ]6  }t	        t        |            j                  d      }|j                  |       8 t        |      S )z! converts a netmask to a masklen zinvalid value for netmask: %sr   1)	r   r   listr   binr   countappendsum)r   r   xoctets       r   
to_masklenr+   2   sh    c?83>??6DYYs^ CF!!#&E t9r!   c           	        	 t        |      st        t        |      }t        |      }| j                  d      } |j                  d      }t               }t        | |      D ]4  \  }}|j                  t        t        |      t        |      z               6 |rdj                  |      dt        |      S dj                  |      d|S # t        $ r t	        |      }Y w xY w)z; converts an addr / mask pair to a subnet in cidr notation r    /)r   r   r   r    r+   r   r$   r   r'   r   join)addrmaskdotted_notationcidrnetworks_addrs_masks          r   	to_subnetr7   ?   s     $4y$ ::c?D::c?DfGdD/ 7s3v;V4567 ((7+Z-=>>hhw'..   $ s   'C C&%C&c                p   | j                  d      d   }g }|j                  d      D ]#  }|j                  |       t        |      dk(  s# n t        |      dk  r|j                  d       d}|D ]#  }|dk7  r|t        |      z  }|t        d      z  }% |j	                  d      s|t        d      z  }|S )ze IPv6 addresses are eight groupings. The first four groupings (64 bits) comprise the subnet address. ::r   :r    r   r'   r   r   endswithr0   ipv6_prefixfound_groupsgroupnetwork_addrs        r   to_ipv6_subnetrC   U   s     **T"1%K L""3' E"|! <1D! L !D=CJ&LC !   &C r!   c                p   | j                  d      d   }g }|j                  d      D ]#  }|j                  |       t        |      dk(  s# n t        |      dk  r|j                  d       d}|D ]#  }|dk7  r|t        |      z  }|t        d      z  }% |j	                  d      s|t        d      z  }|S )zg IPv6 addresses are eight groupings. The first three groupings (48 bits) comprise the network address. r9   r   r:      r;   r<   r>   s        r   to_ipv6_networkrF   s   s     **T"1%K L""3' E"|! <1D! L !D=CJ&LC !   &C r!   c                    d}| j                  d      D ]+  }|t        t        |            dd j                  d      z  }- |S )z converts a netmask to bits r;   r   r	   N   )r   r%   r   zfill)r   r   r*   s      r   to_bitsrJ      sG    D3 -CJ#))!,,-Kr!   c                |    t        j                  d      }t        |j                  | j	                                     S )z
    Validate MAC address for given string
    Args:
        mac_address: string to validate as MAC address

    Returns: (Boolean) True if string is valid MAC address, otherwise False
    z/[0-9a-f]{2}([-:])[0-9a-f]{2}(\1[0-9a-f]{2}){4}$)recompileboolmatchlower)mac_addressmac_addr_regexs     r   is_macrS      s2     ZZ RSN$$[%6%6%89::r!   )F)
__future__r   rL   structr   socketr   ansible.module_utils.six.movesr   r   r   r   r   r    r+   r7   rC   rF   rJ   rS   )r   s   0r   <module>rX      si    # 	   . %*!QK0qtad{0
	'
/,<8	;Q 1s   A