
    h/                        d 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Z.d Z/d Z0d Z1d Z2d Z3d Z4d Z5d Z6 G d de          Z7 G d de)          Z8 G d de8          Z9 G d de          Z: G d de7          Z; G d de7          Z< G d  d!e7          Z= G d" d#e          Z>d$ Z? G d% d&e          Z@ G d' d(e@          ZA G d) d*e@          ZBd+d,d-d.d/d0d1d2d3d4d5
ZCd6d7d8d9d:d;d<d=d>d?d5
ZDd@ ZE G dA d-eB          ZF G dB d.eB          ZG G dC d,eB          ZH G dD d2eB          ZI G dE d3eB          ZJ G dF d+eB          ZK G dG d/eB          ZL G dH d0eB          ZM G dI d1eB          ZN G dJ d4eB          ZOdKdLdMdNZPdOdPdQdNZQdR ZR G dS dKeB          ZS G dT dLeB          ZT G dU dMeB          ZUdVdWiZVdVdXiZWdY ZX G dZ dWeB          ZYd[d\d]ZZd^d_d]Z[d` Z\ G da dbe          Z] G dc d[eB          Z^ G dd d\eB          Z_i dVdedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddddddddddZ`i dVddfddhddddjddlddnddpddddrddtddddddvddxddzdddi d|dddd~dddddddddddddddddddddddddddddddddddddddǜ	ZadȄ Zb G dɄ de          Zc G d˄ deeA          Zd G d̄ doeA          Ze G d̈́ dseA          Zf G d΄ dqeA          Zg G dτ deA          Zh G dЄ de          Zi G d҄ deA          Zj G dԄ deA          Zk G dՄ de          Zl G dׄ dueA          Zm G d؄ d}eA          Zn G dل deA          Zo G dڄ de          Zp G d܄ deA          Zq G d݄ dieA          Zr G dބ de          Zs G d dmeA          Zt G d de          Zu G d deA          Zv G d dkeA          Zw G d dyeA          Zx G d deA          Zy G d de          Zz G d dweA          Z{ G d d{eA          Z| G d de          Z} G d dgeA          Z~dddddddddd	Z G d de          Z G d de          Z G d de          Z G d de          Z G d  de          Z G d de          Z G d de          Z G d de          Z G d d	e          Zd
 Z G d de          Z G d de          Z G d de          Zd Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z e"de            eeedd            eeedd            eeed d!            eeedd"            eeedd             eeed#d            eeed#d$            eeed!d%            eee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)

    N)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                 f    d                     d |                     d          D                       S )N    c              3   4   K   | ]}t          |          V  d S Nr%   .0xs     V/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/isis.py	<genexpr>z isis_area2str.<locals>.<genexpr>D   s(      ::QIaLL::::::r'   .joinsplit)areas    r.   isis_area2strr5   C   s-    88::$**S//::::::r'   c                     t          |           dk    rdS t          | dd                    }dd|dz  z  z   |dz  dk    rdndz   }|t          d | D                       z  S )	Nr       %02Xz	.%02X%02X   z.%02Xc              3   4   K   | ]}t          |          V  d S r)   r$   r+   s     r.   r/   z isis_str2area.<locals>.<genexpr>M   s(      ))!s1vv))))))r'   )lentuple)snumbytesfmts      r.   isis_str2arearB   G   sv    
1vv{{r1QRR5zzH
K8q=1
2X\a<O<ObbU\
]C))q)))))))r'   c                 f    d                     d |                     d          D                       S )Nr'   c              3   4   K   | ]}t          |          V  d S r)   r*   r+   s     r.   r/   z!isis_sysid2str.<locals>.<genexpr>Q   s(      ;;QIaLL;;;;;;r'   r0   r1   )sysids    r.   isis_sysid2strrF   P   s/    88;;%++c*:*:;;;;;;r'   c                 J    dd d         t          d | D                       z  S )Nz%02X%02X.%02X%02X.%02X%02X.c              3   4   K   | ]}t          |          V  d S r)   r<   r+   s     r.   r/   z!isis_str2sysid.<locals>.<genexpr>U   s(      )<)<Q#a&&)<)<)<)<)<)<r'   )r>   r?   s    r.   isis_str2sysidrK   T   s-    SbS!E)<)<!)<)<)<$<$<<<r'   c                 `    t          | d d                   t          | dd                    z   S N)rF   r%   )nodeids    r.   isis_nodeid2strrQ   X   s-    &"+&&6"##;)?)???r'   c                 `    dt          | d d                   t          | d                   fz  S )Nz%s.%02XrH   )rK   r$   rJ   s    r.   isis_str2nodeidrS   \   s,    q"v..AbE

;;;r'   c                 `    t          | d d                   t          | dd                    z   S rM   )rQ   r%   )lspids    r.   isis_lspid2strrV   `   s-    5":&&5:)>)>>>r'   c                 `    dt          | d d                   t          | d                   fz  S )Nz%s-%02XrH   )rS   r$   rJ   s    r.   isis_str2lspidrX   d   s,    #2#//QrU<<<r'   c                   .    e Zd Zg dZd Zd Zd Zd ZdS )_ISIS_IdFieldBase)to_strto_idlengthc                 d    || _         || _        || _        t          j        | ||d|z             d S )Nz%is)r[   r\   r]   r
   __init__)selfnamedefaultr]   r[   r\   s         r.   r_   z_ISIS_IdFieldBase.__init__k   s7    
tT7EFN;;;;;r'   c                 D    |
d| j         z  S |                     |          S )N    )r]   r[   r`   pktr-   s      r.   i2mz_ISIS_IdFieldBase.i2mq   s$    94;&&{{1~~r'   c                 ,    |                      |          S r)   )r\   re   s      r.   m2iz_ISIS_IdFieldBase.m2iw   s    zz!}}r'   c                     t          |t                    r.t          |          | j        k    r|                     ||          S |S r)   )
isinstancestrr=   r]   ri   re   s      r.   any2iz_ISIS_IdFieldBase.any2iz   s?    a 	$#a&&DK"7"788C###r'   N)__name__
__module____qualname__	__slots__r_   rg   ri   rm    r'   r.   rZ   rZ   h   s[        ---I< < <        r'   rZ   c                       e Zd Zd Zd ZdS )_ISIS_RandIdc                     t          j        |            |                    d          | _        |                    dd          | _        d S )N*r9   )r"   r_   count	bytecountreplaceformat)r`   templates     r.   r_   z_ISIS_RandId.__init__   sA    D!!!!,,&&sF33r'   c                     | j         dk    rdS d}t          | j                   D ]}|t                      fz  }| j        |z  S )Nr   r7   rr   )rx   ranger#   rz   )r`   val_s      r.   _fixz_ISIS_RandId._fix   sQ    >Q2t~&& 	! 	!AHJJ= CC{S  r'   N)rn   ro   rp   r_   r   rr   r'   r.   rt   rt      s2        4 4 4
	! 	! 	! 	! 	!r'   rt   c                         e Zd Zd fd	Z xZS )_ISIS_RandAreaIdNc                     dd| j         dz
  dz  z  z   | j         dz
  dz  dk    rdndz   }t          t          |                               |           |t	          j        dd          | _         d S || _         d S )	Nrv   z.**r8   r:   r   r7   z.*   )rx   superr   r_   randomrandint)r`   rx   r{   	__class__s      r.   r_   z_ISIS_RandAreaId.__init__   s    dnq(Q./
 NQ&!+11BBt

 	%%..x888#^Ar22DNNN&DNNNr'   r)   )rn   ro   rp   r_   __classcell__)r   s   @r.   r   r      s=        
' 
' 
' 
' 
' 
' 
' 
' 
' 
'r'   r   c                   >    e Zd ZdgZd Zd Zd Zd Zd Zd Z	d Z
d	S )
ISIS_AreaIdFieldlength_fromc                 @    t          j        | ||           || _        d S r)   )r
   r_   r   )r`   ra   rb   r   s       r.   r_   zISIS_AreaIdField.__init__   s$    tT7+++&r'   c                      t          |          S r)   )r5   re   s      r.   rg   zISIS_AreaIdField.i2m       Qr'   c                      t          |          S r)   )rB   re   s      r.   ri   zISIS_AreaIdField.m2i   r   r'   c                 >    |dS t          |          }||dz  z
  dz  S )Nr      r:   r=   )r`   rf   r-   tmp_lens       r.   i2lenzISIS_AreaIdField.i2len   s+    91a&&7a<(Q..r'   c                 ~    |                      ||          }|t          j        dt          |          z  |          z   S )N!%is)rg   structpackr=   )r`   rf   r?   r~   svals        r.   addfieldzISIS_AreaIdField.addfield   s7    xxS!!6;vD		148888r'   c           
          |                      |          }||d          |                     |t          j        d|z  |d |                   d                   fS )Nr   r   )r   ri   r   unpack)r`   rf   r?   r@   s       r.   getfieldzISIS_AreaIdField.getfield   sU    ##C((|TXXc6=(9JAixiL+Y+YZ[+\]]]]r'   c                     t                      S r)   )r   r`   s    r.   randvalzISIS_AreaIdField.randval   s    !!!r'   N)rn   ro   rp   rq   r_   rg   ri   r   r   r   r   rr   r'   r.   r   r      s        I' ' '          / / /9 9 9^ ^ ^" " " " "r'   r   c                       e Zd Zd Zd ZdS )ISIS_SystemIdFieldc                 X    t                               | ||dt          t                     d S N   )rZ   r_   rF   rK   r`   ra   rb   s      r.   r_   zISIS_SystemIdField.__init__   &    ""4w>>ZZZZZr'   c                      t          d          S )Nz**.**.**rt   r   s    r.   r   zISIS_SystemIdField.randval   s    J'''r'   Nrn   ro   rp   r_   r   rr   r'   r.   r   r      s5        [ [ [( ( ( ( (r'   r   c                       e Zd Zd Zd ZdS )ISIS_NodeIdFieldc                 X    t                               | ||dt          t                     d S )N   )rZ   r_   rQ   rS   r   s      r.   r_   zISIS_NodeIdField.__init__   s&    ""4w?O\\\\\r'   c                      t          d          S )Nz
**.**.**.*r   r   s    r.   r   zISIS_NodeIdField.randval   s    L)))r'   Nr   rr   r'   r.   r   r      s5        ] ] ]* * * * *r'   r   c                       e Zd Zd Zd ZdS )ISIS_LspIdFieldc                 X    t                               | ||dt          t                     d S N   )rZ   r_   rV   rX   r   s      r.   r_   zISIS_LspIdField.__init__   r   r'   c                      t          d          S )Nz**.**.**.*-*r   r   s    r.   r   zISIS_LspIdField.randval   s    N+++r'   Nr   rr   r'   r.   r   r      s5        [ [ [, , , , ,r'   r   c                       e Zd Z	 	 ddZdS )ISIS_CircuitTypeFieldcircuittyper:   r   Nc                 B    |g d}t          j        | ||||           d S )N)L1L2r0r1r2r3r4r5)r   r_   )r`   ra   rb   sizenamess        r.   r_   zISIS_CircuitTypeField.__init__   s1    =DDDED$u=====r'   )r   r:   r   Nrn   ro   rp   r_   rr   r'   r.   r   r      s.        ;<> > > > > >r'   r   c                     t           j        }t          |          dk    r?t          |d                   }|                     ||          }t                      |         } ||fi |S Nr:   r   )r   	raw_layerr=   r$   getglobals)tlv_classesdefaultnamepkargsclstlvtypeclsnames          r.   _ISIS_GuessTlvClass_Helperr      s\    
.C
1vv{{ad))//';77ii 3q??E??r'   c                   f    e Zd Z edd           edddd           eddd	 
          gZd ZdS )_ISIS_GenericTlv_Basetyper   r=   Nr~   B	length_ofrA   r7   c                     | j         S r)   r   rf   s    r.   <lambda>z_ISIS_GenericTlv_Base.<lambda>   s    sw r'   r   c                     t           j        S r)   r   padding_layerr`   r   s     r.   guess_payload_classz)_ISIS_GenericTlv_Base.guess_payload_class       !!r'   )rn   ro   rp   r   r   r   fields_descr   rr   r'   r.   r   r      si        9VQ'' =3GGG##E2;N;NOOOQK" " " " "r'   r   c                       e Zd ZdZdS )ISIS_GenericTlvzISIS Generic TLVNrn   ro   rp   ra   rr   r'   r.   r   r      s        DDDr'   r   c                       e Zd ZdZdS )ISIS_GenericSubTlvzISIS Generic Sub-TLVNr   rr   r'   r.   r   r      s        !DDDr'   r   ISIS_AdministrativeGroupSubTlv%ISIS_LinkLocalRemoteIdentifiersSubTlvISIS_IPv4InterfaceAddressSubTlvISIS_IPv4NeighborAddressSubTlvISIS_MaximumLinkBandwidthSubTlv)ISIS_MaximumReservableLinkBandwidthSubTlvISIS_UnreservedBandwidthSubTlvISIS_IPv6InterfaceAddressSubTlvISIS_IPv6NeighborAddressSubTlvISIS_TEDefaultMetricSubTlv)
      r   r   	   
         r      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                 *    t          t          d| fi |S Nr   )r   _isis_subtlv_classes_1r   r   s     r.   _ISIS_GuessSubTlvClass_1r          %&<>RTU__Y^___r'   c                   `    e Zd ZdZ edde           edddd           edd	          gZdS )
r   zISIS IPv4 Interface Address (S)r   r   r=   Naddressr   r   0.0.0.0	rn   ro   rp   ra   r   _isis_subtlv_names_1r   r   r   rr   r'   r.   r   r     sQ        ,D =,@AA =	sKKK79i002KKKr'   c                   `    e Zd ZdZ edde           edddd           edd	          gZdS )
r   zISIS IPv4 Neighbor Address (S)r   r   r=   Nr  r   r   r  r  rr   r'   r.   r   r   %  sQ        +D =,@AA =	sKKK79i002KKKr'   c                   t    e Zd ZdZ edde           eddd           edd	           ed
d	          gZdS )r   z&ISIS Link Local/Remote Identifiers (S)r   r   r=   r   r   rA   localid0remoteidN)	rn   ro   rp   ra   r   r  r   r   r   rr   r'   r.   r   r   ,  s^        3D =,@AA =s3338Is++8J,,.KKKr'   c                   `    e Zd ZdZ edde           edddd           edd	          gZdS )
r   zISIS IPv6 Interface Address (S)r   r   r=   Nr  r   r   ::	rn   ro   rp   ra   r   r  r   r    r   rr   r'   r.   r   r   4  sQ        ,D =-ABB =	sKKK8It,,.KKKr'   c                   `    e Zd ZdZ edde           edddd           edd	          gZdS )
r   zISIS IPv6 Neighbor Address (S)r   r   r=   Nr  r   r   r  r  rr   r'   r.   r   r   ;  sQ        +D =-ABB =	sKKK8It,,.KKKr'   c                   `    e Zd ZdZ edde           edddd           edd	          gZdS )
r   z#Administrative Group SubTLV (Color)coder   r=   N
admingroupr   r   z0.0.0.1r  rr   r'   r.   r   r   B  sQ        0D =,@AA =#NNN7<335KKKr'   c                   `    e Zd ZdZ edde           edddd           edd	          gZdS )
r   zMaximum Link Bandwidth SubTLVr   r   r=   Nmaxbwr   r     	rn   ro   rp   ra   r   r  r   r   r   rr   r'   r.   r   r   I  sQ        *D =,@AA =SIII!>'4002KKKr'   c                   `    e Zd ZdZ edde           edddd           edd	          gZdS )
r   z(Maximum Reservable Link Bandwidth SubTLVr   r   r=   Nmaxrsvbwr   r   r  r  rr   r'   r.   r   r   P  sQ        5D =-ABB =
LLL!>*d335KKKr'   c            
           e Zd ZdZ edde           edddd           edg d	 ed
d          d           gZ	dS )r   zUnreserved Bandwidth SubTLVr   r   r=   Nunrsvbwr   r   )r  r  r  r  r  r  r  r  r7   r  c                     | j         dz  S Nr   r   r   s    r.   r   z'ISIS_UnreservedBandwidthSubTlv.<lambda>[  s       QT  QX  [\  Q\ r'   
count_from)
rn   ro   rp   ra   r   r  r   r   r   r   rr   r'   r.   r   r   W  s        (D =-ABB =	sKKK!>)-]-]-]_m_mnprv_w_w  E\  E\  ]  ]  ]^KKKr'   c                   d    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TE Default Metric SubTLVr   r   r=   Ntemetricc                     |dz
  S Nr8   rr   rf   r-   s     r.   r   z#ISIS_TEDefaultMetricSubTlv.<lambda>a  s    YZ]^Y^ r'   r   r   adjustrA   r  )	rn   ro   rp   ra   r   r  r   r   r   rr   r'   r.   r   r   ^  sX        %D =-ABB =
K^K^dghhh"?:t446KKKr'   !ISIS_32bitAdministrativeTagSubTlv!ISIS_64bitAdministrativeTagSubTlv"ISIS_PrefixSegmentIdentifierSubTlv)r8   r:   r   z32-bit Administrative Tagz64-bit Administrative TagzPrefix Segment Identifierc                 *    t          t          d| fi |S r   )r   _isis_subtlv_classes_2r   s     r.   _ISIS_GuessSubTlvClass_2r*  u  r   r'   c            
       |    e Zd ZdZ edde           edddd           edg  ed	d
          d           gZ	dS )r%  z"ISIS 32-bit Administrative Tag (S)r   r8   r=   Ntagsr   r   r7   r   c                     | j         dz  S r  r   r   s    r.   r   z*ISIS_32bitAdministrativeTagSubTlv.<lambda>}  s    VYV]abVb r'   r  )
rn   ro   rp   ra   r   _isis_subtlv_names_2r   r   r   r   rr   r'   r.   r%  r%  y  sg        /D =,@AA =CHHH!>&"hhr1ooJbJbccceKKKr'   c            
       |    e Zd ZdZ edde           edddd           edg  ed	d
          d           gZ	dS )r&  z"ISIS 64-bit Administrative Tag (S)r   r:   r=   Nr,  r   r   r7   r   c                     | j         dz  S r   r   r   s    r.   r   z*ISIS_64bitAdministrativeTagSubTlv.<lambda>  s    WZW^bcWc r'   r  )
rn   ro   rp   ra   r   r.  r   r   r   r   rr   r'   r.   r&  r&    si        /D =,@AA =CHHH!>&"iiA.>.>KcKcdddfKKKr'   c                       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            e e
dd          d           gZdS )r'  zISIS Prefix SID sub TLVr   r   r=   r   flagsr   r   )res1res2LVEPNR	algorithmsidc                     | j         dk    S Nr   r   r   s    r.   r   z+ISIS_PrefixSegmentIdentifierSubTlv.<lambda>      1 r'   idxc                     | j         dk    S r   r   r   s    r.   r   z+ISIS_PrefixSegmentIdentifierSubTlv.<lambda>  r?  r'   N)rn   ro   rp   ra   r   r.  r   r   r	   r   r   r   rr   r'   r.   r'  r'    s        $D =,@AA9UA&&:1EEEG G 9[!,,##OOE1$=$=$<$<> >##HHUA$6$6$<$<> >	?KKKr'   r8   ISIS_SIDLabelSubTLVzISIS SID/Label sub TLVc                 *    t          t          d| fi |S r   )r   _isis_subtlv_classes_3r   s     r.   _ISIS_GuessSubTlvClass_3rE    .    % 4aB B;@B B Br'   c            	           e Zd ZdZ edde           edd           e edd          d            e e	d	d          d
           gZ
dS )rB  zISIS SID Label sub TLVr   r8   r=   r   r<  r   c                     | j         dk    S )Nr   r   r   s    r.   r   zISIS_SIDLabelSubTLV.<lambda>      SW\ r'   r@  c                     | j         dk    S r  r   r   s    r.   r   zISIS_SIDLabelSubTLV.<lambda>  rI  r'   N)rn   ro   rp   ra   r   _isis_subtlv_names_3r   r	   r   r   r   rr   r'   r.   rB  rB    s        #Dfa!566	%2211	3 	3%++11	3 	3KKKr'   ISIS_SRCapabilitiesSubTLVISIS_SRAlgorithmSubTLV)r:      z"Segment Routing Capability sub TLVzSegment Routing Algorithmc                 *    t          t          d| fi |S r   )r   _isis_subtlv_classes_4r   s     r.   _ISIS_GuessSubTlvClass_4rQ    rF  r'   c                   J    e Zd ZdZ edd           edde          gZd ZdS )ISIS_SRGBDescriptorEntryzISIS SRGB Descriptorr}   r   	sid_labelNc                 
    d|fS Nr7   rr   r`   r?   s     r.   extract_paddingz(ISIS_SRGBDescriptorEntry.extract_padding      1ur'   )	rn   ro   rp   ra   r   r   rB  r   rX  rr   r'   r.   rS  rS    sP        !D##K':;;K
    r'   rS  c            	           e Zd ZdZ edde           edddd d	           ed
ddg d           edg e	d           gZ
dS )rL  zISIS SR Capabilities TLVr   r:   r=   Nsrgb_rangesc                     |dz   S r!  rr   r"  s     r.   r   z"ISIS_SRCapabilitiesSubTLV.<lambda>  
    !a% r'   r   r#  r2  r   r   )r3  r4  res3res4res5res6r6  Ic                     | j         dz
  S r!  r   r   s    r.   r   z"ISIS_SRCapabilitiesSubTLV.<lambda>      CGaK r'   r   )rn   ro   rp   ra   r   rK  r   r   r   rS  r   rr   r'   r.   rL  rL    s        %Dfa!566#''	 	 	 	
QFFF	H 	H 	$//		1 	1 	1KKKr'   c            
       ~    e Zd ZdZ edde           edddd           edd	g ed
d	          d           gZ	dS )rM  zISIS SR Algorithm sub TLVr   rN  r=   N
algorithmsr   r   r   r7   c                     | j         S r)   r   r   s    r.   r   zISIS_SRAlgorithmSubTLV.<lambda>  s    #' r'   r  )
rn   ro   rp   ra   r   _isis_subtlv_names_4r   r   r   r   rr   r'   r.   rM  rM    ss        &Dfb"677eT\sCCCCIb!))		+ 	+ 	+KKKr'   ISIS_AreaTlvr:   ISIS_IsReachabilityTlvr   ISIS_IsNeighbourTlvr   ISIS_PaddingTlvr   ISIS_LspEntryTlvr   ISIS_AuthenticationTlvr   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)      zArea TLVzIS Reachability TLVzIS Neighbour TLVr   zInstance Identifier TLVzPadding TLVzLSP Entries TLVzAuthentication TLVzOptional Checksum TLVr   z#Purge Originator Identification TLVzLSP Buffer Size TLVzExtended IS-Reachability TLV   zIS Neighbour Attribute TLV   zIS Alias IDzIP Internal Reachability TLVzProtocols Supported TLVzIP External Reachability TLV   z-Inter-Domain Routing Protocol Information TLVzIP Interface Address TLV   z!Traffic Engineering Router ID TLVzExtended IP Reachability TLVzDynamic Hostname TLV   z GMPLS Shared Risk Link Group TLV   zIPv6 Shared Risk Link Group TLV   z&IPv6 Traffic Engineering Router ID TLV   z%Inter-AS Reachability Information TLV   zGroup Address TLV   z(Multi-Topology-Aware Port Capability TLV   zMulti-Topology Capability TLV   zTRILL Neighbour TLV   zMAC-Reachability TLV   zBFD-Enabled TLV   zRestart TLV   z'Multi-Topology Intermediate Systems TLV   z*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)	   r        r     r  r     c                 *    t          t          d| fi |S )Nr   )r   _isis_tlv_classesr   s     r.   _ISIS_GuessTlvClassr  :  s    %&79JAWWQVWWWr'   c                   T    e Zd ZdZ edddd           eddd 	          gZd
 ZdS )ISIS_AreaEntryzISIS Area EntryarealenNareaidr   r   49c                     | j         S r)   )r  r   s    r.   r   zISIS_AreaEntry.<lambda>A  s    CK r'   r   c                 
    d|fS rV  rr   rW  s     r.   rX  zISIS_AreaEntry.extract_paddingC  rY  r'   )rn   ro   rp   ra   r   r   r   rX  rr   r'   r.   r  r  >  s_        D =DH#NNN##Hd@W@WXXXZK    r'   r  c                   h    e Zd ZdZ edde           edddd           edg ed	 
          gZ	dS )ri  zISIS Area TLVr   r8   r=   Nareasr   r   c                     | j         S r)   r   r-   s    r.   r   zISIS_AreaTlv.<lambda>K  s
    VWV[ r'   r   )
rn   ro   rp   ra   r   _isis_tlv_namesr   r   r  r   rr   r'   r.   ri  ri  G  sZ        D =O<< =SIII"?7BOO\\\^KKKr'   c            	           e Zd ZdZ edde           edddd d	           ed
dddd           edddd           gZdS )rn  zISIS Authentication TLVr   r   r=   Npasswordc                     |dz   S r!  rr   r"  s     r.   r   zISIS_AuthenticationTlv.<lambda>Q      Z[^_Z_ r'   r   r#  authtyper8   PlainzHMAC-MD5)r8      r7      c                     | j         dz
  S r!  r   r   s    r.   r   zISIS_AuthenticationTlv.<lambda>S  s    X[X_bcXc r'   )maxlenr   	rn   ro   rp   ra   r   r  r   r   r   rr   r'   r.   rn  rn  N  s}        $D =_== =
K_K_ehiii =QG0L0LMM##J3LcLcdddfKKKr'   c                   Z    e Zd ZdZ edde           edd           edd          gZdS )	rq  zISIS Buffer Size TLVr   rp  r=   r:   lspbuffersizei  N)	rn   ro   rp   ra   r   r  r   r   r   rr   r'   r.   rq  rq  V  sI        !D =_==9UA&&:ot446KKKr'   c                   Z    e Zd ZdZ edde           edd           edd          gZdS )ro  zISIS Optional Checksum TLVr   r   r=   r:   checksumN)	rn   ro   rp   ra   r   r  r   r   r   rr   r'   r.   ro  ro  ]  sI        'D =_==9UA&&;z4002KKKr'   c                   f    e Zd ZdZ edde           edddd           edd	d
           gZdS )r  zISIS Dynamic Hostname TLVr   r~  r=   Nhostnamer   r   r7   c                     | j         S r)   r   r   s    r.   r   z ISIS_DynamicHostnameTlv.<lambda>h  s    CG r'   r   r  rr   r'   r.   r  r  d  s[        &D =o>> =
LLL##J@S@STTTVKKKr'   c                      e Zd ZdZ edd           eddd           eddd           eddd	d
           ed
ddd            e e	dddd          d            e e
dg ed           d           gZd ZdS )ISIS_ExtendedIpPrefixzISIS Extended IP Prefixmetricr8   updownr   subtlvindicatorpfxlenNr   pfx)r   c                     | j         S r)   r  r  s    r.   r   zISIS_ExtendedIpPrefix.<lambda>r  s    ah r'   	wordbytesr   
subtlvslensubtlvsr   r   c                     | j         dk    S r!  r  r   s    r.   r   zISIS_ExtendedIpPrefix.<lambda>s      fify}~f~ r'   c                     | j         S r)   r  r  s    r.   r   zISIS_ExtendedIpPrefix.<lambda>t  
    hiht r'   r   c                     | j         dk    S r!  r  r   s    r.   r   zISIS_ExtendedIpPrefix.<lambda>t         DG  DW  [\  D\ r'   c                 
    d|fS rV  rr   rW  s     r.   rX  z%ISIS_ExtendedIpPrefix.extract_paddingw  rY  r'   )rn   ro   rp   ra   r   r   r   r   r	   r   r   r*  r   rX  rr   r'   r.   r  r  k  s        $D11a  "Aq))4e<<<eTQ<N<NOOO|TYTWXXXZ~Z~B8P^t^tuuu  x\  x\  	]  	]K    r'   r  c                   `    e Zd ZdZ edde           edddd           edd	          gZdS )
ISIS_TERouterIDTlvzISIS TE Router ID TLVr   r  r=   Nrouteridr   r   r  )	rn   ro   rp   ra   r   r  r   r   r   rr   r'   r.   r  r  {  sP        "D =o>> =
LLL7:y113KKKr'   r  c                   h    e Zd ZdZ edde           edddd           edg ed	 
          gZ	dS )r}  z!ISIS Extended IP Reachability TLVr   r|  r=   Npfxsr   r   c                     | j         S r)   r   r   s    r.   r   z'ISIS_ExtendedIpReachabilityTlv.<lambda>  s
    ^a^e r'   r   )
rn   ro   rp   ra   r   r  r   r   r  r   rr   r'   r.   r}  r}    s]        .D =o>> =CHHH"?62/DReRefffhKKKr'   c            	           e Zd ZdZ edd           edd           edddd	
           edg ed           gZ	d Z
dS )ISIS_ExtendedIsNeighbourEntryz ISIS Extended IS Neighbour Entryneighbourid0102.0304.0506.07r  r8   r  Nr  r   r   c                     | j         S r)   r  r  s    r.   r   z&ISIS_ExtendedIsNeighbourEntry.<lambda>  s
    WXWc r'   r   c                 
    d|fS rV  rr   rW  s     r.   rX  z-ISIS_ExtendedIsNeighbourEntry.extract_padding  rY  r'   )rn   ro   rp   ra   r   r   r   r   r   r   rX  rr   r'   r.   r  r    s        -D(;<<!$$lDI3GGG	2'?McMcddd	K    r'   r  c                   h    e Zd ZdZ edde           edddd           edg ed	 
          gZ	dS )rs  z!ISIS Extended IS Reachability TLVr   rr  r=   N
neighboursr   r   c                     | j         S r)   r   r  s    r.   r   z'ISIS_ExtendedIsReachabilityTlv.<lambda>  s
    jkjo r'   r   )
rn   ro   rp   ra   r   r  r   r   r  r   rr   r'   r.   rs  rs    s]        .D =_== =#NNN"?<5R`o`oppprKKKr'   c            
       |    e Zd ZdZ edde           edddd           edg  ed	d
          d           gZ	dS )r{  zISIS IP Interface Address TLVr   rz  r=   N	addressesr   r   r7   r  c                     | j         dz  S r  r   r   s    r.   r   z#ISIS_IpInterfaceAddressTlv.<lambda>  s    bebimnbn r'   r  )
rn   ro   rp   ra   r   r  r   r   r   r   rr   r'   r.   r{  r{    sh        *D =o>> =MMM!>+r772y3I3IVnVnoooqKKKr'   c                   f    e Zd ZdZ edde           edddd           edg d	 
          gZdS )r  zISIS IPv6 Interface Address TLVr   r  r=   Nr  r   r   c                     | j         dz  S N   r   r   s    r.   r   z%ISIS_Ipv6InterfaceAddressTlv.<lambda>  s    SW] r'   r  )	rn   ro   rp   ra   r   r  r   r   r   rr   r'   r.   r  r    sY        ,Dfc?33eT[cBBB["1J1JKKKKKKr'   c                   2   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           edddd            e edddd          d            e e	dg e
d           d           g	Zd ZdS )ISIS_Ipv6PrefixzISIS IPv6 Prefixr  r8   r  r   externalr  reservedr   r  Nr  r   r   c                     | j         S r)   r  r  s    r.   r   zISIS_Ipv6Prefix.<lambda>  s    qx r'   r  r  r  c                     | j         dk    S r!  r  r   s    r.   r   zISIS_Ipv6Prefix.<lambda>  r  r'   c                     | j         S r)   r  r  s    r.   r   zISIS_Ipv6Prefix.<lambda>  r  r'   r   c                     | j         dk    S r!  r  r   s    r.   r   zISIS_Ipv6Prefix.<lambda>  r  r'   c                 
    d|fS rV  rr   rW  s     r.   rX  zISIS_Ipv6Prefix.extract_padding  rY  r'   )rn   ro   rp   ra   r   r   r   r   r	   r   r*  r   rX  rr   r'   r.   r  r    s       D11a  Q"""Aq))Q""h3???uda=O=OPPP|TYTWXXXZ~Z~B8P^t^tuuu  x\  x\  	]  	]
K    r'   r  c                   h    e Zd ZdZ edde           edddd           edg ed	 
          gZ	dS )r  zISIS IPv6 Reachability TLVr   r  r=   Nr  r   r   c                     | j         S r)   r   r   s    r.   r   z!ISIS_Ipv6ReachabilityTlv.<lambda>  s
    X[X_ r'   r   )
rn   ro   rp   ra   r   r  r   r   r  r   rr   r'   r.   r  r    s\        'D =o>> =CHHH"?62L_L_```bKKKr'   c            
       |    e Zd ZdZ edde           edddd           edg  ed	d
          d           gZ	dS )rk  zISIS IS Neighbour TLVr   r   r=   Nr  r   r   r7   z00.00.00.00.00.00c                     | j         dz  S r   r   r   s    r.   r   zISIS_IsNeighbourTlv.<lambda>  s    nqnuyznz r'   r  )
rn   ro   rp   ra   r   r  r   r   r   r   rr   r'   r.   rk  rk    si        "D =O<< =#NNN!>,HHRAT4U4Ubzbz{{{}KKKr'   c                   t    e Zd ZdZ edd           edd           edd           edd	          gZd
 Z	d	S )ISIS_LspEntryzISIS LSP Entrylifetimei  rU   z0102.0304.0506.07-08seqnumr8   r  Nc                 
    d|fS rV  rr   rW  s     r.   rX  zISIS_LspEntry.extract_padding  rY  r'   )
rn   ro   rp   ra   r   r   r   r   r   rX  rr   r'   r.   r  r    sl        D:j$//"?7,BCC9Xz22;z4002K
    r'   r  c                   h    e Zd ZdZ edde           edddd           edg ed	 
          gZ	dS )rm  zISIS LSP Entry TLVr   r   r=   Nentriesr   r   c                     | j         dz  S r  r   r   s    r.   r   zISIS_LspEntryTlv.<lambda>  s    SWXZ] r'   r  )
rn   ro   rp   ra   r   r  r   r   r  r   rr   r'   r.   rm  rm    s[        Dfa11eTYC@@@	2}AZAZ[[[KKKr'   c                       e Zd Zd ZdS )_AdjacencyStateTlvLenFieldc                 <    |j         dS |j        dS |j        dS dS )N   r   r   r8   )neighbourextlocalcircuitidneighboursystemidextlocalcircuitidre   s      r.   rg   z_AdjacencyStateTlvLenField.i2m  s1    )52 ,2 ,1qr'   N)rn   ro   rp   rg   rr   r'   r.   r  r    s#        
 
 
 
 
r'   r  c                       e Zd ZdZ edde           eddd           edd	d	d
dd           e edd          d            e e	dd          d            e edd          d           gZ
dS )r  zISIS P2P Adjacency State TLVr   r  r=   Nr   r  stateDownInitialisingUp)r:   r8   r   r  c                     | j         dk    S r>  r   r   s    r.   r   z"ISIS_P2PAdjacencyStateTlv.<lambda>  s    UXU\`aUa r'   r  c                     | j         dk    S )Nr   r   r   s    r.   r   z"ISIS_P2PAdjacencyStateTlv.<lambda>  s    _b_fjl_l r'   r  c                     | j         dk    S )Nr  r   r   s    r.   r   z"ISIS_P2PAdjacencyStateTlv.<lambda>  s    ^a^eik^k r'   )rn   ro   rp   ra   r   r  r  r	   r   r   r   rr   r'   r.   r  r    s        )D =o>>--eTsCCC =&^Z^2_2_``##HH-@$$G$GIaIabb##$6$67JD$Q$QSlSlmm##HH-I4$P$PRkRkllnKKKr'   c                   f    e Zd ZdZ edde           edddd           edd	d
           gZdS )rl  zISIS Padding TLVr   r   r=   Npaddingr   r   r7   c                     | j         S r)   r   r   s    r.   r   zISIS_PaddingTlv.<lambda>  s     r'   r   r  rr   r'   r.   rl  rl    sZ        Dfa11eTYC@@@B4G4GHHHKKKr'   c                   ~    e Zd ZdZ edde           edddd           edg  ed	d
e          d           gZ	dS )rw  zISIS Protocols Supported TLVr   rv  r=   Nnlpidsr   )count_ofrA   r7   IPv4c                     | j         S r)   r   r   s    r.   r   z#ISIS_ProtocolsSupportedTlv.<lambda>  s
    svsz r'   r  )
rn   ro   rp   ra   r   r  r   r   r   r   rr   r'   r.   rw  rw    sj        )Dfc?33eTH#>>>x]]2v?Y%Z%Zgzgz{{{KKKr'   c            
           e Zd ZdZ edde           edddd d	           ed
d           edddg d           e	dg e
d           gZdS )r  zISIS Router Capability TLVr   r  r=   Nr  c                     |dz   S r>  rr   r"  s     r.   r   z!ISIS_RouterCapabilityTlv.<lambda>  r]  r'   r   r#  r  r  r2  r   r   )SDr3  r4  r^  r_  r`  ra  c                     | j         dz
  S r>  r   r   s    r.   r   z!ISIS_RouterCapabilityTlv.<lambda>  rd  r'   r   )rn   ro   rp   ra   r   r  r   r   r   r   rQ  r   rr   r'   r.   r  r    s        'Dfc?33''	 	 	 	
I&&
QFFF	H 	H 	$//		1 	1 	1KKKr'   c            	           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 ZdS )ISIS_IpReachabilityEntryzISIS IP Reachability	defmetricr8   	delmetricrt  	expmetric	errmetric	ipaddressr  
subnetmaskz255.255.255.255c                 
    d|fS rV  rr   rW  s     r.   rX  z(ISIS_IpReachabilityEntry.extract_padding/  rY  r'   N)rn   ro   rp   ra   r   r   r   rX  rr   r'   r.   r  r  &  s        !D9[!,,9[$//9[$//9[$//7;	227<):;;=K    r'   r  c                   h    e Zd ZdZ edde           edddd           edg ed	 
          gZ	dS )ru  z!ISIS Internal IP Reachability TLVr   rt  r=   Nr  r   r   c                     | j         dz  S Nr   r   r  s    r.   r   z'ISIS_InternalIpReachabilityTlv.<lambda>8      VWV[_aVa r'   r  
rn   ro   rp   ra   r   r  r   r   r  r   rr   r'   r.   ru  ru  3  \        .Dfc?33eTYC@@@	2'?LaLabbbKKKr'   c                   h    e Zd ZdZ edde           edddd           edg ed	 
          gZ	dS )ry  z!ISIS External IP Reachability TLVr   rx  r=   Nr  r   r   c                     | j         dz  S r'  r   r  s    r.   r   z'ISIS_ExternalIpReachabilityTlv.<lambda>A  r(  r'   r  r)  rr   r'   r.   ry  ry  <  r*  r'   c                       e Zd ZdZ edd           edd           edd           edd           edd	          gZd
 ZdS )ISIS_IsReachabilityEntryzISIS IS Reachabilityr  r8   r  rt  r   r!  r  r  c                 
    d|fS rV  rr   rW  s     r.   rX  z(ISIS_IsReachabilityEntry.extract_paddingM  rY  r'   N)rn   ro   rp   ra   r   r   r   rX  rr   r'   r.   r.  r.  E  s}        !D9[!,,9[$//9[$//9[$//##M3FGG	IK    r'   r.  c            	           e Zd ZdZ edde           eddddd 	           ed
d           edg e	d           gZ
dS )rj  zISIS IS Reachability TLVr   r:   r=   Nr   r  c                     |dz   S r!  rr   r"  s     r.   r   zISIS_IsReachabilityTlv.<lambda>U  r  r'   )rA   r   r$  virtualr   c                     | j         dz
  dz  S )Nr8   r   r   r  s    r.   r   zISIS_IsReachabilityTlv.<lambda>W  s    Z[Z_bcZchjYj r'   r  )rn   ro   rp   ra   r   r  r   r   r   r.  r   rr   r'   r.   rj  rj  Q  sq        %Dfa11eTslK_K_```	)Qb*BOjOjkkk	KKKr'   zL1 LAN HellozL2 LAN Helloz	P2P HellozL1 LSPzL2 LSPzL1 CSNPzL2 CSNPzL1 PSNPzL2 PSNP)	r  r  r  r      r           c                       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 Z	dS )ISIS_CommonHdrzISIS Common Headernlpidr  hdrlenNversionr8   idlenr   pdutype
pduversionhdrreservedmaxareaaddrc                     ||z   }| d                              | j                  }|;|\  }}t          ||d          ||z
            }|d |         |z   ||dz   d          z   }|S )Nr8   r:   )checksum_infor;  r!   )r`   rf   paypduchecksumInfocbegincpos
checkbytess           r.   
post_buildzISIS_CommonHdr.post_buildx  sv    CiAw,,T[99#)NVT.s677|dVmMMJete*z)Cq		N:C
r'   )
rn   ro   rp   ra   r   r   r   _isis_pdu_namesr   rJ  rr   r'   r.   r9  r9  k  s        Dgt%?@@	(D!!	)Q	'1i77	,""	-##	-##	K
 
 
 
 
r'   r9  c                       e Zd Zd Zd ZdS )_ISIS_PduBasec                     |}| j         D ]4}t          |t                    r|dz  }d|fc S |t          |          z  }5d S r   )tlvsrk   ro  r=   )r`   r;  checksumPositiontlvs       r.   rC  z_ISIS_PduBase.checksum_info  sb    !9 	- 	-C#/00 - A% +,,,, CHH,  tr'   c                     t           j        S r)   r   r   s     r.   r   z!_ISIS_PduBase.guess_payload_class  r   r'   N)rn   ro   rp   rC  r   rr   r'   r.   rM  rM    s2        	 	 	" " " " "r'   rM  c                       e Zd Zd ZdS )_ISIS_PduLengthFieldc                 :    t          j        | dd dd            d S )N	pdulengthrO  c                      || j         j        z   S r)   )
underlayerr;  r"  s     r.   r   z/_ISIS_PduLengthField.__init__.<locals>.<lambda>  s    `adgdrdy`y r'   )r   r$  )r   r_   r   s    r.   r_   z_ISIS_PduLengthField.__init__  s(    t[$&QyQyzzzzzzr'   Nr   rr   r'   r.   rT  rT    s(        { { { { {r'   rT  c                       e Zd Zd ZdS )_ISIS_TlvListFieldc                 D    t          j        | dg t          d            d S )NrO  c                 *    | j         | j        j        z
  S r)   )rV  rX  r;  r   s    r.   r   z-_ISIS_TlvListField.__init__.<locals>.<lambda>  s    `c`mpsp~  qF  aF r'   r   )r   r_   r  r   s    r.   r_   z_ISIS_TlvListField.__init__  sC     vr3F  UF  UF  	G  	G  	G  	G  	G  	Gr'   Nr   rr   r'   r.   rZ  rZ    s(        G G G G Gr'   rZ  c            	           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   priorityr8   lanidz0000.0000.0000.00N)rn   ro   rp   r   r   r   rT  r   r   rZ  r   rr   r'   r.   r^  r^    sy        :'788
="%%	*a  "566KKKr'   r^  c                       e Zd ZdZdS )ISIS_L1_LAN_HellozISIS L1 LAN Hello PDUNr   rr   r'   r.   rf  rf            "DDDr'   rf  c                       e Zd ZdZdS )ISIS_L2_LAN_HellozISIS L2 LAN Hello PDUNr   rr   r'   r.   ri  ri    rg  r'   ri  c                       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`  ra  rb  localcircuitidr   N)rn   ro   rp   ra   r   r   r   rT  r   rZ  r   rr   r'   r.   rk  rk    sp        *D 	:'788
="%%	"A&&KKKr'   rk  c                       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 ZdS )_ISIS_LSP_Baser  i  rU   z0102.0304.0506.00-00r  r8   r  N	typeblockr   r   )r   r   OLADefADelAExpAErrr8  c                     | j         d S dS )N)r   r  )r  )r`   r;  s     r.   rC  z_ISIS_LSP_Base.checksum_info  s    =$4xr'   )rn   ro   rp   rT  r   r   r   r   r   rZ  r   rC  rr   r'   r.   rn  rn    s        
:t$$!788	(J''J%%
;a)`)`)`aaK    r'   rn  c                     dS Nr   rr   )lspotherr   s      r.   _lsp_answersrz        1r'   c                       e Zd ZdZd ZdS )ISIS_L1_LSPzISIS L1 Link State PDUc                 $    t          | |d          S )NISIS_L1_PSNPrz  r`   ry  s     r.   answerszISIS_L1_LSP.answers      D%888r'   Nrn   ro   rp   ra   r  rr   r'   r.   r}  r}    (        #D9 9 9 9 9r'   r}  c                       e Zd ZdZd ZdS )ISIS_L2_LSPzISIS L2 Link State PDUc                 $    t          | |d          S )NISIS_L2_PSNPr  r  s     r.   r  zISIS_L2_LSP.answers  r  r'   Nr  rr   r'   r.   r  r    r  r'   r  c                   x    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.00
startlspidz0000.0000.0000.00-00endlspidzFFFF.FFFF.FFFF.FF-FFN)rn   ro   rp   rT  r   r   rZ  r   rr   r'   r.   r  r    s^        %899&<==
$:;;KKKr'   r  c                     dS rw  rr   )snpry  r   s      r.   _snp_answersr    r{  r'   c                       e Zd ZdZd ZdS )ISIS_L1_CSNPz'ISIS L1 Complete Sequence Number Packetc                 $    t          | |d          S Nr}  r  r  s     r.   r  zISIS_L1_CSNP.answers      D%777r'   Nr  rr   r'   r.   r  r    (        4D8 8 8 8 8r'   r  c                       e Zd ZdZd ZdS )ISIS_L2_CSNPz'ISIS L2 Complete Sequence Number Packetc                 $    t          | |d          S Nr  r  r  s     r.   r  zISIS_L2_CSNP.answers  r  r'   Nr  rr   r'   r.   r  r    r  r'   r  c                   L    e Zd Z e             edd           e            gZdS )_ISIS_PSNP_Baser_  r  N)rn   ro   rp   rT  r   rZ  r   rr   r'   r.   r  r    s>        %899KKKr'   r  c                       e Zd ZdZd ZdS )r  z&ISIS L1 Partial Sequence Number Packetc                 $    t          | |d          S r  r  r  s     r.   r  zISIS_L1_PSNP.answers  r  r'   Nr  rr   r'   r.   r  r  
  (        3D8 8 8 8 8r'   r  c                       e Zd ZdZd ZdS )r  z&ISIS L2 Partial Sequence Number Packetc                 $    t          | |d          S r  r  r  s     r.   r  zISIS_L2_PSNP.answers  r  r'   Nr  rr   r'   r.   r  r    r  r'   r  r7  r  )r;  r>  r  r4  r  r   !   r5  r6  )__doc__r   r   scapy.configr   scapy.fieldsr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   scapy.packetr   r   scapy.layers.clnsr   r   scapy.layers.inet6r   r    scapy.utilsr!   scapy.volatiler"   r#   scapy.compatr$   r%   EXT_VERSIONr5   rB   rF   rK   rQ   rS   rV   rX   rZ   rt   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'  rD  rK  rE  rB  rP  rh  rQ  rS  rL  rM  r  r  r  r  ri  rn  rq  ro  r  r  r  r}  r  rs  r{  r  r  r  rk  r  rm  r  r  rl  rw  r  r  ru  ry  r.  rj  rK  r9  rM  rT  rZ  r^  rf  ri  rk  rn  rz  r}  r  r  r  r  r  r  r  r  rr   r'   r.   <module>r     sa  ! !F        I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I
 - , , , , , , , O O O O O O O O 5 5 5 5 5 5 5 5 - - - - - - / / / / / / / / ' ' ' ' ' ' ' '; ; ;* * *< < <= = =@ @ @< < <? ? ?= = =       2! ! ! ! !: ! ! !$' ' ' ' '| ' ' '" " " " "u " " "@( ( ( ( (* ( ( (* * * * *( * * *, , , , ,' , , ,> > > > >J > > >  " " " " "F " " "    +   " " " " ". " " " (.('(3()($   &&+   ` ` `2 2 2 2 2&8 2 2 22 2 2 2 2%7 2 2 2. . . . .,> . . .. . . . .&8 . . .. . . . .%7 . . .5 5 5 5 5%7 5 5 52 2 2 2 2&8 2 2 25 5 5 5 50B 5 5 5^ ^ ^ ^ ^%7 ^ ^ ^6 6 6 6 6!3 6 6 6 +*+   #""  ` ` `e e e e e(: e e ef f f f f(: f f f? ? ? ? ?); ? ? ?$  
  
B B B
	 	 	 	 	, 	 	 	  #    ,#  B B B
    v        2   *
 
 
 
 
/ 
 
 
 ~  	
      ( 	) 	% 	) 	% 	) 	"  	'!" 	##$ 
%	#'   ,,z,, ,  	,
 }, , , , -, , &, $, , 	', 	",  	'!," 	8#, ,$ 	#%,& 	,',( 	'),* 	+,, 	+-,. 	*/,0 	11,2 	03,4 	5,6 	37,8 	(9,: 	;,< 	=,> 	?,@ A,B 	2C,D 	5E, ,F 
	%	,	/	 	/	1	&	"W, , ,^X X X    V   ^ ^ ^ ^ ^? ^ ^ ^f f f f f_ f f f6 6 6 6 6 6 6 62 2 2 2 2 2 2 2V V V V Vo V V V    F    3 3 3 3 3 3 3 3h h h h h_ h h h
 
 
 
 
F 
 
 
r r r r r_ r r rq q q q q q q q    ?       f   $b b b b b b b b} } } } }/ } } }    F                 n n n n n n n n    o                 4
 
 
 
 
v 
 
 
    _       _   	 	 	 	 	v 	 	 	    _    	
 
    V   4" " " " "F " " " { { { { {= { { {
G G G G G G G G
	 	 	 	 	- 	 	 	# # # # #+ # # ## # # # #+ # # #
 
 
 
 
] 
 
 
    ]   $  
9 9 9 9 9. 9 9 99 9 9 9 9. 9 9 9    m     
8 8 8 8 8? 8 8 88 8 8 8 8? 8 8 8    m   8 8 8 8 8? 8 8 88 8 8 8 8? 8 8 8  dN + + + N-b" E E E E N-b" E E E E NN2r B B B B NKB ? ? ? ? NKB ? ? ? ? NLR @ @ @ @ NLR @ @ @ @ NLR @ @ @ @ NLR @ @ @ @ @ @r'   