Line data Source code
1 1 : /*
2 : * Copyright (c) 2021 Intel Corporation
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : /** @file
8 : * @brief IGMP API
9 : */
10 :
11 : #ifndef ZEPHYR_INCLUDE_NET_IGMP_H_
12 : #define ZEPHYR_INCLUDE_NET_IGMP_H_
13 :
14 : /**
15 : * @brief IGMP (Internet Group Management Protocol)
16 : * @defgroup igmp IGMP API
17 : * @since 2.6
18 : * @version 0.8.0
19 : * @ingroup networking
20 : * @{
21 : */
22 :
23 : #include <zephyr/types.h>
24 :
25 : #include <zephyr/net/net_if.h>
26 : #include <zephyr/net/net_ip.h>
27 :
28 : #ifdef __cplusplus
29 : extern "C" {
30 : #endif
31 :
32 : /** IGMP parameters */
33 1 : struct igmp_param {
34 1 : struct in_addr *source_list; /**< List of sources to include or exclude */
35 1 : size_t sources_len; /**< Length of source list */
36 1 : bool include; /**< Source list filter type */
37 : };
38 :
39 : /**
40 : * @brief Join a given multicast group.
41 : *
42 : * @param iface Network interface where join message is sent
43 : * @param addr Multicast group to join
44 : * @param param Optional parameters
45 : *
46 : * @return Return 0 if joining was done, <0 otherwise.
47 : */
48 : #if defined(CONFIG_NET_IPV4_IGMP)
49 : int net_ipv4_igmp_join(struct net_if *iface, const struct in_addr *addr,
50 : const struct igmp_param *param);
51 : #else
52 1 : static inline int net_ipv4_igmp_join(struct net_if *iface, const struct in_addr *addr,
53 : const struct igmp_param *param)
54 : {
55 : ARG_UNUSED(iface);
56 : ARG_UNUSED(addr);
57 : ARG_UNUSED(param);
58 :
59 : return -ENOSYS;
60 : }
61 : #endif
62 :
63 : /**
64 : * @brief Leave a given multicast group.
65 : *
66 : * @param iface Network interface where leave message is sent
67 : * @param addr Multicast group to leave
68 : *
69 : * @return Return 0 if leaving is done, <0 otherwise.
70 : */
71 : #if defined(CONFIG_NET_IPV4_IGMP)
72 : int net_ipv4_igmp_leave(struct net_if *iface, const struct in_addr *addr);
73 : #else
74 1 : static inline int net_ipv4_igmp_leave(struct net_if *iface,
75 : const struct in_addr *addr)
76 : {
77 : ARG_UNUSED(iface);
78 : ARG_UNUSED(addr);
79 :
80 : return -ENOSYS;
81 : }
82 : #endif
83 :
84 : #ifdef __cplusplus
85 : }
86 : #endif
87 :
88 : /**
89 : * @}
90 : */
91 :
92 : #endif /* ZEPHYR_INCLUDE_NET_IGMP_H_ */
|