mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
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
This commit is contained in:
parent
55d19eee49
commit
9198e8894b
6 changed files with 128 additions and 1 deletions
1
NEWS
1
NEWS
|
@ -86,6 +86,7 @@ PHP NEWS
|
||||||
. Added socket_atmark if send/recv needs using MSG_OOB. (David Carlier)
|
. Added socket_atmark if send/recv needs using MSG_OOB. (David Carlier)
|
||||||
. Added TCP_QUICKACK constant, to give tigher control over
|
. Added TCP_QUICKACK constant, to give tigher control over
|
||||||
ACK delays. (David Carlier)
|
ACK delays. (David Carlier)
|
||||||
|
. Added DONTFRAGMENT support for path MTU discovery purpose. (David Carlier)
|
||||||
|
|
||||||
- Standard:
|
- Standard:
|
||||||
. E_NOTICEs emitted by unserialize() have been promoted to E_WARNING. (timwolla)
|
. E_NOTICEs emitted by unserialize() have been promoted to E_WARNING. (timwolla)
|
||||||
|
|
|
@ -117,6 +117,14 @@ PHP 8.3 UPGRADE NOTES
|
||||||
- Sockets:
|
- Sockets:
|
||||||
. SO_ATTACH_REUSEPORT_CBPF (Linux only).
|
. SO_ATTACH_REUSEPORT_CBPF (Linux only).
|
||||||
. TCP_QUICKACK (Linux only).
|
. TCP_QUICKACK (Linux only).
|
||||||
|
. IP_DONTFRAG (FreeBSD only).
|
||||||
|
. IP_MTU_DISCOVER (Linux only).
|
||||||
|
. IP_PMTUDISC_DO (Linux only).
|
||||||
|
. IP_PMTUDISC_DONT (Linux only).
|
||||||
|
. IP_PMTUDISC_WANT (Linux only).
|
||||||
|
. IP_PMTUDISC_PROBE (Linux only).
|
||||||
|
. IP_PMTUDISC_INTERFACE (Linux only).
|
||||||
|
. IP_PMTUDISC_OMIT (Linux only).
|
||||||
|
|
||||||
========================================
|
========================================
|
||||||
11. Changes to INI File Handling
|
11. Changes to INI File Handling
|
||||||
|
|
|
@ -1706,6 +1706,62 @@ const SO_DETACH_BPF = UNKNOWN;
|
||||||
*/
|
*/
|
||||||
const TCP_QUICKACK = UNKNOWN;
|
const TCP_QUICKACK = UNKNOWN;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(IP_DONTFRAG)
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
* @cvalue IP_DONTFRAG
|
||||||
|
*/
|
||||||
|
const IP_DONTFRAG = UNKNOWN;
|
||||||
|
#endif
|
||||||
|
#if defined(IP_MTU_DISCOVER)
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
* @cvalue IP_MTU_DISCOVER
|
||||||
|
*/
|
||||||
|
const IP_MTU_DISCOVER = UNKNOWN;
|
||||||
|
#endif
|
||||||
|
#if defined(IP_PMTUDISC_DO)
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
* @cvalue IP_PMTUDISC_DO
|
||||||
|
*/
|
||||||
|
const IP_PMTUDISC_DO = UNKNOWN;
|
||||||
|
#endif
|
||||||
|
#if defined(IP_PMTUDISC_DONT)
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
* @cvalue IP_PMTUDISC_DONT
|
||||||
|
*/
|
||||||
|
const IP_PMTUDISC_DONT = UNKNOWN;
|
||||||
|
#endif
|
||||||
|
#if defined(IP_PMTUDISC_WANT)
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
* @cvalue IP_PMTUDISC_WANT
|
||||||
|
*/
|
||||||
|
const IP_PMTUDISC_WANT = UNKNOWN;
|
||||||
|
#endif
|
||||||
|
#if defined(IP_PMTUDISC_PROBE)
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
* @cvalue IP_PMTUDISC_PROBE
|
||||||
|
*/
|
||||||
|
const IP_PMTUDISC_PROBE = UNKNOWN;
|
||||||
|
#endif
|
||||||
|
#if defined(IP_PMTUDISC_INTERFACE)
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
* @cvalue IP_PMTUDISC_INTERFACE
|
||||||
|
*/
|
||||||
|
const IP_PMTUDISC_INTERFACE = UNKNOWN;
|
||||||
|
#endif
|
||||||
|
#if defined(IP_PMTUDISC_OMIT)
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
* @cvalue IP_PMTUDISC_OMIT
|
||||||
|
*/
|
||||||
|
const IP_PMTUDISC_OMIT = UNKNOWN;
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @strict-properties
|
* @strict-properties
|
||||||
|
|
26
ext/sockets/sockets_arginfo.h
generated
26
ext/sockets/sockets_arginfo.h
generated
|
@ -1,5 +1,5 @@
|
||||||
/* This is a generated file, edit the .stub.php file instead.
|
/* This is a generated file, edit the .stub.php file instead.
|
||||||
* Stub hash: abec5e538a69c27451c0cac0a19a92fc6df667eb */
|
* Stub hash: add91c303eddf7518566bc7e6c1698d7198c0d4c */
|
||||||
|
|
||||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_socket_select, 0, 4, MAY_BE_LONG|MAY_BE_FALSE)
|
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_socket_select, 0, 4, MAY_BE_LONG|MAY_BE_FALSE)
|
||||||
ZEND_ARG_TYPE_INFO(1, read, IS_ARRAY, 1)
|
ZEND_ARG_TYPE_INFO(1, read, IS_ARRAY, 1)
|
||||||
|
@ -991,6 +991,30 @@ static void register_sockets_symbols(int module_number)
|
||||||
#if defined(TCP_QUICKACK)
|
#if defined(TCP_QUICKACK)
|
||||||
REGISTER_LONG_CONSTANT("TCP_QUICKACK", TCP_QUICKACK, CONST_PERSISTENT);
|
REGISTER_LONG_CONSTANT("TCP_QUICKACK", TCP_QUICKACK, CONST_PERSISTENT);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(IP_DONTFRAG)
|
||||||
|
REGISTER_LONG_CONSTANT("IP_DONTFRAG", IP_DONTFRAG, CONST_PERSISTENT);
|
||||||
|
#endif
|
||||||
|
#if defined(IP_MTU_DISCOVER)
|
||||||
|
REGISTER_LONG_CONSTANT("IP_MTU_DISCOVER", IP_MTU_DISCOVER, CONST_PERSISTENT);
|
||||||
|
#endif
|
||||||
|
#if defined(IP_PMTUDISC_DO)
|
||||||
|
REGISTER_LONG_CONSTANT("IP_PMTUDISC_DO", IP_PMTUDISC_DO, CONST_PERSISTENT);
|
||||||
|
#endif
|
||||||
|
#if defined(IP_PMTUDISC_DONT)
|
||||||
|
REGISTER_LONG_CONSTANT("IP_PMTUDISC_DONT", IP_PMTUDISC_DONT, CONST_PERSISTENT);
|
||||||
|
#endif
|
||||||
|
#if defined(IP_PMTUDISC_WANT)
|
||||||
|
REGISTER_LONG_CONSTANT("IP_PMTUDISC_WANT", IP_PMTUDISC_WANT, CONST_PERSISTENT);
|
||||||
|
#endif
|
||||||
|
#if defined(IP_PMTUDISC_PROBE)
|
||||||
|
REGISTER_LONG_CONSTANT("IP_PMTUDISC_PROBE", IP_PMTUDISC_PROBE, CONST_PERSISTENT);
|
||||||
|
#endif
|
||||||
|
#if defined(IP_PMTUDISC_INTERFACE)
|
||||||
|
REGISTER_LONG_CONSTANT("IP_PMTUDISC_INTERFACE", IP_PMTUDISC_INTERFACE, CONST_PERSISTENT);
|
||||||
|
#endif
|
||||||
|
#if defined(IP_PMTUDISC_OMIT)
|
||||||
|
REGISTER_LONG_CONSTANT("IP_PMTUDISC_OMIT", IP_PMTUDISC_OMIT, CONST_PERSISTENT);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static zend_class_entry *register_class_Socket(void)
|
static zend_class_entry *register_class_Socket(void)
|
||||||
|
|
19
ext/sockets/tests/socket_dontfragment.phpt
Normal file
19
ext/sockets/tests/socket_dontfragment.phpt
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
--TEST--
|
||||||
|
IP_MTU_DISCOVER test
|
||||||
|
--EXTENSIONS--
|
||||||
|
sockets
|
||||||
|
--SKIPIF--
|
||||||
|
<?php
|
||||||
|
if (PHP_OS != 'Linux') {
|
||||||
|
die('skip For Linux only');
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
|
||||||
|
socket_bind($socket, '127.0.0.1', 5557);
|
||||||
|
$ret = socket_set_option($socket, IPPROTO_IP, IP_MTU_DISCOVER, IP_PMTUDISC_DO);
|
||||||
|
var_dump($ret);
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
bool(true)
|
19
ext/sockets/tests/socket_dontfragment_bsd.phpt
Normal file
19
ext/sockets/tests/socket_dontfragment_bsd.phpt
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
--TEST--
|
||||||
|
IP_DONTFRAG test
|
||||||
|
--EXTENSIONS--
|
||||||
|
sockets
|
||||||
|
--SKIPIF--
|
||||||
|
<?php
|
||||||
|
if (PHP_OS != 'FreeBSD') {
|
||||||
|
die('skip For FreeBSD only');
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
|
||||||
|
socket_bind($socket, '127.0.0.1', 5557);
|
||||||
|
$ret = socket_set_option($socket, IPPROTO_IP, IP_DONTFRAG, 1);
|
||||||
|
var_dump($ret);
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
bool(true)
|
Loading…
Add table
Add a link
Reference in a new issue