
    >TfQ                         d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZ d dlmZmZmZ d d	lT d
Z G d de          Z G d de          Z G d deeee          ZdS )    )GenericForeignKey)ValidationError)models)Q)reverse)gettext_lazy)ChangeLoggedModelOrganizationalModelPrimaryModel)CustomFieldsMixinCustomLinksMixin	TagsMixin)*)TunnelTunnelGroupTunnelTerminationc                   2    e Zd ZdZ G d d          Zd ZdS )r   z
    An administrative grouping of Tunnels. This can be used to correlate peer-to-peer tunnels which form a mesh,
    for example.
    c                   >    e Zd ZdZ ed          Z ed          ZdS )TunnelGroup.Metanameztunnel groupztunnel groupsN)__name__
__module____qualname__ordering_verbose_nameverbose_name_plural     7/var/www/html/netbox-4.1.3/netbox/vpn/models/tunnels.pyMetar      s4        q((a00r    r"   c                 0    t          d| j        g          S )Nzvpn:tunnelgroupargsr   pkselfs    r!   get_absolute_urlzTunnelGroup.get_absolute_url   s    (y9999r    N)r   r   r   __doc__r"   r*   r   r    r!   r   r      sU         1 1 1 1 1 1 1 1
: : : : :r    r   c                      e Zd Z ej         ed          dd          Z ej         ed          deej                  Z	 ej
        dej        d	dd
          Z ej         ed          de          Z ej
        dej        d	dd
          Z ej
        dej        d	dd
          Z ej         ed          dd          ZdZ G d d          Zd Zd Zd ZdS )r   r   d   T)r   
max_lengthuniquestatus2   r   r.   choicesdefaultzvpn.TunnelGrouptunnelsto	on_deleterelated_nameblanknullencapsulation)r   r.   r3   zvpn.IPSecProfileztenancy.Tenantz	tunnel ID)r   r:   r;   )r0   r<   ipsec_profiletenantc                       e Zd ZdZ ej        dd           ej        dd ed                    fZ ed	          Z	 ed
          Z
dS )Tunnel.Metar   )groupr   z"%(app_label)s_%(class)s_group_name)fieldsr   z%(app_label)s_%(class)s_nameT)group__isnull)rB   r   	conditiontunnelr5   N)r   r   r   r   r   UniqueConstraintr   constraintsr   r   r   r   r    r!   r"   r@   Q   s        #F#(9   $F# 3!$///  

 q{{a	llr    r"   c                     | j         S Nr   r(   s    r!   __str__zTunnel.__str__a   s
    yr    c                 0    t          d| j        g          S )Nz
vpn:tunnelr$   r&   r(   s    r!   r*   zTunnel.get_absolute_urld   s    |47)4444r    c                 J    t           j                            | j                  S rI   )TunnelStatusChoicescolorsgetr0   r(   s    r!   get_status_colorzTunnel.get_status_colorg   s    ")--dk:::r    N)r   r   r   r   	CharFieldr   r   rM   STATUS_ACTIVEr0   
ForeignKeyPROTECTrA   TunnelEncapsulationChoicesr<   r=   r>   PositiveBigIntegerField	tunnel_idclone_fieldsr"   rJ   r*   rP   r   r    r!   r   r   !   s       6QvYY  D
 VQx[[##1	  F F.  E %F$Q''*  M
 &F%.  M V.  F /.Q{^^  IL+ + + + + + + +   5 5 5; ; ; ; ;r    r   c                   n    e Zd Z ej        dej        d          Z ej         ed          de	e	j
                  Z ej        dej        d          Z ej        d	d	
          Z edd          Z ej        dej        dd	d	          ZdZ G d d          Zd Zd Zd Z fdZ fdZ xZS )r   
vpn.Tunnelterminations)r7   r8   r9   roler1   r2   zcontenttypes.ContentType+T)r:   r;   termination_typetermination_id)ct_fieldfk_fieldzipam.IPAddresstunnel_terminationsr6   )rZ   c                       e Zd ZdZ ej        d          fZ ej        dd ed                    fZ	 ed          Z
 ed          Zd	S )
TunnelTermination.Meta)rE   r\   r'   )r^   r_   )rB   z#%(app_label)s_%(class)s_terminationz9An object may be terminated to only one tunnel at a time.)rB   r   violation_error_messageztunnel terminationztunnel terminationsN)r   r   r   r   r   IndexindexesrF   r   rG   r   r   r   r    r!   r"   rd      s        +FL FGGG
 $F#=:()*e(f(f  
 q-..a 566r    r"   c                 $    | j          d| j         S )Nz: Termination )rE   r'   r(   s    r!   rJ   zTunnelTermination.__str__   s    +66TW666r    c                 0    t          d| j        g          S )Nzvpn:tunnelterminationr$   r&   r(   s    r!   r*   z"TunnelTermination.get_absolute_url   s    .dgY????r    c                 J    t           j                            | j                  S rI   )TunnelTerminationRoleChoicesrN   rO   r\   r(   s    r!   get_role_colorz TunnelTermination.get_role_color   s    +266tyAAAr    c                 D   t                                                       t          | j        dd           rf| j        j        j        | j        k    rNt          dt          d                              | j        j	        | j        j        j
                  i          d S d S )Ntunnel_terminationterminationz2{name} is already attached to a tunnel ({tunnel}).)r   rE   )supercleangetattrro   rn   r'   r   r   formatr   rE   )r)   	__class__s    r!   rq   zTunnelTermination.clean   s     4#%94@@ 	TEUEhEkosovEvEv!q!UVV]]).+>E  ^    #   	 	EvEvr    c                 b    t                                          |          }| j        |_        |S rI   )rp   to_objectchangerE   related_object)r)   actionobjectchangert   s      r!   rv   z!TunnelTermination.to_objectchange   s*    ww..v66&*k#r    )r   r   r   r   rS   CASCADErE   rQ   r   rk   	ROLE_PEERr\   rT   r^   rV   r_   r   ro   
outside_ipprerequisite_modelsr"   rJ   r*   rl   rq   rv   __classcell__)rt   s   @r!   r   r   k   s       V.#  F
 6QvYY,,6	  D )v(%.  
 4V3  N $##!  K #".*  J7 7 7 7 7 7 7 77 7 7@ @ @B B B
 
 
 
 
        r    r   N)"django.contrib.contenttypes.fieldsr   django.core.exceptionsr   	django.dbr   django.db.modelsr   django.urlsr   django.utils.translationr   r   netbox.modelsr	   r
   r   netbox.models.featuresr   r   r   vpn.choices__all__r   r   r   r   r    r!   <module>r      se   @ @ @ @ @ @ 2 2 2 2 2 2                   6 6 6 6 6 6 N N N N N N N N N N Q Q Q Q Q Q Q Q Q Q    : : : : :% : : :G; G; G; G; G;\ G; G; G;TL L L L L)+;YHY L L L L Lr    