a
    kÄ#dV�  ã                ,   @   s  d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlm Z m!Z! ddl"m#Z#m$Z$ ddl%m&Z&m'Z' dd	l(m)Z) dd
l*m+Z+m,Z, ddl-m.Z.m/Z/ dZ0dd„ Z1dd„ Z2dd„ Z3dd„ Z4dd„ Z5dd„ Z6dd„ Z7dd„ Z8G dd„ deƒZ9G dd „ d e+ƒZ:G d!d"„ d"e:ƒZ;G d#d$„ d$eƒZ<G d%d&„ d&e9ƒZ=G d'd(„ d(e9ƒZ>G d)d*„ d*e9ƒZ?G d+d,„ d,eƒZ@d-d.„ ZAG d/d0„ d0e!ƒZBG d1d2„ d2eBƒZCG d3d4„ d4eBƒZDd5d6d7d8d9d:d;d<d=d>d?œ
ZEd@dAdBdCdDdEdFdGdHdId?œ
ZFdJdK„ ZGG dLd7„ d7eDƒZHG dMd8„ d8eDƒZIG dNd6„ d6eDƒZJG dOd<„ d<eDƒZKG dPd=„ d=eDƒZLG dQd5„ d5eDƒZMG dRd9„ d9eDƒZNG dSd:„ d:eDƒZOG dTd;„ d;eDƒZPG dUd>„ d>eDƒZQdVdWdXdYœZRdZd[d\dYœZSd]d^„ ZTG d_dV„ dVeDƒZUG d`dW„ dWeDƒZVG dadX„ dXeDƒZWdbdciZXdbddiZYdedf„ ZZG dgdc„ dceDƒZ[dhdidjœZ\dkdldjœZ]dmdn„ Z^G dodp„ dpe!ƒZ_G dqdh„ dheDƒZ`G drdi„ dieDƒZadsdtdudvdwdxdydzd{d|d}d~dd€d�d‚dƒd„d…d†œZbd‡dˆd‰dŠd‹dŒd�dŽd�d�d‘d’d“d”d•d–d—d˜d™dšd›dœd�dždŸd d¡d¢d£d¤d¥d¦d§d¨d©dªd«d¬d­d®d¯d°d±d²œ+Zcd³d´„ ZdG dµd¶„ d¶e!ƒZeG d·ds„ dseCƒZfG d¸dx„ dxeCƒZgG d¹dz„ dzeCƒZhG dºdy„ dyeCƒZiG d»d�„ d�eCƒZjG d¼d½„ d½e!ƒZkG d¾d¿„ d¿eCƒZlG dÀd€„ d€eCƒZmG dÁdÂ„ dÂe!ƒZnG dÃd{„ d{eCƒZoG dÄd„ deCƒZpG dÅd‚„ d‚eCƒZqG dÆdÇ„ dÇe!ƒZrG dÈdƒ„ dƒeCƒZsG dÉdu„ dueCƒZtG dÊdË„ dËe!ƒZuG dÌdw„ dweCƒZvG dÍdÎ„ dÎeƒZwG dÏd„„ d„eCƒZxG dÐdv„ dveCƒZyG dÑd}„ d}eCƒZzG dÒd…„ d…eCƒZ{G dÓdÔ„ dÔe!ƒZ|G dÕd|„ d|eCƒZ}G dÖd~„ d~eCƒZ~G d×dØ„ dØe!ƒZG dÙdt„ dteCƒZ€dÚdÛdÜdÝdÞdßdàdádâdãœ	Z�G dädå„ dåe!ƒZ‚G dædç„ dçe!ƒZƒG dèdé„ déeƒZ„G dêdë„ dëeƒZ…G dìdí„ díeƒƒZ†G dîdï„ dïe†ƒZ‡G dðdñ„ dñe†ƒZˆG dòdó„ dóeƒƒZ‰G dôdõ„ dõeƒƒZŠdöd÷„ Z‹G dødù„ dùeŠƒZŒG dúdû„ dûeŠƒZ�G düdý„ dýeƒƒZŽdþdÿ„ Z�G �d �d„ �deŽƒZ�G �d�d„ �deŽƒZ‘G �d�d„ �deƒƒZ’G �d�d„ �de’ƒZ“G �d�d	„ �d	e’ƒZ”e$�d
e‚ƒ e e‚e‡�d�d�d� e e‚eˆ�d�d�d� e e‚e‰�d�d�d� e e‚eŒ�d�d�d� e e‚e��d�d�d� e e‚e��d�d�d� e e‚e‘�d�d�d� e e‚e“�d�d�d� e e‚e”�d�d�d� dS (  aŒ  
    IS-IS Scapy Extension
    ~~~~~~~~~~~~~~~~~~~~~

    :authors:    Marcel Patzlaff, mpatzlaff@benocs.com
                 Michal Kaliszan, mkaliszan@benocs.com
                 Tom Zhu, tom.zhu@metaswitch.com

    :description:

        This module provides Scapy layers for the Intermediate System
        to Intermediate System routing protocol as defined in RFC 1195.

        Currently it (partially) supports the packaging/encoding
        requirements of the following RFCs:
        * RFC 1195 (only the TCP/IP related part)
        * RFC 3358 (optional checksums)
        * RFC 5301 (dynamic hostname extension)
        * RFC 5302 (domain-wide prefix distribution)
        * RFC 5303 (three-way handshake)
        * RFC 5304 (cryptographic authentication)
        * RFC 5308 (routing IPv6 with IS-IS)
        * RFC 8667 (IS-IS extensions for segment routing)

    :TODO:

        - packet relations (requests, responses)
        - support for recent RFCs:
          * RFC 5305 (traffic engineering)
          * RFC 5307 (support for G-MPLS)
          * RFC 5310 (generic cryptographic authentication)
          * RFC 5316 (inter-AS MPLS and G-MPLS TE)

é    )Úabsolute_importN)Úconf)ÚBitFieldÚBitFieldLenFieldÚBoundStrLenFieldÚByteEnumFieldÚ	ByteFieldÚConditionalFieldÚFieldÚFieldLenFieldÚFieldListFieldÚ
FlagsFieldÚIEEEFloatFieldÚIP6PrefixFieldÚIPFieldÚIPPrefixFieldÚIntFieldÚ	LongFieldÚMACFieldÚPacketFieldÚPacketListFieldÚ
ShortFieldÚThreeBytesFieldÚ	XIntFieldÚXShortField)Úbind_layersÚPacket)Únetwork_layer_protocol_idsÚregister_cln_protocol)ÚIP6ListFieldÚIP6Field)Úfletcher16_checkbytes)Ú
RandStringÚRandByte)ÚorbÚ	hex_byteszv0.0.3c                 C   s   d  dd„ |  d¡D ƒ¡S )Nó    c                 s   s   | ]}t |ƒV  qd S ©N©r%   ©Ú.0Úx© r,   úI/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/isis.pyÚ	<genexpr>E   r&   z isis_area2str.<locals>.<genexpr>Ú.©ÚjoinÚsplit)Zarear,   r,   r-   Úisis_area2strD   s    r3   c                 C   sZ   t | ƒdkrdS t | dd … ƒ}dd|d   |d dkr>dnd }|tdd	„ | D ƒƒ S )
Nr   Ú é   ú%02Xz	.%02X%02Xé   z.%02Xc                 s   s   | ]}t |ƒV  qd S r'   ©r$   r)   r,   r,   r-   r.   N   r&   z isis_str2area.<locals>.<genexpr>)ÚlenÚtuple)ÚsÚnumbytesÚfmtr,   r,   r-   Úisis_str2areaH   s
    $r>   c                 C   s   d  dd„ |  d¡D ƒ¡S )Nr&   c                 s   s   | ]}t |ƒV  qd S r'   r(   r)   r,   r,   r-   r.   R   r&   z!isis_sysid2str.<locals>.<genexpr>r/   r0   )Zsysidr,   r,   r-   Úisis_sysid2strQ   s    r?   c                 C   s   dd d… t dd„ | D ƒƒ S )Nz%02X%02X.%02X%02X.%02X%02X.éÿÿÿÿc                 s   s   | ]}t |ƒV  qd S r'   r8   r)   r,   r,   r-   r.   V   r&   z!isis_str2sysid.<locals>.<genexpr>)r:   ©r;   r,   r,   r-   Úisis_str2sysidU   s    rB   c                 C   s    t | d d… ƒt| dd … ƒ S ©Néýÿÿÿéþÿÿÿ)r?   r%   )Znodeidr,   r,   r-   Úisis_nodeid2strY   s    rF   c                 C   s    dt | d d… ƒt| d ƒf S )Nz%s.%02Xr@   )rB   r$   rA   r,   r,   r-   Úisis_str2nodeid]   s    rG   c                 C   s    t | d d… ƒt| dd … ƒ S rC   )rF   r%   )Úlspidr,   r,   r-   Úisis_lspid2stra   s    rI   c                 C   s    dt | d d… ƒt| d ƒf S )Nz%s-%02Xr@   )rG   r$   rA   r,   r,   r-   Úisis_str2lspide   s    rJ   c                   @   s4   e Zd Zg d¢Zdd„ Zdd„ Zdd„ Zdd	„ Zd
S )Ú_ISIS_IdFieldBase)Úto_strÚto_idÚlengthc                 C   s*   || _ || _|| _t | ||d| ¡ d S )Nz%is)rL   rM   rN   r
   Ú__init__)ÚselfÚnameÚdefaultrN   rL   rM   r,   r,   r-   rO   l   s    z_ISIS_IdFieldBase.__init__c                 C   s   |d u rd| j  S |  |¡S )Nó    )rN   rL   ©rP   Úpktr+   r,   r,   r-   Úi2mr   s    
z_ISIS_IdFieldBase.i2mc                 C   s
   |   |¡S r'   )rM   rT   r,   r,   r-   Úm2ix   s    z_ISIS_IdFieldBase.m2ic                 C   s(   t |tƒr$t|ƒ| jkr$|  ||¡S |S r'   )Ú
isinstanceÚstrr9   rN   rW   rT   r,   r,   r-   Úany2i{   s    z_ISIS_IdFieldBase.any2iN)Ú__name__Ú
__module__Ú__qualname__Ú	__slots__rO   rV   rW   rZ   r,   r,   r,   r-   rK   i   s
   rK   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_ISIS_RandIdc                 C   s(   t  | ¡ | d¡| _| dd¡| _d S )NÚ*r6   )r"   rO   ÚcountÚ	bytecountÚreplaceÚformat)rP   Útemplater,   r,   r-   rO   ƒ   s    
z_ISIS_RandId.__init__c                 C   s8   | j dkrdS d}t| j ƒD ]}|tƒ f7 }q| j| S )Nr   r4   r,   )rb   Úranger#   rd   )rP   ÚvalÚ_r,   r,   r-   Ú_fixˆ   s    
z_ISIS_RandId._fixN)r[   r\   r]   rO   ri   r,   r,   r,   r-   r_   ‚   s   r_   c                       s   e Zd Zd‡ fdd„	Z‡  ZS )Ú_ISIS_RandAreaIdNc                    sb   dd| j d d   | j d d dkr*dnd }tt| ƒ |¡ |d u rXt dd¡| _ n|| _ d S )	Nr`   z.**r5   r7   r   r4   z.*é   )rb   Úsuperrj   rO   ÚrandomÚrandint)rP   rb   re   ©Ú	__class__r,   r-   rO   •   s    ÿýz_ISIS_RandAreaId.__init__)N)r[   r\   r]   rO   Ú__classcell__r,   r,   ro   r-   rj   ”   s   rj   c                   @   sJ   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )ÚISIS_AreaIdFieldÚlength_fromc                 C   s   t  | ||¡ || _d S r'   )r
   rO   rs   )rP   rQ   rR   rs   r,   r,   r-   rO   ¥   s    zISIS_AreaIdField.__init__c                 C   s   t |ƒS r'   )r3   rT   r,   r,   r-   rV   ©   s    zISIS_AreaIdField.i2mc                 C   s   t |ƒS r'   )r>   rT   r,   r,   r-   rW   ¬   s    zISIS_AreaIdField.m2ic                 C   s$   |d u rdS t |ƒ}||d  d S )Nr   é   r7   ©r9   )rP   rU   r+   Ztmp_lenr,   r,   r-   Úi2len¯   s    zISIS_AreaIdField.i2lenc                 C   s$   |   ||¡}|t dt|ƒ |¡ S )Nú!%is)rV   ÚstructÚpackr9   )rP   rU   r;   rg   Zsvalr,   r,   r-   Úaddfield¶   s    zISIS_AreaIdField.addfieldc              
   C   s:   |   |¡}||d … |  |t d| |d |… ¡d ¡fS )Nrw   r   )rs   rW   rx   Úunpack)rP   rU   r;   r<   r,   r,   r-   Úgetfieldº   s    
zISIS_AreaIdField.getfieldc                 C   s   t ƒ S r'   )rj   ©rP   r,   r,   r-   Úrandval¾   s    zISIS_AreaIdField.randvalN)r[   r\   r]   r^   rO   rV   rW   rv   rz   r|   r~   r,   r,   r,   r-   rr   ¢   s   rr   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚISIS_SystemIdFieldc                 C   s   t  | ||dtt¡ d S ©Né   )rK   rO   r?   rB   ©rP   rQ   rR   r,   r,   r-   rO   Ã   s    zISIS_SystemIdField.__init__c                 C   s   t dƒS )Nz**.**.**©r_   r}   r,   r,   r-   r~   Æ   s    zISIS_SystemIdField.randvalN©r[   r\   r]   rO   r~   r,   r,   r,   r-   r   Â   s   r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚISIS_NodeIdFieldc                 C   s   t  | ||dtt¡ d S )Né   )rK   rO   rF   rG   r‚   r,   r,   r-   rO   Ë   s    zISIS_NodeIdField.__init__c                 C   s   t dƒS )Nz
**.**.**.*rƒ   r}   r,   r,   r-   r~   Î   s    zISIS_NodeIdField.randvalNr„   r,   r,   r,   r-   r…   Ê   s   r…   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚISIS_LspIdFieldc                 C   s   t  | ||dtt¡ d S ©Né   )rK   rO   rI   rJ   r‚   r,   r,   r-   rO   Ó   s    zISIS_LspIdField.__init__c                 C   s   t dƒS )Nz**.**.**.*-*rƒ   r}   r,   r,   r-   r~   Ö   s    zISIS_LspIdField.randvalNr„   r,   r,   r,   r-   r‡   Ò   s   r‡   c                   @   s   e Zd Zddd„ZdS )ÚISIS_CircuitTypeFieldÚcircuittyper7   r‰   Nc                 C   s&   |d u rg d¢}t  | ||||¡ d S )N)ÚL1ÚL2Zr0Úr1Úr2Zr3Zr4Zr5)r   rO   )rP   rQ   rR   ÚsizeÚnamesr,   r,   r-   rO   Û   s    zISIS_CircuitTypeField.__init__)r‹   r7   r‰   N©r[   r\   r]   rO   r,   r,   r,   r-   rŠ   Ú   s     ÿrŠ   c                 K   sD   t j}t|ƒdkr4t|d ƒ}|  ||¡}tƒ | }||fi |¤ŽS ©Nr7   r   )r   Z	raw_layerr9   r$   ÚgetÚglobals)Ztlv_classesZdefaultnameÚpÚkargsÚclsZtlvtypeÚclsnamer,   r,   r-   Ú_ISIS_GuessTlvClass_Helperâ   s    
rš   c                   @   s>   e Zd Zeddƒeddddd�eddd	d
„ d�gZdd„ ZdS )Ú_ISIS_GenericTlv_BaseÚtyper   r9   Nrg   ÚB©Ú	length_ofr=   r4   c                 C   s   | j S r'   ru   ©rU   r,   r,   r-   Ú<lambda>ï   r&   z_ISIS_GenericTlv_Base.<lambda>©rs   c                 C   s   t jS r'   ©r   Zpadding_layer©rP   r–   r,   r,   r-   Úguess_payload_classñ   s    z)_ISIS_GenericTlv_Base.guess_payload_class)r[   r\   r]   r   r   r   Úfields_descr¥   r,   r,   r,   r-   r›   ì   s
   þr›   c                   @   s   e Zd ZdZdS )ÚISIS_GenericTlvzISIS Generic TLVN©r[   r\   r]   rQ   r,   r,   r,   r-   r§   õ   s   r§   c                   @   s   e Zd ZdZdS )ÚISIS_GenericSubTlvzISIS Generic Sub-TLVNr¨   r,   r,   r,   r-   r©   ù   s   r©   ÚISIS_AdministrativeGroupSubTlvÚ%ISIS_LinkLocalRemoteIdentifiersSubTlvÚISIS_IPv4InterfaceAddressSubTlvÚISIS_IPv4NeighborAddressSubTlvÚISIS_MaximumLinkBandwidthSubTlvÚ)ISIS_MaximumReservableLinkBandwidthSubTlvÚISIS_UnreservedBandwidthSubTlvÚISIS_IPv6InterfaceAddressSubTlvÚISIS_IPv6NeighborAddressSubTlvÚISIS_TEDefaultMetricSubTlv)
é   é   r�   r‰   é	   é
   é   é   rk   é   zAdministrative Group (Color)zLink Local/Remote IdentifierszIPv4 Interface AddresszIPv4 Neighbor AddresszMaximum Link Bandwidthz!Maximum Reservable Link BandwidthzUnreserved BandwidthzIPv6 Interface AddresszIPv6 Neighbor AddresszTE Default Metricc                 K   s   t td| fi |¤ŽS ©Nr©   )rš   Ú_isis_subtlv_classes_1©r–   r—   r,   r,   r-   Ú_ISIS_GuessSubTlvClass_1  s    r¾   c                   @   s4   e Zd ZdZeddeƒeddddd�edd	ƒgZdS )
r¬   zISIS IPv4 Interface Address (S)rœ   r�   r9   NÚaddressr�   rž   ú0.0.0.0©	r[   r\   r]   rQ   r   Ú_isis_subtlv_names_1r   r   r¦   r,   r,   r,   r-   r¬     s
   
þc                   @   s4   e Zd ZdZeddeƒeddddd�edd	ƒgZdS )
r­   zISIS IPv4 Neighbor Address (S)rœ   r‰   r9   Nr¿   r�   rž   rÀ   rÁ   r,   r,   r,   r-   r­   &  s
   
þc                   @   s:   e Zd ZdZeddeƒedddd�edd	ƒed
d	ƒgZdS )r«   z&ISIS Link Local/Remote Identifiers (S)rœ   rµ   r9   r‰   r�   ©r=   ZlocalidÚ0ZremoteidN)	r[   r\   r]   rQ   r   rÂ   r   r   r¦   r,   r,   r,   r-   r«   -  s   
ýc                   @   s4   e Zd ZdZeddeƒeddddd�edd	ƒgZdS )
r±   zISIS IPv6 Interface Address (S)rœ   r¹   r9   Nr¿   r�   rž   ú::©	r[   r\   r]   rQ   r   rÂ   r   r    r¦   r,   r,   r,   r-   r±   5  s
   
þc                   @   s4   e Zd ZdZeddeƒeddddd�edd	ƒgZdS )
r²   zISIS IPv6 Neighbor Address (S)rœ   rk   r9   Nr¿   r�   rž   rÅ   rÆ   r,   r,   r,   r-   r²   <  s
   
þc                   @   s4   e Zd ZdZeddeƒeddddd�edd	ƒgZdS )
rª   z#Administrative Group SubTLV (Color)Úcoder´   r9   NZ
admingroupr�   rž   z0.0.0.1rÁ   r,   r,   r,   r-   rª   C  s
   
þc                   @   s4   e Zd ZdZeddeƒeddddd�edd	ƒgZdS )
r®   zMaximum Link Bandwidth SubTLVrœ   r¶   r9   NZmaxbwr�   rž   éè  ©	r[   r\   r]   rQ   r   rÂ   r   r   r¦   r,   r,   r,   r-   r®   J  s
   
þc                   @   s4   e Zd ZdZeddeƒeddddd�edd	ƒgZdS )
r¯   z(Maximum Reservable Link Bandwidth SubTLVrœ   r·   r9   NZmaxrsvbwr�   rž   rÈ   rÉ   r,   r,   r,   r-   r¯   Q  s
   
þc                   @   sH   e Zd ZdZeddeƒeddddd�edg d	¢ed
dƒdd„ d�gZ	dS )r°   zUnreserved Bandwidth SubTLVrœ   r¸   r9   NZunrsvbwr�   rž   )rÈ   rÈ   rÈ   rÈ   rÈ   rÈ   rÈ   rÈ   r4   rÈ   c                 C   s
   | j d S ©Nrµ   ru   r    r,   r,   r-   r¡   \  r&   z'ISIS_UnreservedBandwidthSubTlv.<lambda>©Z
count_from)
r[   r\   r]   rQ   r   rÂ   r   r   r   r¦   r,   r,   r,   r-   r°   X  s
   
þc                   @   s:   e Zd ZdZeddeƒeddddd„ d	d
�eddƒgZdS )r³   zTE Default Metric SubTLVrœ   rº   r9   NZtemetricc                 C   s   |d S ©Nr5   r,   ©rU   r+   r,   r,   r-   r¡   b  r&   z#ISIS_TEDefaultMetricSubTlv.<lambda>r�   ©rŸ   Úadjustr=   rÈ   )	r[   r\   r]   rQ   r   rÂ   r   r   r¦   r,   r,   r,   r-   r³   _  s
   
þÚ!ISIS_32bitAdministrativeTagSubTlvÚ!ISIS_64bitAdministrativeTagSubTlvÚ"ISIS_PrefixSegmentIdentifierSubTlv)r5   r7   r´   z32-bit Administrative Tagz64-bit Administrative TagzPrefix Segment Identifierc                 K   s   t td| fi |¤ŽS r»   )rš   Ú_isis_subtlv_classes_2r½   r,   r,   r-   Ú_ISIS_GuessSubTlvClass_2v  s    rÔ   c                   @   sD   e Zd ZdZeddeƒeddddd�edg ed	d
ƒdd„ d�gZ	dS )rÐ   z"ISIS 32-bit Administrative Tag (S)rœ   r5   r9   NÚtagsr�   rž   r4   r   c                 C   s
   | j d S rÊ   ru   r    r,   r,   r-   r¡   ~  r&   z*ISIS_32bitAdministrativeTagSubTlv.<lambda>rË   )
r[   r\   r]   rQ   r   Ú_isis_subtlv_names_2r   r   r   r¦   r,   r,   r,   r-   rÐ   z  s
   
þc                   @   sD   e Zd ZdZeddeƒeddddd�edg ed	d
ƒdd„ d�gZ	dS )rÑ   z"ISIS 64-bit Administrative Tag (S)rœ   r7   r9   NrÕ   r�   rž   r4   r   c                 C   s
   | j d S rˆ   ru   r    r,   r,   r-   r¡   …  r&   z*ISIS_64bitAdministrativeTagSubTlv.<lambda>rË   )
r[   r\   r]   rQ   r   rÖ   r   r   r   r¦   r,   r,   r,   r-   rÑ   �  s
   
þc                	   @   sb   e Zd ZdZeddeƒeddƒedddg d	¢ƒed
dƒee	ddƒdd„ ƒee
ddƒdd„ ƒgZdS )rÒ   zISIS Prefix SID sub TLVrœ   r´   r9   rt   Úflagsr   r‰   )Úres1Úres2ÚLÚVÚEÚPÚNÚRÚ	algorithmÚsidc                 C   s
   | j dkS ©Nrt   ru   r    r,   r,   r-   r¡   ‘  r&   z+ISIS_PrefixSegmentIdentifierSubTlv.<lambda>Úidxc                 C   s
   | j dkS r€   ru   r    r,   r,   r-   r¡   “  r&   N)r[   r\   r]   rQ   r   rÖ   r   r   r	   r   r   r¦   r,   r,   r,   r-   rÒ   ˆ  s   
þ
ÿ
ÿør5   ÚISIS_SIDLabelSubTLVzISIS SID/Label sub TLVc                 K   s   t td| fi |¤ŽS r»   )rš   Ú_isis_subtlv_classes_3r½   r,   r,   r-   Ú_ISIS_GuessSubTlvClass_3¢  s
    ÿÿræ   c                   @   sJ   e Zd ZdZeddeƒeddƒeeddƒdd	„ ƒee	d
dƒdd	„ ƒgZ
dS )rä   zISIS SID Label sub TLVrœ   r5   r9   r´   rá   r   c                 C   s
   | j dkS )Nr´   ru   r    r,   r,   r-   r¡   ­  r&   zISIS_SIDLabelSubTLV.<lambda>rã   c                 C   s
   | j dkS rÊ   ru   r    r,   r,   r-   r¡   ¯  r&   N)r[   r\   r]   rQ   r   Ú_isis_subtlv_names_3r   r	   r   r   r¦   r,   r,   r,   r-   rä   §  s   

ÿ
ÿûÚISIS_SRCapabilitiesSubTLVÚISIS_SRAlgorithmSubTLV)r7   é   z"Segment Routing Capability sub TLVzSegment Routing Algorithmc                 K   s   t td| fi |¤ŽS r»   )rš   Ú_isis_subtlv_classes_4r½   r,   r,   r-   Ú_ISIS_GuessSubTlvClass_4Á  s
    ÿÿrì   c                   @   s.   e Zd ZdZeddƒeddeƒgZdd„ ZdS )ÚISIS_SRGBDescriptorEntryzISIS SRGB Descriptorrf   r   Z	sid_labelNc                 C   s   d|fS ©Nr4   r,   ©rP   r;   r,   r,   r-   Úextract_paddingÍ  s    z(ISIS_SRGBDescriptorEntry.extract_padding)	r[   r\   r]   rQ   r   r   rä   r¦   rð   r,   r,   r,   r-   rí   Æ  s
   
þrí   c                	   @   sT   e Zd ZdZeddeƒeddddd„ d	d
�edddg d¢ƒedg e	dd„ d�gZ
dS )rè   zISIS SR Capabilities TLVrœ   r7   r9   NZsrgb_rangesc                 C   s   |d S rÌ   r,   rÍ   r,   r,   r-   r¡   Ù  r&   z"ISIS_SRCapabilitiesSubTLV.<lambda>r�   rÎ   r×   r   r‰   )rØ   rÙ   Úres3Úres4Úres5Úres6rÛ   ÚIc                 C   s
   | j d S rÌ   ru   r    r,   r,   r-   r¡   â  r&   r¢   )r[   r\   r]   rQ   r   rç   r   r   r   rí   r¦   r,   r,   r,   r-   rè   Ñ  s(   
ûþüõc                   @   sF   e Zd ZdZeddeƒeddddd�edd	ged
d	ƒdd„ d�gZ	dS )ré   zISIS SR Algorithm sub TLVrœ   rê   r9   NZ
algorithmsr�   rž   r   r4   c                 C   s   | j S r'   ru   r    r,   r,   r-   r¡   ï  r&   zISIS_SRAlgorithmSubTLV.<lambda>rË   )
r[   r\   r]   rQ   r   Ú_isis_subtlv_names_4r   r   r   r¦   r,   r,   r,   r-   ré   æ  s   
üýÚISIS_AreaTlvÚISIS_IsReachabilityTlvÚISIS_IsNeighbourTlvÚISIS_PaddingTlvÚISIS_LspEntryTlvÚISIS_AuthenticationTlvÚISIS_ChecksumTlvÚISIS_BufferSizeTlvÚISIS_ExtendedIsReachabilityTlvÚISIS_InternalIpReachabilityTlvÚISIS_ProtocolsSupportedTlvÚISIS_ExternalIpReachabilityTlvÚISIS_IpInterfaceAddressTlvÚISIS_ExtendedIpReachabilityTlvÚISIS_DynamicHostnameTlvÚISIS_Ipv6InterfaceAddressTlvÚISIS_Ipv6ReachabilityTlvÚISIS_P2PAdjacencyStateTlvÚISIS_RouterCapabilityTlv)r5   r7   r�   r‰   r¶   r·   r¹   é   é   é€   é�   é‚   é„   é‡   é‰   éè   éì   éð   éò   zArea TLVzIS Reachability TLVzIS Neighbour TLVzInstance Identifier TLVzPadding TLVzLSP Entries TLVzAuthentication TLVzOptional Checksum TLVz#Purge Originator Identification TLVzLSP Buffer Size TLVzExtended IS-Reachability TLVzIS Neighbour Attribute TLVzIS Alias IDzIP Internal Reachability TLVzProtocols Supported TLVzIP External Reachability TLVz-Inter-Domain Routing Protocol Information TLVzIP Interface Address TLVz!Traffic Engineering Router ID TLVzExtended IP Reachability TLVzDynamic Hostname TLVz GMPLS Shared Risk Link Group TLVzIPv6 Shared Risk Link Group TLVz&IPv6 Traffic Engineering Router ID TLVz%Inter-AS Reachability Information TLVzGroup Address TLVz(Multi-Topology-Aware Port Capability TLVzMulti-Topology Capability TLVzTRILL Neighbour TLVzMAC-Reachability TLVzBFD-Enabled TLVzRestart TLVz'Multi-Topology Intermediate Systems TLVz*Multi-Topology IS Neighbour Attributes TLVzMulti-Topology TLVzIPv6 Interface Address TLVz!IPv6 Global Interface Address TLVz$Multi-Topology IPv4 Reachability TLVzIPv6 Reachability TLVz$Multi-Topology IPv6 Reachability TLVz&Point-to-Point Three-Way Adjacency TLVzIS-IS Router Capability TLVzGeneric Information TLV)+r5   r7   r�   r†   r‰   r¶   r·   r¹   rk   r
  r  é   é   r  r  r  éƒ   r  é†   r  r  éŠ   é‹   éŒ   é�   éŽ   é�   é�   é‘   é“   é”   éÓ   éÞ   éß   éå   r  éé   éë   r  éí   r  r  éû   c                 K   s   t td| fi |¤ŽS )Nr§   )rš   Ú_isis_tlv_classesr½   r,   r,   r-   Ú_ISIS_GuessTlvClass;  s    r-  c                   @   s:   e Zd ZdZeddddd�edddd	„ d
�gZdd„ ZdS )ÚISIS_AreaEntryzISIS Area EntryÚarealenNZareaidr�   rž   Ú49c                 C   s   | j S r'   )r/  r    r,   r,   r-   r¡   B  r&   zISIS_AreaEntry.<lambda>r¢   c                 C   s   d|fS rî   r,   rï   r,   r,   r-   rð   D  s    zISIS_AreaEntry.extract_padding)r[   r\   r]   rQ   r   rr   r¦   rð   r,   r,   r,   r-   r.  ?  s
   ÿr.  c                   @   s>   e Zd ZdZeddeƒeddddd�edg ed	d
„ d�gZ	dS )r÷   zISIS Area TLVrœ   r5   r9   NZareasr�   rž   c                 C   s   | j S r'   ru   ©r+   r,   r,   r-   r¡   L  r&   zISIS_AreaTlv.<lambda>r¢   )
r[   r\   r]   rQ   r   Ú_isis_tlv_namesr   r   r.  r¦   r,   r,   r,   r-   r÷   H  s
   
þc                	   @   sT   e Zd ZdZeddeƒeddddd„ d	d
�edddddœƒeddddd„ d�gZdS )rü   zISIS Authentication TLVrœ   r·   r9   NÚpasswordc                 C   s   |d S rÌ   r,   rÍ   r,   r,   r-   r¡   R  r&   zISIS_AuthenticationTlv.<lambda>r�   rÎ   Zauthtyper5   ZPlainzHMAC-MD5)r5   é   r4   éþ   c                 C   s
   | j d S rÌ   ru   r    r,   r,   r-   r¡   T  r&   )Úmaxlenrs   ©	r[   r\   r]   rQ   r   r2  r   r   r¦   r,   r,   r,   r-   rü   O  s   
ýc                   @   s.   e Zd ZdZeddeƒeddƒeddƒgZdS )	rþ   zISIS Buffer Size TLVrœ   r
  r9   r7   ZlspbuffersizeiÙ  N)	r[   r\   r]   rQ   r   r2  r   r   r¦   r,   r,   r,   r-   rþ   W  s
   
þc                   @   s.   e Zd ZdZeddeƒeddƒeddƒgZdS )rý   zISIS Optional Checksum TLVrœ   r¹   r9   r7   ÚchecksumN)	r[   r\   r]   rQ   r   r2  r   r   r¦   r,   r,   r,   r-   rý   ^  s
   
þc                   @   s<   e Zd ZdZeddeƒeddddd�edd	d
d„ d�gZdS )r  zISIS Dynamic Hostname TLVrœ   r  r9   NÚhostnamer�   rž   r4   c                 C   s   | j S r'   ru   r    r,   r,   r-   r¡   i  r&   z ISIS_DynamicHostnameTlv.<lambda>r¢   r7  r,   r,   r,   r-   r  e  s
   
þc                   @   sŒ   e Zd ZdZeddƒedddƒedddƒeddd	d
d�ed
dddd„ d�ee	ddddd�dd„ ƒee
dg edd„ d�dd„ ƒgZdd„ ZdS )ÚISIS_ExtendedIpPrefixzISIS Extended IP PrefixÚmetricr5   Úupdownr   ÚsubtlvindicatorÚpfxlenNr�   Úpfx)rŸ   c                 C   s   | j S r'   ©r>  r1  r,   r,   r-   r¡   s  r&   zISIS_ExtendedIpPrefix.<lambda>©Z	wordbytesrs   Ú
subtlvslenÚsubtlvsr�   rž   c                 C   s
   | j dkS rÌ   ©r=  r    r,   r,   r-   r¡   t  r&   c                 C   s   | j S r'   ©rB  r1  r,   r,   r-   r¡   u  r&   r¢   c                 C   s
   | j dkS rÌ   rD  r    r,   r,   r-   r¡   u  r&   c                 C   s   d|fS rî   r,   rï   r,   r,   r-   rð   x  s    z%ISIS_ExtendedIpPrefix.extract_padding)r[   r\   r]   rQ   r   r   r   r   r	   r   r   rÔ   r¦   rð   r,   r,   r,   r-   r:  l  s   

ù
r:  c                   @   s4   e Zd ZdZeddeƒeddddd�edd	ƒgZdS )
ÚISIS_TERouterIDTlvzISIS TE Router ID TLVrœ   r  r9   NÚrouteridr�   rž   rÀ   )	r[   r\   r]   rQ   r   r2  r   r   r¦   r,   r,   r,   r-   rF  |  s
   
þrF  c                   @   s>   e Zd ZdZeddeƒeddddd�edg ed	d
„ d�gZ	dS )r  z!ISIS Extended IP Reachability TLVrœ   r  r9   NÚpfxsr�   rž   c                 C   s   | j S r'   ru   r    r,   r,   r-   r¡   ‡  r&   z'ISIS_ExtendedIpReachabilityTlv.<lambda>r¢   )
r[   r\   r]   rQ   r   r2  r   r   r:  r¦   r,   r,   r,   r-   r  ƒ  s
   
þc                	   @   sL   e Zd ZdZeddƒeddƒedddd	d
�edg edd„ d�gZ	dd„ Z
dS )ÚISIS_ExtendedIsNeighbourEntryz ISIS Extended IS Neighbour EntryÚneighbouridú0102.0304.0506.07r;  r5   rB  NrC  r�   rž   c                 C   s   | j S r'   rE  r1  r,   r,   r-   r¡   �  r&   z&ISIS_ExtendedIsNeighbourEntry.<lambda>r¢   c                 C   s   d|fS rî   r,   rï   r,   r,   r-   rð   “  s    z-ISIS_ExtendedIsNeighbourEntry.extract_padding)r[   r\   r]   rQ   r…   r   r   r   r¾   r¦   rð   r,   r,   r,   r-   rI  Š  s   ürI  c                   @   s>   e Zd ZdZeddeƒeddddd�edg ed	d
„ d�gZ	dS )rÿ   z!ISIS Extended IS Reachability TLVrœ   r  r9   NÚ
neighboursr�   rž   c                 C   s   | j S r'   ru   r1  r,   r,   r-   r¡   ›  r&   z'ISIS_ExtendedIsReachabilityTlv.<lambda>r¢   )
r[   r\   r]   rQ   r   r2  r   r   rI  r¦   r,   r,   r,   r-   rÿ   —  s
   
þc                   @   sD   e Zd ZdZeddeƒeddddd�edg ed	d
ƒdd„ d�gZ	dS )r  zISIS IP Interface Address TLVrœ   r  r9   NÚ	addressesr�   rž   r4   rÀ   c                 C   s
   | j d S rÊ   ru   r    r,   r,   r-   r¡   ¢  r&   z#ISIS_IpInterfaceAddressTlv.<lambda>rË   )
r[   r\   r]   rQ   r   r2  r   r   r   r¦   r,   r,   r,   r-   r  ž  s
   
þc                   @   s<   e Zd ZdZeddeƒeddddd�edg d	d
„ d�gZdS )r  zISIS IPv6 Interface Address TLVrœ   r  r9   NrM  r�   rž   c                 C   s
   | j d S ©Né   ru   r    r,   r,   r-   r¡   ª  r&   z%ISIS_Ipv6InterfaceAddressTlv.<lambda>rË   )	r[   r\   r]   rQ   r   r2  r   r   r¦   r,   r,   r,   r-   r  ¥  s
   
ýc                   @   s    e Zd ZdZeddƒedddƒedddƒedddƒeddd	ƒed
dddd�eddddd„ d�eeddddd�dd„ ƒee	dg e
dd„ d�dd„ ƒg	Zdd„ ZdS )ÚISIS_Ipv6PrefixzISIS IPv6 Prefixr;  r5   r<  r   Zexternalr=  Úreservedrt   r>  Nr?  r�   rž   c                 C   s   | j S r'   r@  r1  r,   r,   r-   r¡   ·  r&   zISIS_Ipv6Prefix.<lambda>rA  rB  rC  c                 C   s
   | j dkS rÌ   rD  r    r,   r,   r-   r¡   ¸  r&   c                 C   s   | j S r'   rE  r1  r,   r,   r-   r¡   ¹  r&   r¢   c                 C   s
   | j dkS rÌ   rD  r    r,   r,   r-   r¡   ¹  r&   c                 C   s   d|fS rî   r,   rï   r,   r,   r-   rð   ¼  s    zISIS_Ipv6Prefix.extract_padding)r[   r\   r]   rQ   r   r   r   r   r	   r   rÔ   r¦   rð   r,   r,   r,   r-   rP  ®  s   



÷rP  c                   @   s>   e Zd ZdZeddeƒeddddd�edg ed	d
„ d�gZ	dS )r  zISIS IPv6 Reachability TLVrœ   r  r9   NrH  r�   rž   c                 C   s   | j S r'   ru   r    r,   r,   r-   r¡   Ä  r&   z!ISIS_Ipv6ReachabilityTlv.<lambda>r¢   )
r[   r\   r]   rQ   r   r2  r   r   rP  r¦   r,   r,   r,   r-   r  À  s
   
þc                   @   sD   e Zd ZdZeddeƒeddddd�edg ed	d
ƒdd„ d�gZ	dS )rù   zISIS IS Neighbour TLVrœ   r�   r9   NrL  r�   rž   r4   z00.00.00.00.00.00c                 C   s
   | j d S r€   ru   r    r,   r,   r-   r¡   Ë  r&   zISIS_IsNeighbourTlv.<lambda>rË   )
r[   r\   r]   rQ   r   r2  r   r   r   r¦   r,   r,   r,   r-   rù   Ç  s
   
þc                   @   s<   e Zd ZdZeddƒeddƒeddƒedd	ƒgZd
d„ Z	d	S )ÚISIS_LspEntryzISIS LSP EntryÚlifetimei°  rH   z0102.0304.0506.07-08Úseqnumr5   r8  Nc                 C   s   d|fS rî   r,   rï   r,   r,   r-   rð   Õ  s    zISIS_LspEntry.extract_padding)
r[   r\   r]   rQ   r   r‡   r   r   r¦   rð   r,   r,   r,   r-   rR  Î  s   ýrR  c                   @   s>   e Zd ZdZeddeƒeddddd�edg ed	d
„ d�gZ	dS )rû   zISIS LSP Entry TLVrœ   r¶   r9   NÚentriesr�   rž   c                 C   s
   | j d S rN  ru   r    r,   r,   r-   r¡   Þ  r&   zISIS_LspEntryTlv.<lambda>rË   )
r[   r\   r]   rQ   r   r2  r   r   rR  r¦   r,   r,   r,   r-   rû   Ù  s
   
ýc                   @   s   e Zd Zdd„ ZdS )Ú_AdjacencyStateTlvLenFieldc                 C   s.   |j d urdS |jd urdS |jd ur*dS dS )Né   r¸   rt   r5   )ÚneighbourextlocalcircuitidÚneighboursystemidÚextlocalcircuitidrT   r,   r,   r-   rV   ã  s    


z_AdjacencyStateTlvLenField.i2mN)r[   r\   r]   rV   r,   r,   r,   r-   rV  â  s   rV  c                	   @   sr   e Zd ZdZeddeƒedddd�edd	d	d
ddœƒeeddƒdd„ ƒee	ddƒdd„ ƒeeddƒdd„ ƒgZ
dS )r  zISIS P2P Adjacency State TLVrœ   r  r9   Nr�   rÃ   ÚstateZDownZInitialisingZUp)r7   r5   r   rZ  c                 C   s
   | j dkS râ   ru   r    r,   r,   r-   r¡   õ  r&   z"ISIS_P2PAdjacencyStateTlv.<lambda>rY  c                 C   s
   | j dkS )Nr¸   ru   r    r,   r,   r-   r¡   ö  r&   rX  c                 C   s
   | j dkS )NrW  ru   r    r,   r,   r-   r¡   ÷  r&   )r[   r\   r]   rQ   r   r2  rV  r	   r   r   r¦   r,   r,   r,   r-   r  ð  s   
ûc                   @   s<   e Zd ZdZeddeƒeddddd�edd	d
d„ d�gZdS )rú   zISIS Padding TLVrœ   r‰   r9   NÚpaddingr�   rž   r4   c                 C   s   | j S r'   ru   r    r,   r,   r-   r¡      r&   zISIS_PaddingTlv.<lambda>r¢   r7  r,   r,   r,   r-   rú   û  s
   
ýc                	   @   sF   e Zd ZdZeddeƒeddddd�edg ed	d
eƒdd„ d�gZ	dS )r  zISIS Protocols Supported TLVrœ   r  r9   NZnlpidsr�   )Zcount_ofr=   r4   ZIPv4c                 C   s   | j S r'   ru   r    r,   r,   r-   r¡   	  r&   z#ISIS_ProtocolsSupportedTlv.<lambda>rË   )
r[   r\   r]   rQ   r   r2  r   r   r   r¦   r,   r,   r,   r-   r    s
   
ýc                
   @   s\   e Zd ZdZeddeƒeddddd„ d	d
�eddƒedddg d¢ƒe	dg e
dd„ d�gZdS )r	  zISIS Router Capability TLVrœ   r  r9   NrC  c                 C   s   |d S râ   r,   rÍ   r,   r,   r-   r¡     r&   z!ISIS_RouterCapabilityTlv.<lambda>r�   rÎ   rG  rÀ   r×   r   r‰   )ÚSÚDrØ   rÙ   rñ   rò   ró   rô   c                 C   s
   | j d S râ   ru   r    r,   r,   r-   r¡     r&   r¢   )r[   r\   r]   rQ   r   r2  r   r   r   r   rì   r¦   r,   r,   r,   r-   r	    s*   
ûþüôc                   @   sL   e Zd ZdZeddƒeddƒeddƒeddƒedd	ƒed
dƒgZdd„ ZdS )ÚISIS_IpReachabilityEntryzISIS IP ReachabilityÚ	defmetricr5   Ú	delmetricr  Ú	expmetricÚ	errmetricÚ	ipaddressrÀ   Z
subnetmaskz255.255.255.255c                 C   s   d|fS rî   r,   rï   r,   r,   r-   rð   0  s    z(ISIS_IpReachabilityEntry.extract_paddingN)r[   r\   r]   rQ   r   r   r¦   rð   r,   r,   r,   r-   r_  '  s   ûr_  c                   @   s>   e Zd ZdZeddeƒeddddd�edg ed	d
„ d�gZ	dS )r   z!ISIS Internal IP Reachability TLVrœ   r  r9   NrU  r�   rž   c                 C   s
   | j d S ©Nr¹   ru   r1  r,   r,   r-   r¡   9  r&   z'ISIS_InternalIpReachabilityTlv.<lambda>rË   ©
r[   r\   r]   rQ   r   r2  r   r   r_  r¦   r,   r,   r,   r-   r   4  s
   
ýc                   @   s>   e Zd ZdZeddeƒeddddd�edg ed	d
„ d�gZ	dS )r  z!ISIS External IP Reachability TLVrœ   r  r9   NrU  r�   rž   c                 C   s
   | j d S re  ru   r1  r,   r,   r-   r¡   B  r&   z'ISIS_ExternalIpReachabilityTlv.<lambda>rË   rf  r,   r,   r,   r-   r  =  s
   
ýc                   @   sD   e Zd ZdZeddƒeddƒeddƒeddƒedd	ƒgZd
d„ ZdS )ÚISIS_IsReachabilityEntryzISIS IS Reachabilityr`  r5   ra  r  rb  rc  rJ  rK  c                 C   s   d|fS rî   r,   rï   r,   r,   r-   rð   N  s    z(ISIS_IsReachabilityEntry.extract_paddingN)r[   r\   r]   rQ   r   r…   r¦   rð   r,   r,   r,   r-   rg  F  s   ürg  c                	   @   sL   e Zd ZdZeddeƒedddddd	„ d
�eddƒedg e	dd	„ d�gZ
dS )rø   zISIS IS Reachability TLVrœ   r7   r9   Nr�   rL  c                 C   s   |d S rÌ   r,   rÍ   r,   r,   r-   r¡   V  r&   zISIS_IsReachabilityTlv.<lambda>)r=   rŸ   rÏ   Zvirtualr   c                 C   s   | j d d S )Nr5   r¸   ru   r1  r,   r,   r-   r¡   X  r&   rË   )r[   r\   r]   rQ   r   r2  r   r   r   rg  r¦   r,   r,   r,   r-   rø   R  s   
üzL1 LAN HellozL2 LAN Helloz	P2P HellozL1 LSPzL2 LSPzL1 CSNPzL2 CSNPzL1 PSNPzL2 PSNP)	rW  rO  r4  rº   é   r  é   é   é   c                
   @   s`   e Zd ZdZeddeƒeddƒeddƒedd	ƒed
deƒeddƒedd	ƒedd	ƒgZdd„ Z	dS )ÚISIS_CommonHdrzISIS Common HeaderZnlpidr  ÚhdrlenNÚversionr5   Zidlenr   ÚpdutypeZ
pduversionZhdrreservedZmaxareaaddrc                 C   sb   || }| d   | j¡}|d ur^|\}}t||d … || ƒ}|d |… | ||d d …  }|S )Nr5   r7   )Úchecksum_inform  r!   )rP   rU   ZpayZpduZchecksumInfoZcbeginÚcposZ
checkbytesr,   r,   r-   Ú
post_buildy  s     zISIS_CommonHdr.post_build)
r[   r\   r]   rQ   r   r   r   Ú_isis_pdu_namesr¦   rr  r,   r,   r,   r-   rl  l  s   

ørl  c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_ISIS_PduBasec                 C   s>   |}| j D ].}t|tƒr,|d7 }d|f  S |t|ƒ7 }q
d S r“   )ÚtlvsrX   rý   r9   )rP   rm  ZchecksumPositionZtlvr,   r,   r-   rp  ‡  s    

z_ISIS_PduBase.checksum_infoc                 C   s   t jS r'   r£   r¤   r,   r,   r-   r¥   ’  s    z!_ISIS_PduBase.guess_payload_classN)r[   r\   r]   rp  r¥   r,   r,   r,   r-   rt  †  s   rt  c                   @   s   e Zd Zdd„ ZdS )Ú_ISIS_PduLengthFieldc                 C   s   t j| dd ddd„ d� d S )NÚ	pdulengthru  c                 S   s   || j j S r'   )Ú
underlayerrm  rÍ   r,   r,   r-   r¡   ˜  r&   z/_ISIS_PduLengthField.__init__.<locals>.<lambda>)rŸ   rÏ   )r   rO   r}   r,   r,   r-   rO   —  s    z_ISIS_PduLengthField.__init__Nr’   r,   r,   r,   r-   rv  –  s   rv  c                   @   s   e Zd Zdd„ ZdS )Ú_ISIS_TlvListFieldc                 C   s   t j| dg tdd„ d� d S )Nru  c                 S   s   | j | jj S r'   )rw  rx  rm  r    r,   r,   r-   r¡   �  r&   z-_ISIS_TlvListField.__init__.<locals>.<lambda>r¢   )r   rO   r-  r}   r,   r,   r-   rO   œ  s    z_ISIS_TlvListField.__init__Nr’   r,   r,   r,   r-   ry  ›  s   ry  c                   @   s<   e Zd Zeƒ eddƒeddƒeƒ eddƒeddƒe	ƒ gZ
d	S )
Ú_ISIS_LAN_HelloBaseÚsourceidú0102.0304.0506Úholdingtimeé   Úpriorityr5   Zlanidz0000.0000.0000.00N)r[   r\   r]   rŠ   r   r   rv  r   r…   ry  r¦   r,   r,   r,   r-   rz     s   ùrz  c                   @   s   e Zd ZdZdS )ÚISIS_L1_LAN_HellozISIS L1 LAN Hello PDUNr¨   r,   r,   r,   r-   r€  ¬  s   r€  c                   @   s   e Zd ZdZdS )ÚISIS_L2_LAN_HellozISIS L2 LAN Hello PDUNr¨   r,   r,   r,   r-   r�  °  s   r�  c                   @   s8   e Zd ZdZeƒ eddƒeddƒeƒ eddƒe	ƒ gZ
dS )	ÚISIS_P2P_HellozISIS Point-to-Point Hello PDUr{  r|  r}  r~  Zlocalcircuitidr   N)r[   r\   r]   rQ   rŠ   r   r   rv  r   ry  r¦   r,   r,   r,   r-   r‚  ´  s   úr‚  c                   @   sP   e Zd Zeƒ eddƒeddƒeddƒeddƒed	d
dg d¢ƒe	ƒ gZ
dd„ ZdS )Ú_ISIS_LSP_BaserS  i¯  rH   z0102.0304.0506.00-00rT  r5   r8  NZ	typeblockr´   r‰   )rŒ   r�   ZOLZADefZADelZAExpZAErrrÝ   c                 C   s   | j d urd S dS )N)r¹   r  )r8  )rP   rm  r,   r,   r-   rp  Ì  s    
z_ISIS_LSP_Base.checksum_info)r[   r\   r]   rv  r   r‡   r   r   r   ry  r¦   rp  r,   r,   r,   r-   rƒ  Á  s   ù
rƒ  c                 C   s   dS ©Nr   r,   )ZlspÚotherr™   r,   r,   r-   Ú_lsp_answersÓ  s    r†  c                   @   s   e Zd ZdZdd„ ZdS )ÚISIS_L1_LSPzISIS L1 Link State PDUc                 C   s   t | |dƒS )NÚISIS_L1_PSNP©r†  ©rP   r…  r,   r,   r-   ÚanswersÛ  s    zISIS_L1_LSP.answersN©r[   r\   r]   rQ   r‹  r,   r,   r,   r-   r‡  Ø  s   r‡  c                   @   s   e Zd ZdZdd„ ZdS )ÚISIS_L2_LSPzISIS L2 Link State PDUc                 C   s   t | |dƒS )NÚISIS_L2_PSNPr‰  rŠ  r,   r,   r-   r‹  â  s    zISIS_L2_LSP.answersNrŒ  r,   r,   r,   r-   r�  ß  s   r�  c                   @   s0   e Zd Zeƒ eddƒeddƒeddƒeƒ gZdS )Ú_ISIS_CSNP_Baser{  ú0102.0304.0506.00Z
startlspidz0000.0000.0000.00-00ZendlspidzFFFF.FFFF.FFFF.FF-FFN)r[   r\   r]   rv  r…   r‡   ry  r¦   r,   r,   r,   r-   r�  æ  s   ûr�  c                 C   s   dS r„  r,   )Zsnpr…  r™   r,   r,   r-   Ú_snp_answersð  s    r‘  c                   @   s   e Zd ZdZdd„ ZdS )ÚISIS_L1_CSNPz'ISIS L1 Complete Sequence Number Packetc                 C   s   t | |dƒS ©Nr‡  ©r‘  rŠ  r,   r,   r-   r‹  ø  s    zISIS_L1_CSNP.answersNrŒ  r,   r,   r,   r-   r’  õ  s   r’  c                   @   s   e Zd ZdZdd„ ZdS )ÚISIS_L2_CSNPz'ISIS L2 Complete Sequence Number Packetc                 C   s   t | |dƒS ©Nr�  r”  rŠ  r,   r,   r-   r‹  ÿ  s    zISIS_L2_CSNP.answersNrŒ  r,   r,   r,   r-   r•  ü  s   r•  c                   @   s    e Zd Zeƒ eddƒeƒ gZdS )Ú_ISIS_PSNP_Baser{  r�  N)r[   r\   r]   rv  r…   ry  r¦   r,   r,   r,   r-   r—    s   ýr—  c                   @   s   e Zd ZdZdd„ ZdS )rˆ  z&ISIS L1 Partial Sequence Number Packetc                 C   s   t | |dƒS r“  r”  rŠ  r,   r,   r-   r‹    s    zISIS_L1_PSNP.answersNrŒ  r,   r,   r,   r-   rˆ    s   rˆ  c                   @   s   e Zd ZdZdd„ ZdS )rŽ  z&ISIS L2 Partial Sequence Number Packetc                 C   s   t | |dƒS r–  r”  rŠ  r,   r,   r-   r‹    s    zISIS_L2_PSNP.answersNrŒ  r,   r,   r,   r-   rŽ    s   rŽ  r  rk  rW  )rm  ro  rO  rh  r4  rº   é!   r  ri  rj  )•Ú__doc__Ú
__future__r   rx   rm   Zscapy.configr   Zscapy.fieldsr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zscapy.packetr   r   Zscapy.layers.clnsr   r   Zscapy.layers.inet6r   r    Zscapy.utilsr!   Zscapy.volatiler"   r#   Zscapy.compatr$   r%   ZEXT_VERSIONr3   r>   r?   rB   rF   rG   rI   rJ   rK   r_   rj   rr   r   r…   r‡   rŠ   rš   r›   r§   r©   r¼   rÂ   r¾   r¬   r­   r«   r±   r²   rª   r®   r¯   r°   r³   rÓ   rÖ   rÔ   rÐ   rÑ   rÒ   rå   rç   ræ   rä   rë   rö   rì   rí   rè   ré   r,  r2  r-  r.  r÷   rü   rþ   rý   r  r:  rF  r  rI  rÿ   r  r  rP  r  rù   rR  rû   rV  r  rú   r  r	  r_  r   r  rg  rø   rs  rl  rt  rv  ry  rz  r€  r�  r‚  rƒ  r†  r‡  r�  r�  r‘  r’  r•  r—  rˆ  rŽ  r,   r,   r,   r-   Ú<module>
   sÂ  #d	 
	ööýýÿÿþþíÕ/							÷
