~seRD ddlmZddlZddlZddlmZmZddlmZmZddddd d d d d dd Z ddddZ eGdde Z Gdde Z eGdde ZGddeZGddeZeGdde ZGdde ZGd d!eZGd"d#e ZdS)$)total_orderingN)ceillog) defaultdict OrderedDict @ii) zNO-OFDMzNO-CCKz NO-INDOORz NO-OUTDOORDFSzPTP-ONLYz PTMP-ONLYzNO-IRzNO-HT40zAUTO-BW)zDFS-FCCzDFS-ETSIzDFS-JPc2eZdZdZdZdZdZdZdZdS)WmmRulec v||_||_||_||_||_||_||_||_dSNvo_cvi_cbe_cbk_cvo_apvi_apbe_apbk_ap) selfrrrrrrrrs 1/home/apu/testbed_files/wireless-regdb/dbparse.py__init__zWmmRule.__init__#s>        cf|j|j|j|j|j|j|j|jfSrrrs r _as_tuplezWmmRule._as_tuple-s0 49di DJ DJ@ @r"c^|dS||kSNFr%rothers r __eq__zWmmRule.__eq__1s+ =5  EOO$5$556r"c||k Srr)s r __ne__zWmmRule.__ne__6EM""r"c^|dS||kSr'r(r)s r __lt__zWmmRule.__lt__9s+ =5  5??#4#445r"cDt|Srhashr%r$s r __hash__zWmmRule.__hash__>DNN$$%%%r"N) __name__ __module__ __qualname__r!r%r+r.r1r5r-r"r rrsq@@@777 ###666 &&&&&r"rc:eZdZd dZdZdZdZdZdZdZ dS) FreqBandNcB||_||_||_|pg|_dSr)startendmaxbwcomments)rr=r>bwr@s r r!zFreqBand.__init__Bs&   B r"c*|j|j|jfSrr=r>r?r$s r r%zFreqBand._as_tupleHs DHdj11r"cV||kSrr(r)s r r+zFreqBand.__eq__K!  EOO$5$556r"c||k Srr-r)s r r.zFreqBand.__ne__Nr/r"cV||kSrr(r)s r r1zFreqBand.__lt__Q!  5??#4#445r"cDt|Srr3r$s r r5zFreqBand.__hash__Tr6r"c0d|j|j|jfzS)NzrCr$s r __str__zFreqBand.__str__Ws!.*dh 244 4r"r r7r8r9r!r%r+r.r1r5rKr-r"r r;r;As'''' 222777###666&&&44444r"r;c:eZdZd dZdZdZdZdZdZdZ dS) PowerRestrictionNc4||_||_|pg|_dSr) max_ant_gainmax_eirpr@)rrPrQr@s r r!zPowerRestriction.__init__]s (   B r"c|j|jfSr)rPrQr$s r r%zPowerRestriction._as_tuplebs!4=11r"cV||kSrr(r)s r r+zPowerRestriction.__eq__erEr"c||k Srr-r)s r r.zPowerRestriction.__ne__hr/r"cV||kSrr(r)s r r1zPowerRestriction.__lt__krHr"cDt|Srr3r$s r r5zPowerRestriction.__hash__nr6r"cdS)Nzr-r$s r rKzPowerRestriction.__str__qs''r"rrLr-r"r rNrN[s'''' 222777###666&&&(((((r"rNceZdZdZdS)DFSRegionErrorc||_dSr) dfs_region)rr[s r r!zDFSRegionError.__init__us $r"Nr7r8r9r!r-r"r rYrYts#%%%%%r"rYceZdZdZdS) FlagErrorc||_dSr)flag)rr`s r r!zFlagError.__init__ys  r"Nr\r-r"r r^r^xs#r"r^c8eZdZdZdZdZdZdZdZdZ dS) PermissioncJt|tsJt|tsJt|ts|J||_||_||_d|_|D]5}|tvrt||xjt|zc_6||_ dSNr) isinstancer;rNrfreqbandpowerwmmruleflagsflag_definitionsr^ textflags)rrfrgrirhr`s r r!zPermission.__init__~s(H-----%!122222'7++>w      1 1D+++oo% JJ*40 0JJJr"c6|j|j|j|jfSr)rfrgrirhr$s r r%zPermission._as_tuples tz4:t|DDr"cV||kSrr(r)s r r+zPermission.__eq__rEr"c||k Srr-r)s r r.zPermission.__ne__r/r"cV||kSrr(r)s r r1zPermission.__lt__rHr"cDt|Srr3r$s r r5zPermission.__hash__r6r"c~t|jt|jzt|jzSr)strrfrgrhr$s r rKzPermission.__str__s.4=!!C OO3c$,6G6GGGr"NrLr-r"r rbrb|s   EEE777###666&&&HHHHHr"rbcDeZdZddZdZdZdZdZeeZ dS)CountryNc|pg|_|pg|_d|_|r,|tvrt |t||_dSdSrd) _permissionsr@r[ dfs_regionsrY)rr[ permissionsr@s r r!zCountry.__init__s\'-2 B   6,,$Z000)*5DOOO 6 6r"ct|tsJ|j||jdSr)rerbrvappendsortrperms r addz Country.addsJ$ +++++   &&&      r"cBt|tsJ||jvSr)rerbrvr|s r __contains__zCountry.__contains__s&$ +++++t(((r"cTd|jD}dd|zS)NcZg|](\}}dt|dt|d)S)(, ))rr).0bps r z#Country.__str__..s7 I I Itq!!3q66663q6666 * I I Ir"zr)rvjoin)rrs r rKzCountry.__str__s- I It7H I I I499Q<<00r"c*t|jSr)tuplervr$s r _get_permissions_tuplezCountry._get_permissions_tuplesT&'''r")NN) r7r8r9r!r~rrKrpropertyrxr-r"r rtrtsn6666!!! )))111((((122KKKr"rtceZdZdS) SyntaxErrorN)r7r8r9r-r"r rrsDr"rcjeZdZddZddZdZddZdZdZdd Z d Z d Z d Z d Z dZdZdZdS)DBParserNc6|ptjj|_dSr)sysstderrwrite _warn_callout)rwarns r r!zDBParser.__init__s!5SZ%5r"cF|rd|zpd}td|j|fz)Nz (%s)zSyntax error in line %d%s)r_linenortxts r _syntax_errorzDBParser._syntax_errors0#gm)r5s8KKLLLr"cD|d|j|fzdS)NzWarning (line %d): %s )rrrs r _warnzDBParser._warns) 4 c7JJKKKKKr"TcP |d\}}t|}n#t$rd}YnwxYw |d\}}t|}t|}|dkr|d|z|dkr|d|z||kr|d||fz||kr|d|zn%#t$r|d YnwxYwt ||||j }g|_||j|<||jvr>|r'|d |d |j|d |j||j|<||j |<||j|<|j |j |<dS)N@g4@-rzInvalid start freq (%d)zInvalid end freq (%d)zInverted freq range (%d - %d)z"Start and end freqs are equal (%d)zband must have frequency ranger@zDuplicate band definition ("" and "")) splitfloat ValueErrorrr; _comments_banddup_bandrevr_bandsr _bandline) rbnamebanddefdupwarnfreqsrAr=r>rs r _parse_band_defzDBParser._parse_band_defs  c**IE2rBB   BBB  AS))JE3%LLE**Czz""#|r'|d|d|j|d |j||j|<||j|<||j|<|j |j |<dS) NzN/A0rc|dr.t|dd}dtj|zSt|S)NmWg$@)endswithrmathlog10)pwrs r conv_pwrz+DBParser._parse_power_def..conv_pwr sH<<%%&CRC//C$*S//11 ::%r"zinvalid power datarzDuplicate power definition ("rr) rrrrNr _powerdup _powerrevr_powerr _powerline)rrrrrQrPrrs r rzDBParser._parse_power_defs8 5H5   88L & & &  x))HH 5 5 5   3 4 4 4 4 4 5 \8&*n 6 6 6 %u    9 #eeT^A%6%6%68999$(N1$5DN5 ! E!q!%s'*A  A c|dd}|s|d|d}i|_|D]-}||jvr|d|zd|j|<.g|_dS)Nz,'wmmrule' keyword must be followed by region,z(region %s was added already to wmm rulesr)striprr_current_regions _wmm_rulesrr)rrregionsregions r _parse_wmmrulezDBParser._parse_wmmrule#sss)//## O   M N N N--$$ " . .F(( ENOOO,-D !& ) )r"cV|dkr|d|z|dkr|d|z||kr|d||fzt|dzddkr|dks|d|zt|dzddkr|dks|d|z|dkr|d |z|d kr|d |zdSdS) NrzInvalid cw_min value (%d)zInvalid cw_max value (%d)z$Inverted contention window (%d - %d)1iz2Invalid cw_min value should be power of 2 - 1 (%d)z2Invalid cw_max value should be power of 2 - 1 (%d)zInvalid aifsn value (%d)rzInvalid cot value (%d))rbincount)rcw_mincw_maxaifsncots r _validate_inputzDBParser._validate_input1sh QJJ   :VC D D D A::   :VC D D D F??   EV$ % & & &FQJ%%c**a//FUNN   S    FQJ%%c**a//FUNN   S     199   9EA B B B 77   7#= > > > > > 7r"cr|ttt|dddz kS)Nr g @)rlenr)rvarbytcnts r _validate_sizezDBParser._validate_sizeEs0SS!""..45555r"cd} |d\}}|s|dn%#t$r|dYnwxYwtd|dD}|j|t ||D]O\}}|||r|d||fz|jD]}||j||<PdS)N)@rg?rrzwmm item must have ac prefixz)access category must be followed by colonc`g|]+}t|ddd,S)=r)intr)rvs r rz0DBParser._parse_wmmrule_item..Ps1DDDq3qwwsAq)**DDDr"rz&unexpected input size expect %d got %d) rrrrrziprrr) rrraccvalrrrrs r _parse_wmmrule_itemzDBParser._parse_wmmrule_itemHs@% Pzz#HB C""#ABBB P P P""#NOOOOO P DDDJJsOODDD E Ea  6NN + +DAq""1a(( """#Ka&$!"""* + +)*"2&& +  + +s/4AAc$ |dd\}}|}|s|dn%#t$r|dYnwxYw|d}i|_|D]~}t |dkr|d|z|d}||jvrt||j |j|<|j||j|<g|_ dS) Nrrz*'country' keyword must be followed by namez&country name must be followed by colonrr zcountry '%s' not alpha2asciir) rrrr_current_countriesrrencode _countriesrtr)rrcnamecvalsr[cnamess r _parse_countryzDBParser._parse_countryZs3 I**S!,,LE5J Q""#OPPP I I I   G H H H H H IS!!"$ D DE5zzQ 4u<===LL))EDO++)0dn)U)U)U&-1_U-CD #E * *sAAA)(A)c D|ddkra |dddd\}}d|jz}|||dn#|dYnqxYw |d d\}}|s|d |s|d n%#t$r|d YnwxYw|ddkr|dd}t |dkr8|d}d }|ddks|d|dd}g}n#|d}|dd }|dd}d|jz}|||dn'|d }|d}|dd}d}|rd|dvr |ddd} | |j vr|d| zn%#t$r|dYnwxYwt|j|  }||j vr|d||jvr|dd|j|<d|j|<|j|}|j|}|j |} |j|} t'| | ||} n4#t($r'} |d| jzYd} ~ nd} ~ wwxYw|jD]>\}}| |vr |d|d|d|d)|| ?dS)Nrrrz),z UNNAMED %dF)rz#Badly parenthesised band definitionrz!country definition must have bandz"country definition must have powerz+country definition must have band and powerrrrz$Badly parenthesised power definitionrhrzNo wmm rule for %sz*flags is empty list or no region was foundzband does not existzpower does not existTzInvalid flag '%s'zRule "rz " added to "z" twice)rrrrrrrpoprkeys IndexErrorrvaluesrr _bands_used _power_usedrrrbr^r`ritemsrr~)rrbandrrrrirgwrrrr}ercs r _parse_country_itemzDBParser._parse_country_itemosE 7c>> J!!""X^^D!44 d$t|3$$UD%$@@@@ J""#HIIIII R"jja00 tL&&'JKKKM&&'KLLL R R R""#PQQQQQ R 7c>>JJtQ''E5zzQaRyC''&&'MNNNcrc aas++!""IE 4</E  ! !% ! > > > >::c??DGEHE   ;Y%)++ Q**32215!5!5!7!777&&';f'DEEE Q Q Q""#OPPPPP Q07799:A ##   4 5 5 5 ##   5 6 6 6"&"& e$u% K  K  =aE1--DD = = =   2QV; < < < < < < < < =/5577  HE1qyy #eeUUUEEE34444d   sJAAA+/AB77CCA!H11IIL MMMc@d|_d|_i|_i|_i|_i|_i|_i|_i|_i|_ i|_ i|_ i|_ td|_g|_d|_|D](}|xjdz c_|}|dddkr4|j|dd|dddd}|sd|_g|_|dd}|s|ddd kr4||ddd|_d|_g|_|dd d kr4||d dd|_d|_g|_E|dd d kr-||d dg|_d|_|j%d|_||g|_|dd dkr-||d dd|_g|_|j%||d|_g|_|d*|j}i}|jD]Z\}}||jvr|||j |<|j ||kr*|j ||_|d|z[i}|jD]Z\}}||jvr|||j |<|j ||kr*|j ||_|d|z[|S)NctSr)rr-r"r z DBParser.parse..s kmmr"rr# r r rrgcountryrhz*Expected band, power or country definitionzUnused band definition "%s"zUnused power definition "%s")rrrrrrrrrrrrrrrrrrrzreplacerrrrrrrrrr)rfr countriesbandskrrgs r parsezDBParser.parses"& $    %&;&;<< ' Q' QD LLA LL::< >DAqD$$$*+dmA&'}Q1$$#~a0  81<===K%%'' ? ?DAqD$$$+,dnQ'(~a A%%#q1  9A=>>>r"r)T)r7r8r9r!rrrrrrrrrrrrrr-r"r rrs 6666MMMMLLL"-"-"-"-H * * * + + +....:   ???(666+++$*CCCJOOOOOr"r) functoolsrrrrr collectionsrrrjrwobjectrr;rN ExceptionrYr^rbrtrrr-r"r rsc%$$$$$00000000      &&&&&f&&&@44444v4444(((((v(((0%%%%%Y%%% HHHHHHHHB33333f3338     )   FFFFFvFFFFFr"