Add SO_BPF_EXTENSIONS flag to socket.

Returns the supported bpf extensions from the kernel. Linux only.
Closes GH-8713.
This commit is contained in:
David Carlier 2022-06-06 07:18:53 +01:00
parent ed6dab2040
commit d677cc13ce
5 changed files with 89 additions and 0 deletions

1
NEWS
View file

@ -74,6 +74,7 @@ PHP NEWS
options. (David Carlier)
. Added ancillary data support for FreeBSD. (David Carlier)
. Added ancillary data support for NetBSD. (David Carlier)
. Added SO_BPF_EXTENSIONS socket option. (David Carlier)
- Sodium:
. Added sodium_crypto_stream_xchacha20_xor_ic(). (Scott)

View file

@ -249,6 +249,7 @@ PHP 8.2 UPGRADE NOTES
. LOCAL_CREDS_PERSISTENT (FreeBSD)
. SCM_CREDS2 (FreeBSD)
. LOCAL_CREDS (NetBSD)
. SO_BPF_EXTENSIONS
========================================
11. Changes to INI File Handling

View file

@ -395,6 +395,7 @@ fcntl.h \
grp.h \
ieeefp.h \
langinfo.h \
linux/filter.h \
linux/sock_diag.h \
malloc.h \
poll.h \

View file

@ -60,6 +60,11 @@
# else
# undef SO_MEMINFO
# endif
# if defined(HAVE_LINUX_FILTER_H)
# include <linux/filter.h>
# else
# undef SO_BPF_EXTENSIONS
# endif
#endif
#include <stddef.h>
@ -561,6 +566,64 @@ static PHP_MINIT_FUNCTION(sockets)
#ifdef SO_MEMINFO
REGISTER_LONG_CONSTANT("SO_MEMINFO", SO_MEMINFO, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef SO_BPF_EXTENSIONS
REGISTER_LONG_CONSTANT("SO_BPF_EXTENSIONS", SO_BPF_EXTENSIONS, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef SKF_AD_OFF
REGISTER_LONG_CONSTANT("SKF_AD_OFF", SKF_AD_OFF, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef SKF_AD_PROTOCOL
REGISTER_LONG_CONSTANT("SKF_AD_PROTOCOL", SKF_AD_PROTOCOL, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef SKF_AD_PKTTYPE
REGISTER_LONG_CONSTANT("SKF_AD_PKTTYPE", SKF_AD_PKTTYPE, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef SKF_AD_IFINDEX
REGISTER_LONG_CONSTANT("SKF_AD_IFINDEX", SKF_AD_IFINDEX, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef SKF_AD_NLATTR
REGISTER_LONG_CONSTANT("SKF_AD_NLATTR", SKF_AD_NLATTR, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef SKF_AD_NLATTR_NEST
REGISTER_LONG_CONSTANT("SKF_AD_NLATTR_NEST", SKF_AD_NLATTR_NEST, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef SKF_AD_MARK
REGISTER_LONG_CONSTANT("SKF_AD_MARK", SKF_AD_MARK, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef SKF_AD_QUEUE
REGISTER_LONG_CONSTANT("SKF_AD_QUEUE", SKF_AD_QUEUE, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef SKF_AD_HATYPE
REGISTER_LONG_CONSTANT("SKF_AD_HATYPE", SKF_AD_HATYPE, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef SKF_AD_RXHASH
REGISTER_LONG_CONSTANT("SKF_AD_RXHASH", SKF_AD_RXHASH, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef SKF_AD_CPU
REGISTER_LONG_CONSTANT("SKF_AD_CPU", SKF_AD_CPU, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef SKF_AD_ALU_XOR_X
REGISTER_LONG_CONSTANT("SKF_AD_ALU_XOR_X", SKF_AD_ALU_XOR_X, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef SKF_AD_VLAN_TAG
REGISTER_LONG_CONSTANT("SKF_AD_VLAN_TAG", SKF_AD_VLAN_TAG, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef SKF_AD_VLAN_TAG_PRESENT
REGISTER_LONG_CONSTANT("SKF_AD_VLAN_TAG_PRESENT", SKF_AD_VLAN_TAG_PRESENT, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef SKF_AD_PAY_OFFSET
REGISTER_LONG_CONSTANT("SKF_AD_PAY_OFFSET", SKF_AD_PAY_OFFSET, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef SKF_AD_RANDOM
REGISTER_LONG_CONSTANT("SKF_AD_RANDOM", SKF_AD_RANDOM, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef SKF_AD_VLAN_TPID
REGISTER_LONG_CONSTANT("SKF_AD_VLAN_TPID", SKF_AD_VLAN_TPID, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef SKF_AD_MAX
REGISTER_LONG_CONSTANT("SKF_AD_MAX", SKF_AD_MAX, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef TCP_NODELAY
REGISTER_LONG_CONSTANT("TCP_NODELAY", TCP_NODELAY, CONST_CS | CONST_PERSISTENT);
#endif

View file

@ -0,0 +1,23 @@
--TEST--
SO_BPF_EXTENSIONS socket_getopt test
--EXTENSIONS--
sockets
--SKIPIF--
<?php
if (!defined("SO_BPF_EXTENSIONS")) {
die("skip SO_BOF_EXTENSIONS");
}
?>
--FILE--
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket) {
die('Unable to create AF_INET socket [socket]');
}
$flags = socket_getopt( $socket, SOL_SOCKET, SO_BPF_EXTENSIONS);
if ($flags == false) die("socket_getopt");
echo "extensions supported flag $flags";
socket_close($socket);
?>
--EXPECTF--
extensions supported flag %d