32 lines
No EOL
802 B
HolyC
32 lines
No EOL
802 B
HolyC
#define ICMP_REQUEST_PTR 0x300020
|
|
|
|
MemSet(ICMP_REQUEST_PTR, NULL, sizeof(U64));
|
|
|
|
class IcmpRequest {
|
|
U64 addr;
|
|
U64 iden;
|
|
U64 seq;
|
|
U64 pointer_to_u32;
|
|
};
|
|
|
|
U32 @icmp_echo_request(U32 addr, U16 iden, U16 seq, IcmpRequest* request, I64 count)
|
|
{
|
|
U32 res = 0; // low 16 = ttl, hi 16 = payload size
|
|
request->addr = addr;
|
|
request->iden = iden;
|
|
request->seq = seq;
|
|
request->pointer_to_u32 = &res;
|
|
I64 start_jiffies = cnts.jiffies;
|
|
U64* request_ptr = ICMP_REQUEST_PTR;
|
|
if (!count)
|
|
*request_ptr = NULL;
|
|
while (*request_ptr) {
|
|
if (!(cnts.jiffies < start_jiffies + 1000))
|
|
return res;
|
|
Sleep(1);
|
|
}
|
|
LXchgU32(request_ptr, request);
|
|
while (!res && cnts.jiffies < start_jiffies + 1000)
|
|
Sleep(1);
|
|
return res;
|
|
} |