Skip to content

Commit 33a4650

Browse files
committed
fix 32 bits tests attempt
1 parent 3fbb3cb commit 33a4650

File tree

1 file changed

+75
-112
lines changed

1 file changed

+75
-112
lines changed

ext/sockets/tests/socket_afpacket32.phpt

Lines changed: 75 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -16,154 +16,117 @@ if (PHP_INT_SIZE != 4) die("skip this test is for 32-bit only");
1616
?>
1717
--FILE--
1818
<?php
19-
$s_c = socket_create(AF_PACKET, SOCK_RAW, ETH_P_ALL);
20-
$s_bind = socket_bind($s_c, 'lo');
21-
var_dump($s_bind);
19+
$receiver = socket_create(AF_PACKET, SOCK_RAW, ETH_P_ALL);
20+
$sender = socket_create(AF_PACKET, SOCK_RAW, ETH_P_LOOP);
2221

23-
// sock_getsockname in this context gets the interface rather than the address.
24-
$s_conn = socket_getsockname($s_c, $istr, $iindex);
25-
var_dump($s_conn);
26-
var_dump($istr);
27-
var_dump($iindex);
22+
var_dump(socket_bind($receiver, 'lo'));
2823

29-
$s_s = socket_create(AF_PACKET, SOCK_RAW, ETH_P_LOOP);
30-
$v_bind = socket_bind($s_s, 'lo');
24+
var_dump(socket_getsockname($receiver, $if_name, $if_index));
25+
var_dump($if_name);
26+
var_dump(is_int($if_index));
3127

32-
$buf = pack("H12H12n", "ffffffffffff", "000000000000", ETH_P_LOOP);
33-
$buf .= str_repeat("A", 46);
28+
var_dump(socket_bind($sender, 'lo'));
3429

35-
var_dump(socket_sendto($s_s, $buf, strlen($buf), 0, "lo", 1));
30+
$payload = str_repeat("A", 46);
31+
$eth_frame = pack("H12H12n", "ffffffffffff", "000000000000", ETH_P_LOOP) . $payload;
3632

37-
try {
38-
socket_recvfrom($s_c, $rsp, strlen($buf), 0, $addr);
39-
} catch(\ValueError $e) {
40-
echo $e->getMessage(), PHP_EOL;
41-
}
42-
43-
socket_close($s_c);
44-
// purposely unsupported ethernet protocol (ARP)
45-
46-
$s_c = socket_create(AF_PACKET, SOCK_RAW, 0x0806);
47-
$s_bind = socket_bind($s_c, 'lo');
48-
$buf = pack("H12H12n", "ffffffffffff", "000000000000", 0x0806);
49-
$buf .= str_repeat("A", 46);
50-
51-
var_dump(socket_sendto($s_s, $buf, strlen($buf), 0, "lo", 1));
52-
53-
try {
54-
socket_recvfrom($s_c, $rsp2, strlen($buf), 0, $addr2);
55-
} catch (\ValueError $e) {
56-
echo $e->getMessage(), PHP_EOL;
57-
}
58-
59-
socket_close($s_s);
60-
socket_close($s_c);
33+
var_dump(socket_sendto($sender, $eth_frame, strlen($eth_frame), 0, "lo", 1));
6134

62-
$s_c = socket_create(AF_PACKET, SOCK_RAW, ETH_P_ALL);
63-
$s_bind = socket_bind($s_c, 'lo');
35+
usleep(10000);
6436

65-
$s_s = socket_create(AF_PACKET, SOCK_RAW, ETH_P_ALL);
66-
$v_bind = socket_bind($s_s, 'lo');
67-
68-
$ip = hex2bin(
69-
"4500" .
70-
str_repeat("0028", 16) .
71-
"0000" .
72-
"4000" .
73-
"4006" .
74-
"0000" .
75-
"7f000001" .
76-
"7f000001"
77-
);
78-
$p = str_repeat("A", 20);
79-
80-
$buf = pack("H12H12n", "ffffffffffff", "000000000000", ETH_P_IP);
81-
$buf .= $ip . $p;
37+
$len = socket_recvfrom($receiver, $rsp, 1500, 0, $addr);
38+
var_dump($len);
39+
var_dump($addr);
40+
socket_close($sender);
8241

83-
$min_frame_size = 60;
84-
$buf .= str_repeat("\x00", max(0, $min_frame_size - strlen($buf)));
42+
$arp_receiver = socket_create(AF_PACKET, SOCK_RAW, 0x0806); // ETH_P_ARP
43+
var_dump(socket_bind($arp_receiver, 'lo'));
8544

86-
var_dump(socket_sendto($s_s, $buf, strlen($buf), 0, "lo", 1));
45+
socket_set_option($arp_receiver, SOL_SOCKET, SO_RCVTIMEO, ["sec" => 0, "usec" => 50000]);
8746

88-
try {
89-
socket_recvfrom($s_c, $rsp, strlen($buf), 0, $addr);
90-
} catch (\ValueError $e) {
91-
echo $e->getMessage(), PHP_EOL;
47+
$recv_result = socket_recvfrom($arp_receiver, $rsp2, 1500, 0, $addr2);
48+
var_dump($recv_result);
49+
if ($recv_result === false) {
50+
echo "Socket receive timed out as expected." . PHP_EOL;
9251
}
93-
94-
$ip = hex2bin(
95-
"9999" .
96-
"0028" .
97-
"0000" .
98-
"4000" .
99-
"4006" .
100-
"0000" .
101-
"FFFFFeFF" .
102-
"7f000001"
52+
socket_close($arp_receiver);
53+
54+
$sender = socket_create(AF_PACKET, SOCK_RAW, ETH_P_IP);
55+
var_dump(socket_bind($sender, 'lo'));
56+
57+
$malformed_eth_header = pack("H12H12n", "001122334455", "AABBCCDDEEFF", ETH_P_IP);
58+
$malformed_ip_header = hex2bin(
59+
"9999" .
60+
"0028" .
61+
"0000" .
62+
"4000" .
63+
"4006" .
64+
"0000" .
65+
"7f000001" .
66+
"7f000001"
10367
);
104-
$p = str_repeat("Bb", 80);
105-
106-
$buf = pack("H12H12n", "ffffffffffffh", "aaaaaAAAAAAA", ETH_P_IP);
107-
$buf .= $ip . $p;
68+
$malformed_payload = str_repeat("B", 20);
69+
$malformed_frame = $malformed_eth_header . $malformed_ip_header . $malformed_payload;
70+
$malformed_frame .= str_repeat("\x00", 60 - strlen($malformed_frame));
10871

109-
$min_frame_size = 60;
110-
$buf .= str_repeat("\x00", max(0, $min_frame_size - strlen($buf)));
72+
var_dump(socket_sendto($sender, $malformed_frame, strlen($malformed_frame), 0, "lo", 1));
11173

112-
var_dump(socket_sendto($s_s, $buf, strlen($buf), 0, "lo", 1));
113-
var_dump(socket_recvfrom($s_c, $rsp, strlen($buf), 0, $addr));
74+
usleep(10000);
11475

76+
$len = socket_recvfrom($receiver, $rsp, 1500, 0, $addr);
77+
var_dump($len);
11578
var_dump($addr);
11679
var_dump($rsp);
117-
118-
socket_close($s_s);
119-
socket_close($s_c);
80+
81+
socket_close($sender);
82+
socket_close($receiver);
12083
?>
12184
--EXPECTF--
12285
bool(true)
12386
bool(true)
12487
string(2) "lo"
125-
int(%d)
126-
int(%d)
88+
bool(true)
89+
bool(true)
90+
int(60)
91+
int(60)
92+
string(2) "lo"
93+
bool(true)
94+
bool(false)
95+
Socket receive timed out as expected.
96+
bool(true)
12797
int(60)
128-
unsupported ethernet protocol
129-
int(84)
130-
int(%d)
131-
int(%d)
132-
string(%d) "%s"
133-
object(Socket\EthernetPacket)#%d (7) {
98+
int(60)
99+
string(2) "lo"
100+
object(Socket\EthernetPacket)#2 (7) {
134101
["headerSize"]=>
135-
int(%d)
102+
int(14)
136103
["rawPacket"]=>
137-
string(%d) "%s"
104+
string (%d) "%s"
138105
["socket"]=>
139-
object(Socket)#%d (0) {
106+
object(Socket)#1 (0) {
140107
}
141108
["ethProtocol"]=>
142-
int(2048)
109+
int(96)
143110
["srcMac"]=>
144111
string(%d) "%s"
145112
["dstMac"]=>
146113
string(%d) "%s"
147114
["payload"]=>
148-
object(Socket\Ipv4Packet)#%d (5) {
115+
object(Socket\EthernetPacket)#7 (7) {
149116
["headerSize"]=>
150-
int(%d)
117+
int(14)
151118
["rawPacket"]=>
119+
NULL
120+
["socket"]=>
121+
object(Socket)#1 (0) {
122+
}
123+
["ethProtocol"]=>
124+
int(0)
125+
["srcMac"]=>
126+
string(%d) "%s"
127+
["dstMac"]=>
152128
string(%d) "%s"
153-
["srcAddr"]=>
154-
string(%d) "%s.%s.%s.%s"
155-
["dstAddr"]=>
156-
string(%d) "%s.%s.%s.%s"
157129
["payload"]=>
158-
object(Socket\TcpPacket)#%d (4) {
159-
["headerSize"]=>
160-
int(%d)
161-
["rawPacket"]=>
162-
string(%d) "%s"
163-
["srcPort"]=>
164-
int(%d)
165-
["dstPort"]=>
166-
int(%d)
167-
}
130+
NULL
168131
}
169132
}

0 commit comments

Comments
 (0)