MOON
Server: Apache
System: Linux vps.erhabenn.com.br 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64
User: sonne (1011)
PHP: 8.2.31
Disabled: NONE
Upload Files
File: //usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pyo
�
d�bc@sddlZddlZddlZddlZddljjZddlmZddl	m
Z
ddlmZddl
mZmZmZmZmZmZmZdZd�Zdefd	��YZd
�Zd�Zd�Zd
�Zd�Zd�Zd�ZdS(i����N(t	DhcpError(t
get_osutil(tKNOWN_WIRESERVER_IP(thex_dumpt	hex_dump2t	hex_dump3t
compare_bytest
str_to_ordtunpack_big_endiantint_to_ip4_addrt10813FA8cCst�S(N(tDhcpHandler(((s?/usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pytget_dhcp_handler$sRcBsbeZdZd�Zd�Zd�Zed��Zed��Zd�Z	d�Z
d�ZRS(	s?
    Azure use DHCP option 245 to pass endpoint ip to VMs.
    cCs=t�|_d|_d|_d|_t|_t|_dS(N(	RtosutiltNonetendpointtgatewaytroutestFalset_request_broadcastt
skip_cache(tself((s?/usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pyt__init__-s				cCs.|js|jrdS|j�|j�dS(s{
        Send dhcp request
        Configure default gateway and routes
        Save wire server endpoint if found
        N(twireserver_route_existstdhcp_cache_existst
send_dhcp_reqtconf_routes(R((s?/usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pytrun5s
cCsu|jj�}x_|dks*|dkrptjd�tjd�tjd�|jj�|jj�}qWdS(s;
        Wait for network stack to be initialized.
        ts0.0.0.0sWaiting for network.i
sTry to start network interface.N(R
tget_ip4_addrtloggertinfottimetsleept
start_network(Rtipv4((s?/usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pytwait_for_networkAs



cCs�t}tjdjt��yy|jj�}td�|D��r~t|_d|_
d|_t}tjdjt��ntj
djt��Wn,tk
r�}tjdjt|��nX|S(s�
        Determine whether a route to the known wireserver
        ip already exists, and if so use that as the endpoint.
        This is true when running in a virtual network.
        :return: True if a route to KNOWN_WIRESERVER_IP exists.
        sTest for route to {0}css|]}t|kVqdS(N(tKNOWN_WIRESERVER_IP_ENTRY(t.0troute((s?/usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pys	<genexpr>YssRoute to {0} existssNo route exists to {0}s4Could not determine whether route exists to {0}: {1}N(RRRtformatRR
tread_route_tabletanyRRRRtTruetwarnt	Exceptionterror(Rtroute_existstroute_tablete((s?/usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pyRMs 			cCsg|jr
tSt}tjd�|jj�}|dk	rM||_t}ntjdj	|��|S(s�
        Check whether the dhcp options cache exists and contains the
        wireserver endpoint, unless skip_cache is True.
        :return: True if the cached endpoint was found in the dhcp lease
        sChecking for dhcp lease cachesCache exists [{0}]N(
RRRRR
tget_dhcp_lease_endpointRRR+R((Rtexiststcached_endpoint((s?/usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pyRjs	
		cCs�tjd�tjd|j�tjd|j�|jdk	rm|jj�rm|jjdd|j�n|jdk	r�x6|jD](}|jj|d|d|d�q�WndS(NsConfigure routessGateway:{0}s
Routes:{0}iii(RRRRRR
tis_missing_default_routet	route_add(RR'((s?/usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pyR~s
cCs�dddddg}xo|D]g}y.|jj�t|�}t||�|SWn#tk
ru}tjd|�nXtj|�qWdS(Nii
ii<s Failed to send DHCP request: {0}(
R
tallow_dhcp_broadcasttsocket_sendtvalidate_dhcp_respRRR,R R!R(Rtrequestt__waiting_duration__tdurationtresponseR1((s?/usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pyt_send_dhcp_req�s


cCsL|jj�}|s/tjd�t|_dStjd�|jj�}t||j�}|jsrt	|_n|jj
�}|jj�}|r�|jj|�n|jj
�r�|jj�n|j|�}|jj
�r�|jj�n|r|jj|�n|dkr*td��nt|�\|_|_|_dS(s,
        Check if DHCP is available
        s!send_dhcp_req: DHCP not availableNsSend dhcp requests Failed to receive dhcp response.(R
tis_dhcp_availableRRRRtget_mac_addrtbuild_dhcp_requestRR+R5tget_if_nametset_route_for_dhcp_broadcasttis_dhcp_enabledtstop_dhcp_serviceR>tstart_dhcp_servicetremove_route_for_dhcp_broadcastRRtparse_dhcp_respRR(Rtdhcp_availabletmac_addrtreqtmissing_default_routetifnametresp((s?/usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pyR�s0
	

	(t__name__t
__module__t__doc__RRR$tpropertyRRRR>R(((s?/usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pyR(s					
cCsLt|�}|dkr,tjd|�tStjdt|��tjdt||��t||dd�s�tjdt|dd�t|dd��t	d��nt||dd�s�tjd	t|dd�t|dd��t	d
��nt||dd�sHtjd
t|dd�t|dd��t	d��ndS(Ni�s.HandleDhcpResponse: Too few bytes received:{0}sBytesReceived:{0}sDHCP response:{0}i�is'Cookie not match:
send={0},
receive={1}s1Cookie in dhcp respones doesn't match the requests.TransactionID not match:
send={0},
receive={1}s8TransactionID in dhcp respones doesn't match the requestiis,Mac Address not match:
send={0},
receive={1}s3Mac Addr in dhcp respones doesn't match the request(
tlenRR.RtverbosethexRRRR(R:R=t
bytes_recv((s?/usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pyR9�s,				cCs9tjdt|�t|��g}|dkrDtjd|�n|d}x�|||dkrt||�}|dd
@d?}ddd|>@}	|d	7}t|||�}
|
d|d
K}
|
|	M}
||7}t||d�}|d7}|j|
|	|f�qQW|||dkr5tjd�n|S(Ns%Routes at offset: {0} with length:{1}isData too small for option:{0}iiiI����i iiisUnable to parse routesi����(RRTRUR.RRtappend(R=toptiontitlengthRVRtjt
mask_len_bitstmask_len_bytestmasktnetR((s?/usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pytparse_route�s*





cCsg|d|krS|dkr-tjd�dSt||dd�}t|�}|Stjd|�dS(Niis'Endpoint or Default Gateway not 4 bytesisData too small for option:{0}(RR.RRR	(R=RXRYRZRVtaddrtip_addr((s?/usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pyt
parse_ip_addrs
cCs�tjd�t|�}d}d}d}d}xx||kr�t||�}d}|d|kr}t||d�}ntjdt|�t|�t|��|dkr�tjdt|��Pn�|dkr�t|||||�}n�|d	kr2t|||||�}tjd
|t|��nh|dkrrt|||||�}tjd|t|��n(tjd
t|�t|�t|��||d7}q4W|||fS(sL
    Parse DHCP response:
    Returns endpoint server or None on error.
    sparse Dhcp Responsei�iis-DHCP option {0} at offset:{1} with length:{2}i�sDHCP packet ended at offset:{0}i�isDefault gateway:{0}, at {1}i�s(Azure wire protocol endpoint:{0}, at {1}s/Skipping DHCP option:{0} at {1} with length {2}iN(RRTRSRRRUR`Rc(R=RVRRRRYRXRZ((s?/usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pyRHs<
			cCs�d}z�y�tjtjtjtj�}|jtjtjd�|jtjtjd�|j	d
�|j
|d�|jd�tj
d�|jd�}|SWn(tk
r�}td	j|���nXWd|dk	r�|j�nXdS(Nis0.0.0.0iDs<broadcast>iCi
s;Send DHCP request: Setting socket.timeout=10, entering recvis{0}(s0.0.0.0iD(s<broadcast>iC(RtsockettAF_INETt
SOCK_DGRAMtIPPROTO_UDPt
setsockoptt
SOL_SOCKETtSO_BROADCASTtSO_REUSEADDRtbindtsendtot
settimeoutRRTtrecvtIOErrorRR(tclose(R:tsockR=R1((s?/usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pyR8<s"


c	Cs;dgd}t�}x.tdd�D]}dddg|||<q&Wx/tdd�D]}t||�|d|<qWWtjdt|�t|dd�f�|r�d|d	<nx/tdd�D]}t||�|d
|<q�WxAtdd�D]0}dd
ddddddg||d|<q�Wtjd|�S(s$
    Build DHCP request string.
    ii�iiiis'BuildDhcpRequest: transactionId:%s,%04Xi�i
iiici�iSi5i�i�tB(tgen_trans_idtrangeRRRTRRtarray(RJtrequest_broadcastR:ttrans_idta((s?/usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pyRAQs !
			
.cCs
tjd�S(Ni(tosturandom(((s?/usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pyRt�s( RvRzRdR tazurelinuxagent.common.loggertcommonRt azurelinuxagent.common.exceptionRtazurelinuxagent.common.osutilRt%azurelinuxagent.common.utils.restutilRt%azurelinuxagent.common.utils.textutilRRRRRRR	R%RtobjectRR9R`RcRHR8RARt(((s?/usr/lib/python2.7/site-packages/azurelinuxagent/common/dhcp.pyt<module>s$4	�	"		
	,		G