Skip to content

Commit

Permalink
Add SO_BPF_EXTENSIONS flag to socket.
Browse files Browse the repository at this point in the history
Returns the supported bpf extensions from the kernel. Linux only.
Closes GH-8713.
  • Loading branch information
devnexen committed Jun 8, 2022
1 parent ed6dab2 commit d677cc1
Show file tree
Hide file tree
Showing 5 changed files with 89 additions and 0 deletions.
1 change: 1 addition & 0 deletions NEWS
Expand Up @@ -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)
Expand Down
1 change: 1 addition & 0 deletions UPGRADING
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions configure.ac
Expand Up @@ -395,6 +395,7 @@ fcntl.h \
grp.h \
ieeefp.h \
langinfo.h \
linux/filter.h \
linux/sock_diag.h \
malloc.h \
poll.h \
Expand Down
63 changes: 63 additions & 0 deletions ext/sockets/sockets.c
Expand Up @@ -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>
Expand Down Expand Up @@ -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
Expand Down
23 changes: 23 additions & 0 deletions ext/sockets/tests/socket_bpf_extensions.phpt
@@ -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

0 comments on commit d677cc1

Please sign in to comment.