U v`+@sdZddlmZddlZddlZddlmZddlmZddlm Z dZ d Z d Z d Z d Zd Ze e Bddfe e Bddfe ddfe ddfeddffZGdddejZddZddZddZddZdd Zd!d"ZdS)#zGeneric Routing Encapsulation.)absolute_importN)dpkt)ethernet) compat_izipii@i isumHoffkeyIseqackc@s~eZdZdZdZdZeddZejddZeddZ e jd dZ Gd d d e j Z d d Z ddZddZddZdS)GREzGeneric Routing Encapsulation. TODO: Longer class information.... Attributes: __hdr__: Header fields of GRE. TODO. ))flagsr r)pr rcCs |jd@S)Nrselfrr`/private/var/folders/0j/yyfkg7712236ncpm167bvylc27vst9/T/pip-unpacked-wheel-y9gppv54/dpkt/gre.pyv*szGRE.vcCs|jd@|d@B|_dS)Nirrrrrrrr.scCs|jd?d@S)Nrrrrrrrecur2sz GRE.recurcCs|jd@|d@d>B|_dS)Nirrrrrrrr6sc@seZdZdddgZddZdS)zGRE.SRE)familyr r)r Br)lenrrcCs$tj|||jd|j|_dS)N)rPacketunpackdatar)rbufrrrr!AszGRE.SRE.unpackN)__name__ __module__ __qualname____hdr__r!rrrrSRE:s r(cCsn|jdkrgg}}t}nddgddg}}tdd}|D](\}}}|j|@r<||||q<||fS)Nrrcallidr )rGRE_opt_fieldsrappend)rfieldsfmtsZ opt_fieldsrfieldfmtrrropt_fields_fmtsEs      zGRE.opt_fields_fmtsc Cstj|||\}}|rrd|}t|}td||jd|}|j|d|_|j t t |||j t @rg}||j}|jt|d|_|||jsqq||_z2tjj|j|j|_t||jjj|jWnttjfk rYnXdS)N!)rr r!r1joinstructcalcsizer"__dict__updatedictrrGRE_RPr(rr,srerZEthernetZ_typeswrsetattr __class__r$lowerKeyErrorZ UnpackError) rr#r-r.r0ZfmtlenvalsZl_r;rrrr!Rs*      z GRE.unpackcCs<td|d}|j|ttt|jt|j S)Nr2r) r5r6r4r1Z __hdr_len__r maprr;r")rZ opt_fmtlenrrr__len__ksz GRE.__len__cCsv|\}}|rJg}|D]}|t||qtjdd|f|}nd}||dtt|j t|j S)Nr3r2) r1r,getattrr5packr4Zpack_hdrrAbytesr;r")rr-r.r@fZopt_srrr __bytes__os z GRE.__bytes__N)r$r%r&__doc__r'r;propertyrsetterrrr r(r1r!rBrHrrrrrs        rcCstddd}t|}|jdks&t|jdks4t|jdksBt|jdksPt|jdks^t|j d kslt|j dksztt |t |ksttd dd }t|}|jdkst|jdkst|jd kst|jd kst|j dkst|j d kstt |t |kstdS)N 3081880a0067178000068fb100083a76hexgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAri iiv:igZ3001880a00b2001100083ab8sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAi:) codecsdecoderrAssertionErrorrrrr)rr")sgrrr test_gre_v1{s&rWcCs^ddlm}t}t|dks"t|dd}t|}t||ksFtt|t|ksZtdS)Nr unhexlifyrLrN)binasciirYrrrTrF)rYgrer#rrr test_gre_lens  r]cCsZt}dD]J}t|t||s$tt||dks6tt||dt||dks tq dS)N)rrrr)rprinthasattrrTrDr<)r\attrrrrtest_gre_accessorss racCsPddlm}|d}t|}|jdks,tt|dkss2     a