xref: /PHP-7.1/ext/sockets/multicast.h (revision ccd4716e)
1 /*
2    +----------------------------------------------------------------------+
3    | PHP Version 7                                                        |
4    +----------------------------------------------------------------------+
5    | Copyright (c) 1997-2018 The PHP Group                                |
6    +----------------------------------------------------------------------+
7    | This source file is subject to version 3.01 of the PHP license,      |
8    | that is bundled with this package in the file LICENSE, and is        |
9    | available through the world-wide-web at the following url:           |
10    | http://www.php.net/license/3_01.txt                                  |
11    | If you did not receive a copy of the PHP license and are unable to   |
12    | obtain it through the world-wide-web, please send a note to          |
13    | license@php.net so we can mail you a copy immediately.               |
14    +----------------------------------------------------------------------+
15    | Authors: Gustavo Lopes    <cataphract@php.net>                       |
16    +----------------------------------------------------------------------+
17  */
18 
19 /* $Id$ */
20 
21 #if defined(MCAST_JOIN_GROUP) && !defined(__APPLE__)
22 # define RFC3678_API 1
23 /* has block/unblock and source membership, in this case for both IPv4 and IPv6 */
24 # define HAS_MCAST_EXT 1
25 #elif defined(IP_ADD_SOURCE_MEMBERSHIP) && !defined(__APPLE__)
26 /* has block/unblock and source membership, but only for IPv4 */
27 # define HAS_MCAST_EXT 1
28 #endif
29 
30 #ifndef RFC3678_API
31 # define PHP_MCAST_JOIN_GROUP			IP_ADD_MEMBERSHIP
32 # define PHP_MCAST_LEAVE_GROUP			IP_DROP_MEMBERSHIP
33 # ifdef HAS_MCAST_EXT
34 #  define PHP_MCAST_BLOCK_SOURCE		IP_BLOCK_SOURCE
35 #  define PHP_MCAST_UNBLOCK_SOURCE		IP_UNBLOCK_SOURCE
36 #  define PHP_MCAST_JOIN_SOURCE_GROUP	IP_ADD_SOURCE_MEMBERSHIP
37 #  define PHP_MCAST_LEAVE_SOURCE_GROUP	IP_DROP_SOURCE_MEMBERSHIP
38 # endif
39 #else
40 # define PHP_MCAST_JOIN_GROUP			MCAST_JOIN_GROUP
41 # define PHP_MCAST_LEAVE_GROUP			MCAST_LEAVE_GROUP
42 # define PHP_MCAST_BLOCK_SOURCE			MCAST_BLOCK_SOURCE
43 # define PHP_MCAST_UNBLOCK_SOURCE		MCAST_UNBLOCK_SOURCE
44 # define PHP_MCAST_JOIN_SOURCE_GROUP	MCAST_JOIN_SOURCE_GROUP
45 # define PHP_MCAST_LEAVE_SOURCE_GROUP	MCAST_LEAVE_SOURCE_GROUP
46 #endif
47 
48 int php_do_setsockopt_ip_mcast(php_socket *php_sock,
49 							   int level,
50 							   int optname,
51 							   zval *arg4);
52 
53 int php_do_setsockopt_ipv6_mcast(php_socket *php_sock,
54 								 int level,
55 								 int optname,
56 								 zval *arg4);
57 
58 int php_if_index_to_addr4(
59         unsigned if_index,
60         php_socket *php_sock,
61         struct in_addr *out_addr);
62 
63 int php_add4_to_if_index(
64         struct in_addr *addr,
65         php_socket *php_sock,
66         unsigned *if_index);
67 
68 int php_string_to_if_index(const char *val, unsigned *out);
69 
70 int php_mcast_join(
71 	php_socket *sock,
72 	int level,
73 	struct sockaddr *group,
74 	socklen_t group_len,
75 	unsigned int if_index);
76 
77 int php_mcast_leave(
78 	php_socket *sock,
79 	int level,
80 	struct sockaddr *group,
81 	socklen_t group_len,
82 	unsigned int if_index);
83 
84 #ifdef HAS_MCAST_EXT
85 int php_mcast_join_source(
86 	php_socket *sock,
87 	int level,
88 	struct sockaddr *group,
89 	socklen_t group_len,
90 	struct sockaddr *source,
91 	socklen_t source_len,
92 	unsigned int if_index);
93 
94 int php_mcast_leave_source(
95 	php_socket *sock,
96 	int level,
97 	struct sockaddr *group,
98 	socklen_t group_len,
99 	struct sockaddr *source,
100 	socklen_t source_len,
101 	unsigned int if_index);
102 
103 int php_mcast_block_source(
104 	php_socket *sock,
105 	int level,
106 	struct sockaddr *group,
107 	socklen_t group_len,
108 	struct sockaddr *source,
109 	socklen_t source_len,
110 	unsigned int if_index);
111 
112 int php_mcast_unblock_source(
113 	php_socket *sock,
114 	int level,
115 	struct sockaddr *group,
116 	socklen_t group_len,
117 	struct sockaddr *source,
118 	socklen_t source_len,
119 	unsigned int if_index);
120 #endif
121