Skip to content

Commit 9198e88

Browse files
committedJan 12, 2023
socket DF flag on UDP socket via IP_MTU_DISCOVER on Linux and IP_DONTFRAGMENT on FreeBSD for path MTU discovery purpose.
idea proposal via ml : https://marc.info/?l=php-internals&m=167329288509393&w=2 Close GH-10282
1 parent 55d19ee commit 9198e88

File tree

6 files changed

+128
-1
lines changed

6 files changed

+128
-1
lines changed
 

‎NEWS

+1
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ PHP NEWS
8686
. Added socket_atmark if send/recv needs using MSG_OOB. (David Carlier)
8787
. Added TCP_QUICKACK constant, to give tigher control over
8888
ACK delays. (David Carlier)
89+
. Added DONTFRAGMENT support for path MTU discovery purpose. (David Carlier)
8990

9091
- Standard:
9192
. E_NOTICEs emitted by unserialize() have been promoted to E_WARNING. (timwolla)

‎UPGRADING

+8
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,14 @@ PHP 8.3 UPGRADE NOTES
117117
- Sockets:
118118
. SO_ATTACH_REUSEPORT_CBPF (Linux only).
119119
. TCP_QUICKACK (Linux only).
120+
. IP_DONTFRAG (FreeBSD only).
121+
. IP_MTU_DISCOVER (Linux only).
122+
. IP_PMTUDISC_DO (Linux only).
123+
. IP_PMTUDISC_DONT (Linux only).
124+
. IP_PMTUDISC_WANT (Linux only).
125+
. IP_PMTUDISC_PROBE (Linux only).
126+
. IP_PMTUDISC_INTERFACE (Linux only).
127+
. IP_PMTUDISC_OMIT (Linux only).
120128

121129
========================================
122130
11. Changes to INI File Handling

‎ext/sockets/sockets.stub.php

+56
Original file line numberDiff line numberDiff line change
@@ -1706,6 +1706,62 @@
17061706
*/
17071707
const TCP_QUICKACK = UNKNOWN;
17081708
#endif
1709+
#if defined(IP_DONTFRAG)
1710+
/**
1711+
* @var int
1712+
* @cvalue IP_DONTFRAG
1713+
*/
1714+
const IP_DONTFRAG = UNKNOWN;
1715+
#endif
1716+
#if defined(IP_MTU_DISCOVER)
1717+
/**
1718+
* @var int
1719+
* @cvalue IP_MTU_DISCOVER
1720+
*/
1721+
const IP_MTU_DISCOVER = UNKNOWN;
1722+
#endif
1723+
#if defined(IP_PMTUDISC_DO)
1724+
/**
1725+
* @var int
1726+
* @cvalue IP_PMTUDISC_DO
1727+
*/
1728+
const IP_PMTUDISC_DO = UNKNOWN;
1729+
#endif
1730+
#if defined(IP_PMTUDISC_DONT)
1731+
/**
1732+
* @var int
1733+
* @cvalue IP_PMTUDISC_DONT
1734+
*/
1735+
const IP_PMTUDISC_DONT = UNKNOWN;
1736+
#endif
1737+
#if defined(IP_PMTUDISC_WANT)
1738+
/**
1739+
* @var int
1740+
* @cvalue IP_PMTUDISC_WANT
1741+
*/
1742+
const IP_PMTUDISC_WANT = UNKNOWN;
1743+
#endif
1744+
#if defined(IP_PMTUDISC_PROBE)
1745+
/**
1746+
* @var int
1747+
* @cvalue IP_PMTUDISC_PROBE
1748+
*/
1749+
const IP_PMTUDISC_PROBE = UNKNOWN;
1750+
#endif
1751+
#if defined(IP_PMTUDISC_INTERFACE)
1752+
/**
1753+
* @var int
1754+
* @cvalue IP_PMTUDISC_INTERFACE
1755+
*/
1756+
const IP_PMTUDISC_INTERFACE = UNKNOWN;
1757+
#endif
1758+
#if defined(IP_PMTUDISC_OMIT)
1759+
/**
1760+
* @var int
1761+
* @cvalue IP_PMTUDISC_OMIT
1762+
*/
1763+
const IP_PMTUDISC_OMIT = UNKNOWN;
1764+
#endif
17091765

17101766
/**
17111767
* @strict-properties

‎ext/sockets/sockets_arginfo.h

+25-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
--TEST--
2+
IP_MTU_DISCOVER test
3+
--EXTENSIONS--
4+
sockets
5+
--SKIPIF--
6+
<?php
7+
if (PHP_OS != 'Linux') {
8+
die('skip For Linux only');
9+
}
10+
?>
11+
--FILE--
12+
<?php
13+
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
14+
socket_bind($socket, '127.0.0.1', 5557);
15+
$ret = socket_set_option($socket, IPPROTO_IP, IP_MTU_DISCOVER, IP_PMTUDISC_DO);
16+
var_dump($ret);
17+
?>
18+
--EXPECT--
19+
bool(true)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
--TEST--
2+
IP_DONTFRAG test
3+
--EXTENSIONS--
4+
sockets
5+
--SKIPIF--
6+
<?php
7+
if (PHP_OS != 'FreeBSD') {
8+
die('skip For FreeBSD only');
9+
}
10+
?>
11+
--FILE--
12+
<?php
13+
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
14+
socket_bind($socket, '127.0.0.1', 5557);
15+
$ret = socket_set_option($socket, IPPROTO_IP, IP_DONTFRAG, 1);
16+
var_dump($ret);
17+
?>
18+
--EXPECT--
19+
bool(true)

0 commit comments

Comments
 (0)