a qéqeŽã@svddlmZddlZddlmZmZmZmZddlm Z ddl m Z m Z ddl mZddlmZGd d „d e eƒZdS) é)Ú IPv6AddressN)ÚIterableÚOptionalÚTupleÚUnioné)Ú MatchContext)Ú IbpkeyconÚIbpkeyconRange)Ú PolicyQuery)Ú match_rangecsôeZdZUdZdZeeed<dZee ed<dZ e ed<dZ e ed<dZ e ed<dZe ed <‡fd d „Zeee d œd d„ƒZejeeeefddœdd„ƒZeeed œdd„ƒZejeeeefddœdd„ƒZeed œdd„Z‡ZS)ÚIbpkeyconQuerya  Infiniband pkey context query. Parameter: policy The policy to query. Keyword Parameters/Class attributes: subnet_prefix A subnet prefix to match. pkeys A 2-tuple of the pkey range to match. (Set both to the same value for a single pkey) pkeys_subset If true, the criteria will match if it is a subset of the ibpkeycon's range. pkeys_overlap If true, the criteria will match if it overlaps any of the ibpkeycon's range. pkeys_superset If true, the criteria will match if it is a superset of the ibpkeycon's range. pkeys_proper If true, use proper superset/subset operations. No effect if not using set operations. user The criteria to match the context's user. user_regex If true, regular expression matching will be used on the user. role The criteria to match the context's role. role_regex If true, regular expression matching will be used on the role. type_ The criteria to match the context's type. type_regex If true, regular expression matching will be used on the type. range_ The criteria to match the context's range. range_subset If true, the criteria will match if it is a subset of the context's range. range_overlap If true, the criteria will match if it overlaps any of the context's range. range_superset If true, the criteria will match if it is a superset of the context's range. range_proper If true, use proper superset/subset operations. No effect if not using set operations. NÚ_subnet_prefixÚ_pkeysFÚ pkeys_subsetÚ pkeys_overlapÚpkeys_supersetÚ pkeys_properc s(tt|ƒj|fi|¤Žt t¡|_dS©N)Úsuperr Ú__init__ÚloggingZ getLoggerÚ__name__Úlog)ÚselfÚpolicyÚkwargs©Ú __class__©úszIbpkeyconQuery.__init__)ÚreturncCs|jSr)r©rrrr ÚpkeysBszIbpkeyconQuery.pkeys)Úvaluer!cCs€|durvt|Ž}|jdks$|jdkr2td |¡ƒ‚|jdksF|jdkrTtd |¡ƒ‚|j|jkrntd |¡ƒ‚||_nd|_dS)Nrz.Pkeys must be positive: {0.low:#x}-{0.high:#x}iÿÿz/Pkeys maximum is 0xffff: {0.low:#x}-{0.high:#x}zGThe low pkey must be smaller than the high pkey: {0.low:#x}-{0.high:#x})r ZlowZhighÚ ValueErrorÚformatr)rr$Z pending_pkeysrrr r#Fs$ÿÿ ÿÿcCs|jSr)rr"rrr Ú subnet_prefix\szIbpkeyconQuery.subnet_prefixcCs|rt|ƒ|_nd|_dSr)rr)rr$rrr r'`s ccs¨|j d |¡¡|j d |¡¡|j d |¡¡| |j¡|j ¡D]V}|jdurh|j|jkrhqL|jrŽt |j|j|j |j |j |j ƒsŽqL| |j¡sœqL|VqLdS)z/Generator which yields all matching ibpkeycons.z,Generating ibpkeycon results from {0.policy}z Subnet Prefix: {0.subnet_prefix}z~Pkeys: {0.pkeys}, overlap: {0.pkeys_overlap}, subset: {0.pkeys_subset}, superset: {0.pkeys_superset}, proper: {0.pkeys_proper}N)rÚinfor&ÚdebugZ_match_context_debugrZ ibpkeyconsr'r#r rrrrZ_match_contextÚcontext)rZpkrrr Úresultsgs* þ ú zIbpkeyconQuery.results)rÚ __module__Ú __qualname__Ú__doc__rrrÚ__annotations__rr rÚboolrrrrÚpropertyr#ÚsetterrÚintr'rÚstrrr r+Ú __classcell__rrrr r s" &     r )Z ipaddressrrÚtypingrrrrZmixinsrZ policyrepr r Úqueryr Úutilr r rrrr Ús