Your suggestion about #2 look fine. But, as per the current usage of mcproxy in our scope, we may not switch to other service.
I am trying to search other options like, any filters/configuration in mcproxy.conf to add, so that forwarding to upstream won't occur even without subscribers.
Or, trying to check below code snippet in "mcproxy/src/proxy/simple_mc_proxy_routing.cpp" to modify below function and give a try.
std::list<std::pair<source, std::list<unsigned int>>> simple_mc_proxy_routing::collect_interested_interfaces(const addr_storage& gaddr, const source_list<source>& slist) const
{
HC_LOG_TRACE("");
const std::map<addr_storage, unsigned int>& input_if_index_map = m_data.get_interface_map(gaddr);
//add upstream interfaces
std::list<std::pair<source, std::list<unsigned int>>> rt_list;
for (auto & s : slist) {
auto input_if_it = input_if_index_map.find(s.saddr);
if (input_if_it == input_if_index_map.end()) {
HC_LOG_ERROR("input interface of multicast source " << s.saddr << " not found");
return rt_list;
}
if (m_p->is_downstream(input_if_it->second)) {
auto input_if_it = input_if_index_map.find(s.saddr);
if (input_if_it == input_if_index_map.end()) {
HC_LOG_ERROR("input interface of multicast source " << s.saddr << " not found");
continue;
}
std::list<unsigned int> up_if_list;
for (auto ui : m_p->m_upstreams) {
if (check_interface(IT_UPSTREAM, ID_OUT, ui.m_if_index, input_if_it->second, gaddr, s.saddr)) {
if (is_rule_matching_type(IT_UPSTREAM, ID_OUT, RMT_ALL)) {
up_if_list.push_back(ui.m_if_index); ////////////// I am assuming this is the location of the code, where the upstream IfIndex is getting added OUT-VIF list of the MCast Route Cache list using MRT_ADD_MFC