403Webshell
Server IP : 88.99.149.37  /  Your IP : 216.73.216.141
Web Server : nginx/1.31.2
System : Linux server-88-99-149-37 6.12.0-124.56.5.el10_1.x86_64 #1 SMP PREEMPT_DYNAMIC Fri May 15 06:12:08 EDT 2026 x86_64
User : muralimurth ( 1015)
PHP Version : 8.4.23
Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/lib/python3.12/site-packages/pyynl/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/lib/python3.12/site-packages/pyynl/__pycache__/ynl_gen_c.cpython-312.pyc
�

�bj���d�ddlZddlZddlZddlZddlZddlZddlZddlZddlZejjeje�j�jj��ddlmZmZmZmZmZmZddlmZd�Zd�Zd�ZGd�d�ZGd	�d
e�ZGd�de�ZGd
�de�ZGd�de�ZGd�de�Z Gd�de�Z!Gd�de�Z"Gd�de"�Z#Gd�de"�Z$Gd�de�Z%Gd�de�Z&Gd�d e�Z'Gd!�d"e�Z(Gd#�d$e�Z)Gd%�d&e&�Z*Gd'�d(�Z+Gd)�d*�Z,Gd+�d,e�Z-Gd-�d.e�Z.Gd/�d0e�Z/Gd1�d2e�Z0Gd3�d4e�Z1Gd5�d6e�Z2Gd7�d8�Z3Gd9�d:�Z4hd;�Z5d<d=d>d?�Z6d>d@dAd>dB�Z7hdC�Z8dD�Z9d�dE�Z:d�dF�Z;d�dG�Z<dH�Z=dI�Z>dJ�Z?dK�Z@dL�ZAd�dM�ZBdN�ZCdO�ZDdP�ZEdQ�ZFdR�ZGd�dS�ZHdT�ZIdU�ZJdV�ZKd�dW�ZLdX�ZMd�dY�ZNdZ�ZOd[�ZPd\�ZQd]�ZRd�d^�ZSd�d_�ZTd`�ZUda�ZVdb�ZWdc�ZXd�dd�ZYde�ZZdf�Z[d�dg�Z\dh�Z]di�Z^dj�Z_dk�Z`dl�Zad�dm�Zbdn�Zcdo�Zddp�Zedq�Zfdr�Zgds�Zhd�dt�Zid�du�Zjdv�Zkdw�Zldx�Zmdy�Zndz�Zod{�Zpd|�Zqd}�Zrd~�Zsd�Ztd��Zud�d��Zvd��Zwd��Zxd��Zyd��Zzd��Z{d��Z|d��Z}d��Z~ed�k(re~�yy)��N)�
SpecFamily�SpecAttrSet�SpecAttr�
SpecOperation�SpecEnumSet�
SpecEnumEntry)�SpecSubMessagec�B�|j�jdd�S�N�-�_)�upper�replace��names �4/usr/lib/python3.12/site-packages/pyynl/ynl_gen_c.py�c_upperr����:�:�<����S�)�)�c�B�|j�jdd�Sr)�lowerrrs r�c_lowerrrrc��|ddk(r|jd�ryt|dd�}|ddk(r|dz}d|zdz
}|ddk(r|jd�r|dz
}|S)zN
    Turn a string limit like u32-max or s64-min into its numerical value
    r�uz-min�����s)�endswith�int)r�width�values   r�limit_to_numberr"st���A�w�#�~�$�-�-��/����Q�r�
�O�E��A�w�#�~�
��
��
�%�Z�1��E��A�w�#�~�$�-�-��/����
���Lrc��eZdZd�Zy)�	BaseNlLibc��y)Nz
ys->family_id���selfs r�
get_family_idzBaseNlLib.get_family_id+s��rN)�__name__�
__module__�__qualname__r)r&rrr$r$*s��rr$c����eZdZ�fd�Zd�Zd�Zd�Zdd�Zd d�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd!d�Z �xZ!S)"�Typec�n��t�|�||||�||_||_|d|_|jdi�|_d|_d|_d|_	d|vr
|d|_
d|vr|d}nd|vr|d}nd}|r�||_|j|jk(rt|j��|_n)t|j�d|j���|_|j|j j"vrd|jzdz|_nd|jz|_t|j�|_|j&t(vr|xj&dz
c_|j&d	j+�rd|j&z|_d|_t/|d
�y)N�type�checksF�len�nested-attributes�sub-messager
�struct r�	enum_name)�super�__init__�attr�attr_setr0�getr1�request�reply�is_selectorr2�nested_attrsrr�
ident_name�nested_render_name�family�consts�nested_struct_type�c_name�_C_KW�isdigitr6�delattr)r(rBr:r9r!�nested�	__class__s      �rr8z
Type.__init__0s����
�����4��7���	� ��
���L��	��h�h�x��,��������
� ����D�=��E�{�D�H��$�&��-�.�F�
�d�
"��-�(�F��F�� &�D��� � �F�K�K�/�*1�V�5F�5F�4G�*I��'�*1�V�5F�5F�4G�q��IZ�IZ�H[�2\�*]��'�� � �D�K�K�$6�$6�6�*3�d�6M�6M�*M�PS�*S��'�*3�d�6M�6M�*M��'��d�i�i�(����;�;�%���K�K�3��K��;�;�q�>�!�!�#�����+�D�K������k�"rc�v�|jj|jj|jS�N)rB�	attr_setsr:�	subset_ofrr's r�_get_real_attrzType._get_real_attr]s*���{�{�$�$�T�]�]�%<�%<�=�d�i�i�H�Hrc�|�d|_|jjr|j�j	�yy�NT)r<r:rNrO�set_requestr's rrRzType.set_requestas0������=�=�"�"����!�-�-�/�#rc�|�d|_|jjr|j�j	�yyrQ)r=r:rNrO�	set_replyr's rrTzType.set_replyfs0����
��=�=�"�"����!�+�+�-�#rc���|jj||�}|�|St|t�r|S||jj
vr|jj
|dSt
|�S)Nr!)r1r;�
isinstancerrBrCr")r(�limit�defaultr!s    r�	get_limitzType.get_limitksf��������w�/���=��L��e�S�!��L��D�K�K�&�&�&��;�;�%�%�e�,�W�5�5��u�%�%rc�f�|jj||�}|�yt|t�rt	|�|zS||j
jvrR|j
j|}|jd�rt|�St|j
d�d|���St|�S)N��headerrr)r1r;rVr�strrBrCr)r(rWrX�suffixr!�consts      r�
get_limit_strzType.get_limit_strus���������w�/���=���e�S�!��u�:��&�&��D�K�K�&�&�&��K�K�&�&�u�-�E��y�y��"��u�~�%��d�k�k�&�1�2�!�E�7�;�<�<��u�~�rc��d|jvr|jdj}nPd|jvr|jd�|j��}n$|jj�|j��}t|�|_|jjr3|j|j�jk7rtd��yy)N�parent-sub-message�name-prefixz/Overriding checks not supported by codegen, yet)
r9r6rr:�name_prefixrrNr1rO�	Exception)r(r6s  r�resolvezType.resolve�s����4�9�9�,��	�	�"6�7�A�A�I�
�d�i�i�
'��9�9�]�3�4�T�Y�Y�K�@�I��=�=�4�4�5�d�i�i�[�A�I� ��+����=�=�"�"��{�{�d�1�1�3�:�:�:�� Q�R�R�;�#rc��yrLr&r's r�is_multi_valzType.is_multi_val����rc��|jdvS)N>�u8�s32�s64�u16�u32�u64)r0r's r�	is_scalarzType.is_scalar�s���y�y�E�E�Erc��y�NFr&r's r�is_recursivezType.is_recursive����rc�@�|j�xr
|jSrL)rt�op�r(�ris  r�is_recursive_for_opzType.is_recursive_for_op�s��� � �"�0�2�5�5�y�0rc��y)N�presentr&r's r�
presence_typezType.presence_type�s��rc���|j�|k7ry|j�dk(r|dk(rdnd}|�d|j�d�S|j�dvr|dk(rdnd}|�d|j�d�Sy)	Nr|�user�__r[zu32 z:1;>r2�count�;)r}rE)r(�space�type_filter�pfxs    r�presence_memberzType.presence_member�s�������;�.������9�,��6�/�$�r�C��U�$�t�{�{�m�3�/�/�����#3�3��6�/�$�r�C��U�$�t�{�{�m�1�-�-�4rc��yrLr&rxs  r�_complex_member_typezType._complex_member_type�rirc��yrsr&r's r�free_needs_iterzType.free_needs_iter�rurc�v�|j�s|j�dvrd|�d|�|j�d�gSgS)N>r2r��free(�->�);)rhr}rE)r(ry�var�refs    r�_free_lineszType._free_lines�sD������$�"4�"4�"6�:J�"J��C�5��3�%����}�B�7�8�8��	rc�n�|j|||�}|D]}|jj|��yrL)r��cw�p)r(ryr�r��lines�lines      r�freez	Type.free�s/��� � ��S�#�.���D��E�E�G�G�D�M�rc���|j|�}|rJ|ddk7rdnd}||zdz|jzg}|j�dk(r|d|jzgz
}|Std|j����)N����*� r[r��unsigned int n_z-Struct member not implemented for class type )r�rEr}rer0)r(ry�member�spc�args     r�
arg_memberzType.arg_member�s����*�*�2�.������s�*�#��C��C�<�#�%����3�4�C��!�!�#�w�.��)�D�K�K�7�8�8���J��G��	�	�{�S�T�Trc�Z�|j|�}|rb|j�rdnd}|j|�rd}|ddk7rdnd}|jj	|�|�|�|j
�d��y|j
|�}|D] }|jj	|dz��"y)Nr�r[r�r�r�)r�rhrzr�r�rEr�)r(ryr��ptrr��members�ones       r�
struct_memberzType.struct_member�s����*�*�2�.����*�*�,�#�"�C��'�'��+������s�*�#��C��E�E�G�G�v�h�s�e�C�5����
�Q�7�8���/�/�"�%���C��E�E�G�G�C�#�I��rc��d|zdzS)N�
{ .type = �, }r&�r(�policys  r�_attr_policyzType._attr_policy�s���f�$�u�,�,rc��td|jdz�}|j|�}|jd|j�d|�d��y)Nznla-r0�	[�] = �,)rr9r�r�r6�r(r�r��specs    r�attr_policyzType.attr_policy�sJ����$�)�)�F�"3�3�4��� � ��(��
���s�4�>�>�"�$�t�f�A�
.�/rc�2�td|j����)Nz+Type policy not implemented for class type �rer0r's r�_attr_typolzType._attr_typol�s���E�d�i�i�[�Q�R�Rrc��|j�}|jd|j�dd�d|j�d|�d�d�
�y)N�[r��{z
 .name = "z", �}r�)r�r�r6r)r(r��typols   r�
attr_typolzType.attr_typol�sD��� � �"��
���q���� ��S�E��D�I�I�;�c�%����Q�
O�Prc	���|j�}|dvr/|jjd|�d|�d|j�d��|jj|�d��y)N>r2r|�if (�->_�.�)r�)r}r�r�rE)r(ryr�r��presences     r�_attr_put_linezType._attr_put_line�sX���%�%�'���)�)��E�E�G�G�d�3�%�s�8�*�A�d�k�k�]�!�<�=�
�����4�&��
�rc	�p�d|�d|j�d|�d|j�d�	}|j|||�y)N�
ynl_attr_put_�(nlh, �, r�r��r6rEr�)r(ryr��put_typer�s     r�_attr_put_simplezType._attr_put_simple�s>���x�j��t�~�~�.>�b���R����}�TU�V�����B��T�*rc�2�td|j����)Nz#Put not implemented for class type r��r(ryr�s   r�attr_putz
Type.attr_put�s���=�d�i�i�[�I�J�Jrc�2�td|j����)Nz(Attr get not implemented for class type r�r�s   r�	_attr_getzType._attr_get�s���B�4�9�9�+�N�O�Orc���|j||�\}}}t|�tur|g}t|�tur|g}|rdnd}|jj	|�d|j
�d���|j
�st|jjd�|jjd�|j�dk(r+|jj|�d	|j�d
��|r<|jj�|D]}|jj|��|D]}|jj|��|jj�y)N�if�else ifz
 (type == r��r�z"if (ynl_attr_validate(yarg, attr))�return YNL_PARSE_CB_ERROR;r|�->_present.� = 1;T)r�r0r]r��block_startr6rhr�r}rE�nl�	block_end)	r(ryr��firstr��
init_linesr
�kwr�s	         r�attr_getz
Type.attr_get�s%��#�~�~�b�#�6���z�1���;�#���G�E��
��s�"�$��J��T�	��
�����"��Z����/?�q�A��B�� � �"��E�E�G�G�8�9��E�E�G�G�0�1��!�!�#�y�0������3�%�{�4�;�;�-�u�=�>���E�E�H�H�J�"��������
�#��D��E�E�G�G�D�M��
������rc�2�td|j����)Nz&Setter not implemented for class type r��r(ryr�r�s    r�
_setter_lineszType._setter_liness���@�����L�M�Mrc���|r|ng|jgz}|�ddj|���}g}|j�r|dgz
}g}	d}
tdt	|��D]�}|�ddj|d|dgz��d||��}
|t	|�dz
k(rH|j�dk7r5|�ddj|d|dgz��d	|j��d||��}
�|	j
|
d
z���dj|dd�}|r|dz
}|	|j|||�z
}	|	|j|||
�z
}	t|||���d
d	j|���}
t|	D�cgc]	}d|vs�|��c}�}t|	D�cgc]	}d|vs�|��c}�}|r|sd|
z}
|jjd|
||	t|||���d|��g|j|�z��ycc}wcc}w)Nr�r��unsigned int i;r[rz	_present.rr|r
r�r���deref�_set_r�zalloc(r��static inline void� *)�
local_vars�body�args)rE�joinr��ranger2r}�appendr�r��	op_prefix�boolr��
write_func�	type_namer�)r(ryr��	directionr�r�r�r�r��coder��i�ref_path�	func_name�xr��allocs                 r�setterzType.setters1���s�r�d�k�k�]�2���5��3�8�8�C�=�/�*���
����!��,�-�-�J������q�#�c�(�#�A���b����#�b�q�'�R�D�.�!9� :�)�C��F�8�L�H��C��H�q�L� �T�%7�%7�%9�Y�%F�!�U�"�S�X�X�c�"�1�g���n�%=�$>�a��@R�@R�@T�?U�UV�WZ�[\�W]�V^�_����K�K��7�*�+�$��8�8�C���H�%�����O�H��� � ��S�(�3�3����"�"�2�v�x�8�8�� ��Y�e�<�=�U�3�8�8�C�=�/�R�	���5��1��1��Q��5�6����7��A��Q��a��7�8�����y�(�I�
�����-�y�Z�"�"+�B�	��"G�!H��3�%�P�Q�TX�Tc�Tc�df�Tg�g�	�	i��	6��7s�#	G$�-G$�	G)�G)rL�Nr[�FN�req)"r*r+r,r8rOrRrTrYr`rfrhrqrtrzr}r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��
__classcell__�rJs@rr.r./s����+#�ZI�0�
.�
&��S��F��1��
.����
�
U��-�0�S�Q��+�K�P��4N�irr.c�>�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d
d	�Z
y)�
TypeUnusedc��yr�r&r's rr}zTypeUnused.presence_type1���rc��gSrLr&rxs  rr�zTypeUnused.arg_member4����	rc��dgddfS)Nr�r&r�s   rr�zTypeUnused._attr_get7s��,�-�t�T�9�9rc��y)Nz.type = YNL_PT_REJECT, r&r's rr�zTypeUnused._attr_typol:���(rc��yrLr&�r(r�s  rr�zTypeUnused.attr_policy=���rc��yrLr&r�s   rr�zTypeUnused.attr_put@r	rc��yrLr&�r(ryr�r�s    rr�zTypeUnused.attr_getCr	rNc��yrLr&�r(ryr�r�r�r�r�s       rr�zTypeUnused.setterFr	r�FNN)r*r+r,r}r�r�r�r�r�r�r�r&rrr�r�0s*����:�)�
�
�
�
rr�c�8�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd	d�Z	y)
�TypePadc��yr�r&r's rr}zTypePad.presence_typeKrrc��gSrLr&rxs  rr�zTypePad.arg_memberNrrc��y)Nz.type = YNL_PT_IGNORE, r&r's rr�zTypePad._attr_typolQrrc��yrLr&r�s   rr�zTypePad.attr_putTr	rc��yrLr&rs    rr�zTypePad.attr_getWr	rc��yrLr&rs  rr�zTypePad.attr_policyZr	rNc��yrLr&rs       rr�zTypePad.setter]r	rr)
r*r+r,r}r�r�r�r�r�r�r&rrrrJs%����)�
�
�
�
rrc�V��eZdZ�fd�Z�fd�Zd�Z�fd�Zd�Zd�Zd�Z	d�Z
d	�Z�xZS)
�
TypeScalarc����t�|�||||�d|_d|vrd|d�d�|_|j�s|j	�d|_t
|d�d|_t
|d�y)Nr[z
byte-orderz /* � */�is_bitfieldr�)r7r8�byte_order_comment�
is_classic�_init_checksrrHr��r(rBr:r9r!rJs     �rr8zTypeScalar.__init__bs|���
�����4��7�"$����4��(,�T�,�-?�,@��&D�D�#�� � �"����� �����m�$������k�"rc�&��|jt��d|jvr|jdrd|_nGd|jvr2|jj
|jdddk(|_nd|_|jsDd|jvr6|jj
|jdj|_y|jrd|jdzd	z|_yd|jz|_y)
Nz
enum-as-flagsT�enumr0�flagsFr�r�64)
�
resolve_upr7r9rrBrC�	user_typer��is_auto_scalarr0�r(rJs �rrfzTypeScalar.resolvets��������� ��d�i�i�'�D�I�I�o�,F�#�D��
�t�y�y�
 �#�{�{�1�1�$�)�)�F�2C�D�V�L�PW�W�D��$�D�����F�d�i�i�$7�!�[�[�/�/��	�	�&�0A�B�L�L�D�N�
�
 �
 �!�D�I�I�a�L�0�4�7�D�N�!�D�I�I�-�D�Nrc
��d|jvr�|jj|jd}|j�\}}|�|�d|jd<nQd|jvr&|dk7s|j
ddk(r||jd<d|jvr||jd<d|jvr|d|jvrn|j
d�|j
d�kDr<td|j�d	|j
d��d
|j
d�����d|jd<t|j
dd�|j
dd��}t|j
dd�|j
dd��}|dkr+|j
ddk(rtd|j�d
���|dks|dkDrd|jd<yy)Nr#T�sparse�minrr�maxzInvalid limit for "z" min: z max: r�rz"" negative limit for unsigned typei���i��
full-range)r9rBrC�value_ranger1r0rYrerr,r-)r(r#�low�highs    rr zTypeScalar._init_checks�s����T�Y�Y���;�;�%�%�d�i�i��&7�8�D��(�(�*�I�C���{�t�|�(,����H�%�����+��a�x�4�9�9�Q�<�3�#6�-0����E�*�����+�)-�D�K�K��&��D�K�K��E�T�[�[�$8��~�~�e�$�t�~�~�e�'<�<��"5�d�i�i�[�����W\�H]�G^�^d�ei�es�es�ty�ez�d{� |�}�}�#'�D�K�K�� ��$�.�.���*�D�N�N�5�!�,D�E���4�>�>�%��+�T�^�^�E�1�-E�F����7�t�y�y��|�s�*��1�$�)�)��<^�_�`�`���<�4�%�<�(,�D�K�K��%�(rc���d|jvs|jr�|jr9|jj|jd}|jd��}n<|jj|jd}t
|d�}d|zdz
}d|�d|d	�d
�Sd|jvrd|�d
t|j��d�Sd|jvr*d|�d|jd��d|jd��d
�Sd|jvrd|�d|jd��d
�Sd|jvrd|�d|jd��d
�Sd|jvrd|�d
t|j��d�St�|�-|�S)Nz
flags-maskr#T��as_flags�entriesrzNLA_POLICY_MASK(z, 0xr�r�r.zNLA_POLICY_FULL_RANGE(�, &z_range)r�zNLA_POLICY_RANGE(r�r,r-zNLA_POLICY_MIN(zNLA_POLICY_MAX(r+zNLA_POLICY_VALIDATE_FN(z
_validate))r1rrBrCr9�get_maskr2rr6r`r7r�)r(r�r#�maskr$�flag_cntrJs      �rr�zTypeScalar._attr_policy�s�����4�;�;�&�$�*:�*:�����{�{�)�)�$�)�)�F�*;�<���}�}�d�}�3�����*�*�4�;�;�|�+D�E���u�Y�/�0���X�
��*��%�f�X�T�$�q���;�;�
�T�[�[�
(�+�F�8�3�w�t�~�~�7N�6O�w�W�W�
����
#�&�v�h�b��1C�1C�E�1J�0K�2�d�N`�N`�af�Ng�Mh�hi�j�j�
�d�k�k�
!�$�V�H�B�t�/A�/A�%�/H�.I��K�K�
�d�k�k�
!�$�V�H�B�t�/A�/A�%�/H�.I��K�K�
����
$�,�V�H�C�����8O�7P�PZ�[�[��w�#�F�+�+rc�:�dt|jdd��d�S)N�.type = YNL_PT_Urr�)rr0r's rr�zTypeScalar._attr_typol�s!��!�'�$�)�)�A�B�-�"8�!9��<�<rc�R�|j�d|j�|j��gS)Nr�)r�rErrxs  rr�zTypeScalar.arg_member�s*���>�>�"�!�D�K�K�=��1H�1H�0I�J�K�Krc�>�|j|||j�yrL)r�r0r�s   rr�zTypeScalar.attr_put�s�����b�#�t�y�y�1rc�F�|�d|j�d|j�d�ddfS)Nr�z = ynl_attr_get_�(attr);)rEr0r�s   rr�zTypeScalar._attr_get�s,����b����
�%5�d�i�i�[��H�$�PT�T�Trc�(�|�d|j�d�gS)N� = r��rEr�s    rr�zTypeScalar._setter_lines�s���(�#�d�k�k�]�!�,�-�-r)
r*r+r,r8rfr r�r�r�r�r�r�r�r�s@rrras2���#�$.�"-�2,�,=�L�2�U�.rrc�*�eZdZd�Zd�Zd�Zd�Zd�Zy)�TypeFlagc��gSrLr&rxs  rr�zTypeFlag.arg_member�rrc��y)Nz.type = YNL_PT_FLAG, r&r's rr�zTypeFlag._attr_typol����&rc�F�|j||d|j�d��y)N�ynl_attr_put(nlh, z
, NULL, 0))r�r6r�s   rr�zTypeFlag.attr_put�s#�����B��'9�$�.�.�9I��%T�Urc��gddfSrLr&r�s   rr�zTypeFlag._attr_get�s���4��~�rc��gSrLr&r�s    rr�zTypeFlag._setter_lines�rrN)r*r+r,r�r�r�r�r�r&rrrDrD�s���'�V��rrDc�B�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zy
)�
TypeStringc�"�d|j��gS)N�const char *rBrxs  rr�zTypeString.arg_member�s���t�{�{�m�,�-�-rc��y�Nr2r&r's rr}zTypeString.presence_type�rurc�V�|jjd|j�d��y)Nzchar *r��r�r�rErxs  rr�zTypeString.struct_member����
�����&����
�Q�'�(rc�,�d}|jr|dz
}|S)Nz.type = YNL_PT_NUL_STR, z.is_selector = 1, )r>�r(r�s  rr�zTypeString._attr_typol�s ��*������)�)�E��rc��d|jvrd|jd�zdz}|Sd|z}d|jvr|d|jd�zz
}|dz
}|S)N�	exact-len�NLA_POLICY_EXACT_LEN(r�r��max-lenz	, .len = r�)r1r`)r(r��mems   rr�zTypeString._attr_policy�so���$�+�+�%�)�D�,>�,>�{�,K�K�c�Q�C��
�	��'�C��D�K�K�'��{�T�%7�%7�	�%B�B�B���5�L�C��
rc��|jjdd�rd}nd}|j|�}|jd|j�d|�d��y)Nzunterminated-okF�
NLA_STRING�NLA_NUL_STRINGr�r�r�)r1r;r�r�r6r�s    rr�zTypeString.attr_policy�sO���;�;�?�?�,�e�4�!�F�%�F�� � ��(��
���s�4�>�>�"�$�t�f�A�
.�/rc�*�|j||d�y)Nr])r�r�s   rr�zTypeString.attr_put�s�����b�#�u�-rc��|dz|jz}|�d�|�d|j�d�d|�d|j�d�|�d|j�d�gdgd	gfS)
N�->_len.� = len;r�z = malloc(len + 1);�memcpy(z, ynl_attr_get_str(attr), len);z
[len] = 0;�?len = strnlen(ynl_attr_get_str(attr), ynl_attr_data_len(attr));�unsigned int len;rB�r(ryr��len_mems    rr�zTypeString._attr_get�s|���	�/�D�K�K�/���)�7�#��%�r�$�+�+��&9�:��#��b����
�-L�M��%�r�$�+�+��j�1�3�R�R�#�$�%�	%rc	�n�|�d|j�d�|�d|�d�d|�d|j�d|�d�|�d|�d�gS)	Nz
 = strlen(r��
 = malloc(z + 1);rcr�r�z] = 0;rBr�s    rr�zTypeString._setter_liness\���*�J�t�{�{�m�2�6��(�*�X�J�f�5��&���D�K�K�=��8�*�B�?��(�!�H�:�V�,�.�	.rN)r*r+r,r�r}r�r�r�r�r�r�r�r&rrrMrM�s/��.��)���0�.�%�.rrMc�<�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
y	)
�
TypeBinaryc�$�d|j��dgS)Nzconst void *z
size_t lenrBrxs  rr�zTypeBinary.arg_members���t�{�{�m�,�l�;�;rc��yrQr&r's rr}zTypeBinary.presence_typerurc�V�|jjd|j�d��y)Nzvoid *r�rSrxs  rr�zTypeBinary.struct_memberrTrc��y)Nz.type = YNL_PT_BINARY,r&r's rr�zTypeBinary._attr_typols��'rc���t|j�dk(rnMt|j�dk(r*t|j�d}|dvrtd|z��td��t|j�dk(rd}|Sd|jvrd|j	d�zd	z}|Sd
|jvrd|j	d
�zd	z}|Sd|jvrd
|j	d�zd	z}S)Nrr>rZ�min-lenrXz#Unsupported check for binary type: z8More than one check for binary type not implemented, yetz{ .type = NLA_BINARY, }rXrYr�rqzNLA_POLICY_MIN_LEN(rZzNLA_POLICY_MAX_LEN()r2r1�listrer`)r(r��
check_namer[s    rr�zTypeBinary._attr_policys���t�{�{��q� ��
����
��
"��d�k�k�*�1�-�J��!D�D�� E�
� R�S�S��V�W�W��t�{�{��q� �+�C��
��D�K�K�
'�)�D�,>�,>�{�,K�K�c�Q�C��
��$�+�+�
%�'�$�*<�*<�Y�*G�G�#�M�C��
��$�+�+�
%�'�$�*<�*<�Y�*G�G�#�M�C��
rc
��|j||d|j�d�|�d|j�d|�d|j�d�z�y)NrIr�r�rar�)r�r6rEr�s   rr�zTypeBinary.attr_put-sP�����B��'9�$�.�.�9I��%L�"�e�2�d�k�k�]�"�S�E�����
�Q�O�&P�	Qrc��|dz|jz}|�d�|�d|j�d�d|�d|j�d�gdgdgfS)	Nrarbr�� = malloc(len);rc�, ynl_attr_data(attr), len);�len = ynl_attr_data_len(attr);rerBrfs    rr�zTypeBinary._attr_get1sg���	�/�D�K�K�/���)�7�#��%�r�$�+�+��o�6��#��b����
�-I�J�L�1�1�#�$�	%�	%rc	�F�|�d�|�d|�d�d|�d|j�d|�d�gS)Nrbrir�rcr�rBr�s    rr�zTypeBinary._setter_lines9sD���*�G�$��(�*�X�J�b�1��&���D�K�K�=��8�*�B�?�A�	ArN)r*r+r,r�r}r�r�r�r�r�r�r&rrrkrks,��<��)�(��*Q�%�Arrkc��eZdZd�Zd�Zy)�TypeBinaryStructc��|jjdt|jd���d|j�d��y)Nr5�structr�r�)r�r�rr;rErxs  rr�zTypeBinaryStruct.struct_member@s4��
�����'�'�$�(�(�8�"4�5�6�b����
�Q�G�Hrc
��dt|jd��zdz}|dz|j�zdz|jz}|�d�d|�d�|�d|j�d	|�d
�d|�d|j�d�d
|�d|j�d�gdgdgfS)N�sizeof(struct r}r�r�r�rbz
if (len < r�z
 = calloc(1, r��elservrcrwrxre)rr;r}rE)r(ryr��	struct_szrgs     rr�zTypeBinaryStruct._attr_getCs���$�w�t�x�x��/A�'B�B�S�H�	���+�� 2� 2� 4�4�s�:�T�[�[�H���)�7�#��Y�K�q�)��%�r�$�+�+��m�I�;�b�A���%�r�$�+�+��o�6��#��b����
�-I�J�L�1�1�#�$�%�	%rN)r*r+r,r�r�r&rrr{r{?s
��I�
%rr{c�0�eZdZd�Zd�Zd�Zd�Zd�Zd�Zy)�TypeBinaryScalarArrayc�H�d|jd��d|j��dgS)Nr��sub-typer�zsize_t count�r;rErxs  rr�z TypeBinaryScalarArray.arg_memberQs(���T�X�X�j�)�*�"�T�[�[�M�:�N�K�Krc��y�Nr�r&r's rr}z#TypeBinaryScalarArray.presence_typeT���rc�z�|jjd|jd��d|j�d��y)Nr�r�r�r�)r�r�r;rErxs  rr�z#TypeBinaryScalarArray.struct_memberWs/��
�����"�T�X�X�j�)�*�"�T�[�[�M��;�<rc��|j�}|jjd|�d|�d|j�d���|jj	d|�d|�d|j�d|jd��d	�	�|jj	d
|j�d�|�d|j�d
�z�|jj�y)Nr�r�r�r�r�zi = � * sizeof(__r�r�rIr�r�z, i);)r}r�r�rEr�r;r6r�)r(ryr�r�s    rr�zTypeBinaryScalarArray.attr_putZs����%�%�'��
������c�U�#�h�Z�q����
�Q�G��H�
�����$�s�e�3�x�j��$�+�+��l�4�8�8�J�CW�BX�XZ�[�\�
�����$�T�^�^�$4�B�7��%�r�$�+�+��e�,�-�	.�
�����rc���|dz|jz}|�d|jd��d�d|�d|jd��d�|�d|j�d�d	|�d|j�d
�gdgdgfS)
N�	->_count.z = len / sizeof(__r�r�zlen = r�r�rvrcrwrxre)rEr;rfs    rr�zTypeBinaryScalarArray._attr_getbs�����#�d�k�k�1���)�-�d�h�h�z�.B�-C�2�F���	��d�h�h�z�.B�-C�2�F��%�r�$�+�+��o�6��#��b����
�-I�J�L�1�1�#�$�%�	%rc�b�|�d�d|jd��d�|�d�d|�d|j�d�gS)	Nz	 = count;zcount *= sizeof(__r�r�z = malloc(count);rcr�z	, count);r�r�s    rr�z#TypeBinaryScalarArray._setter_linesksM���*�I�&�$�T�X�X�j�%9�$:�"�=��(�+�,��&���D�K�K�=�	�:�<�	<rN)	r*r+r,r�r}r�r�r�r�r&rrr�r�Ps!��L��=��%�<rr�c�0�eZdZd�Zd�Zd�Zd�Zd�Zd�Zy)�TypeBitfield32c��y)Nzstruct nla_bitfield32r&rxs  rr�z#TypeBitfield32._complex_member_typesrGrc��y)Nz.type = YNL_PT_BITFIELD32, r&r's rr�zTypeBitfield32._attr_typolvs��,rc��d|jvrtd��|jj|jd}|j	d��}d|�d�S)Nr#z!Enum required for bitfield32 attrTr3zNLA_POLICY_BITFIELD32(r�)r9rerBrCr7)r(r�r#r8s    rr�zTypeBitfield32._attr_policyysV������"��?�@�@��{�{�!�!�$�)�)�F�"3�4���}�}�d�}�+��'��v�Q�/�/rc�j�d|j�d|�d|j�d�}|j|||�y)NrIr6r�z , sizeof(struct nla_bitfield32))r�)r(ryr�r�s    rr�zTypeBitfield32.attr_put�s8��#�D�N�N�#3�3�s�e�2�d�k�k�]�Jj�k�����B��T�*rc�.�d|�d|j�d�ddfS)N�memcpy(&r�z6, ynl_attr_data(attr), sizeof(struct nla_bitfield32));rBr�s   rr�zTypeBitfield32._attr_get�s%���#��b����
�-c�d�fj�lp�p�prc�*�d|�d|j�d�gS)Nr�r�z!, sizeof(struct nla_bitfield32));rBr�s    rr�zTypeBitfield32._setter_lines�s���6�(�"�T�[�[�M�1R�S�T�TrN)	r*r+r,r�r�r�r�r�r�r&rrr�r�rs"��'�-�0�+�q�Urr�c�>�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d
d	�Z
y)�TypeNestc�\�|jj|jjSrL)rB�pure_nested_structsr?�	recursiver's rrtzTypeNest.is_recursive�s#���{�{�.�.�t�/@�/@�A�K�K�Krc��|jSrL�rDrxs  rr�zTypeNest._complex_member_type�����&�&�&rc	��g}d}|j|�rd}|d|�d|�|j�d�gz
}||j�d|�|�d|�|j�d�gz
}|S)N�&r[r�r�r��_free(r�)rzrErA)r(ryr�r�r��ats      rr�zTypeNest._free_lines�s|����
���#�#�B�'��B���S�E��C�5����
�Q�7�8�8�E�
�T�,�,�-�V�B�4��u�B�s�e�D�K�K�=�PR�S�T�T���rc�"�d|j�d�S�N�.type = YNL_PT_NEST, .nest = &�_nest, �rAr's rr�zTypeNest._attr_typol����/��0G�0G�/H��P�Prc�&�d|jzdzS)NzNLA_POLICY_NESTED(�_nl_policy)r�r�s  rr�zTypeNest._attr_policy�s��#�d�&=�&=�=�
�M�Mrc��|j|�rdnd}|j|||j�d�|j�d|�|�d|j�d�z�y)Nr[r��
_put(nlh, r�r�r�)rzr�rAr6rE)r(ryr�r�s    rr�zTypeNest.attr_put�sb���+�+�B�/�R�S�����B���(?�(?�'@�
�%K�#�~�~�.�b���S�E��D�K�K�=��J�&K�	Lrc�R�|jj|j}ddg}|j�D]"}|j	|�d|j
����$d|j�ddj|��d�dg}d	|j�d
�d|�d|j�d�g}||dfS)
Nz&pargr9r�r�z_parse(r��))r��parg.rsp_policy = &�_nest;�
parg.data = &r�)	rBr�r?�external_selectorsr�rrAr�rE)r(ryr��pnsr��sel�	get_linesr�s        rr�zTypeNest._attr_get�s����k�k�-�-�d�.?�.?�@���� ���)�)�+�C��K�K�3�%�r�#�(�(��,�-�,��D�3�3�4�G�D�I�I�d�O�;L�B�O�1�3�	�+�D�,C�,C�+D�F�K�%�c�U�"�T�[�[�M��;�=�
��*�d�*�*rNc	��|r|ng|jgz}|jj|jj	�D]7\}}|j�r�|j
||j||||���9y)N)r�r�r�)rErBr�r?�member_listrtr�)	r(ryr�r�r�r�r�r
r9s	         rr�zTypeNest.setter�sv���s�r�d�k�k�]�2���y�y�4�4�T�5F�5F�G�S�S�U�G�A�t�� � �"���K�K��D�-�-�y��3��
�
!�Vrr�)r*r+r,rtr�r�r�r�r�r�r�r&rrr�r��s.��L�'��Q�N�L�
	+�!rr�c�d��eZdZ�fd�Zd�Zd�Zd�Z�fd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Z�xZS)
�
TypeMultiAttrc�8��t�|�||||�||_yrL)r7r8�	base_type)r(rBr:r9r!r�rJs      �rr8zTypeMultiAttr.__init__�s���
�����4��7�"��rc��yrQr&r's rrhzTypeMultiAttr.is_multi_val�rirc��yr�r&r's rr}zTypeMultiAttr.presence_type�r�rc��d|jvs|jddk(r|jS|jddk(rd|jvry|jddk(ry|jdtvrJ|jdk(rdnd	}|jr|j
d
dz}||zS|jd}||zSt
d|jd�d
���)Nr0�nest�binaryr}�stringzstruct ynl_string *rr�r[rr%�	Sub-type � not supported yet)r9rD�scalars�ku_spacer(r0re)r(ry�
scalar_pfxrs    rr�z"TypeMultiAttr._complex_member_type�s�������"�d�i�i��&7�6�&A��*�*�*�
�Y�Y�v�
�(�
*�x�4�9�9�/D��
�Y�Y�v�
�(�
*�(�
�Y�Y�v�
�'�
)�!#����!6��B�J��"�"��y�y��|�d�*����$�$��y�y��(����$�$��i��	�	�&�(9�':�:L�M�N�Nrc����|jdk(rEd|jvr7dt|jd��d|j��d|j��gSt�|�|�S)Nr�r}r5r�r�)r0r9rrEr7r��r(ryrJs  �rr�zTypeMultiAttr.arg_member�se����9�9�� �X����%:��g�d�i�i��&9�:�;�2�d�k�k�]�K�%�d�k�k�]�3�5�
5��w�!�"�%�%rc�$�|jddvS)Nr0>r�r��r9r's rr�zTypeMultiAttr.free_needs_iter�s���y�y�� �$6�6�6rc	��g}|jdtvr|d|�d|�|j�d�gz
}|S|jddk(r|d|�d|�|j�d�gz
}|S|jddk(rD|d|�d|�d|j�d	�d|�d|�|j�d
�d|�d|�|j�d�gz
}|Sd|jvs|jddk(rP|d|�d|�d|j�d	�|j�d|�d|�|j�d
�d|�d|�|j�d�gz
}|St	d
|jd�d���)Nr0r�r�r�r�r��for (i = 0; i < z_count.�; i++)�[i]);r�z_free(&zFree of MultiAttr sub-type r�)r9r�rErAre)r(ryr�r�r�s     rr�zTypeMultiAttr._free_lines�s������9�9�V���'���c�U�"�S�E�$�+�+��b�9�:�:�E�"��!�Y�Y�v�
�(�
*���c�U�"�S�E�$�+�+��b�9�:�:�E����Y�Y�v�
�(�
*��"�3�%�r�#��g�d�k�k�]�&�I���u�B�s�e�D�K�K�=��6���u�B�s�e�D�K�K�=��3��
�E����4�9�9�
$��	�	�&�(9�V�(C��"�3�%�r�#��g�d�k�k�]�&�I��*�*�+�7�3�%�r�#��t�{�{�m�5�Q���u�B�s�e�D�K�K�=��3��
�E����9�$�)�)�F�:K�9L�L^�_�`�`rc�8�|jj|�SrL)r�r�r�s  rr�zTypeMultiAttr._attr_policy�s���~�~�*�*�6�2�2rc�6�|jj�SrL)r�r�r's rr�zTypeMultiAttr._attr_typol�s���~�~�)�)�+�+rc�(�d|j�d�ddfS)N�n_�++;rBr�s   rr�zTypeMultiAttr._attr_get�s���D�K�K�=��$�d�D�0�0rc
��|jdtvru|j}|jj	d|�d|j
�d��|jj	d|�d|j�d|�d|j
�d	�	�y|jdd
k(r�d|jvr|jj	d|�d|j
�d��|jj	d|j�d
|�d|j
�dt|jd��d�	�y|jddk(rf|jj	d|�d|j
�d��|jj	d|j�d|�d|j
�d��yd|jvs|jddk(rm|jj	d|�d|j
�d��|j|||j�d�|j�d
|�d|j
�d�z�ytd|jd�d���)Nr0r�r�r�r�r�r�r�r�r�r}rIr6z[i], sizeof(struct �));r�zynl_attr_put_str(nlh, z
[i]->str);r�r�z[i])zPut of MultiAttr sub-type r�)r9r�r0r�r�rEr6rr�rAre�r(ryr�r�s    rr�zTypeMultiAttr.attr_puts���9�9�V���'��y�y�H��E�E�G�G�&�s�e�9�T�[�[�M��H�I��E�E�G�G�m�H�:�V�D�N�N�3C�2�c�U�"�T�[�[�M�Y^�_�`�
�Y�Y�v�
�(�
*�x�4�9�9�/D��E�E�G�G�&�s�e�9�T�[�[�M��H�I��E�E�G�G�(����(8��C�5��4�;�;�-�Ob�cj�ko�kt�kt�u}�k~�c�cA�AD�E�
F�
�Y�Y�v�
�(�
*��E�E�G�G�&�s�e�9�T�[�[�M��H�I��E�E�G�G�,�T�^�^�,<�B�s�e�2�d�k�k�]�R\�]�^�
�4�9�9�
$��	�	�&�(9�V�(C��E�E�G�G�&�s�e�9�T�[�[�M��H�I�����C�D�,C�,C�+D�J�)O�#'�>�>�"2�#�c�U�"�T�[�[�M�� N�*O�
P��8����6�9J�8K�K]�^�_�_rc�J�|�d|j�d�|�d|j�d�gS�NrAr�� = n_rBr�s    rr�zTypeMultiAttr._setter_lines�4���(�#�d�k�k�]�!�,��*�E�$�+�+��a�0�2�	2r)r*r+r,r8rhr}r�r�r�r�r�r�r�r�r�r�r�s@rr�r��sA���#�
��O�"&�7��,3�,�1�`�$2rr�c�R��eZdZd�Zd�Zd�Z�fd�Z�fd�Zd�Zd�Z	d�Z
d	�Z�xZS)
�TypeIndexedArrayc��yrQr&r's rrhzTypeIndexedArray.is_multi_valrirc��yr�r&r's rr}zTypeIndexedArray.presence_typer�rc�H�d|jvs|jddk(r|jS|jdtvr%|jdk(rdnd}||jdzS|jddk(rd|jvrytd|jd�d	���)
Nr�r�rr�r[r�rXr�r�)r9rDr�r�r1re)r(ryr�s   rr�z%TypeIndexedArray._complex_member_types����T�Y�Y�&�$�)�)�J�*?�6�*I��*�*�*�
�Y�Y�z�
"�g�
-�!#����!6��B�J���	�	�*� 5�5�5�
�Y�Y�z�
"�h�
.�;�$�+�+�3M���i��	�	�*�(=�'>�>P�Q�R�Rrc���|jdk(r=d|jvr/d|j�d|jd�d�d|j��gSt�|�|�S)Nr�rXzunsigned char (*z)[�]r�)�sub_typer1rEr7r�r�s  �rr�zTypeIndexedArray.arg_member)sb����=�=�H�$�����)C�&�t�{�{�m�2�d�k�k�+�6N�5O�q�Q�%�d�k�k�]�3�5�
5��w�!�"�%�%rc�f��|jddk(rd|j�d�St�|�
|�S)Nr�r�zNLA_POLICY_NESTED_ARRAY(r�)r9rAr7r�)r(r�rJs  �rr�zTypeIndexedArray._attr_policy/s:����9�9�Z� �F�*�-�d�.E�.E�-F�k�R�R��w�#�F�+�+rc�F�|jdtvrdt|jdd��d�S|jddk(r!d|jvrd|jd�d�S|jddk(rd	|j
�d
�St
d|jd�d���)
Nr�r;rr�r�rXz.type = YNL_PT_BINARY, .len = r�r�r�z Typol for IndexedArray sub-type � not supported, yet)r9r�rr�r1rArer's rr�zTypeIndexedArray._attr_typol4s����9�9�Z� �G�+�%�g�d�m�m�A�B�.?�&@�%A��D�D�
�Y�Y�z�
"�h�
.�;�$�+�+�3M�3�D�K�K��4L�3M�R�P�P�
�Y�Y�z�
"�f�
,�3�D�4K�4K�3L�G�T�T��>�t�y�y��?T�>U�Uh�i�j�jrc�Z�dg}d|j�d�dddd|j�d�d	g}|d|fS)
Nzconst struct nlattr *attr2;�attr_z = attr;z'ynl_attr_for_each_nested(attr2, attr) {z,	if (__ynl_attr_validate(yarg, attr2, type))z		return YNL_PARSE_CB_ERROR;z	n_r�r�rB)r(ryr�r�r�s     rr�zTypeIndexedArray._attr_get>sL��3�4�
��T�[�[�M��2�>�D�5��D�K�K�=��,���	��$�
�*�*rc	���|jjd|j�d��|jtvr�|j}|jjd|�d|j�d���|jjd|�d|�d	|j�d
��|jj��n|jdk(rwd|jvri|jjd|�d|j�d��|jjd
|�d	|j�d|jd�d��n�|jdk(re|jjd|�d|j�d��|jj|j�d|�d	|j�d
��ntd|jd�d���|jjd�y)Nz!array = ynl_attr_nest_start(nlh, r�r�r�r�r�r�z	(nlh, i, r�r�r�rXzynl_attr_put(nlh, i, z[i], r�z_put(nlh, i, &zPut for IndexedArray sub-type r�r�zynl_attr_nest_end(nlh, array);)r�r�r6r�r�r�rEr�r1rArer9r�s    rr�zTypeIndexedArray.attr_putHs���
�����3�D�N�N�3C�2�F�G��=�=�G�#��}�}�H��E�E���%5�c�U�)�D�K�K�=�PV�#W��X��E�E�G�G�m�H�:�Y�s�e�2�d�k�k�]�%�P�Q��E�E�O�O��
�]�]�h�
&�;�$�+�+�+E��E�E�G�G�&�s�e�9�T�[�[�M��H�I��E�E�G�G�+�C�5��4�;�;�-�u�T�[�[�Q\�E]�D^�^`�a�b�
�]�]�f�
$��E�E�G�G�&�s�e�9�T�[�[�M��H�I��E�E�G�G�t�.�.�/�~�c�U�"�T�[�[�M�QV�W�X��<�T�Y�Y�z�=R�<S�Sf�g�h�h�
�����0�1rc�J�|�d|j�d�|�d|j�d�gSr�rBr�s    rr�zTypeIndexedArray._setter_linesYr�r)
r*r+r,rhr}r�r�r�r�r�r�r�r�r�s@rr�r�s2�����	S�&�,�
k�+�2�"2rr�c��eZdZd�Zd�Zd�Zy)�TypeNestTypeValuec��|jSrLr�rxs  rr�z&TypeNestTypeValue._complex_member_type_r�rc�"�d|j�d�Sr�r�r's rr�zTypeNestTypeValue._attr_typolbr�rc��d}d}g}g}d|j�d�d|�d|j�d�g}d|jvr�|jdD�cgc]
}t|���}	}|d	d
j	|	��d�gz
}|ddj	|	��d�gz
}|jdD]+}
t|
�}
|d
|
�d|�d�gz
}||
�d|
�d�gz
}d
|
z}�-ddj	|	���}||j�d|�|�d�gz
}|||fScc}w)Nr9r[r�r�r�r�r��
type-value�const struct nlattr *attr_z, *attr_�__u32 r�r�z = ynl_attr_data(r�z = ynl_attr_type(attr_�_parse(&parg, )rArEr9rr�)r(ryr��prev�tv_argsr�r�r�r��tv_names�levels           rr�zTypeNestTypeValue._attr_getesd�������	��
�+�D�,C�,C�+D�F�K�%�c�U�"�T�[�[�M��;�=�
��4�9�9�$�,0�I�I�l�,C�D�,C�q���
�,C�H�D��7�
����8Q�7R�RS�T�U�U�J��V�D�I�I�h�$7�#8��:�;�;�J����<�0��������e�W�,=�d�V�2�F�G�G�	����'=�e�W�B�G�H�H�	�����	1��4�9�9�X�.�/�0�G���0�0�1���v�g�Y�b�Q�R�R�	��*�j�0�0��Es�C?N)r*r+r,r�r�r�r&rrr�r�^s��'�Q�1rr�c�*��eZdZ�fd�Zd�Zd�Z�xZS)�TypeSubMessagec�L��t�|�||||�t||�|_yrL)r7r8�Selector�selectorr!s     �rr8zTypeSubMessage.__init__}s$���
�����4��7� ��x�0��
rc��d|j�d�}|dz
}|jj�s#|d|j|dj�d�z
}|S)Nr�r�z.is_submsg = 1, z.selector_type = r�r�)rAr��is_externalr:r!rVs  rr�zTypeSubMessage._attr_typol�sb��0��1H�1H�0I��Q��
�#�#���}�}�(�(�*��(����t�J�7G�)H�)N�)N�(O�q�Q�Q�E��rc��t|d�}|jj�rd|��}n|�d|��}d|�d�d|j�d|d�d�d	|j�d
|�d�dg}d
|j�d�d|�d|j
�d�g}||dfS)Nr��_sel_r�zif (!r�z return ynl_submsg_failed(yarg, "z", "z");r�r�z, attr))r�r�r�r�r�)rr�r�rrArE)r(ryr�r��sel_varr�r�s       rr�zTypeSubMessage._attr_get�s����d�:�&�'���=�=�$�$�&��c�U�m�G���R��u�o�G��W�I�Q�'����D��$4�6��4�2�2�3�>�'��(�S�1�	3�	�
,�D�,C�,C�+D�F�K�%�c�U�"�T�[�[�M��;�=�
��*�d�*�*r)r*r+r,r8r�r�r�r�s@rr�r�|s���1�
�
+rr�c��eZdZd�Zd�Zd�Zy)r�c��|d|_|j|vr-||j|_d|j_d|_yd|_d|_y)Nr�TF)rr9r>�	_external)r(�msg_attrr:s   rr8zSelector.__init__�sM���Z�(��	��9�9�� � ����+�D�I�$(�D�I�I�!�"�D�N��D�I�!�D�Nrc��||_yrLr�)r(r9s  r�set_attrzSelector.set_attr�s	����	rc��|jSrL)rr's rr�zSelector.is_external�����~�~�rN)r*r+r,r8rr�r&rrr�r��s��
"��rr�c�<�eZdZ		d	d�Zd�Zd�Zd�Zd�Zd�Zd�Z	y)
�StructNc��||_||_|j||_|�|ng|_g|_d|_|rdt|�z|_||_|du|_	|jt|�k(rt|j�|_n t|jdz|z�|_d|jz|_
|jr#||jvr|xjdz
c_
|jdz|_t!�|_d|_d|_d|_d|_g|_t/�|_|�2|D],}|j,j3||j|f��.n;|jD],}|j,j3||j|f��.d}d|_|j,D]6\}	}
|
j6|k\r|
j6}|
|_|
|j0|	<�8y)Nr5rr
r�Fr)rB�
space_namerMr:�
_inherited�	inherited�fixed_headerr�submsgrIrr@�render_name�struct_namerC�ptr_name�set�child_nestsr<r=r��in_multi_val�	attr_list�dict�attrsr��attr_max_valr!)r(rBr�	type_listrrr�t�max_valrr9s           rr8zStruct.__init__�s������$����(�(��4��
�'0�'<�)�"������ ���� )�G�L�,A� A�D������4�'����;�;�'�*�-�-�&�v�'8�'8�9�D��&�v�'8�'8�3�'>��'K�L�D��$�t�'7�'7�7����;�;�:����6�����#���(�(�4�/��
��5��������
����!�������V��
�� ������%�%�q�$�-�-��*:�&;�=���]�]�����%�%�q�$�-�-��*:�&;�=�#��� ����.�.�J�D�$��z�z�W�$��*�*��$(��!�#�D�J�J�t��	)rc#�8K�|jEd{���y7��wrL�rr's r�__iter__zStruct.__iter__�s�����:�:���s���c� �|j|SrLr!�r(�keys  r�__getitem__zStruct.__getitem__�s���z�z�#��rc��|jSrL)rr's rr�zStruct.member_list�r
rc��|j|k7rtd��t|j�D�cgc]
}t|���c}|_ycc}w)Nz*Inheriting different members not supported)rre�sortedrr)r(�
new_inheritedr�s   r�
set_inheritedzStruct.set_inherited�sB���?�?�m�+��H�I�I�.4�T�_�_�.E�F�.E��'�!�*�.E�F����Fs�A
c��g}|jD]L\}}t|t�s�|jj	�s�2|j|j��N|SrL)rrVr�r�r�r�)r(�selsrr9s    rr�zStruct.external_selectors�sI�����.�.�J�D�$��$��/�D�M�M�4M�4M�4O����D�M�M�*�)��rc�P�|jD]\}}|j�s�yy)NTF)rr�)r(r
r9s   rr�zStruct.free_needs_iter�s(���~�~�G�A�t��#�#�%��&�r)NNNN)
r*r+r,r8r"r&r�r+r�r�r&rrrr�s-��HL�(,�-$�^���G�
�rrc�(��eZdZ�fd�Z�fd�Z�xZS)�	EnumEntryc�
��t�|�||||�|r"|j|jdzk7|_n|jdk7|_|jxs|jddk(|_d|_t
|d�y)Nrrr0r$rE)r7r8r!�value_change�enum_setrErH)r(r3�yamlr��value_startrJs     �rr8zEnumEntry.__init__�sv���
����4��{�;��!%���t�z�z�A�~�!=�D��!%���q��D�� �-�-�Q����v�1F�'�1Q��������h�rc���|jt��t|jj|j
z�|_yrL)r&r7rr3�	value_pfxrrEr)s �rrfzEnumEntry.resolve
s0�������� ��d�m�m�5�5��	�	�A�B��r�r*r+r,r8rfr�r�s@rr0r0�s��� �C�Crr0c�*��eZdZ�fd�Zd�Zd�Z�xZS)�EnumSetc���t|jdz|dz�|_d|vr5|dr(dt|d�z|_|j|_nd|_nd|jz|_|jr|j|_nd|_|j
d|j�d|d�d��|_|j
dd�|_|j
dd�|_t�|�)||�y)	Nrr�	enum-name�enum rrcr\z
enum-cnt-name)rr@rr6r'r;r7r\�
enum_cnt_namer7r8�r(rBr4rJs   �rr8zEnumSet.__init__s����"�6�#4�#4�s�#:�T�&�\�#I�J����$���K� �!(�7�4��3D�+E�!E���!%�����!%���$�t�'7�'7�7�D�N��>�>�!�^�^�D�N�"�D�N�!����-�F�4E�4E�3F�a��V��~�UV�1W�X����d�h�h�x��.���%�T�X�X�o�t�<���
�����&rc��t||||�SrL)r0)r(�entry�
prev_entryr5s    r�	new_entryzEnumSet.new_entry(s����u�j�+�>�>rc�H�t|jj�D�cgc]}|j��c}�}t	|jj�D�cgc]}|j��c}�}||z
dzt|j�k7ry||fScc}wcc}w)Nr�NN)r,r5�valuesr!r-r2)r(r�r0r1s    rr/zEnumSet.value_range+s����D�L�L�$7�$7�$9�:�$9�q�1�7�7�$9�:�;���T�\�\�%8�%8�%:�;�%:��A�G�G�%:�;�<���#�:��>�S����.�.���D�y���
;��;s�B�B)r*r+r,r8rCr/r�r�s@rr:r:s���'�.?�rr:c�*��eZdZ�fd�Zd�Zd�Z�xZS)�AttrSetc����t�|�||�|j��d|vr|d}nE|j|jk(r|jdz}n|j�d|j�d�}t|�|_t|jjd|j�d���|_	t|jjdd|j�d���|_
nx|j|jj|_|j|jj|_	|j|jj|_
d|_t|d�y)	Nrcz-a-rz
attr-max-namer-z
attr-cnt-namer�rE)r7r8rNrr@rrdr4r;�max_name�cnt_namerMrErH)r(rBr4r�rJs    �rr8zAttrSet.__init__6s5���
�����&��>�>�!���$��=�)�����f�k�k�)��'�'�%�/���*�*�+�3�t�y�y�k��;��&�s�|�D��#�D�I�I�M�M�/�d�FV�FV�EW�WZ�C[�$\�]�D�M�#�D�I�I�M�M�/�R��HX�HX�GY�Y\�C]�$^�_�D�M�%�/�/����?�K�K�D��"�,�,�T�^�^�<�E�E�D�M�"�,�,�T�^�^�<�E�E�D�M������h�rc���t|j�|_|jtvr|xjdz
c_|j|jjk(rd|_yy)Nr
r[)rrrErFrBr's rrfzAttrSet.resolveLsN���d�i�i�(����;�;�%���K�K�3��K��;�;�$�+�+�,�,�,��D�K�-rc�&�|dtvrt|j|||�}�n�|ddk(rt|j|||�}�n�|ddk(rt	|j|||�}�n�|ddk(rt|j|||�}�nc|ddk(rt
|j|||�}�nA|ddk(rgd|vrt|j|||�}�n|jd�tvrt|j|||�}n�t|j|||�}n�|dd	k(rt|j|||�}n�|dd
k(rt|j|||�}n�|ddk(r5d|vr1|ddvrt|j|||�}ndtd
|d����|ddk(rt|j|||�}n2|ddk(rt!|j|||�}ntd|d����d|vr|drt#|j||||�}|S)Nr0�unused�pad�flagr�r�r}r��
bitfield32r��
indexed-array)r�r�roznew_attr: unsupported sub-type znest-type-valuer4zNo typed class for type �
multi-attr)r�rrBr�rrDrMr{r;r�rkr�r�r�rer�r�r�)r(�elemr!rs    r�new_attrzAttrSet.new_attrSs����<�7�"��4�;�;��d�E�:�A�
�&�\�X�
%��4�;�;��d�E�:�A�
�&�\�U�
"�����T�4��7�A�
�&�\�V�
#�����d�D�%�8�A�
�&�\�X�
%��4�;�;��d�E�:�A�
�&�\�X�
%��4��$�T�[�[�$��e�D�����*�%��0�)�$�+�+�t�T�5�I���t�{�{�D�$��>��
�&�\�\�
)��t�{�{�D�$��>�A�
�&�\�V�
#�����d�D�%�8�A�
�&�\�_�
,��t�1C��J��#<�<�$�T�[�[�$��e�D���"A�$�z�BR�AS� T�U�U�
�&�\�.�
.�!�$�+�+�t�T�5�A�A�
�&�\�]�
*��t�{�{�D�$��>�A��6�t�F�|�n�E�F�F��4��D��$6��d�k�k�4��u�a�@�A��r)r*r+r,r8rfrUr�r�s@rrHrH5s��� �,�%rrHc�.��eZdZ�fd�Z�fd�Zd�Z�xZS)�	Operationc�`��dD]"}dD]}	|||jdg���$t�|�
||||�t	|j
dz|jz�|_d|vxrd|dvxr
d|vxrd|dv|_d|_	d|_
t|d	�y#t$rY��wxYw)
N)�do�dump�event�r<r=�
attributesr
rYr<rZFr6)�
setdefault�KeyErrorr7r8rr@rr�dual_policy�has_ntfr6rH)r(rBr4�	req_value�	rsp_value�moder�rJs       �rr8zOperation.__init__|s����+�D�1�	����J�y�)�4�4�\�2�F�2�,�	�����y�)�<�"�6�#4�#4�s�#:�T�Y�Y�#F�G��� �D�L�D�Y�$�t�*�-D�H� �D�.�F�Y�$�v�,�-F�	
����������k�"�� ����s�B!�!	B-�,B-c���|jt��|js2|jjt|j�z|_y|jjt|j�z|_yrL)	r&r7�is_asyncrBr�rrr6�async_op_prefixr)s �rrfzOperation.resolve�sV�������� ��}�}�!�[�[�2�2�W�T�Y�Y�5G�G�D�N�!�[�[�8�8�7�4�9�9�;M�M�D�Nrc��d|_yrQ)rar's r�mark_has_ntfzOperation.mark_has_ntf�s	����r)r*r+r,r8rfrir�r�s@rrWrW{s���#�,N�rrWc�(��eZdZ�fd�Z�fd�Z�xZS)�
SubMessagec�l��t�|�||�t|jdz|dz�|_y)Nrr)r7r8rr@rr?s   �rr8zSubMessage.__init__�s3���
�����&�"�6�#4�#4�s�#:�T�&�\�#I�J��rc�8��|jt��yrL)r&r7r)s �rrfzSubMessage.resolve�s�������� rr8r�s@rrkrk�s���K�
!�!rrkc���eZdZ�fd�Z�fd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Z�xZS)�Familyc�V��d|_t|d�d|_t|d�d|_t|d�d|_t|d�d|_t|d�d|_t|d�t�|�!||��t|jjd|jd	d
z��|_t|jjd|jd	dz��|_
d
|jvrg|jd
<d|jvr|jd|_nd|j�d�|_|jj!d�r0|jj#d�r|jdd|_y|j|_y)NrEr�rg�mcgrpsrC�hooks)�exclude_opsz
c-family-namer�_FAMILY_NAMEzc-version-name�_FAMILY_VERSION�definitionszuapi-headerzlinux/�.h����)rErHr�rgrqrCrrr7r8rr4r;�fam_key�ver_key�uapi_headerr@�
startswithr�uapi_header_name)r(�	file_namersrJs   �rr8zFamily.__init__�sg��������h�������k�"�#�����'�(������h�������h����
���g��
������<��t�y�y�}�}�_�d�i�i��>O�R`�>`�a�b����t�y�y�}�}�-=�t�y�y��?P�Sd�?d�e�f�����	�	�)�')�D�I�I�m�$��D�I�I�%�#�y�y��7�D��!'����'8��;�D�����&�&�x�0�T�5E�5E�5N�5N�t�5T�$(�$4�$4�Q�r�$:�D�!�$(�O�O�D�!rc�z��|jt��t|j�|_d|j
dvr!t
|j
dd�|_n t
|j
ddz�|_d|j
dvr!t
|j
dd�|_n|j|_|j
jddgi�|_
t�|_dD]l}t�|j|<d	D]N}t�|j||<t�|j||d
<g|j||d<�P�nt�|_t�|_|j!�|j#�|j%�|j'�|j)�|j+�|j-�|j
jdd�|_|j.d
k(r|j1�yy)Nrc�
operationsrz-cmd-�async-prefixzmcast-groupsrr��pre�post�rYrZrz
kernel-policy�split�global)r&r7rr@rEr4rr�rgr;rqrrrr�	root_setsr��_mark_notify�_mock_up_events�_load_root_sets�_load_nested_sets�_load_attr_use�_load_selector_passing�_load_hooks�
kernel_policy�_load_global_policy)r(�when�op_moderJs   �rrfzFamily.resolve�s��������� ��d�o�o�.����D�I�I�l�3�3�$�T�Y�Y�|�%<�]�%K�L�D�N�$�T�Y�Y�v�%6��%@�A�D�N��T�Y�Y�|�4�4�#*�4�9�9�\�+B�>�+R�#S�D� �#'�>�>�D� ��i�i�m�m�N�V�R�L�A����V��
�#�D�#�v�D�J�J�t��)��,0�F��
�
�4� ��)�36�5��
�
�4� ��)�%�0�46��
�
�4� ��)�&�1�*�$�����#'�6�� ���������������� ������#�#�%�����!�Y�Y�]�]�?�G�D�������)��$�$�&�*rc��t||�SrL)r:�r(rTs  r�new_enumzFamily.new_enum�����t�T�"�"rc��t||�SrL)rHr�s  r�new_attr_setzFamily.new_attr_set�r�rc��t||||�SrL)rW)r(rTrbrcs    r�
new_operationzFamily.new_operation�s����t�Y�	�:�:rc��t||�SrL)rkr�s  r�new_sub_messagezFamily.new_sub_message�s���$��%�%rc� �|jdk(S)Nznetlink-raw��protor's rrzFamily.is_classic�s���z�z�]�*�*rc��|jj�D]'}d|vs�|j|dj��)y)N�notify)�msgsrF�opsri�r(rws  rr�zFamily._mark_notifys9���)�)�"�"�$�B��2�~�����H��&�3�3�5�%rc�Z�|jddD]}d|vs�dd|ddii|d<�y)Nr�rrr[r=r]rY)r4r�s  rr�zFamily._mock_up_eventssB���)�)�L�)�&�1�B��"�}��$�b��k�,�&?����4��2rc�n�|jj�D�]\}}d|vr�t�}t�}dD]`}||vr*d||vr#|jt||dd��||vs�6d||vs�>|jt||dd���bd|vr |jt|dd��|d|jvr||d�|j|d<��|j|ddj|�|j|ddj|���y)N�
attribute-setr�r<r]r=r[r\)r��itemsr�updater�)r(�op_namerw�	req_attrs�	rsp_attrsr�s      rr�zFamily._load_root_setss5���9�9�?�?�,�K�G�R��b�(����I���I�)���b�=�Y�"�W�+�%=��$�$�S��G��Y�)?��)M�%N�O��b�=�W��7��%;��$�$�S��G��W�)=�l�)K�%L�M�	*�
�"�}�� � ��R��[��%>�!?�@��/�"�$�.�.�8�BK�V_�6`����r�/�2�3����r�/�2�3�I�>�E�E�i�P����r�/�2�3�G�<�C�C�I�N�%-rc�D�t|jj��}t�}t	|�dz}t|�D]�}t	|�dk(ry|j
d�}d}|j|j�D]m\}}d|vr|d}nd|vr
|j}n�"|j|jr�<||vs�A|jj
|�}	|	|j|<d}n|r|j|���|j|���y)N�rTr3r4F)
rrr��keysrr2r��poprMr��sub_messager��addr�)
r(�pns_key_list�pns_key_seen�roundsr
r�finishedr�rIr}s
          r�_sort_pure_typeszFamily._sort_pure_types%s���D�4�4�9�9�;�<���u���\�"�a�'���v��A��<� �A�%���#�#�A�&�D��H��>�>�$�/�5�5�7���4�&�$�.�!�"5�6�F�"�d�*�!�-�-�F���+�+�F�3�=�=����-�!�5�5�9�9�$�?�F�5;�D�,�,�T�2�$�H��!8�"�� � ��&��#�#�D�)�3rc��t�}|d}||jvr:||jvr:t||||j	d���|j|<ntd|����d|vr7||jvrtd��|j
t|d��n|ddk(r|jd	�|j|j|�|S)
Nr3�fixed-header)rrz2Using attr set as root and nested not supported - r�z8Inheriting members to a space used as root not supportedr0rR�idx)	rr�r�rr;rer�r�r+)r(r��inheritrIs    r�_load_nested_set_nestzFamily._load_nested_set_nestEs����%���)�*������'��T�5�5�5��4��7�(,����(@�B��(�(��0��P�QW�PX�Y�Z�Z��4������'�� Z�[�[��N�N�3�t�L�1�2�3�
�&�\�_�
,��K�K���� � ��(�6�6�w�?��
rc���|j|d}|j}g}|jj�D]N\}}||d�}d|vr|d|dd�z}d|vr |d|diz}nd|vr|d|dd�z}nd	|d
<|j	|��Pt|||jdz|jzdz|d��|j|<||jvrt|||�
�|j|<|S)Nr4)rrbr�r�)r0r3r�r�)r0r}rPr0r)rzname-pfxr])r)	�sub_msgsr�formatsr�r�rHrMr�r)r(r�rrIrr�fmtr9s        r�_load_nested_set_submsgzFamily._load_nested_set_submsgZs1�����t�M�2�3�����������-�-�/�I�D�#��&*��D��#�%��"�),�_�)=����"�S�(��n�c�.�.A�C�C�D��3�&��$�!�.�1����
 &��V���L�L���'0�*")����	�	�C��$�)�)�3�c�9��0
�"����v����1�1�1�/5�d�F�6�/R�D�$�$�V�,��
rc�8�t|jj��}t|jj��}t	|�r�|jd�}|j|j�D]Y\}}d|vr|j|�}nd|vr|j|�}n�3||vs�8|j|�|j|��[t	|�r��|jj�D]�\}}|j|j�D]�\}}d|vr|d}nd|vr
|j}nd}|s�&||dvrd|j|_||dvrd|j|_|j!�s�m|jj#|�}	d|	_����|j'�t)|jj��D�]\}
}|j|
j�D]�\}}|
|j*vrd|_d|vr|d}
nd|vr
|j}
n�7|j*j|
�|jj#|
�}	|	s�p|	j,s%|j*j/|	j*�|	xj|jzc_|	xj|jzc_|j!�s��d|	_����|j'�y)Nrr3r4r<Tr=)rrr�r�rr2r�rMr�r�r�r�r�r�r�r<r=rhr;rr��reversedrr�r�)r(�attr_set_queue�
attr_set_seen�a_setr9r�rI�root_set�
rs_members�childr:r}r
�
child_names              rr�zFamily._load_nested_sets�s����d�n�n�1�1�3�4���D�N�N�/�/�1�2�
��.�!�"�&�&�q�)�E�"�n�n�U�3�9�9�;�
��d�&�$�.�!�7�7��=�F�"�d�*�!�9�9�$�?�F����.�"�)�)�&�1�!�%�%�f�-�<��.�!�%)�N�N�$8�$8�$:� �H�j�"�n�n�X�6�<�<�>�
��d�&�$�.�!�"5�6�F�"�d�*�!�-�-�F�!�F���z�)�4�4�CG��0�0��8�@��z�'�2�2�AE��0�0��8�>��(�(�*� $� 8� 8� <� <�V� D��-1��*�!?�%;�&	
����!)��)A�)A�)G�)G�)I� J��H�f��>�>�(�3�9�9�;���4��v�1�1�1�'+�F�$�&�$�.�!%�&9�!:�J�"�d�*�!%�!1�!1�J���"�"�&�&�z�2��0�0�4�4�Z�@��� �?�?��*�*�1�1�%�2C�2C�D��M�M�V�^�^�3�M��K�K�6�<�<�/�K��(�(�*�-1��*�'<�!K�,	
���rc��|jj�D]n\}}|jr(|j�D]\}}|j	��|j
s�G|j�D]\}}|j
���p|jj�D]Y\}}|j|j�D]4\}}||dvr|j	�||dvs�%|j
��6�[y)Nr<r=)	r�r�r<r�rRr=rTr�rM)r(r
r}r�r�r�r9r�s        rr�zFamily._load_attr_use�s����1�1�7�7�9�I�A�v��~�~�$�0�0�2�F�A�s��O�O�%�3��|�|�$�0�0�2�F�A�s��M�M�O�3�:�%)�N�N�$8�$8�$:� �H�j�"�n�n�X�6�<�<�>�
��d��:�i�0�0��$�$�&��:�g�.�.��N�N�$�	?�%;rc����fd�}|�D]�\}}�j|j�D]�\}}d|vr|d}nd|vr
|j}n�"�jj	|�}|j�D]U}|j�j|vr.�j||j}	|j|	��Ltd������y)Nc3��K�t�jj��D]\}}||f���
�jj�D]\}}|df���
y�wrL)r�r�r�r�)�k�vr
r(s   �r�all_structsz2Family._load_selector_passing.<locals>.all_structs�sW����� ��!9�!9�!?�!?�!A�B���1���d�
�C����,�,�.���1���g�
�/�s�AAr3r4z7Passing selector thru more than one layer not supported)	rMr�r�r�r;r�rrre)
r(r�r:r}r
r�r�r�r��sel_attrs
`         rr�zFamily._load_selector_passing�s����	�!,�
��H�f��>�>�(�3�9�9�;���4�&�$�.�!%�&9�!:�J�"�d�*�!%�!1�!1�J���0�0�4�4�Z�@�� %� 8� 8� :�H��}�}����x�(@�@�#'�>�>�(�#;�H�M�M�#J�� �)�)�(�3�'�(a�b�b�!;�<�!.rc��t�}d}|jj�D]k\}}|s�	d|vr�|�|d}||dk7rtd��dD]?}||vs�||j	d�}|s�|j|j	dg���A�mg|_||_|j|D]"}||vs�|jj|��$y)Nr�z1For a global policy all ops must use the same setr�r<r])
rr�r�rer;r��
global_policy�global_policy_setrMr�)r(�
global_set�
attr_set_namer�rwr�r�r9s        rr�zFamily._load_global_policy�s����U�
��
��8�8�>�>�+�K�G�R����b�(���$� "�?� 3�
���?� 3�3�� S�T�T�)���b�=��W�+�/�/�)�4�C��"�)�)�#�'�'�,��*C�D�	*�,�" ���!.����N�N�=�1�D��z�!��"�"�)�)�$�/�2rc�H�|jj�D]�}dD]~}||vr�dD]r}|||vr�|||}||j||dvr�+|j||dj|�|j||dj	|��t����y)Nr�r�rrr)r�rFrrr�r�)r(rwr�r�rs     rr�zFamily._load_hookss����(�(�/�/�#�B�)���"�$��+�D��2�g�;�.� ��g�;�t�,�D��t�z�z�$�/��8��?�?� ��J�J�t�$�W�-�e�4�8�8��>��J�J�t�$�W�-�f�5�<�<�T�B�,�*�$r)r*r+r,r8rfr�r�r�r�rr�r�r�r�r�r�r�r�r�r�r�r�r�s@rroro�se���4�@''�R#�#�;�&�+�6��O�**�@�*%�N> �@%� c�00�4Crroc� �eZdZdd�Zd�Zd�Zy)�
RenderInfoNc��||_|j|_||_||_||_|r|jnd}d|_|rU|jrI|j|jk7r0|j�rdt|��d�|_ntd��d|_d|_|dk7rMd|vrId|vr7d	|dvd	|dvk7rd|_n.d	|dvr'|dd	|dd	k7rd|_nd|_d|_||_
|js
|d
|_
d|_|rt|j�|_n%t|�|_||j"vrd|_||_t'�|_|dk(rd|vrdnd}dD]?}|s�g}	|||vr|||d
}	t+||j||	��|j(|<�A|dk(r-t+||j||dd
��|j(d	<yy)Nzys->family->hdr_lenrr��&Per-op fixed header not supported, yetTFrYrZr=r�r�r\r])rrr[)rB�nlibr�r�r�rwr�
fixed_hdr_lenrrre�type_consistent�type_onesider:�type_name_conflictrr�rCr�rr}r)
r(r�rBr�rwr�r:�	fixed_hdr�op_dirrs
          rr8zRenderInfo.__init__s������'�'��� ��
�������')�B�O�O�t�	�2���
�"�/�/����&�"5�"5�5��$�$�&�+9�'�)�:L�9M�Q�)O�D�&�#�$L�M�M� $���!����d�?�v��|��r�z��r�$�x�'�W��6�
�-B�C�+0�D�(���4��(�R��X�g�->�"�V�*�W�BU�-U�+0�D�(�'+��$�$(��!� ��
��}�}���/�D�M�"'���
�$�R�W�W�-�D�N�$�X�.�D�N��6�=�=�(�*.��'�����f����h��"�b�j�d�f�G�*�F���	��R��[�(� "�7��F� 3�L� A�I�&,�V�T�]�]�:C�7@�'B����F�#�+��g��#)�&�$�-�-�7@�46�w�K��4M�$O�D�K�K�� �rc��t|j|j�dk(xr|jdjduS)Nrr<)r2r}rrr$s  r�
type_emptyzRenderInfo.type_emptyOs?���4�;�;�s�#�-�-�.�!�3�8��K�K�	�"�/�/�4�7�	8rc�f�|jdk(xr!|dk(xr|jj�S)NrYr<)r�rBr)r(r�s  r�
needs_nlflagszRenderInfo.needs_nlflagsSs-���|�|�t�#�[�	�Y�(>�[�4�;�;�CY�CY�C[�[rrL)r*r+r,r8r�r�r&rrr�r�s��:O�x8�\rr�c�~�eZdZdd�Zd�Zd�Zed��Zdd�Zd�Z	dd�Z
dd	�Zdd
�Zdd�Z
d�Zdd
�Zd�Zd�Zd�Zy)�
CodeWriterNc���||_||_d|_d|_d|_d|_d|_|� tjj|_
ytjd�|_
||_
y)NFr�w+)r��
_overwrite�_nl�
_block_end�
_silent_block�_ind�_ifdef_block�os�sys�stdout�_out�tempfile�NamedTemporaryFile�	_out_file)r(r��out_file�	overwrites    rr8zCodeWriter.__init__Xsc����	�#���������"�����	� ��������
�
�D�I� �3�3�D�9�D�I�%�D�Nrc�$�|j�yrL)�close_out_filer's r�__del__zCodeWriter.__del__gs�����rc��|jtjjk(ry|jj	�|j
s`tjj|j�r7tj|jj|jd��ryt|jd�5}|jjd�tj|j|�|jj!�ddd�tjj|_y#1swY�)xYw)NF)�shallowr�r)r�r�r�r��flushr��path�isfiler��filecmp�cmpr�open�seek�shutil�copyfileobj�close)r(r�s  rr�zCodeWriter.close_out_filejs����9�9����
�
�%���	�	�������2�7�7�>�>�$�.�.�#A��{�{�4�9�9�>�>�4�>�>�5�I��
�$�.�.�$�
'�8��I�I�N�N�1�����t�y�y�(�3��I�I�O�O��(��F�F�M�M��	�	(�
'�s
�AE�Ec�p�|jd�xs$|jd�xs|jd�S)Nr��while�for)r})�clsr�s  r�_is_condzCodeWriter._is_condxs.�����t�$�Z�����(@�Z�D�O�O�TY�DZ�Zrc�n�|jrId|_|jd�rd|z}n+|jjd|jzdz�|j
r"|jjd�d|_|j}|ddk(r|d	z}|jr|d	z
}|jd
�xrtj|�|_|xj|j�dk(zc_|ddk(rd}|r||z
}|jjd|z|zdz�y)
NFr�z} �	�}
�
r��:rr�r�#)r�r}r��writer�r�r�rr�r�strip)r(r��add_ind�inds    rr�zCodeWriter.p|s���?�?�#�D�O����v�&��d�{���	�	����t�y�y� 0�5� 8�9��8�8��I�I�O�O�D�!��D�H��i�i����8�s�?��1�H�C�����1�H�C�!�]�]�3�/�M�J�4G�4G��4M������d�j�j�l�f�4�4����7�c�>��C���7�N�C��	�	����s�
�T�)�D�0�1rc��d|_yrQ)r�r's rr�z
CodeWriter.nl�s	����rc�d�|r|dz}|j|dz�|xjdz
c_y)Nr�r�r)r�r��r(r�s  rr�zCodeWriter.block_start�s+����#�:�D����t�c�z���	�	�Q��	rc��|r|ddvrd|z}|xjdzc_d|_|sB|jr.|jj	d|jdzzdz�d|_y|jd	|z�y)
Nr>r�r�r�rFrrTr�)r�r�r�r�rr�rs  rr�zCodeWriter.block_end�sp���D��G�:�-���:�D��	�	�Q��	���������	�	�����	�	�A�
� 6�� >�?�"�D�O��F�F�3��:�rc���|j�}d}|D]>}t|�t|�zdk\r|j|�d}|r|dz
}|d|zz
}�@|j|�y)Nr��Oz  r�)r�r2r�)r(�doc�indent�wordsr��words      r�write_doc_linezCodeWriter.write_doc_line�sh���	�	������D��4�y�3�t�9�$��*����t������D�L�D��C�$�J��D�
�	
���t�rc� �|sdg}|r6|jd�|jd|z�|jd�|}|ddk7r|dz
}||�dd	j|��d
|��z
}t|�dkr|j|�y|}t|�dkDr|j|�d
}n
|ddk7r|dz
}||dzz
}dt|�dzzdt|�dzzz}t|�t|�z
}	||dz
}d}
|
t|�krdt|�t||
�z}|ddk(r||	z
}|dkDr|j|dz�|}n|d	z
}|||
z
}|
dz
}
|
t|�kr�d|j|d
z|z�y)N�void�/*z * rr�r�r��(r�r��P�r[r�rr�Lr�)r�r�r2)r(�qual_retrr�r r^�oneliner�r�	delta_indr��next_lens            r�write_func_protzCodeWriter.write_func_prot�s�����8�D���F�F�4�L��F�F�5�3�;���F�F�5�M����B�<�3���s�N�G��d�V�1�T�Y�Y�t�_�-�Q�v�h�7�7���w�<�"���F�F�7�O�����q�6�A�:��F�F�1�I��A�
�b�\�S�
 �
��H�A�	�T�C�Z����c�!�f��k�"�S�C��F�Q�J�%7�7����F�S��X�%�	�	�T�!�W���
���#�d�)�m��1�v��D��G��,�H���t�t�|��I�%���"�}����q�3�w�����T�	��
��a��L�A�
��F�A��#�d�)�m�	
���q�3�w��� rc��|syt|�tur|g}|jtd��|D]}|j	|��|j�y)NT)r%�reverse)r0r]�sortr2r�r�)r(r�r�s   r�write_func_lvarzCodeWriter.write_func_lvar�sJ�����
��s�"�$��J����C���.��C��F�F�3�K�����	rc��|j|||��|j�|j|��|D]}|j|��|j	�y)N)r-rr�)r�)r1r�r5r�r�)r(r-rr�r�r�r�s       rr�zCodeWriter.write_func�sS�����h�T���E��������
��3��D��F�F�4�L�����rc�v�d}|D]"}t|d�|kDs�t|d�}�$|dzdzdz}|D]�}d|dz}|d|t|d�z
dzdzzz
}t|d�tur|t|d�z
}n"t|d�tur|d|dzdzz
}|j	|���y)Nrr+�#define r�r�")r2r0rr]r�)r(�defines�longest�definer�s     r�writes_defineszCodeWriter.writes_defines�s������F��6�!�9�~��'��f�Q�i�.����a�K�A�%��*���F���q�	�)�D��D�W�s�6�!�9�~�5��9�a�?�@�@�D��F�1�I��#�%���F�1�I��&���f�Q�i��C�'���f�Q�i��#�-�-���F�F�4�L�rc	�&�t|D�cgc]}t|d���c}�}|dz
}|dzdzdz}|D]R}d|dz}|d|t|d�z
dz
dzdzzz
}|dt|d�zdzz
}|j|��Tycc}w)	Nrrr+r�rr9z= r�)r-r2r]r�)r(r�r�r<r�r�s      r�write_struct_initzCodeWriter.write_struct_inits����'�2�'�Q�s�1�Q�4�y�'�2�3���1����a�K�A�%��*���C���Q��<�D��D�W�s�3�q�6�{�2�Q�6��:�q�@�A�A�D��D�3�s�1�v�;�&��,�,�D��F�F�4�L�	��3s�Bc���d}|rdt|�z}|j|k(ry|jr!|jd|jzdz�|r|jd|z�||_y)N�CONFIG_�
#endif /* rz#ifdef )rr�r�)r(�config�
config_options   r�ifdef_blockzCodeWriter.ifdef_blocksj���
��%����7�M����
�-������F�F�<�$�"3�"3�3�e�;�<���F�F�9�}�,�-�)��rrQ)r�r[�T)NNr[rE)r*r+r,r8r�r��classmethodrr�r�r�r�r$r1r5r�r>r@rFr&rrr�r�Ws_��
&��"��[��[�2�2���
�(!�T
��
��*rr�>
�s8rk�s16rlrmrnrorp�sint�uint�_rsp�_reqr[)r=r<r[�_list�_ntf)rYrZr�r[>"rYr�r
r�autor��case�charr�r#�goto�longr&�breakr_�float�short�unionr�double�extern�inline�return�signed�sizeof�staticr}�switchrX�typedef�continue�register�unsigned�volatilec��|dk(ry|dk(ry|S)Nr=r<r&�r�s r�rdirrjRs���G����I����rc�b�d|j��}|jsnz|jdk(r|t|�z
}n]|dk(r|dz
}|jsG|dz
}nA|jr'|r|t|�z
}n%|t
|jz
}n|dz
}||rdndz
}|jj�|��S)Nr
rYr<rO�_dumprNrP)r�r��direction_to_suffixr�r��op_mode_to_wrapperrBrE)ryr�r�r^s    rr�r�Zs��������
�F�
�:�:��	���t�	��(��3�4�5���	�!��f��F��?�?��'�!���!�!���!4�Y�!?� @�A�F��0����<�<�F��&� ���U�'��7���i�i���
��x�(�(rc�$�dt|||����S)Nr5r��r�)ryr�r�s   rr�r�ss��
�Y�r�9�E�:�;�<�<rc��|rdnd}|jj}|jdk(r|dz
}dg}d|j|jvr,|jt	||��d�t
|dd�z�d	}d
|j|jvrt	|t
|���d�}|jj|||||��y)Nr�r[rZrlzstruct ynl_sock *ysr<r�rrr=)r r^)	rwrr�r�r�rmrjr�r1)ryr��	terminater r^�fnamer��rets        r�print_prototyperuws����S�2�F��E�E���E�	�z�z�V��
����!�"�D��B�E�E�"�*�*�%�%����y��Y�/�0��3�9L�Y�9W�XY�XZ�9[�8\�]�^�
�C��"�%�%��
�
�#�#��2�t�I��/�0��3���E�E���#�u�d��F��Crc�:�t|d|jd��y)Nr<r )r )rurw�rys r�print_req_prototyperx�s���B�	�r�u�u�U�|�4rc��t|d�y�Nr<)rurws r�print_dump_prototyper{�s���B�	�"rc�(�|jd|j�d���d}|j�D]B\}}d}|jdk(rd|j�d�}|jd	|||fz�|d
z
}�D|j
d��|j�|jd|j�d
���|jd|d
z
�d��|jd|j�d��|j
d��|j�y)N�const struct ynl_policy_attr z_policy[] =r�rr[r�z
 .nest = &�_nest,z2[%d] = { .type = YNL_PT_SUBMSG, .name = "%s",%s },rr��const struct ynl_policy_nest �_nest =�.max_attr = r��	.table = �_policy,)r�rr�r0rAr�r�r�)r�r}r�rr�r�s      r�put_typol_submsgr��s
���N�N�7��8J�8J�7K�;�W�N�X�	�A��'�'�)�	��c����8�8�v���� 6� 6�7�v�>�D�
���
A���t�_��	�	�Q���
*��L�L�c�L���E�E�G��N�N�7��8J�8J�7K�7�S�N�T��D�D�<��A��w�a�	 �!��D�D�9�V�'�'�(��	1�2��L�L�c�L���E�E�Grc�B�|jd|j�d��y)Nz$extern const struct ynl_policy_nest r�)r�r)r�r}s  r�
put_typol_fwdr��s���D�D�/��0B�0B�/C�6�	J�Krc�*�|jr
t||�y|jj}|j	d|j
�d|�d���|j
�D]\}}|j|��|jd��|j�|j	d|j
�d���|jd|�d	��|jd
|j
�d��|jd��|j�y)Nr}z_policy[z + 1] =r�r�rr�r�r�r�r�)rr�r:rJr�rr�r�r�r�r�)r�r}�type_maxr
r�s     r�	put_typolr��s���
�}�}���V�$�����'�'�H��N�N�7��8J�8J�7K�8�T\�S]�]d�e�N�f��$�$�&���3����r��'��L�L�c�L���E�E�G��N�N�7��8J�8J�7K�7�S�N�T��D�D�<��z��	#�$��D�D�9�V�'�'�(��	1�2��L�L�c�L���E�E�Grc	��d|��g}|r|jdz|zg}|jd|�d�|�|j�|r&|jdk(r|j	|�d|�d��|j	d|�d	|�d
|�d��|j	d�|j	d
|�d|�d��|j�|j
�y)Nzint r�rO�_strr$z = ffs(z) - 1;r�z < 0 || z >= (int)YNL_ARRAY_SIZE(r��return NULL;�return r�z];)r'r1r�r0r�r�r�)r�r�map_name�arg_namer#r�s      r�_put_enum_to_str_helperr��s����8�*���D������$�x�/�0�����~�+��d�';�T�B��N�N����	�	�W�$�
����z���
�&�
1�2��D�D�4��z��(��+C�H�:�R�	P�Q��D�D����D�D�7�8�*�A�h�Z�r�	*�+��L�L�N��E�E�Grc�J�|jd|j�d�dgd��y)NrO�_op_strzint opr��r^)r1rE�rBr�s  r�put_op_name_fwdr��s'�����~�&�-�-���'@�8�*�UX��Yrc�F�|j�d�}|jd|�d���|jj�D]�\}}|js�|j
|j|k7r|j
d|�d���E|j|jk(r#|j
d|j�d|�d	����|j
d|j�d|�d	����|jd
��|j�t||jdz|d�y)
N�
_op_strmap�static const char * const �[] =r�z	// skip "z", duplicate reply valuer��] = "�",r��_oprw)rEr�r�r�rc�rsp_by_valuer�rbr6r�r�r�)rBr�r�r�rws     r�put_op_namer��s����-�-��
�+�H��N�N�4�X�J�d�C�N�D��{�{�(�(�*����
�<�<��"�"�2�<�<�0�B�6����y��	�)A�B�C���|�|�r�|�|�+����q�����e�G�9�B�7�8����q�����e�G�9�B�7�8�+��L�L�c�L���E�E�G��B��
�
�� 5�x��Frc�h�|jdzg}|jd|j�d�|d��y)Nz valuerOr�r�r�)r'r1r)rBr�r#r�s    r�put_enum_to_str_fwdr��s8���N�N�X�%�&�D����~�$�*:�*:�);�4�'@�$�s��Src�\�|j�d�}|jd|�d���|jj�D].}|j	d|j
�d|j�d���0|jd��|j�t||j|d	|�
�y)N�_strmapr�r�r�r�r�r�r�r!)r#)
rr�r5rFr�r!rr�r�r�)rBr�r#r�rAs     r�put_enum_to_strr��s����"�"�#�7�+�H��N�N�4�X�J�d�C�N�D����$�$�&��
���q����
�U�5�:�:�,�b�
1�2�'��L�L�c�L���E�E�G��B�� 0� 0�(�G�$�Orc���g}d}d}|j�D]-\}}||jdk(z}||j�dk(z}�/|r|jd�|r|jd�|S)NFrRr�zstruct nlattr *array;r�)r�r0r}r�)r}r��	has_array�	has_countr
r�s      r�put_local_varsr��s���J��I��I��$�$�&���3��S�X�X��0�0�	��S�&�&�(�G�3�3�	�'�����1�2�����+�,��rc��dd|j�d�g}|jjd|j�d�||��y)Nzstruct nlmsghdr *nlhzunsigned int attr_type�objr�_putr�)rr�r1r)ryr}r^�	func_argss    r�put_req_nested_prototyper�sN��'�)��O�O�$�C�(�*�I��E�E���%�F�$6�$6�#7�t�!<�i�!'��)rc�p�g}g}|j�"|jd�|jd�|jrK|jd�d|j�d�}|jd|�d��|jd|�d��|t|�z
}t	||d	�
�|j
j
�|j
j|�|D]}|j
j|��|j�D]\}}|j|d��|j�|j
jd�|j
j�|j
jd
�|j
j�|j
j�y)Nzstruct nlattr *nest;z+nest = ynl_attr_nest_start(nlh, attr_type);�
void *hdr;zsizeof(r�z&hdr = ynl_nlmsg_put_extra_header(nlh, r�zmemcpy(hdr, &obj->_hdr, r[r�r�zynl_attr_nest_end(nlh, nest);�	return 0;)
rr�rr�r�r�r�r5r�r�r�r�r�)ryr}r�r�r�r�r
r�s        r�put_req_nestedr�sb���J��J�
�}�}�����0�1����G�H�
������,�'��f�1�1�2�!�4�	����B�9�+�R�P�Q����4�Y�K�r�B�C��.��(�(�J��R���3��E�E�����E�E���*�%���
������
���$�$�&���3����R���'��}�}��
�����/�0��E�E�H�H�J��E�E�G�G�K���E�E�O�O���E�E�H�H�Jrc
��|jr|dgz
}|jr |jrd|j�d�}nhd}ned}|jj|jjk7r6|jj	�rd|j�d�}ntd��t
�}t
�}d}t
�}|j�D]�\}	}
|
d	d
k(r�d|
vr�|
ddvr1|jd
|
j�d��|j|	�nM|
dtvr1|jd
|
j�d��|j|	�ntd|
d����d|
vr|j|	�|d|
vz}|d|
vz}	|
j|d�\}}}||rt
|�n	t
�z}��|t|�z
}|s|r|jd�|r"|jd�|jd�||z}
t|
�D]$}	|jd||	j�d���&|jj!�|jj#|�|D]}|jj%|��|jj'�|j(D]$}	|jj%d|	�d|	�d���&|jr�|jr|jj%d�nQ|jj	�r|jj%d�n|jj%d�|jj%d|j�d ��t|
�D]p}	||	}
|jj%d!|
j�d"��|jj%d#|j*j,�d$|
j,�d%���r|jj'�|jj!|�&�|jj%d'�|jj'�d(}|j�D]\}}	|	j/|d)|�*�}||z}�!|jj1�|jj'�t|�D�]�}	||	}
|jj!d+|
j�d"��&�|jj%d|
j�d,|
j�d-|
j�d ��|jj%d.|
j�d/|
j�d��|jj%d0�d|
vr)|jj%d1|
j2�d2��|jj!d3|
j�d"��&�d|
vrn|jj%d4|
j�d5��|jj%d6|
j2�d7��|jj%d8�n�|
j4tvr7|jj%d|
j�d9|
j4�d:��nh|
j4d;k(rHd<|
j6vr:|jj%d=|
j�d>|
j6d<�d?��ntd@|
dA����|jj%dB�|jj1�|jj1����|jj'�t|�D�]A}	||	}
|jj!d+|
j�d"��&�|jj%d|
j�d,|
j�d-|
j�d ��|jj%d.|
j�d/|
j�d��|jj%d0�d|
vr)|jj%d1|
j2�d2��|jj!|�&�|jj!dC|
j8�d"��&�d|
vro|jj%d4|
j�d5��|jj%d6|
j2�dD��|jj%d8��n,|
j:tvr8|jj%d|
j�d9|
j:�d:���n�|
j:d;k(r�dE|
vr�|jj%dF�|jj'�|jj%dG|
j�dH��|jj%dI|
j�dJ��|jj%dK|
j�dL���n|
j:dMk(r�|jj%dN�|jj'�|jj%dO�|jj%d|
j�dP��|jj%d|
j�dQ��|jj%d=|
j�dR��|jj%d|
j�dS��ntdT|
j:�dU���|jj%dB�|jj1�|jj1�|jj1���D|jj'�|jr|jj%dV�n|jj%dW�|jj1�|jj'�y#t
$rY���wxYw)XNr�z2ynl_attr_for_each_nested_off(attr, nested, sizeof(r�z&ynl_attr_for_each_nested(attr, nested)z7ynl_attr_for_each(attr, nlh, yarg->ys->family->hdr_len)z$ynl_attr_for_each(attr, nlh, sizeof(r�Fr0rRr�>r�r�r�z = NULL;zNot supported sub-type rSr3r4r[zint i;�struct ynl_parse_arg parg;�parg.ys = yarg->ys;r�z = 0;zdst->rAr�zhdr = ynl_attr_data(nested);zhdr = ynl_nlmsg_data(nlh);z<hdr = ynl_nlmsg_data_offset(nlh, sizeof(struct genlmsghdr));zmemcpy(&dst->_hdr, hdr, sizeof(r�z	if (dst->r�z9return ynl_error_parse(yarg, "attribute already present (r�z)");r�z(unsigned int type = ynl_attr_type(attr);T�dst)r�zif (n_z = calloc(n_z, sizeof(*dst->zdst->_count.r�zi = 0;r�r�z$ynl_attr_for_each_nested(attr, attr_zparg.data = &dst->z[i];r�z)_parse(&parg, attr, ynl_attr_type(attr)))r�z[i] = ynl_attr_get_r?r�rXzmemcpy(dst->z[i], ynl_attr_data(attr), r�z#Nest parsing type not supported in rzi++;zif (ynl_attr_type(attr) == z_parse(&parg, attr))r}z%size_t len = ynl_attr_data_len(attr);zif (len > sizeof(dst->z[0]))zlen = sizeof(dst->z[0]);z
memcpy(&dst->z[i], ynl_attr_data(attr), len);r�rerdz2[i] = malloc(sizeof(struct ynl_string) + len + 1);z[i]->len = len;z'[i]->str, ynl_attr_get_str(attr), len);z[i]->str[len] = 0;zNest parsing of type r�r��return YNL_PARSE_CB_OK;)rrIrwrBrrerr�r�rEr�r�r�rrr)r�r�r5r�r�rr:rr�r�rAr�r1r6r0)ryr}r�r��	iter_line�indexed_arrays�multi_attrs�
needs_parg�var_setr��aspecr
�l_vars�	all_multir�r��goods                 r�_multi_parser�1s�	��
����|�n�$�
�
�}�}����L�V�M`�M`�La�ac�d�I�@�I�M�	�
�5�5������!7�!7�7��y�y�#�#�%�B�6�CV�CV�BW�WY�Z�	�� H�I�I��U�N��%�K��J��e�G��(�(�*�
��U���=�O�+�
�e�0C��Z� �$6�6��!�!�$>�u�|�|�n�H�"U�V��"�"�3�'��z�"�g�-��!�!�$>�u�|�|�n�H�"U�V��"�"�3�'��"9�%�
�:K�9L� M�N�N��5� ��O�O�C� ��)�U�2�2�
��m�u�,�,�
�	� �?�?�2�r�2�L�A�q�&��f�s�6�{�#�%�7�G�#+�(�$�w�-��J������(�#�����6�7����/�0���,�I��i� �����O�F�3�K�,>�,>�+?�u�E�F�!��E�E�����E�E���*�%���
������
���E�E�H�H�J�����
�����%��u�C��u�A�&�'� �����=�=��E�E�G�G�2�3�
�Y�Y�
!�
!�
#��E�E�G�G�0�1��E�E�G�G�R�S�
�����1�&�2E�2E�1F�c�J�K��i� ���s���
�����)�E�L�L�>��+�,�
�����K�F�O�O�L`�L`�Ka�ab�ch�cm�cm�bn�nr�s�t�!�
�E�E�H�H�J��E�E���9��%��E�E�G�G�6�7��E�E�H�H�J��E��$�$�&���3��|�|�B��U�|�3��
�T����'�
�E�E�O�O���E�E�H�H�J��n�%���s���
���������~�Q�7��8�
�����%����~�\�%�,�,���u�|�|�n�\_�`�a�
�����,�u�|�|�n�E�%�,�,��q�A�B�
��������%�'��E�E�G�G�)�%�*B�*B�)C�6�J�K�
�����!E�e�l�l�^�ST�U��V��%�'��E�E�G�G�(�����d�;�<��E�E�G�G�d�5�3�3�4�4]�^�_��E�E�G�G�0�1�
�^�^�w�
&��E�E�G�G�e�E�L�L�>�)<�U�^�^�<L�G�T�U�
�^�^�x�
'�K�5�<�<�,G��E�E�G�G�l�5�<�<�.�0J�5�<�<�Xc�Kd�Je�eg�h�i��A�%��-��Q�R�R�
�������
������
������/&�0�E�E�H�H�J��k�"���s���
���������~�Q�7��8�
�����%����~�\�%�,�,���u�|�|�n�\_�`�a�
�����,�u�|�|�n�E�%�,�,��q�A�B�
��������%�'��E�E�G�G�)�%�*B�*B�)C�6�J�K�
�����y��)�
�����!<�U�_�_�<M�Q�O��P��%�'��E�E�G�G�(�����d�;�<��E�E�G�G�d�5�3�3�4�4H�I�J��E�E�G�G�0�1�
�Z�Z�7�
"��E�E�G�G�e�E�L�L�>�)<�U�Z�Z�L��P�Q�
�Z�Z�8�
#��E�(9��E�E�G�G�;�<��E�E�H�H�J��E�E�G�G�,�U�\�\�N�%�@�A��E�E�G�G�(�����e�<�=��E�E�G�G�m�E�L�L�>�1P�Q�R�
�Z�Z�8�
#��E�E�G�G�'�(��E�E�H�H�J��E�E�G�G�U�V��E�E�G�G�e�E�L�L�>�)[�\�]��E�E�G�G�e�E�L�L�>��9�:��E�E�G�G�l�5�<�<�.�0W�X�Y��E�E�G�G�e�E�L�L�>�);�<�=��3�E�J�J�<�?Q�R�S�S�
�������
������
������
������G#�H�E�E�H�H�J�
�}�}�
�������
�����)�*��E�E�O�O���E�E�H�H�J��q�	��	�s�0q<�<	r	�r	c�T�t||d��d}d|j�|�d�dh}|j�D]5\}}|j||�\}}}||rt	|�n	t	�z}�7|j
j
�|j
jt|��|j
jd�|j
j�d}|j�D]�\}}|rd	nd
}	d}|j
j
|	�d|�d
���|j||�\}
}}|xsgD]}|j
j|��|
D]}|j
j|��|j�dk(r+|j
j|�d|j�d��|j
j���|j
jd�|j
j�|j
j�y)Nr[r�r�z#const struct nlattr *attr = nested;z = yarg->data;r�r�Tr�r�Fz (!strcmp(sel, "z"))r�r|r�r�r�)�parse_rsp_nested_prototyperr�r�rr�r�r5rrr�r�r}rEr�)
ryr}r�r�r
r�r�r�rr�r�r�r�s
             r�parse_rsp_submsgr��s����r�6�"�5�
�C�7��_�_�%�c�U�.�9�.�0�J��$�$�&���3��}�}�R��-���1�f��V�c�&�k���6�
�'��E�E�����E�E���$�z�*�+��E�E�G�G�!�"��E�E�H�H�J��E��'�'�)�	��c��T�	����
�����"��%5�d�V�3�?��@�#&�=�=��S�#9� �	�:�q��$�"�$�D��E�E�G�G�D�M�%��D��E�E�G�G�D�M������)�+��E�E�G�G�s�e�;�s�z�z�l�%�8�9�
������*��E�E�G�G�K���E�E�O�O���E�E�H�H�Jrc�P�ddg}|j�D] }|jd|jz��"|jr|j	dd�|j
D]}|jd|z��|jjd|j�d�||�	�y)
N�struct ynl_parse_arg *yargzconst struct nlattr *nestedzconst char *_sel_rzconst char *selr�r�_parser�)	r�r�rr�insertrr�r1r)ryr}r^r�r�r�s      rr�r��s���-�.�0�I��(�(�*�����,�s�x�x�7�8�+�
�}�}�����-�.���������C��(� ��E�E���%�F�$6�$6�#7�v�!>�	�!'��)rc��|jrt||�St||d��d|j�d�g}g}|j	�rt||||�y|jj�|jjd�|jj�|jj�y)Nr[r��const struct nlattr *attr;�dst = yarg->data;r�)rr�r�rr�r�r�r�r�r�r�)ryr}r�r�s    r�parse_rsp_nestedr�	s���
�}�}���F�+�+��r�6�"�5�.��_�_�%�%6�7�9�J��J�
�����R���Z�8�	������
�������
������
�����
rc�*�d|j|jvr|jdk7ryddg}t|d|���d�dg}dg}|jj	d	t|d|���d
�|�|jdj�rt||jd||�y|jj�|jjd�|jj�|jj�y)Nr=r[zconst struct nlmsghdr *nlhr�r�z *dst;r�r�rr�r�)
rwr�r�r�r1r�r}r�r�r�r�r�r�)ryr�r�r�r�s     r�
parse_rsp_msgr�	s����b�e�e�B�J�J�'�'�B�J�J�'�,A��-�-�/�I��r�7�%�8�9��@�.�0�J�%�&�J��E�E���%�I�b�'��$G�#H��!O�QZ�[�	�y�y���%�%�'��R����7�+�Z��D�	������
�����)�*�
������
�����
rc��d}d}d}gd�}d|j|jvr d}d}|t|t|���d�gz
}|jdj
r|d	d
gz
}|t
|jd�z
}t||d��|jj�|jj|�|jj�r4|jjd
|jj�d��nN|jjd|jj!��d|jj�d��|jjd|jdj"�d��|jjd|j$�d��d|j|jvr6|jjd|jdj"�d��|jj�|jdj
rk|jjd�|jjd�|jjd�|jj�|jdj'�D]\}}|j)|d��|jj�d|j|jvr�|jjd�|jjd�|jjdt+|d��d��|jj,�4|jjd|jj�d��n3|jjd|jj.�d��|jj�|jjd �|jjd!�d|j|jvr|jjd"�n|jjd#�|jj�|jjd$|�d��|jj�d|j|jvrj|jjd%�|jjt1|t|�d���|jjd$|�d��|jj3�y)&N�0z-1r<)z6struct ynl_req_state yrs = { .yarg = { .ys = ys, }, };�struct nlmsghdr *nlh;�int err;r=�rsp�NULLz *rsp;�size_t hdr_len;r�F�rrznlh = ynl_msg_start_req(ys, z, req->_nlmsg_flags);znlh = ynl_gemsg_start_req(ys, r��, 1);�ys->req_policy = &r��ys->req_hdr_len = r�zyrs.yarg.rsp_policy = &�hdr_len = sizeof(req->_hdr);�/hdr = ynl_nlmsg_put_extra_header(nlh, hdr_len);�!memcpy(hdr, &req->_hdr, hdr_len);r�zrsp = calloc(1, sizeof(*rsp));zyrs.yarg.data = rsp;z	yrs.cb = �_parse;zyrs.rsp_cmd = zerr = ynl_exec(ys, nlh, &yrs);�if (err < 0)zgoto err_free;z
return -1;r�z	err_free:)rwr�r�rjr}rr�rur�r�r5rBrr�r6r�r)rr�r�r�r�r!rc�	call_freer�)ry�ret_ok�ret_errr�r�r
r9s       r�	print_reqr�/	s��
�F��G��I��J��"�%�%��
�
�#�#������)�B��Y��8�9��@�A�A�
�	�y�y���(�(��(�#�%�	%�
��.����9�!5�6�6�J��B�	�U�3��E�E�����E�E���*�%�	�y�y����
�����.�r�u�u���.?�?T�U�V�
�����0����1D�1D�1F�0G�r�"�%�%�/�/�IZ�Z_�`�a��E�E�G�G� ����9�!5�!A�!A� B�&�I�J��E�E�G�G� ��!1�!1� 2�!�4�5��"�%�%��
�
�#�#�
�����)�"�)�)�G�*<�*H�*H�)I��P�Q��E�E�H�H�J�	�y�y���(�(�
�����.�/�
�����A�B�
�����3�4�
�����
��9�9�Y�'�3�3�5���4��
�
�b�%� �6��E�E�H�H�J��"�%�%��
�
�#�#�
�����0�1�
�����&�'�
�����)�I�b�'�2�3�7�;�<�
�5�5�;�;�"��E�E�G�G�n�R�U�U�_�_�$5�Q�7�8��E�E�G�G�n�R�U�U�_�_�$5�Q�7�8�
�����
��E�E�G�G�,�-��E�E�G�G�N���"�%�%��
�
�#�#�
����� �!�
��������E�E�H�H�J��E�E�G�G�g�f�X�Q�� ��E�E�H�H�J��"�%�%��
�
�#�#�
�������
�����9�R��i��%�8�9�;�
�����'�'��!�$�%��E�E�O�O�rc	�J
�d}t||d��|jj�gd�}|jdjr|ddgz
}d|j
|jvr|t|jd�z
}|jj|�|jjd�|jjd|jd	j�d
��|jjd�|jjdt|t|���d
��|jjdt|d	d���d��|j
j�4|jjd|j
j�d��n3|jjd|j
j �d��|jj#�|j$j'�r4|jjd|j
j�d
��nN|jjd|j"j)��d|j
j�d��|jdjrk|jjd�|jjd�|jjd�|jj#�d|j
|jvr�|jjd|jdj�d
��|jjd|j*�d��|jj#�|jdj-�D]\}}|j/|d��|jj#�|jjd�|jjd�|jjd �|jj#�|jjd!�|jj#�|jjd"�|jjt1|t|�d#��|jjd$�|jj3�y)%Nr<Fr�)zstruct ynl_dump_state yds = {};r�r�r�r�zyds.yarg.ys = ys;zyds.yarg.rsp_policy = &r=r�zyds.yarg.data = NULL;zyds.alloc_sz = sizeof(r�z	yds.cb = Tr�r�zyds.rsp_cmd = r�znlh = ynl_msg_start_dump(ys, znlh = ynl_gemsg_start_dump(ys, r�r�r�r�r�r�r�r�z#err = ynl_exec_dump(ys, nlh, &yds);r�zgoto free_list;zreturn yds.first;z
free_list:z	yds.firstr�)rur�r�r}rrwr�r�r5r�rr�rjr�r!r6rcr�rBrr)r�r�r�r�r�)ryr�r�r
r9s     r�
print_dumpr�w	s����I��B�	�U�3��E�E�����J�
�y�y���(�(��(�#�%�	%�
��B�E�E�"�*�*�%�%��n�R�Y�Y�y�%9�:�:�
��E�E���*�%��E�E�G�G�� ��E�E�G�G�%�b�i�i��&8�&D�&D�%E�V�L�M��E�E�G�G�#�$��E�E�G�G�$�Y�r�4�	�?�%C�$D�B�G�H��E�E�G�G�i�	�"�g�T�:�;�7�C�D�	�u�u�{�{��
�����.������ 1��3�4�
�����.������ 1��3�4��E�E�H�H�J�	�y�y����
�����/������/@��C�D�
�����1�"�%�%�2E�2E�2G�1H��2�5�5�?�?�J[�[`�a�b�	�y�y���(�(�
�����.�/�
�����A�B�
�����3�4�
�����
��B�E�E�"�*�*�%�%�
�����$�R�Y�Y�y�%9�%E�%E�$F�f�M�N�
�����$�R�%5�%5�$6�a�8�9�
�����
��y�y��+�7�7�9�G�A�t��M�M�"�e�$�:��E�E�H�H�J��E�E�G�G�1�2��E�E�G�G�N���E�E�G�G����E�E�H�H�J��E�E�G�G�� ��E�E�H�H�J��E�E�G�G�L���E�E�G�G�I�b�$�y�/�;�7�8��E�E�G�G�N���E�E�O�O�rc�&�t||��d|�d�S)Nr�r�rp)ryr�r�s   rr�r��	s����I�&�
'�v�c�U�"�5�5rc� �|rt|ddSy)Nrr�)rmris r�
free_arg_namer��	s���"�9�-�a�b�1�1�rc�f�t||�}|}|jr|dz
}dg}d}|r|jrdg}d}|jj	d|�d�|�d�|�|jj�|jj
d	|�d
|�d��|jj�y)Nr
r&�1zunsigned int n�nzstatic inline struct r��_alloczreturn calloc(z, sizeof(struct r�)r�r�rr�r1r�r�r�)ryr�r}rrr��cnts       r�print_alloc_wrapperr��	s����R��#�D��K�	����s����8�D�

�C�
�&�%�%� �!�����E�E���1�+��b�A�!�F�&�/�4�1��E�E�����E�E�G�G�n�S�E�!1�+��c�B�C��E�E�O�O�rc��t||�}|}|jr|dz
}t|�}|jj	d|�d�d|�d|��g|��y)Nr
r&�_freer5r�r�)r�r�r�r�r1)ryr�r^rrr�s      r�print_free_prototyper��	sb���R��#�D��K�	����s���
�	�
"�C��E�E���&�T�F�%�.�W�[�M��C�5�3Q�2R�[a��brc�:�t||�}|jjd|�d�d|�d�dg�|jj�|jj	d�|jj�|jj
�y)Nr��_set_nlflagsr5� *reqz__u16 nl_flagszreq->_nlmsg_flags = nl_flags;)r�r�r1r�r�r�r�)ryr�rs   r�print_nlflags_setr��	s{���R��#�D��E�E���.�4�&��0E�$�T�F�%�0�2B�C�E��E�E�����E�E�G�G�+�,��E�E�O�O���E�E�H�H�Jrc��d|j�t|��}|s|jr|dz
}|jdk(r|js|dz
}|j
j
d|jj�|����|j|�r5|j
jd�|j
j�|jrB|j
j|jdz�|j
j�dD]�}d	}|j�D]_\}}|j|j|�}|s�%|s|j
j
d
��d}|j
j|��a|s�z|j
j!d|�d�����|j
j�|j"D]!}	|j
jd
|	�d���#|j�D]\}}|j%|��|j
j!d��|j
j�y)Nr
rZrlr5r�z__u16 _nlmsg_flags;z _hdr;)r|r2r�Fr}Tr�r�)r�rmr�r�r�r�r�rBrEr�r�r�rr�r�r�r�rr�)
ryr�r}r^r��meta_startedr
r9r�r�s
          r�_print_typer��	s��������2�9�=�>�
?�F���.�.��#�
��	�z�z�V��B�O�O��'����E�E���W�R�Y�Y�%5�%5�$6�v�h�?��@�	���	�"�
�����%�&�
�����
�
���
������#�#�h�.�/�
�����
�2�����)�)�+�G�A�t��'�'����[�A�D��#��E�E�%�%�8�%�4�#'�L�������
�
,���E�E�O�O�1�[�M��!3�O�4�3��E�E�H�H�J�����
�����&���Q�� � ��%�%�'���4����2��(��E�E�O�O��O���E�E�H�H�Jrc�8�t|||j|�yrL)r�r}�ryr�s  r�
print_typer�

s����I�r�y�y��3�4rc���t|d|�|jr�|jr�t|d|�|jj�t
|�|jj�|jdk(rC|js7|j�D]$\}}|j||jdd���&|jj�yyy)Nr[rr�)r�)r�r<rr�r�r��free_rsp_nested_prototyper�r�r�r�r:)ryr}r
r9s    r�print_type_fullr�
s�����B���
�~�~�&�-�-��B��F�+�
�����
�!�"�%�
�����
��;�;�&� ��)>�)>�!�-�-�/���4����B����R�U��;�0�
�����
�.�~rc�n�t||�|jj�|j|�rt	||�|j
dk(rI|dk(rD|j|j�D]$\}}|j||j||���&|jj�y)Nrr<r�)
r�r�r�r�r�r�r}r�r�r:)ryr�r�r
r9s     r�print_type_helpersr�
s�����Y�'��E�E�H�H�J�	���	�"��"�i�(�	�{�{�f���i�!7��y�y��+�7�7�9�G�A�t��K�K��B�K�K��%�K�@�:��E�E�H�H�Jrc�X�|jd�ryt|d�t|d�yrz)r�r�r�rws r�print_req_type_helpersr�,
s%��	�}�}�Y�����I�&��r�9�%rc�T�d|j|jvryt|d�y�Nr=)rwr�r�rws r�print_rsp_type_helpersr3
s$���b�e�e�B�J�J�'�'���r�7�#rc	���|dk(rdnd}|rdnd}|jjd|jj�|�d�dd	|jj�|�d
�g|��y)Nr=rNrOr�r[r&r�zconst struct nlattr **tbr5r�r�)r�r1rwr)ryr�rrr^�terms     r�print_parse_prototyper9
sq�� �G�+�V��F��3��D��E�E���&�R�U�U�%6�%6�$7��x�v�"F�5�$�R�U�U�%6�%6�$7��x�u�E�G�!%��'rc�@�|jd�ryt|d�yrz)r�r�rws r�print_req_typerC
s��	�}�}�Y����r�9�rc�p�d|j|jvryt|d|jd�yrz�rwr��
_free_typer}rws r�print_req_freerI
s/������b�j�j�)�)���r�9�b�i�i�	�2�3rc��|jdk(s|jdk(rd|j|jvrd}n|jdk(rd}nyt||�y)NrYrZr=r[)r�rwr�r�s  r�print_rsp_typer
O
sP��
�
�
�d��b�j�j�F�2��2�5�5����CT�8T��	�	���w�	��	���r�9�rc��|jjt|d����|jdk(r)|jj	t|d��d��n�|jdk(s|jdk(rz|jj	d�|jj	d�|jj	d	�|jj	d
t|d��d��|jj	t|dd�
��d��|jjd��|jj
�t|d�|jj
�y)Nr=r�rZz *next;r�r[z
__u16 family;z	__u8 cmd;zstruct ynl_ntf_base_type *next;z
void (*free)(z *ntf);Tr�z! obj __attribute__((aligned(8)));r�)r�r�r�r�r�r�r�r�rws r�print_wrapped_typerY
s
���E�E���i��G�4�5��7�	�z�z�V��
�����9�R��)�*�'�2�3�	���x�	�2�:�:��#8�
������ �
�������
�����1�2�
�����-�	�"�g� 6�7�w�?�@��E�E�G�G�y��W�D�1�2�2S�T�U��E�E�O�O��O���E�E�H�H�J���W�%��E�E�H�H�Jrc��|j�r6|jjd�|jj�yy)Nr�)r�r�r�r��ryr}s  r�_free_type_members_iterri
s1��
����
�����!�"�
�����
� rc�Z�|j�D]\}}|j|||��yrL)r�r�)ryr�r}r�r
r9s      r�_free_type_membersro
s)���%�%�'���4��	�	�"�c�3��(rc�F�t|�}t||d��|jj�t	||�t|||�|r|jj
d|�d��|jj�|jj�y)Nr[r�r�r�)	r�r�r�r�rrr�r�r�)ryr�r}r�s    rr
r
t
st��
�	�
"�C���Y�r�2��E�E�����B��'��r�3��'��
�����%��u�B�� ��E�E�O�O���E�E�H�H�Jrc��t|d�yr�)r�rws rr�r��
s���R��$rc��t|d|�yr�)r
rs  r�free_rsp_nestedr�
s���r�2�v�rc�p�d|j|jvryt|d|jd�yrr	rws r�print_rsp_freer�
s/���b�e�e�B�J�J�'�'���r�7�B�I�I�g�.�/rc���t|d�}t|dd��|jj�|jj	|�d��|jj�|jjd��t
||jd�|jj	d�|jj	d�|jj�t|d	|jdd
��|jj	d�|jj�|jj�|jj�y)
Nr=r[r�z
 *next = rsp;z$while ((void *)next != YNL_LIST_END)r�zrsp = next;znext = rsp->next;r��obj.�r��
free(rsp);)
r�r�r�r�r�r�rr}rr�)ryr�s  r�print_dump_type_freer�
s�����W�%�H���W�R�0��E�E�����E�E�G�G�x�j�
�&�'��E�E�H�H�J��E�E���A��B��B��	�	�'� 2�3��E�E�G�G�M���E�E�G�G�� ��E�E�H�H�J��r�5�"�)�)�G�"4�&�A��E�E�G�G�L���E�E�O�O���E�E�O�O���E�E�H�H�Jrc�\�t|dd��|jj�t||jd�t|d|jdd��|jj
d�|jj�|jj�y)Nr=r[r�r�rrr)	r�r�r�rr}rr�r�r�rws r�print_ntf_type_freer!�
ss����W�R�0��E�E�����B��	�	�'� 2�3��r�5�"�)�)�G�"4�&�A��E�E�G�G�L���E�E�O�O���E�E�H�H�Jrc	��|r|rt|j�ry|rd}n|rt|j�rd}nd}|rdnd}|j}|r?|jj}|jj
r|d|jzz
}n|j}|j|�d|�d|j�d	|���y)
N�extern zstatic r[r�z = {r
zconst struct nla_policy z_nl_policy[z + 1])	�policy_should_be_staticrBrrwrr`r�r�r6)r�r}ryrr�prefixr^�max_attrrs        r�print_req_policy_fwdr'�
s����R�3�F�M�M�B�����
�)�&�-�-�8��F��F��S�6�F��"�"�H�	��u�u� � ��
�5�5����C�"�*�*�$�$�D��!�!���D�D�F�8�+�D�6��X�=O�=O�<P�PU�V\�U]�	^�_rc�J�|r7|jr+|j|jjdd��t|||d��|j	�D]\}}|j|��|j
d�|jd�|j�y)N�config-condF)ryrrz};)rwrFr;r'r�r�r�r�)r�r}ryr
r�s     r�print_req_policyr*�
sw��	�b�e�e�
���r�u�u�y�y���5�6���V��e�<��$�$�&���3������'��D�D��J��N�N�4���E�E�Grc� �|jdk(S)N�	genetlinkr��rBs r�kernel_can_gen_family_structr.�
s���<�<�;�&�&rc�:�|jdk(xst|�S)Nr�)r�r.r-s rr$r$�
s�����7�*�R�.J�6�.R�Rrc
���d}|jj�D�]O\}}|jr�|j�D�](\}}|js�d|jvr�#|r|jd�d}|jddk(rdnd}|jddk(rd	nd
}|jd|�dt|j��d
���g}d|jvr$|jd|jd|��f�d|jvr$|jd|jd|��f�|j|�|jd��|j���+��Ry)NTr.z/* Integer value ranges */Frrr[�_signed�ULL�LLz,static const struct netlink_range_validationr�z_range =r�r,r�r-r�)rMr�rNr<r1r�r0r�rr6r�r`r@r�r�)	rBr�r�r
r:r9�signr^r�s	         r�print_kernel_policy_rangesr5�
sQ���E��'�'�-�-�/���8������~�~�'�G�A�t��<�<���4�;�;�.������1�2������1���,�2�)�D�"�i�i��l�c�1�U�t�F��N�N�"N�t�f�TU�V]�^b�^l�^l�Vm�Un�nv� w�N�x��G�����#�����t�'9�'9�%��'9�'O�P�Q�����#�����t�'9�'9�%��'9�'O�P�Q�� � ��)��L�L�c�L�"��E�E�G�)(�	0rc�X�d}|jj�D�]�\}}|jr�|j�D�]c\}}|js�|js�!d|j
vr�0|r|j
d�d}|jdt|j��d�ddg�|j�|jd	|d
�d���|j|d
}d}|jj�D]7}|rd}n|j
d�|j
d|j�d���9|j
d�|j�|j
d�|j
d�|j�|j���f���y)NTr+z'/* Sparse enums validation callbacks */Fz
static int�	_validatezconst struct nlattr *attrzstruct netlink_ext_ack *extackzswitch (nla_get_r0z(attr))r�r#zfallthrough;zcase rr�z8NL_SET_ERR_MSG_ATTR(extack, attr, "invalid enum value");zreturn -EINVAL;)rMr�rNr<r6r1r�r1rr�rCr5rFrEr�r�)	rBr�r�r
r:r9r#�first_entryrAs	         r�)print_kernel_policy_sparse_enum_validatesr9�
sn���E��'�'�-�-�/���8������~�~�'�G�A�t��<�<���>�>���t�{�{�*������>�?������|�����0G�/H�	�-R� ;�=]�^�
`��N�N���N�N�"2�4��<�.�� H�N�I��=�=��f��.�D��K����,�,�.���"'�K��D�D��(����u�U�\�\�N�!�,�-�/�
�D�D����L�L�N��D�D�K�L��D�D�"�#��L�L�N��E�E�G�;(�	0rc�H�t|�}|r|r�|jd|j�d��dddd�}||j}|sd}nY|jdk(r5d	}|jj�D]}d
|vr|dz
}d|vs�|dz
}�nt
|j�}|sd
nd}|�d|�d|j�d|�d�}	|r|jd|	�d��n|j|	dz��|sy|j�|jdd
dD]"}
|jdt|
�gd�d���$|jdd
dD]"}
|jdt|
�gd�d���$|jdddD]!}
|jdt|
�dgd���#|jdddD]!}
|jdt|
�dgd���#|j�|jj�D]\}}|jr�d
|vr2t|j�d|�d ��}
|jd|
d!d"gd��d|vs�Nt|j�d|�d#��}
|jd|
d!dgd����|j�y)$Nz/* Ops table for r�genl_small_ops�genl_ops�genl_split_ops)r��per-opr�r[r�rrYrrZzstatic constr_z struct r�z_nl_ops[r�r#r�z =r�r�rrr)z const struct genl_split_ops *ops�struct sk_buff *skb�struct genl_info *infor�r�r&zstruct netlink_callback *cb�-nl-z-doitr?r@z-dumpit)r.r�r@r�r�rFr2rEr�r�rrr1rr�rf)rBr�rr�exported�
pol_to_struct�struct_typer�rw�qualr�rr�s            r�print_kernel_op_table_fwdrFs���/��7�7�H���
��� ��!2�!2� 3�3�
7�8�#3�#-�"2�4�
�$�F�$8�$8�9����C�
�
!�
!�W�
,��C��j�j�'�'�)���2�:��1�H�C��R�<��1�H�C�	*��f�j�j�/�C�%-�~�7����x��}�A�f�m�m�_�H�S�E��K����D�D�7�4�&��"�#��N�N��t��N�,����E�E�G����U�#�D�)�&�1��
���5�'�$�-�M�UX�	�	Z�2����V�$�T�*�6�2��
���6�7�4�=�M�UX�	�	Z�3����U�#�F�+�F�3��
���5�'�$�-�9�:�3�	�	H�4����V�$�V�,�V�4��
���5�'�$�-�9�:�3�	�	H�5��E�E�G��z�z�'�'�)����
�;�;���2�:��f�/�/�0��W�I�U�C�D�D����u�d� 5�7O�P�Y\�
�
^��R�<��f�/�/�0��W�I�W�E�F�D����u�d� 5�7T�U�^a�
�
c�*��E�E�Grc� �t||d��y)NTr�)rFr�s  r�print_kernel_op_table_hdrrH^s���f�b�D�9rc�
�t||d��|jdk(s|jdk(�r�|jj�D�]�\}}|jr�|j|j
dd��|j�d|jfg}d|vr?|jdd	j|dD�cgc]}td
|z���c}�f�dD];}||vs�t|j�d|�d
|�d��}|j|dz|f��=|jdk(rot||d|ddd��}t|j�d
|�d��}|jd|f�|jd|jjf�d|vr?|jdd	j|dD�cgc]}td|z���c}�f�|j!|�|j#d������n�|jdk(�r�ddd�dd d�d�}	|jj�D�]x\}}dD�]l}|js||vr�|j|j
dd��|j�d|jfg}d|vrpg}
|dD](}|dk(r|d!vr�
|d"k(r|d#k(r�|
j|��*|
r<|jdd	j|
D�cgc]}td
|z���c}�f�t|j�d|�d
|�d��}d$||vr(|j|	|d$t||d$�f�|j|dz|f�d%||vr(|j|	|d%t||d%�f�d||vr�t||d||dd��}|j$rt|j�d
|�d
|�d��}nt|j�d
|�d��}|jd|f�|jd|jjf�d|vr|dngd&|zgz}|jdd	j|D�cgc]}td|z���c}�f�|j!|�|j#d����o��{|jd�|j#d'��|j'�ycc}wcc}wcc}wcc}w)(NFr�r�r>r)�cmdz
dont-validate�validatez | zgenl-dont-validate-r�rAr�itr�rYr<r]�rz
-nl-policyr��maxattrr$zgenl-r�r�r��pre_doit�	post_doitr��start�done)rZzdump-strictrZ�strictr�r�zcmd-cap-r�)rFr�r�r�rfrFr;r�r6r�r�rrr@rrr@r�r`r�)rBr�r�rwr�r�r�rr}�cb_names�
dont_validater$s            r�print_kernel_op_tablerVbs3���f�b�E�:�
���x�'�6�+?�+?�8�+K�!�:�:�+�+�-�K�G�R��{�{���N�N�2�6�6�-��6�7��N�N���r�|�|�,�-�G��"�$����
� %�
�
�57��5H�,J�5H��-4�4I�A�4M�,N�5H�,J�!K� L�O�*���b�=�"�f�&7�&7�%8��W�I�Q�w�i�r�#R�S�D��N�N�G�d�N�D�#9�:�*��#�#�x�/����?�(;�*,�T�(�9�*=�l�*K�M���&�"3�"3�!4�A�g�Y�j�I�J������$�/�0����	�6�+>�+>�+H�+H�I�J��"�}��������SU�V]�S^�4_�S^�a�W�W�q�[�5I�S^�4_�)`�a�b�� � ��)��L�L�c�L�"�3.�4
�	�	��	(�$.��D�$+�V�<�>��"�:�:�+�+�-�K�G�R�)���;�;�'��"3�����r�v�v�m�T�:�;���� �!�2�<�<�0�1��"�b�(�$&�M���0��"�d�?�q�4K�/K�$�"�f�,��h��$�%�,�,�Q�/�1�%����
�(-�
�
�=J�4L�=J��5<�<Q�TU�<U�4V�=J�4L�)M�(N�Q��&�"3�"3�!4�D��	��7�)�2�N�O���B�w�K�'��N�N�H�W�$5�e�$<�g�b��k�RW�FX�>Y�#Z�[�����$���5�6��R��[�(��N�N�H�W�$5�f�$=�w�r�'�{�SY�GZ�?[�#\�]���7��+�#�F�B��,?�.0��k�)�.D�\�.R�T�F��~�~�&�&�*;�*;�)<�A�g�Y�a��y�PZ�'[�\��&�&�*;�*;�)<�A�g�Y�j�'Q�R���N�N�H�d�#3�4��N�N�I�v�/B�/B�/L�/L�#M�N�(/�2�
��G��2�*�w�BV�AW�W���������SX�4Y�SX�a�W�W�q�[�5I�SX�4Y�)Z�[�\��$�$�W�-����#��&�O*�.�R�N�N�4���L�L�c�L���E�E�G��C,J��5`��44L��&5Zs�>S-�?S2�.S7�/S<c��|jdsy|jd�|jdD]1}t|j�d|d�d��}|j	|��3|jd�|j
�y)Nrrr#�-nlgrp-rr�r�)rqr�rr@r�r�r�)rBr��grp�grp_ids    r�print_kernel_mcgrp_hdrr[�st���=�=�� ���N�N�6���}�}�V�$���F�-�-�.�g�c�&�k�]�!�D�E��
���V��%��L�L����E�E�Grc�H�|jdsy|jd|jzdz�|jdD]>}|d}t|j�d|���}|jd|zdz|zdz��@|j
d	�|j�y)
Nrrz)static const struct genl_multicast_group z_nl_mcgrps[] =rrXr�z] = { "z", },r�)rqr�rErr@r�r�r�)rBr�rYrrZs     r�print_kernel_mcgrp_srcr]�s����=�=�� ���N�N�>����N�Qa�a�b��}�}�V�$���6�{���F�-�-�.�g�d�V�<�=��
���S�6�\�I�
%��
,�w�
6�7�%��L�L����E�E�Grc�t�t|�sy|jd|j�d��|j�d|jvro|jd|j�d|jd�d��|jd|j�d|jd�d��|j�yy)Nzextern struct genl_family z_nl_family;�	sock-privzvoid z_nl_sock_priv_init(z *priv);z_nl_sock_priv_destroy()r.r�rEr��
kernel_familyr�s  r�print_kernel_family_struct_hdrra�s���'��/���D�D�%�f�m�m�_�K�	@�A��E�E�G��f�*�*�*�
���u�V�]�]�O�#6�v�7K�7K�K�7X�6Y�Ya�
b�c�
���u�V�]�]�O�#9�&�:N�:N�{�:[�9\�\d�
e�f�
����+rc�2�t|�syd|jvr�|jdd|j�d�|j�d�gdg�|j	�|jdd|j�d�|j�d�gdg�|j	�|jd	|j�d
��|jd|jzdz�|jd
|jzdz�|jd�|jd�|jd�|jdk(r?|jd|j�d��|jd|j�d��nM|jdk(r>|jd|j�d��|jd|j�d��|jdr>|jd|j�d��|jd|j�d��d|jvr`|jd|jd�d��|jd |j�d!��|jd"|j�d#��|jd$�y)%Nr_zstatic voidr��_nl_sock_priv_initz_nl_sock_priv_init(priv);z
void *priv�_nl_sock_priv_destroyz_nl_sock_priv_destroy(priv);zstruct genl_family z_nl_family __ro_after_init =z	.name		= r�z.version	= z.netnsok	= true,z.parallel_ops	= true,z.module		= THIS_MODULE,r>z.ops		= z_nl_ops,z.n_ops		= ARRAY_SIZE(z	_nl_ops),r�z
.split_ops	= z.n_split_ops	= ARRAY_SIZE(rrz.mcgrps		= z_nl_mcgrps,z.n_mcgrps	= ARRAY_SIZE(z_nl_mcgrps),z.sock_priv_size	= sizeof(�),z.sock_priv_init	= __z_nl_sock_priv_init,z.sock_priv_destroy = __z_nl_sock_priv_destroy,r�)
r.r`r�rEr�r�r@r�rzr{r�rqr�r�s  r�print_kernel_family_struct_srcrf�sG��'��/���f�*�*�*�
�
�
�m�r�&�-�-��8J�%K� �-�-��(A�B�C�#�n�	&�	����
�
�
�m�r�&�-�-��8M�%N� �-�-��(D�E�F�#�n�	&�	�����N�N�(��):�):�(;�;W�X�Y��D�D�����	'�#�	-�.��D�D��&�.�.�	(�3�	.�/��D�D�	���D�D�	!�"��D�D�	$�%�
���x�'�
���z�&�-�-���
1�2�
���&�v�}�}�o�Y�
?�@�	�	�	��	(�
���~�f�m�m�_�H�
5�6�
���*�6�=�=�/��
C�D�
�}�}�V��
���}�V�]�]�O�;�
7�8�
���'��
�
��l�
C�D��f�*�*�*�
���)�&�*>�*>�{�*K�)L�B�
O�P�
���$�V�]�]�O�3F�
G�H�
���&�v�}�}�o�5K�
L�M��L�L��rc��d}||vr||r9dt||�z}n'|r%||vr!d|jzdzt||�z}|j|��y)Nr#r=r
r�)rrEr�)rBr�r��ckeyr6�
start_lines      r�uapi_enum_startrj�sa���J��C���y�>� �7�3�y�>�#:�:�J�	
�$�#�+��v�}�}�,�s�2�W�S��Y�5G�G�
��N�N�
�N�#rc���t|jd|j�d���}t|jdd|j�d���}d|�d�}t|||dd�d	}|jj�D]]}|r	d
|vsd|vr�d}	|j|k7rd
|j�d�}	|j}|j|j|	z�|dz
}�_|j�|j||rdndz�|s|j|�d
|���|jd��|r|jd|�d|���|j�y)Nzcmd-max-name�MAXzcmd-cnt-namer�r(� - 1)r�r<rr�r[r�rArr[r�r�r8r�)rr;r�rjr�rFr!r�r6r�r�)
rBr��
max_by_define�separate_ntfrJrK�	max_value�valrwr^s
          r�render_uapi_unifiedrrsO���v�z�z�.�V�5E�5E�4F�c�2J�K�L�H��v�z�z�.�B�v�7G�7G�6H��2L�M�N�H��H�:�U�#�I��F�B��|� 4�k�B�
�C��k�k� � �"���X��^�w�"�}����
�8�8�s�?��2�8�8�*�A�&�F��(�(�C�
���R�\�\�F�
"�#��q���#��E�E�G��D�D��=�R�c�	2�3��
����z��Y�K�
(�)��L�L�c�L���
���x��z��9�+�
.�/��E�E�Grc��|j�d�}d|j�d�}d|�d�}|jd��|jt|j�d���d	}|j
j
�D]h}d
|vs�d|vs�
d}|jr+|j|k7rd
|j�d�}|j}|j|j|z�|dz
}�j|j�|j||rdndz�|s|j|�d
|���|jd��|r|jd|�d|���|j�|j�d�}d|j�d�}d|�d�}|jd��|jt|j�d���d	}|j
j
�D]�}d
|vrd|d
vs	d|vsd|vs�|j}	d|vr	d|vr|	�d�}	d}|jr+|j|k7rd
|j�d�}|j}|j|	|z�|dz
}��|j�|j||rdndz�|s|j|�d
|���|jd��|r|jd|�d|���|j�y)N�USER_MAXr��USER_CNTr(rmr#r�z_MSG_USER_NONE = 0,rrYr[r�rArr[r�r8r��
KERNEL_MAX�
KERNEL_CNTz_MSG_KERNEL_NONE = 0,r=r��_REPLY)r�r�r�rrr�rFr!r6r�r�)
rBr�rnrJrKrprqrwr^r6s
          r�render_uapi_directionalry!s����"�"�#�8�,�H��F�$�$�%�X�.�H��H�:�U�#�I��N�N��N���D�D��F�K�K�=� 3�4�	5�6�
�C��k�k� � �"���2�:�'��+��F��x�x�B�H�H��O��r�x�x�j��*���h�h���D�D�����&�'��1�H�C�#��E�E�G��D�D��=�R�c�	2�3��
����z��Y�K�
(�)��L�L�c�L���
���x��z��9�+�
.�/��E�E�G��"�"�#�:�.�H��F�$�$�%�Z�0�H��H�:�U�#�I��N�N��N���D�D��F�K�K�=� 5�6�	7�8�
�C��k�k� � �"���B�J�7�b��h�.�8�r�>�W�PR�]����I��b� �X�R�%7�(�k��0�	��F��x�x�B�H�H��O��r�x�x�j��*���h�h���D�D��V�#�$��1�H�C�#��E�E�G��D�D��=�R�c�	2�3��
����z��Y�K�
(�)��L�L�c�L���
���x��z��9�+�
.�/��E�E�Grc�f�dt|j��d�}|jdd�}|jd|z�|jd|z�|j	�|j
|df|j|jdd	�fg}|j|�|j	�g}|d
D�]L}|jd�r�|dd
k7r#|j|�g}|j	�|ddk(s	|ddk(�r�|j|d}|jr�q|j�r�|j�r>|jd�d}d|vrd|dz}|j|j|z�n'|jd�|j|dd��|jj!�D]<}|j�s�d|j"zdz|dz}|j|��>|jd�t%|||d�|jd|j&�d|d�d��}|jj!�D]D}d}	|j(rd|j+���|	z}	|j|j"|	z��F|jdd�r�|j	�|jd�|ddk(r7t|d z�}
d|j-��d�}|j|
|z�nd|j.}t|d!z�}
|sd"|zd!z}|jt|�dz�|j|
d#zt|�zd$z�|j1d%�&�|j	����|dd
k(s���|jd|j&�d��}|j3t|jd'|�|d����|d(g���O|r!|j|�|j	�|jd)d�}
|j4j7�D�]N\}}|j8r�d*|j:�d$�}d+}t%|||j<d,�|j7�D]U\}}d}	|j>|k7rd|j>�d�}	|j>}|d	z
}|j|j|	z��W|j7�r|j	�|j|j:|
rdndz�|
s |j|j@�d|���|j1d%�&�|
r!|jd|j@�d-|���|j	���Qd.|d/v}|jBd0k(rtE|||
|�n5|jBd1k(rtG|||
�ntId2|jB����|r�t%|||d/d3�4�|jJj!�D]:}|r	d5|vsd6|vs�d}	d(|vr	d|d(�d�}	|j|j|	z��<|j1d%�&�|j	�g}|jLd7D]C}|d}|j3t|jd'|j&�d8|����|�g��E|j	�|r!|j|�|j	�|jd9|�d��y):N�_UAPI_LINUX_�_H�/r
�#ifndef r8r�versionrrvr\r0r_r#r$z/**r[r � - r'F)r!�@z: rrcrr�rAz
render-maxz/* private: */r8r-r�z = (rmr�r�z
c-define-namer!z
max-by-definer(rr<r�r�r��unified�directionalzUnsupported message enum-model z
async-enum)r6r�r[rrz-mcgrp-rC)'rr~rr�r�rzr{r;r>rCr\�has_doc�
has_entry_docr$r6r5rFrErjr@r2�
user_valuer7r>r�r�rMr�rNrKr4r!rJ�msg_id_modelrrryrer�rq)rBr��hdr_protr;r_r#r rA�name_pfxr^rJrrKrnr
r:rprqr9rorwrYrs                       r�render_uapir�Ws����g�f�&=�&=�>�?�r�B�H�����S�)�H��D�D��h�	���D�D��h�	���E�E�G�����v��/�����
�
�9�a� 8�9�;�G����g���E�E�G��G��
�&���9�9�X�����=�G�#����g�&��G��E�E�G���=�F�"�e�F�m�w�&>��=�=��v��/�D��{�{���|�|�~��%�%�'��D�D��K��C���}�#�d�5�k�1���%�%�d�n�n�s�&:�;��D�D��J��%�%�d�5�k�%�%�@�!�\�\�0�0�2�E��}�}��!�E�L�L�0�4�7�%��,�F���)�)�#�.�3����U���F�B��v�6��y�y��6�3D�3D�2E�Q�u�V�}�o�UV�0W�X�H����,�,�.�����%�%�"�5�#3�#3�#5�"6�7�&�@�F����U�\�\�F�*�+�	/��y�y��u�-��������%�&���=�G�+�&�x�&�'8�9�H� #�D�M�M�O�#4�A�6�G��D�D��G�+�,�#�1�1�H�&�x�%�'7�8�H�#�#'�(�?�U�#:���D�D���*�S�0�1��D�D��F�*�W�X�->�>��H�I��L�L�c�L�"��E�E�G�
�6�]�g�
%��y�y��6�3D�3D�2E�Q�0G�H�H��N�N�G�F�J�J��2:��E�&�M�?�/K�%M�N�!�'�N�,�
-�u'�|�
���'�"�
�����J�J���6�M��'�'�-�-�/���8�������)�)�*�%�0�	������H�M�M�;�?��~�~�'�G�A�t��F��z�z�S� ��t�z�z�l�!�,���j�j���1�H�C��D�D����&�(�)�
(��>�>���E�E�G�
���X�
�
�
�"�3�
?�@���D�D�H�%�%�&�c�)��5�6�
���#�����D�D�8�H�-�-�.�a�	�{�;�<�
����/0�4"�V�L�%9�9�L�
���i�'��F�B�
�|�D�	�	�	�
�	-����M�:��9�&�:M�:M�9N�O�P�P�����F�<�$8�L�Q��+�+�$�$�&�B��X��^�w�"�}���F��"�}��r�'�{�m�1�-���D�D�����&�'�'�	���#���
�����G��}�}�V�$���6�{����������F�<M�<M�;N�g�VZ�U[�9\� ]�^��&�#�	$�%��E�E�G��
���'�"�
�����D�D�:�h�Z�s�	#�$rc���|jj�s+|jjd|j�d���nM|jj
|j}|jjd|j�d���|jjdt|d��d��|jjdt|dd	�
��d��|jjd|jdj�d
��|jjdt|d��d��|jjd��y)Nr�r�r�z.alloc_sz	= sizeof(r[rez.cb		= r=Tr�z_parse,z.policy		= &r~z.free		= (void *)r�z_free,r�)
rBrr�r�r6�req_by_valuercr�r�r�r}rr�)ryrw�crud_ops   r�_render_user_ntf_entryr��s��
�9�9���!�
������2�<�<�.��5��6��)�)�(�(����6��
������7�#4�#4�"5�T�:��;��E�E�G�G�"�9�R��#9�":�"�=�>��E�E�G�G�i�	�"�g�T�:�;�7�C�D��E�E�G�G�n�R�Y�Y�w�/�;�;�<�F�C�D��E�E�G�G�!�)�B��"9�!:�&�A�B��E�E�O�O��O�rc��d|j�d�}|r|jd|�d��y|jr�|jd|j�d���|jj	�D]Y\}}d|vr"|j
|d}t
||d	|d�}n"d
|vrt
||d	|d
�}ntd|z��t||��[|j
j	�D]%\}}d
|vr�t
||d	|d
�}t||��'|jd��|j�|j|�d��|jd
|j�d��|j�r5|jd�|jd|jd��d��|j�r5|jro|jdt|j��d��nF|jr)|jdt|j��d��n|jd�|jr>|jd|j�d��|jd|j�d��|jd��y)Nzconst struct ynl_family ynl_�_familyr#r�z!static const struct ynl_ntf_info z_ntf_info[] = r�r�rr[zInvalid notification rAz
.name		= "r�z.is_classic	= true,z.classic_id	= �protonumr�z.hdr_len	= sizeof(struct rez5.hdr_len	= sizeof(struct genlmsghdr) + sizeof(struct z%.hdr_len	= sizeof(struct genlmsghdr),z.ntf_info	= z
_ntf_info,z .ntf_info_size	= YNL_ARRAY_SIZE(z_ntf_info),)rEr��ntfsr�r�r�r�rer�r�r�rr;rr)	rBr��	prototype�symbol�ntf_op_name�ntf_oprwryr�s	         r�render_user_familyr��sH��+�F�M�M�?�'�
B�F��
���w�v�h�a�
 �!��
�{�{�
���?��
�
��n�]��^�#)�;�;�#4�#4�#6��K���6�!��Z�Z��x� 0�1����F�F�B��A���F�"���F�F�F�G�D��� 7�+� E�F�F�"�2�v�.�$7�"�:�:�+�+�-�K�G�R��b� ���B����G�<�B�"�2�r�*�	.�
	���#���
�����N�N�f�X�S�>�"��D�D�<��
�
��b�	)�*�
����
���
#�$�
����v�z�z�*�5�6�a�
8�9�
��������D�D�-�g�f�6I�6I�.J�-K�2�N�O�	�	�	�
���E�g�f�Na�Na�Fb�Ec�ce�
f�g�
���
5�6�
�{�{�
���}�V�]�]�O�:�
6�7�
���0�����{�
K�L��L�L�c�L�rc��|jj�D]<\}}|jr�|j�D]\}}|jdk(s�y�>y)NrQTF)rMr�rNr0)rBr
r:r9s    r�family_contains_bitfield32r�
sT���'�'�-�-�/���8������~�~�'�G�A�t��y�y�L�(��(�0�rc�N�d}	tjjtjj|�|�}tjj	|�}tjj|d�}tjj|�r||ddfS��)Nr[�MAINTAINERSr�)r�rr��basename�dirname�exists)�	full_path�sub_path�maintainerss   r�find_kernel_rootr�(
sy���H�
��7�7�<�<���� 0� 0�� ;�X�F���G�G�O�O�I�.�	��g�g�l�l�9�m�<��
�7�7�>�>�+�&��h�s��m�+�+�rc	��$�tjd��}|jddtdd��|jdd	td�
�|jddd
d��|jddd��|jddg��|jdd
dd��|jddg��|jddtd��|j	�}|j
�|j
d�|jD�cgc]}tj|���}}	t|j|�}|jdk7r@td |j�td!�tjj!d"�t't)�|j*|j,�#�}t/|j�\}}|j0d$k(s|j
r |j3d%|j�d&��n|j3d'|j���|j3d(�|j3d)|�d&��|j3d*|j0�d+|j
rdnd,�d&��|js|j4r[d-}	|	d.j7d-g|j4z�z
}	|	d/j7d-g|jz�z
}	|j3d0|	�d&��|j9�|j0d$k(r
t;||�yd1|j<j?��d2�}
|j
r8|j3d3|
z�|j3d4|
z�|j9�|j*r0tj@jC|j*dd5�d6z}nd7}|j0d8k(r�|j3d9�|j3d:�|j9�|j
s1|j*r|j3d;|�d<��|j9�d=|jDzg}||jFjId>g�z
}n�|j3d?�|j3d@�|j
r.|j3dA�tK|�r8|j3dB�n&|j3d;|�d<��|j3dC�g}|dD|dEzD]}
d|
vs�|jM|
d��|j0dFk(r|jM|jD�g}|D]-}||vs�|j3dG|�dH��|jM|��/|j9�|j0dFk(r�|j
sH|j3dI�|j9�|j4D]}|j3d;|�d<���n.|j3dJ�|j9�tO||d�|j9�|j0d8k(�r�|j
�r�tQ|jRjU��D]$\}}|jVs�|j3dK�ntQ|jRjU��D]\}}|jVs�tY||�� |j9�|jZdLk(r]|j3dM|j\�d&��t_||j`|jb�N�}tY||�|j9�|jZdOvrp|jdjU�D]S\}}dP|vs�dQ|vs�tg|||j0|dP�}tY||jhdR|�S�|j9��Utk||�tm||�to||��n�tq||�ts||�tQ|jRjU��D]$\}}|jVs�|j3dK�ntQ|jRjU��D]\}}|jVs�tu||�� |j9�|jZdLk(r]|j3dM|j\�d&��t_||j`|jb�N�}tu||�|j9�|jdjU�D]�\}}|jZdOvs�dTD]u}||vs�dR||vs�|j3dU|jv�dV|�d&��tg|||j0||�}tu||jhdR|�S�|j9��w��ty||�t{||�t}||�|j0dFk(�r|j
�rX|j3dW�t||�|j�jU�D]#\}}t�|t��s�t�|||��%|j9�|j3dK�|jRjU�D]+\}}tg|||j0d-d-|�}t�||��-|jdjU�D�]�\}}|j3dX|jv�dY��dP|vr�dQ|vr�|j3dU|jv�dZ��tg|||j0|dP�}t�|�t�|�|j9�t�|�t�|�|j9�t�|�|j9�d[|vr�|j3dU|jv�d\��tg|||j0|d[�}t�|�t�|�|j�r|j�rt�|�t�|�t�|�|j9�|j�s��v|j3dU|jv�d]��tg|||j0|d^�}|j�st�d_|j\�d`���t�|����|j�jU�D]h\}}dQ|vs�tg|||j0|dQ�}|j3dU|jv�da��t�|�|j9�t�|��j|j9��n�|j3dW�t�||�|j�jU�D]#\}}t�|t��s�t�|||��%|j9�db}|j3dc�|jRj��D]}|j�s�t�||�d}�|r|j9�|jRj��D]}t�||��|j�D]}t_||�}t�||��|j3dK�|r�|jRjU�D][\}}tg|||j0d-d-|�}t�|�|jVrt�||�|j�s�Pt�||��]|j9�|jRjU�D]\\}}tg|||j0d-d-|�}t�||�|jVrt�||�|j�s�Qt�||��^|jdjU�D�]�\}}|j3dX|jv�dY��dP|vrxdQ|vrt|j3dU|jv�dZ��tg|||j0|dP�}t�|�t�|�t�|�t�|�|j9�d[|vr�|j3dU|jv�d\��tg|||j0|d[�}|j�r|j�r
t�|d�d�t�|�t�|�t�|�|j9�|j�s��B|j3dU|jv�d]��tg|||j0|d^�}|j�st�d_|j\�d`���t�|����|j�jU�D]q\}}dQ|vs�|j3dU|jv�da��tg|||j0|dP�}t�|�tg|||j0|dQ�}t�|��s|j9�tO||db�|j
r|j3de|
�d&��yycc}w#t"j$$r4}t|�tjj!d"�Yd}~yd}~wwxYw)fNz Netlink simple parsing generator)�descriptionz--moderdT)r�kernel�uapi)�destr0�required�choicesz--specr�)r�r0r�z--headerr\�
store_true)r��actionrXz--source�store_false)r�r�z
--user-header�+)�nargsrXz	--cmp-outzJDo not overwrite the output file if the new output is identical to the old)r�rX�helpz--exclude-opr�)r�rXz-or�)r�r0rXz --header or --source is requiredz3((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)z
Spec license:zDLicense must be: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)r)r�r�z/* SPDX-License-Identifier: rz// SPDX-License-Identifier: z0/* Do not edit directly, auto-generated from: */z/*	z/* YNL-GEN r��sourcer[z --user-header z --exclude-op z
/* YNL-ARG�_LINUX_�_GEN_Hr~r8ryrwzgenerated_header_file.hr�z#include <net/netlink.h>z#include <net/genetlink.h>z
#include "r:zuapi/�headersz#include <stdlib.h>z#include <string.h>z#include <linux/types.h>z#include <linux/netlink.h>z#include "ynl.h"rvzattribute-setsrz
#include <�>z#include <linux/genetlink.h>zstruct ynl_sock;z/* Common nested types */r�z/* Global operation policy for rM>r�r>rYr[r<rwr�z/* r�z/* Enums */z/* ============== z ============== */z - do */rZz
 - dump */z - notify */r�z4Only notifications with consistent types supported (r�z - event */Fz/* Policies */r�rC)f�argparse�ArgumentParser�add_argumentr]�
parse_argsr\�error�
exclude_op�re�compileror��license�printr�r��exitr4�	YAMLErrorr�r$r��cmp_outr�rdr��user_headerr�r�r�rErrr�r|r`r;r�r�r�r)r�r�r<r'r�rrr�r�r�r�r}rHr[rar5r9r*r6rVr]rfr�rCrVr:r�r�rr�r
rrxr�r�rr{rarer�r�r�rFr�r�r�r�r�r�r=r�rr�r�rrr�r�rr�r!)�parserr��exprrs�parsed�excr�r
�spec_kernelr�r��hdr_filer��
definition�seen_headerr�r}r:r�rwryr�rr_�has_recursive_nestss                         r�mainr�2
s)��
�
$�
$�1S�
T�F�
����v�C�$� :��<�
����v�C�$��G�
���
��,�PT��U�
���
��-��H�
����s�B��?�
����L�$�i��k�
����x���D�
����:�C���F�����D��{�{�����7�8�04���@���2�:�:�d�#��K�@�	���	�	�;�/���>�>�R�R��/�6�>�>�2��X�Y��F�F�K�K��N�
�I�K����t�|�|�;K�	M�B�%�d�i�i�0�N�A�{��y�y�F��d�k�k�
���+�F�N�N�+;�3�
?�@�
���+�F�N�N�+;�
<�=��D�D�	;�<��D�D�4��}�C�	 �!��D�D�;�t�y�y�k��t�{�{�8��"I��	M�N����$�*�*����!�&�&��t�d�.>�.>�'>�?�?��� �%�%�r�d�T�_�_�&<�=�=��
���z�$��s�
#�$��E�E�G��y�y�F���F�B�������,�,�.�/�v�6�H��{�{�
���Z�(�
"�#�
���Z�(�
"�#�
�����}�}��7�7�#�#�D�M�M�#�2�$6�7�$�>��,���y�y�H��
���
'�(�
���
)�*�
�����{�{��}�}����z�(��1�-�.��E�E�G��V�/�/�/�0���6�'�'�+�+�I�r�:�:��
���
"�#�
���
"�#��;�;��D�D�+�,�)�&�1����1�2��D�D�:�h�Z�q�)�*��D�D�#�$����]�+�f�5E�.F�F�
��z�!��N�N�:�h�/�0�G��y�y�F�����v�)�)�*��K����k�!��D�D�:�c�U�!�$�%����s�#���E�E�G��y�y�F���{�{��D�D�/�0��E�E�G��'�'�����z�#��a�(�)�(�
�D�D�#�$��E�E�G��v�r�4�0�
�����y�y�H���;�;�#�F�$>�$>�$D�$D�$F�G�	��6��>�>��D�D�4�5��H�%+�6�+E�+E�+K�+K�+M�$N� ��&��>�>�(��V�4�%O�
�E�E�G��#�#�x�/����6�v�{�{�m�3�G�H����(@�(@�F�L`�L`�a��$�R��0������#�#�':�:�#)�:�:�#3�#3�#5�K�G�R��r�z�g�R�&7�'��F�D�I�I�r�4�H��,�R����9�1E�"�M�����	$6�
&�f�b�1�"�6�2�.�*�6�2�6�&�v�r�2�5�f�b�A�#�F�$>�$>�$D�$D�$F�G�	��6��>�>��D�D�4�5��H�%+�6�+E�+E�+K�+K�+M�$N� ��&��>�>�$�R��0�%O�
�E�E�G��#�#�x�/����6�v�{�{�m�3�G�H����(@�(@�F�L`�L`�a�� ��V�,�����%�z�z�/�/�1�����'�'�+>�>�#1��"�b�=�Y�"�W�+�-E��D�D�3�r�|�|�n�C��y��!D�E�!+�B���	�	�2�w�!O�B�,�R����9�1E�"�M��E�E�G�$2� 2�
"�&�"�-�"�6�2�.�*�6�2�6��y�y�F���;�;��D�D����F�B�'�%�}�}�2�2�4���e��e�W�-�'���E�:� 5�
�E�E�G��D�D�,�-�$*�$>�$>�$D�$D�$F� ��&���F�D�I�I�r�2�x�H����F�+�%G� &�z�z�/�/�1�������)�"�,�,��7I�J�K��2�:�'��"3��D�D�3�r�|�|�n�H�5�6�#�B���	�	�2�t�D�B�"�2�&�*�2�.��E�E�G�"�2�&�*�2�.��E�E�G�'��+��E�E�G��R�<��D�D�3�r�|�|�n�J�7�8�#�B���	�	�2�v�F�B�"�2�&�*�2�.��-�-����&�r�*�&�r�*�(��,��E�E�G��:�:��D�D�3�r�|�|�n�L�9�:�#�B���	�	�2�x�H�B��-�-�'�*^�_a�_f�_f�^g�gh�(i�j�j�&�r�*�? 2�B &�{�{�0�0�2�����b�=�#�B���	�	�2�w�G�B��D�D�3�r�|�|�n�K�8�9�"�2�&��E�E�G�&�r�*�
 3�
�E�E�G��D�D������#�%�}�}�2�2�4���e��e�W�-�#�F�B��6� 5�
�E�E�G�"'���D�D�!�"� �4�4�;�;�=���#�#�!�"�f�-�*.�'�>�#����� �4�4�;�;�=���"�f�%�>��(�(�����-���"�f�%�)�
�D�D�,�-�"�(.�(B�(B�(H�(H�(J�$�H�f�#�B���	�	�2�r�8�L�B�-�b�1��~�~�0��V�<��|�|�2�2�v�>�
)K�����$*�$>�$>�$D�$D�$F� ��&���F�D�I�I�r�2�x�H����F�+��>�>�"�2�v�.��<�<�$�R��0�%G� &�z�z�/�/�1�������)�"�,�,��7I�J�K��2�:�'��"3��D�D�3�r�|�|�n�H�5�6�#�B���	�	�2�t�D�B�"�2�&�"�2�&�!�"�%��b�M��E�E�G��R�<��D�D�3�r�|�|�n�J�7�8�#�B���	�	�2�v�F�B��-�-����%�b��5�"�2�&�(��,��r�N��E�E�G��:�:��D�D�3�r�|�|�n�L�9�:�#�B���	�	�2�x�H�B��-�-�'�*^�_a�_f�_f�^g�gh�(i�j�j�'��+�5 2�8 &�{�{�0�0�2�����b�=��D�D�3�r�|�|�n�K�8�9�#�B���	�	�2�t�D�B�!�"�%�#�B���	�	�2�w�G�B�'��+� 3�
�E�E�G��v�r�5�1��{�{�
���z�(��3�
'�(���C	A���>�>��
�c�
�
�����A�����s'�AH�#A%AH"�H"AI)�H5*AI$�I$AI)�__main__)F)TNrL)r�rHrGrQ)r[r<)�r�r�pathlibr�r�rr�r�r4rr��Path�__file__rf�parent�as_posix�librrrrrrr	rrr"r$r.r�rrrDrMrkr{r�r�r�r�r�r�r�r�rr0r:rHrWrkror�r�r�rmrnrFrjr�r�rurxr{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�rrrrr
rrrr
r�rrrr!r'r*r.r$r5r9rFrHrVr[r]rarfrjrrryr�r�r�r�r�r�r*r&rr�<module>r�s������	�	�
�
������������X�&�.�.�0�7�7�@�@�B�C�\�\��*�*����
~i�8�~i�B
��
�4
�d�
�.`.��`.�F�t��"3.��3.�l1A��1A�h%�z�%�"<�J�<�DU�T�U�2-!�t�-!�`Y2�D�Y2�xD2�t�D2�N1��1�<+�X�+�@��(I�I�XC�
�C�("�k�"�JC�k�C�L �
� �F!��!�gC�Z�gC�TB\�B\�JC*�C*�LQ����
���
���
�	��#	��L�)�2=�D�$5�#��,L��*�Z�G�*T�
P��)��D^�B!�H)��(�.E�P8�v6���&c��%�P5��"
�&�$�'��4��
� � �

�%��0��(�`�0�'�S��:#�L@�F:�M�`	�
�	�"�J$��63�lL%�^
�(�V�,�s)�l	�z���F�r

Youez - 2016 - github.com/yon3zu
LinuXploit