diff --git a/configure.ac b/configure.ac index bed4b063bcc54..73c7edeae3db1 100644 --- a/configure.ac +++ b/configure.ac @@ -395,6 +395,7 @@ fcntl.h \ grp.h \ ieeefp.h \ langinfo.h \ +linux/filter.h \ linux/sock_diag.h \ malloc.h \ poll.h \ diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c index 67c2038324a43..07d44b4d2db2a 100644 --- a/ext/sockets/sockets.c +++ b/ext/sockets/sockets.c @@ -60,6 +60,11 @@ # else # undef SO_MEMINFO # endif +# if defined(HAVE_LINUX_FILTER_H) +# include +# else +# undef SO_BPF_EXTENSIONS +# endif #endif #include @@ -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 diff --git a/ext/sockets/tests/socket_bpf_extensions.phpt b/ext/sockets/tests/socket_bpf_extensions.phpt new file mode 100644 index 0000000000000..a9f97dfd181a3 --- /dev/null +++ b/ext/sockets/tests/socket_bpf_extensions.phpt @@ -0,0 +1,23 @@ +--TEST-- +SO_BPF_EXTENSIONS socket_getopt test +--EXTENSIONS-- +sockets +--SKIPIF-- + +--FILE-- + +--EXPECTF-- +extensions supported flag %d