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_ */