
    *Ce1                         d dl mZ ddlmZmZ ddlmZmZ  G d d      Z G d d      Z	 G d	 d
      Z
 G d d      Z G d d      Z G d d      Ze G d d             Z G d d      Zy)    )	dataclass   )ffilib)_string_realloc_call_no_errorNetplanExceptionc            	       &   e Zd Zd Zdd defdZd!dedededefd	Zed"d
       Z	edefd       Z
edefd       Zedefd       Zed#d       Zed$d       Zed%d       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Z edefd       Z!edefd        Z"y)&NetDefinitionc                      || _         || _        y N)_ptr_parent)selfnp_stateptrs      0/usr/lib/python3/dist-packages/netplan/netdef.py__init__zNetDefinition.__init__   s    	      otherreturnc                 N    t        |d      sy| j                  |j                  k(  S )Nr   F)hasattrr   )r   r   s     r   __eq__zNetDefinition.__eq__   s"    uf%yyEJJ&&r   N
iface_nameiface_driver	iface_macc           
      .   t        t        j                  | j                  |r|j	                  d      nt
        j                  |r|j	                  d      nt
        j                  |r|j	                  d                  S t
        j                              S Nutf-8)boolr   netplan_netdef_match_interfacer   encoder   NULL)r   r   r   r   s       r   _match_interfacezNetDefinition._match_interface"   s~    C66II*4Jg&#(()2IW%,8L(	H I 	I ?Bhh	H I 	Ir   c                 ,    t        | j                        S r   )_NetdefAddressIteratorr   r   s    r   	addresseszNetDefinition.addresses)   s    %dii00r   c                 R    t        t        j                  | j                              S r   )r    r   netplan_netdef_get_dhcp4r   r'   s    r   dhcp4zNetDefinition.dhcp4-       C00;<<r   c                 R    t        t        j                  | j                              S r   )r    r   netplan_netdef_get_dhcp6r   r'   s    r   dhcp6zNetDefinition.dhcp61   r,   r   c                     g }t        t        j                  | j                              r|j	                  d       t        t        j
                  | j                              r|j	                  d       |S )Nipv4ipv6)r    r   "netplan_netdef_get_link_local_ipv4r   append"netplan_netdef_get_link_local_ipv6)r   	linklocals     r   
link_localzNetDefinition.link_local5   sW    	66tyyABV$66tyyABV$r   c                 ,    t        | j                        S r   )_NetdefNameserverIteratorr   r'   s    r   nameserver_addressesz"NetDefinition.nameserver_addresses>   s    (33r   c                 ,    t        | j                        S r   )_NetdefSearchDomainIteratorr   r'   s    r   nameserver_searchzNetDefinition.nameserver_searchB   s    *49955r   c                 ,    t        | j                        S r   )_NetdefRouteIteratorr   r'   s    r   routeszNetDefinition.routesF   s    #DII..r   c                       t         fd      S )Nc                 X    t        j                  j                  | t        |             S r   )r   netplan_netdef_get_macaddressr   lenbr   s    r   <lambda>z*NetDefinition.macaddress.<locals>.<lambda>L   %    s7X7XY]YbYbdegjklgm7n r   r   r'   s   `r   
macaddresszNetDefinition.macaddressJ       ,-noor   c                 R    t        t        j                  | j                              S r   )r    r   netplan_netdef_has_matchr   r'   s    r   
_has_matchzNetDefinition._has_matchN   r,   r   c                       t         fd      S )Nc                 X    t        j                  j                  | t        |             S r   )r   netplan_netdef_get_set_namer   rD   rE   s    r   rG   z(NetDefinition.set_name.<locals>.<lambda>T   %    s7V7VW[W`W`bcehijek7l r   rI   r'   s   `r   set_namezNetDefinition.set_nameR       ,-lmmr   c                 R    t        t        j                  | j                              S r   )r    r   _netplan_netdef_get_criticalr   r'   s    r   criticalzNetDefinition.criticalV   s    C44TYY?@@r   c                    t               }t        j                  | j                        x}rt	        | j
                  |      |d<   t        j                  | j                        x}rt	        | j
                  |      |d<   t        j                  | j                        x}rt	        | j
                  |      |d<   t        j                  | j                        x}rt	        | j
                  |      |d<   t        j                  | j                        x}rt	        | j
                  |      |d<   t        j                  | j                        x}rt	        | j
                  |      |d<   |S )Nsriovvlanbridgebondvrfpeer)dictr   netplan_netdef_get_sriov_linkr   r
   r   netplan_netdef_get_vlan_linknetplan_netdef_get_bridge_linknetplan_netdef_get_bond_linknetplan_netdef_get_vrf_linknetplan_netdef_get_peer_link)r   d
sriov_link	vlan_linkbridge_link	bond_linkvrf_link	peer_links           r   linkszNetDefinition.linksZ   s$   F::499EE:E&t||Z@AgJ88CC9C%dllI>AfI<<TYYGG;G'kBAhK88CC9C%dllI>AfI66tyyAA8A$T\\8<AeH 88CC9C%dllI>AfIr   c                 l    t        j                  | j                        }|t         j                  k(  ry |S r   )r   _netplan_netdef_get_vlan_idr   UINT_MAX)r   vlan_ids     r   _vlan_idzNetDefinition._vlan_idq   s*    11$))<cll"r   c                 R    t        t        j                  | j                              S r   )r    r   %_netplan_netdef_get_sriov_vlan_filterr   r'   s    r   _has_sriov_vlan_filterz$NetDefinition._has_sriov_vlan_filterx   s    C==diiHIIr   c                     t        j                  t        j                  t        j                  | j
                                    j                  d      S r   )r   stringr   netplan_backend_namenetplan_netdef_get_backendr   decoder'   s    r   backendzNetDefinition.backend|   s:    zz#2233Q3QRVR[R[3\]^eefmnnr   c                     t        j                  t        j                  t        j                  | j
                                    j                  d      S r   )r   rw   r   netplan_def_type_namenetplan_netdef_get_typer   rz   r'   s    r   typezNetDefinition.type   s:    zz#33C4O4OPTPYPY4Z[\ccdkllr   c                       t         fd      S )Nc                 X    t        j                  j                  | t        |             S r   )r   netplan_netdef_get_idr   rD   rE   s    r   rG   z"NetDefinition.id.<locals>.<lambda>   s%    s7P7PQUQZQZ\]_bcd_e7f r   rI   r'   s   `r   idzNetDefinition.id   s    ,-fggr   c                       t         fd      S )Nc                 X    t        j                  j                  | t        |             S r   )r   netplan_netdef_get_filepathr   rD   rE   s    r   rG   z(NetDefinition.filepath.<locals>.<lambda>   rR   r   rI   r'   s   `r   filepathzNetDefinition.filepath   rT   r   c                       t         fd      S )Nc                 X    t        j                  j                  | t        |             S r   )r   (_netplan_netdef_get_embedded_switch_moder   rD   rE   s    r   rG   z5NetDefinition._embedded_switch_mode.<locals>.<lambda>   s%    s7c7cdhdmdmopruvwrx7y r   rI   r'   s   `r   _embedded_switch_modez#NetDefinition._embedded_switch_mode   s    ,-yzzr   c                 R    t        t        j                  | j                              S r   )r    r   2_netplan_netdef_get_delay_virtual_functions_rebindr   r'   s    r   _delay_virtual_functions_rebindz-NetDefinition._delay_virtual_functions_rebind   s    CJJ499UVVr   c                     t        j                  d      }t        j                  | j                  j
                  | j
                  |      }|dk  r|d   t        fd      }t        |      |S )NzNetplanError **r   c                 D    t        j                  | t        |             S r   )r   netplan_error_messagerD   )rF   errs    r   rG   z)NetDefinition._vf_count.<locals>.<lambda>   s    #:S:STWYZ\_`a\b:c r   )r   newr   #_netplan_state_get_vf_count_for_defr   r   r   r   )r   refcountmsgr   s       @r   	_vf_countzNetDefinition._vf_count   s`    gg'(778I8I499VYZ19a&C/0cdC"3''r   c                       t         fd      S )Nc                 X    t        j                  j                  | t        |             S r   )r   _netplan_netdef_get_bond_moder   rD   rE   s    r   rG   z*NetDefinition._bond_mode.<locals>.<lambda>   rH   r   rI   r'   s   `r   
_bond_modezNetDefinition._bond_mode   rK   r   c                 R    t        t        j                  | j                              S )z
        Returns True if the interface is a compound interface (bond or bridge),
        and its configuration is trivial, without any variation from the defaults.
        )r    r   '_netplan_netdef_is_trivial_compound_itfr   r'   s    r   _is_trivial_compound_itfz&NetDefinition._is_trivial_compound_itf   s     C??		JKKr   )NNN)r   r&   )r   r9   )r   r<   )r   r?   )#__name__
__module____qualname__r   r    r   strr$   propertyr(   r+   r/   listr7   r:   r=   r@   rJ   rN   rS   rW   r_   rm   intrr   ru   r{   r   r   r   r   r   r   r   r    r   r   r
   r
      s    'O ' '
I3 IS I\_ Iko I 1 1 =t = = =t = = D   4 4 6 6 / / pC p p =D = = n# n n A$ A A t  , #   J J J o o o mc m m hC h h n# n n {s { { W W W 3   pC p p L$ L Lr   r
   c                   ,    e Zd ZddefdZd Zd Zd Zy)NetDefinitionIteratorNdev_typec                     || _         |r|j                  d      nt        j                  }t	        j
                  |j                  |      | _        y r   )r   r"   r   r#   r   &_netplan_state_new_netdef_pertype_iterr   iterator)r   r   r   np_types       r   r   zNetDefinitionIterator.__init__   s8     .6(//'*CHHBB8==RYZr   c                 B    t        j                  | j                         y r   )r   !_netplan_netdef_pertype_iter_freer   r'   s    r   __del__zNetDefinitionIterator.__del__   s    --dmm<r   c                     | S r   r   r'   s    r   __iter__zNetDefinitionIterator.__iter__       r   c                 |    t        j                  | j                        }|st        t	        | j
                  |      S r   )r   !_netplan_netdef_pertype_iter_nextr   StopIterationr
   r   r   
next_values     r   __next__zNetDefinitionIterator.__next__   s0    ::4==I
T]]J77r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r      s    [3 [=8r   r   c                   ,    e Zd ZdededefdZdefdZy)NetplanAddressaddresslifetimelabelc                 .    || _         || _        || _        y r   )r   r   r   )r   r   r   r   s       r   r   zNetplanAddress.__init__   s     
r   r   c                     | j                   S r   )r   r'   s    r   __str__zNetplanAddress.__str__   s    ||r   N)r   r   r   r   r   r   r   r   r   r   r      s(     s 3 
 r   r   c                   *    e Zd ZdefdZd Zd Zd Zy)r&   netdefc                 F    || _         t        j                  |      | _        y r   )r   r    _netplan_netdef_new_address_iterr   r   r   s     r   r   z_NetdefAddressIterator.__init__   s    <<VDr   c                 B    t        j                  | j                         y r   )r   _netplan_address_iter_freer   r'   s    r   r   z_NetdefAddressIterator.__del__   s    &&t}}5r   c                     | S r   r   r'   s    r   r   z_NetdefAddressIterator.__iter__   r   r   c                    t        j                  | j                        }|st        |}|j                  r.t        j                  |j                        j                  d      nd }|j                  r.t        j                  |j                        j                  d      nd }|j                  r.t        j                  |j                        j                  d      nd }t        |||      S r   )r   _netplan_address_iter_nextr   r   r   r   rw   rz   r   r   r   )r   r   contentr   r   r   s         r   r   z_NetdefAddressIterator.__next__   s    33DMMB
 BI#**W__-44W=VZCJCSCS3::g../66w?Y]=D]]

7==)009PTgx77r   Nr   r   r   r
   r   r   r   r   r   r   r   r&   r&      s    E} E6
8r   r&   c                   *    e Zd ZdefdZd Zd Zd Zy)r9   r   c                 F    || _         t        j                  |      | _        y r   )r   r   #_netplan_netdef_new_nameserver_iterr   r   s     r   r   z"_NetdefNameserverIterator.__init__   s    ??Gr   c                 B    t        j                  | j                         y r   )r   _netplan_nameserver_iter_freer   r'   s    r   r   z!_NetdefNameserverIterator.__del__   s    ))$--8r   c                     | S r   r   r'   s    r   r   z"_NetdefNameserverIterator.__iter__   r   r   c                     t        j                  | j                        }|st        t	        j
                  |      j                  d      S r   )r   _netplan_nameserver_iter_nextr   r   r   rw   rz   r   s     r   r   z"_NetdefNameserverIterator.__next__   s9    66t}}E
zz*%,,W55r   Nr   r   r   r   r9   r9      s    H} H96r   r9   c                   $    e Zd Zd Zd Zd Zd Zy)r<   c                 F    || _         t        j                  |      | _        y r   )r   r   &_netplan_netdef_new_search_domain_iterr   r   s     r   r   z$_NetdefSearchDomainIterator.__init__   s    BB6Jr   c                 B    t        j                  | j                         y r   )r    _netplan_search_domain_iter_freer   r'   s    r   r   z#_NetdefSearchDomainIterator.__del__   s    ,,T]];r   c                     | S r   r   r'   s    r   r   z$_NetdefSearchDomainIterator.__iter__   r   r   c                     t        j                  | j                        }|st        t	        j
                  |      j                  d      S r   )r    _netplan_search_domain_iter_nextr   r   r   rw   rz   r   s     r   r   z$_NetdefSearchDomainIterator.__next__   s9    99$--H
zz*%,,W55r   Nr   r   r   r   r   r   r   r   r   r   r<   r<      s    K<6r   r<   c                       e Zd ZU ej                  ZdZdZee	d<   dZ
ee	d<   dZee	d<   dZee	d<   dZee	d	<   dZee	d
<   eZee	d<   dZee	d<   eZee	d<   dZee	d<   dZee	d<   dZee	d<   dZee	d<   d Zd Zd Zd Zy)NetplanRouter   Ntovia	from_addrunicastr   globalscopeprotocoltablefamilymetricmtubytescongestion_windowadvertised_receive_windowFonlinkc                    d}| j                   r|| j                   z   }| j                  r|d| j                   z   }| j                  r|d| j                   z   }| j                  r|d| j                   z   }| j                  r|d| j                   z   }| j
                  | j                  k  r|d| j
                   z   }| j                  | j                  kD  r|d| j                   z   }|j                         S )N z via z type z scope z src z metric z table )
r   r   r   r   r   r   _METRIC_UNSPEC_r   _TABLE_UNSPEC_stripr   routes     r   r   zNetplanRoute.__str__  s    77DGGOE88eDHH:..E99fTYYK00E::gdjj\22E>>eDNN#344E;;---ht{{m44E::+++gdjj\22E{{}r   c                    i }| j                   dk\  r| j                   |d<   | j                  r| j                  |d<   | j                  r| j                  |d<   | j                  r| j                  |d<   | j                  | j
                  k  r| j                  |d<   | j                  | j                  kD  r| j                  |d<   | j                  |d<   |S )	Nr   r   r   r   fromr   r   r   )	r   r   r   r   r   r   r   r   r   r   s     r   to_dictzNetplanRoute.to_dict*  s    ;;!"kkE(O77''E$K8888E%L>> NNE&M;;---"kkE(O::+++!ZZE'N		fr   c           
          t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  f      S r   )	hashr   r   r   r   r   r   r   r   r'   s    r   __hash__zNetplanRoute.__hash__=  sH    WWdhh^^TZZ[[$++YY

$% 	%r   c                    | j                   |j                   k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xrj | j                  |j                  k(  xrO | j
                  |j
                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r   )r   r   r   r   r   r   r   r   r   s     r   r   zNetplanRoute.__eq__D  s    GGuxx &HH		!&NNeoo-& JJ%++%& KK5<<'	&
 KK5<<'& II#& JJ%++%		
r   )r   r   r   r   rp   r   r   r   r   __annotations__r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r   r   r   r   r   r   r   r     s    llONBNCOIsD#E3HcE3FC!FC!Hcs%&s&FD$&%

r   r   c                   $    e Zd Zd Zd Zd Zd Zy)r?   c                 F    || _         t        j                  |      | _        y r   )r   r   _netplan_netdef_new_route_iterr   r   s     r   r   z_NetdefRouteIterator.__init__R  s    ::6Br   c                 B    t        j                  | j                         y r   )r   _netplan_route_iter_freer   r'   s    r   r   z_NetdefRouteIterator.__del__V  s    $$T]]3r   c                     | S r   r   r'   s    r   r   z_NetdefRouteIterator.__iter__Y  r   r   c                 F   t        j                  | j                        }|st        t	        |d      }|j
                  r.t        j                  |j
                        j                  d      nd |j                  r.t        j                  |j                        j                  d      nd |r$t        j                  |      j                  d      nd |j                  r.t        j                  |j                        j                  d      nd |j                  r.t        j                  |j                        j                  d      nd d |j                  |j                  |j                  |j                  |j                   |j"                  |j$                  d}t'        di |S )Nr   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   _netplan_route_iter_nextr   r   getattrr   r   rw   rz   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   s       r   r   z_NetdefRouteIterator.__next__\  s:   11$--@
 J/	 @J}}#**Z]]+227;RVAK3::jnn-44W=UYBKI.55g>QUCM??CJJz/66w?X\EOEUEUSZZ
 0 0188A[_%% '' ''"++!+!=!=)3)M)M ''
  $e$$r   Nr   r   r   r   r?   r?   Q  s    C4%r   r?   N)dataclassesr   _netplan_cffir   r   _utilsr   r   r
   r   r   r&   r9   r<   r   r?   r   r   r   <module>r     sx     " # CRL RLj8 8( 8 806 6$6 6$ H
 H
 H
V#% #%r   