Skip to content

Commit 4075906

Browse files
committed
ext/sockets: following-up on GH-16842, update FreeBSD TCP stack setting.
- `TCP_FUNCTION_ALIAS`: fetches the function pointer name alias (>= 14.0 only tough). - `TCP_BBR_ALGORITHM`: set/get the underlying algorithm (0: netflix, 1: google) when the BBR's TCP stack is used. - `TCP_REUSPORT_LB_NUMA`: set;get a NUMA domain filter on the socket.
1 parent f576b81 commit 4075906

File tree

5 files changed

+69
-5
lines changed

5 files changed

+69
-5
lines changed

.github/actions/freebsd/action.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ runs:
1313
cd $GITHUB_WORKSPACE
1414
1515
kldload accf_http
16+
kldload tcp_bbr
1617
pkg install -y \
1718
autoconf \
1819
bison \

ext/sockets/sockets.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1705,7 +1705,11 @@ PHP_FUNCTION(socket_get_option)
17051705
#endif
17061706

17071707
#ifdef TCP_FUNCTION_BLK
1708-
case TCP_FUNCTION_BLK: {
1708+
case TCP_FUNCTION_BLK:
1709+
#ifdef TCP_FUNCTION_ALIAS
1710+
case TCP_FUNCTION_ALIAS:
1711+
#endif
1712+
{
17091713

17101714
struct tcp_function_set tsf = {0};
17111715
optlen = sizeof(tsf);

ext/sockets/sockets.stub.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -647,6 +647,37 @@
647647
*/
648648
const TCP_FUNCTION_BLK = UNKNOWN;
649649
#endif
650+
#ifdef TCP_FUNCTION_ALIAS
651+
/**
652+
* @var int
653+
* @cvalue TCP_FUNCTION_ALIAS
654+
*/
655+
const TCP_FUNCTION_ALIAS = UNKNOWN;
656+
#endif
657+
#ifdef TCP_REUSPORT_LB_NUMA
658+
/**
659+
* @var int
660+
* @cvalue TCP_REUSPORT_LB_NUMA
661+
*/
662+
const TCP_REUSPORT_LB_NUMA = UNKNOWN;
663+
/**
664+
* @var int
665+
* @cvalue TCP_REUSPORT_LB_NUMA_NODOM
666+
*/
667+
const TCP_REUSPORT_LB_NUMA_NODOM = UNKNOWN;
668+
/**
669+
* @var int
670+
* @cvalue TCP_REUSPORT_LB_NUMA_CURDOM
671+
*/
672+
const TCP_REUSPORT_LB_NUMA_CURDOM = UNKNOWN;
673+
#endif
674+
#ifdef TCP_BBR_ALGORITHM
675+
/**
676+
* @var int
677+
* @cvalue TCP_BBR_ALGORITHM
678+
*/
679+
const TCP_BBR_ALGORITHM = UNKNOWN;
680+
#endif
650681
/**
651682
* @var int
652683
* @cvalue PHP_NORMAL_READ

ext/sockets/sockets_arginfo.h

Lines changed: 16 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ext/sockets/tests/socket_set_option_tsf.phpt

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,30 @@ if (!$socket) {
1717
die('Unable to create AF_INET socket [socket]');
1818
}
1919
socket_set_option( $socket, SOL_TCP, TCP_FUNCTION_BLK, "nochancetoexist");
20-
// TCP/RACK and other alternate stacks are not present by default, at least `freebsd` is.
21-
var_dump(socket_set_option( $socket, SOL_TCP, TCP_FUNCTION_BLK, "freebsd"));
20+
// TCP/RACK and other alternate stacks are not present by default, BBR should be available.
21+
var_dump(socket_set_option( $socket, SOL_TCP, TCP_FUNCTION_BLK, "bbr"));
22+
$bef = socket_get_option( $socket, SOL_TCP, TCP_BBR_ALGORITHM);
23+
var_dump($bef);
24+
// not failed, but unchanged
25+
var_dump(socket_set_option( $socket, SOL_TCP, TCP_BBR_ALGORITHM, 1024));
26+
$aft = socket_get_option( $socket, SOL_TCP, TCP_BBR_ALGORITHM);
27+
var_dump($bef === $aft);
28+
var_dump(socket_set_option( $socket, SOL_TCP, TCP_BBR_ALGORITHM, 0));
2229
var_dump(socket_get_option( $socket, SOL_TCP, TCP_FUNCTION_BLK));
30+
var_dump(socket_get_option( $socket, SOL_TCP, TCP_BBR_ALGORITHM));
2331
socket_close($socket);
2432
?>
2533
--EXPECTF--
2634
Warning: socket_set_option(): Unable to set socket option [2]: No such file or directory in %s on line %d
2735
bool(true)
36+
int(%d)
37+
bool(true)
38+
bool(true)
39+
bool(true)
2840
array(2) {
2941
["function_set_name"]=>
30-
string(7) "freebsd"
42+
string(3) "bbr"
3143
["pcbcnt"]=>
3244
int(%d)
3345
}
46+
int(%d)

0 commit comments

Comments
 (0)