diff --git a/mcproxy/Makefile b/mcproxy/Makefile new file mode 100644 index 0000000..f5d6a1d --- /dev/null +++ b/mcproxy/Makefile @@ -0,0 +1,70 @@ +# +# Copyright (C) 2014 Alvaro Fernandez Rojas +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=mcproxy +PKG_VERSION:=1.1.0 + +PKG_RELEASE=$(PKG_SOURCE_VERSION) + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=git://github.com/mcproxy/mcproxy.git +PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) +PKG_SOURCE_VERSION:=df2d117dd67a7948f86d7effc5b9ea8f372466d8 +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz + +include $(INCLUDE_DIR)/package.mk + +define Package/mcproxy + SECTION:=net + CATEGORY:=Network + SUBMENU:=Routing and Redirection + TITLE:=Multicast Proxy for IGMP/MLD + URL:=http://mcproxy.realmv6.org/ + DEPENDS:=+libpthread +libstdcpp @(!GCC_VERSION_4_4&&!GCC_VERSION_4_6) +endef + +define Package/mcproxy/description + mcproxy is a free & open source implementation of the IGMP/MLD proxy + function (see RFC4605) for Linux systems. It operates on the kernel + tables for multicast routing and allows for multiple instantiations, + as well as dynamically changing downstream interfaces. + + The current design was motivated by research and IETF standardization + activities in the MULTIMOB group (see RFC6224 and + draft-ietf-multimob-pmipv6-source) and shall serve as a test and + experimentation tool for the research community. +endef + +define Build/Configure + $(CP) ./src/Makefile $(PKG_BUILD_DIR)/mcproxy/ +endef + +TARGET_CXXFLAGS += -pipe -std=c++11 -O2 -Wall -W -fPIE +TARGET_LFLAGS += -Wl,-O1 +TARGET_INCPATH += -I. +TARGET_LIBS += -lpthread + +define Build/Compile + $(MAKE) -C $(PKG_BUILD_DIR)/mcproxy \ + CXX="$(TARGET_CXX)" \ + CFLAGS="$(TARGET_CFLAGS)" \ + CXXFLAGS="$(TARGET_CXXFLAGS)" \ + LFLAGS="$(TARGET_LFLAGS)" \ + INCPATH="$(TARGET_INCPATH)" \ + LIBS="$(TARGET_LIBS)" +endef + +define Package/mcproxy/install + $(INSTALL_DIR) $(1)/etc $(1)/etc/init.d $(1)/usr/sbin + $(INSTALL_CONF) ./files/mcproxy.conf $(1)/etc/mcproxy.conf + $(INSTALL_BIN) ./files/mcproxy.init $(1)/etc/init.d/mcproxy + $(INSTALL_BIN) $(PKG_BUILD_DIR)/mcproxy/mcproxy $(1)/usr/sbin +endef + +$(eval $(call BuildPackage,mcproxy)) diff --git a/mcproxy/files/mcproxy.conf b/mcproxy/files/mcproxy.conf new file mode 100644 index 0000000..d538daa --- /dev/null +++ b/mcproxy/files/mcproxy.conf @@ -0,0 +1,17 @@ +###################################### +##-- mcproxy configuration script --## +###################################### + +# Erase or comment out the following line when configured +disable; + +# IPv4 +protocol IGMPv3; +# IPv6 +#protocol MLDv2; + +# Upstream eth1 and downstream eth0.1 +pinstance proxy: eth1 ==> "eth0.1"; + +# Upstream eth0.2 and downstream lan +#pinstance proxy: "eth0.2" ==> "br-lan"; diff --git a/mcproxy/files/mcproxy.init b/mcproxy/files/mcproxy.init new file mode 100755 index 0000000..b95176f --- /dev/null +++ b/mcproxy/files/mcproxy.init @@ -0,0 +1,23 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2014 OpenWrt.org + +START=99 +STOP=10 + +SERVICE_DAEMONIZE=1 +SERVICE_WRITE_PID=1 + +MCPROXY_BIN="/usr/sbin/mcproxy" +MCPROXY_CONF="/etc/mcproxy.conf" + +start() { + service_start $MCPROXY_BIN -f $MCPROXY_CONF +} + +stop() { + service_stop $MCPROXY_BIN +} + +reload() { + service_reload $MCPROXY_BIN +} diff --git a/mcproxy/patches/100-stoi_remove.patch b/mcproxy/patches/100-stoi_remove.patch new file mode 100644 index 0000000..944ea40 --- /dev/null +++ b/mcproxy/patches/100-stoi_remove.patch @@ -0,0 +1,57 @@ +--- a/mcproxy/src/parser/parser.cpp ++++ b/mcproxy/src/parser/parser.cpp +@@ -125,7 +125,10 @@ void parser::parse_instance_definition(i + get_next_token(); + if (m_current_token.get_type() == TT_STRING) { + try { +- table_number = std::stoi(m_current_token.get_string()); ++ std::stringstream convert; ++ ++ convert << m_current_token.get_string(); ++ convert >> table_number; + user_selected_table_number = true; + } catch (std::logic_error e) { + HC_LOG_ERROR("failed to parse line " << m_current_line << " table number: " << table_number << " is not a number"); +@@ -298,7 +301,11 @@ std::unique_ptr parser::pars + get_next_token(); + if (m_current_token.get_type() == TT_STRING) { + try { +- unsigned int prefix = std::stoi(m_current_token.get_string()); ++ std::stringstream convert; ++ unsigned int prefix; ++ ++ convert << m_current_token.get_string(); ++ convert >> prefix; + if (prefix > 128) { + throw; + } +@@ -560,7 +567,11 @@ void parser::parse_interface_rule_match_ + get_next_token(); + if (m_current_token.get_type() == TT_STRING) { + try { +- int tmp_timeout = std::stoi(m_current_token.get_string()); ++ std::stringstream convert; ++ int tmp_timeout; ++ ++ convert << m_current_token.get_string(); ++ convert >> tmp_timeout; + timeout = std::chrono::milliseconds(tmp_timeout); + } catch (...) { + error_notification(); +--- a/mcproxy/src/utils/addr_storage.cpp ++++ b/mcproxy/src/utils/addr_storage.cpp +@@ -298,7 +298,13 @@ addr_storage& addr_storage::set_port(uin + + addr_storage& addr_storage::set_port(const std::string& port) + { +- set_port(std::stoi(port.c_str())); ++ std::stringstream convert; ++ int num_port; ++ ++ convert << port; ++ convert >> num_port; ++ ++ set_port(num_port); + return *this; + } + diff --git a/mcproxy/patches/200-uclibc_sourcefilter.patch b/mcproxy/patches/200-uclibc_sourcefilter.patch new file mode 100644 index 0000000..b6d6a90 --- /dev/null +++ b/mcproxy/patches/200-uclibc_sourcefilter.patch @@ -0,0 +1,138 @@ +--- a/mcproxy/src/utils/mc_socket.cpp ++++ b/mcproxy/src/utils/mc_socket.cpp +@@ -37,6 +37,135 @@ + #include + #include + ++#ifdef __UCLIBC__ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++extern "C" { ++static const struct ++{ ++ int sol; ++ int af; ++ socklen_t size; ++} sol_map[] = ++ { ++ /* Sort the array according to importance of the protocols. Add ++ more protocols when they become available. */ ++ { SOL_IP, AF_INET, sizeof(struct sockaddr_in) }, ++ { SOL_IPV6, AF_INET6, sizeof(struct sockaddr_in6) }, ++ { SOL_AX25, AF_AX25, sizeof(struct sockaddr_ax25) }, ++ { SOL_IPX, AF_IPX, sizeof(struct sockaddr_ipx) }, ++ { SOL_PACKET, AF_PACKET, sizeof(struct sockaddr_ll) } ++ }; ++#define NSOL_MAP (sizeof(sol_map) / sizeof(sol_map[0])) ++ ++/* Try to determine the socket level value. Ideally both side and ++ family are set. But sometimes only the size is correct and the ++ family value might be bogus. Loop over the array entries and look ++ for a perfect match or the first match based on size. */ ++int __get_sol(int af, socklen_t len) ++{ ++ int first_size_sol = -1; ++ for (size_t cnt = 0; cnt < NSOL_MAP; ++cnt) { ++ /* Just a test so that we make sure the special value used to ++ signal the "we have so far no socket level value" is OK. */ ++ assert(sol_map[cnt].sol != -1); ++ ++ if (len == sol_map[cnt].size) { ++ /* The size matches, which is a requirement. If the family ++ matches, too, we have a winner. Otherwise we remember the ++ socket level value for this protocol if it is the first ++ match. */ ++ if (af == sol_map[cnt].af) ++ return sol_map[cnt].sol; ++ ++ if (first_size_sol == -1) ++ first_size_sol = sol_map[cnt].sol; ++ } ++ } ++ ++ return first_size_sol; ++} ++ ++int getsourcefilter(int s, uint32_t interface, const struct sockaddr *group, ++ socklen_t grouplen, uint32_t *fmode, uint32_t *numsrc, ++ struct sockaddr_storage *slist) ++{ ++ socklen_t needed = GROUP_FILTER_SIZE(*numsrc); ++ struct group_filter *gf; ++ ++ gf = (struct group_filter *) malloc(needed); ++ if (gf == NULL) ++ return -1; ++ ++ gf->gf_interface = interface; ++ memcpy(&gf->gf_group, group, grouplen); ++ gf->gf_numsrc = *numsrc; ++ ++ /* We need to provide the appropriate socket level value. */ ++ int result; ++ int sol = __get_sol(group->sa_family, grouplen); ++ if (sol == -1) { ++ result = -1; ++ } ++ else { ++ result = getsockopt(s, sol, MCAST_MSFILTER, gf, &needed); ++ ++ /* If successful, copy the results to the places the caller wants ++ them in. */ ++ if (result == 0) { ++ *fmode = gf->gf_fmode; ++ memcpy(slist, gf->gf_slist, ++ MIN(*numsrc, gf->gf_numsrc) ++ * sizeof(struct sockaddr_storage)); ++ *numsrc = gf->gf_numsrc; ++ } ++ } ++ ++ free(gf); ++ ++ return result; ++} ++ ++int setsourcefilter(int s, uint32_t interface, const struct sockaddr *group, ++ socklen_t grouplen, uint32_t fmode, uint32_t numsrc, ++ const struct sockaddr_storage *slist) ++{ ++ /* We have to create an struct ip_msfilter object which we can pass ++ to the kernel. */ ++ size_t needed = GROUP_FILTER_SIZE(numsrc); ++ struct group_filter *gf; ++ ++ gf = (struct group_filter *) malloc(needed); ++ if (gf == NULL) ++ return -1; ++ ++ gf->gf_interface = interface; ++ memcpy(&gf->gf_group, group, grouplen); ++ gf->gf_fmode = fmode; ++ gf->gf_numsrc = numsrc; ++ memcpy(gf->gf_slist, slist, numsrc * sizeof(struct sockaddr_storage)); ++ ++ /* We need to provide the appropriate socket level value. */ ++ int result; ++ int sol = __get_sol(group->sa_family, grouplen); ++ if (sol == -1) { ++ result = -1; ++ } ++ else ++ result = setsockopt(s, sol, MCAST_MSFILTER, gf, needed); ++ ++ free(gf); ++ ++ return result; ++} ++} ++#endif /* __UCLIBC__ */ ++ + std::string ipAddrResolver(std::string ipAddr) + { + std::string str[][2] = { diff --git a/mcproxy/src/Makefile b/mcproxy/src/Makefile new file mode 100644 index 0000000..c135fb5 --- /dev/null +++ b/mcproxy/src/Makefile @@ -0,0 +1,441 @@ +OBJECTS = main.o \ + hamcast_logging.o \ + mc_socket.o \ + addr_storage.o \ + mroute_socket.o \ + if_prop.o \ + reverse_path_filter.o \ + proxy.o \ + sender.o \ + receiver.o \ + mld_receiver.o \ + igmp_receiver.o \ + mld_sender.o \ + igmp_sender.o \ + proxy_instance.o \ + routing.o \ + worker.o \ + timing.o \ + check_if.o \ + check_kernel.o \ + membership_db.o \ + querier.o \ + timers_values.o \ + interfaces.o \ + def.o \ + simple_mc_proxy_routing.o \ + simple_routing_data.o \ + scanner.o \ + token.o \ + configuration.o \ + parser.o \ + interface.o + +TARGET = mcproxy + +####### Implicit rules + +.cpp.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +####### Build rules + +all: $(TARGET) + +$(TARGET): $(OBJECTS) + $(CXX) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) + +clean: + rm -f $(OBJECTS) $(TARGET) + +####### Compile + +main.o: src/main.cpp include/hamcast_logging.h \ + include/utils/if_prop.hpp \ + include/utils/mc_socket.hpp \ + include/utils/addr_storage.hpp \ + include/utils/mroute_socket.hpp \ + include/proxy/proxy.hpp \ + include/proxy/timing.hpp \ + include/proxy/message_format.hpp \ + include/proxy/def.hpp \ + include/proxy/interfaces.hpp \ + include/utils/reverse_path_filter.hpp \ + include/proxy/timers_values.hpp \ + include/parser/interface.hpp \ + include/proxy/check_if.hpp \ + include/proxy/membership_db.hpp \ + include/proxy/querier.hpp \ + include/proxy/proxy_instance.hpp \ + include/proxy/worker.hpp \ + include/proxy/message_queue.hpp \ + include/proxy/simple_mc_proxy_routing.hpp \ + include/proxy/routing_management.hpp \ + include/proxy/simple_routing_data.hpp \ + include/proxy/igmp_sender.hpp \ + include/proxy/sender.hpp \ + include/parser/configuration.hpp \ + include/parser/token.hpp \ + include/tester/tester.hpp \ + include/tester/config_map.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o src/main.cpp + +hamcast_logging.o: src/hamcast_logging.cpp include/hamcast_logging.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o hamcast_logging.o src/hamcast_logging.cpp + +mc_socket.o: src/utils/mc_socket.cpp include/hamcast_logging.h \ + include/utils/mc_socket.hpp \ + include/utils/addr_storage.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o mc_socket.o src/utils/mc_socket.cpp + +addr_storage.o: src/utils/addr_storage.cpp include/hamcast_logging.h \ + include/utils/addr_storage.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o addr_storage.o src/utils/addr_storage.cpp + +mroute_socket.o: src/utils/mroute_socket.cpp include/hamcast_logging.h \ + include/utils/mroute_socket.hpp \ + include/utils/mc_socket.hpp \ + include/utils/addr_storage.hpp \ + include/utils/extended_mld_defines.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o mroute_socket.o src/utils/mroute_socket.cpp + +if_prop.o: src/utils/if_prop.cpp include/hamcast_logging.h \ + include/utils/if_prop.hpp \ + include/utils/addr_storage.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o if_prop.o src/utils/if_prop.cpp + +reverse_path_filter.o: src/utils/reverse_path_filter.cpp include/utils/reverse_path_filter.hpp \ + include/hamcast_logging.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o reverse_path_filter.o src/utils/reverse_path_filter.cpp + +proxy.o: src/proxy/proxy.cpp include/hamcast_logging.h \ + include/proxy/proxy.hpp \ + include/proxy/check_kernel.hpp \ + include/proxy/timing.hpp \ + include/proxy/message_format.hpp \ + include/utils/addr_storage.hpp \ + include/proxy/def.hpp \ + include/proxy/interfaces.hpp \ + include/utils/if_prop.hpp \ + include/utils/reverse_path_filter.hpp \ + include/proxy/timers_values.hpp \ + include/parser/interface.hpp \ + include/proxy/proxy_instance.hpp \ + include/proxy/worker.hpp \ + include/proxy/message_queue.hpp \ + include/proxy/querier.hpp \ + include/proxy/membership_db.hpp \ + include/parser/configuration.hpp \ + include/parser/token.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o proxy.o src/proxy/proxy.cpp + +sender.o: src/proxy/sender.cpp include/hamcast_logging.h \ + include/proxy/sender.hpp \ + include/utils/mroute_socket.hpp \ + include/utils/mc_socket.hpp \ + include/utils/addr_storage.hpp \ + include/proxy/def.hpp \ + include/proxy/interfaces.hpp \ + include/utils/if_prop.hpp \ + include/utils/reverse_path_filter.hpp \ + include/proxy/message_format.hpp \ + include/proxy/timers_values.hpp \ + include/parser/interface.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o sender.o src/proxy/sender.cpp + +receiver.o: src/proxy/receiver.cpp include/hamcast_logging.h \ + include/proxy/receiver.hpp \ + include/utils/mroute_socket.hpp \ + include/utils/mc_socket.hpp \ + include/utils/addr_storage.hpp \ + include/proxy/interfaces.hpp \ + include/utils/if_prop.hpp \ + include/utils/reverse_path_filter.hpp \ + include/proxy/message_format.hpp \ + include/proxy/def.hpp \ + include/proxy/timers_values.hpp \ + include/parser/interface.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o receiver.o src/proxy/receiver.cpp + +mld_receiver.o: src/proxy/mld_receiver.cpp include/hamcast_logging.h \ + include/proxy/mld_receiver.hpp \ + include/proxy/receiver.hpp \ + include/utils/mroute_socket.hpp \ + include/utils/mc_socket.hpp \ + include/utils/addr_storage.hpp \ + include/proxy/interfaces.hpp \ + include/utils/if_prop.hpp \ + include/utils/reverse_path_filter.hpp \ + include/proxy/message_format.hpp \ + include/proxy/def.hpp \ + include/proxy/timers_values.hpp \ + include/parser/interface.hpp \ + include/proxy/proxy_instance.hpp \ + include/proxy/worker.hpp \ + include/proxy/message_queue.hpp \ + include/proxy/querier.hpp \ + include/proxy/membership_db.hpp \ + include/utils/extended_mld_defines.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o mld_receiver.o src/proxy/mld_receiver.cpp + +igmp_receiver.o: src/proxy/igmp_receiver.cpp include/hamcast_logging.h \ + include/proxy/igmp_receiver.hpp \ + include/proxy/receiver.hpp \ + include/utils/mroute_socket.hpp \ + include/utils/mc_socket.hpp \ + include/utils/addr_storage.hpp \ + include/proxy/interfaces.hpp \ + include/utils/if_prop.hpp \ + include/utils/reverse_path_filter.hpp \ + include/proxy/message_format.hpp \ + include/proxy/def.hpp \ + include/proxy/timers_values.hpp \ + include/parser/interface.hpp \ + include/proxy/proxy_instance.hpp \ + include/proxy/worker.hpp \ + include/proxy/message_queue.hpp \ + include/proxy/querier.hpp \ + include/proxy/membership_db.hpp \ + include/utils/extended_igmp_defines.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o igmp_receiver.o src/proxy/igmp_receiver.cpp + +mld_sender.o: src/proxy/mld_sender.cpp include/hamcast_logging.h \ + include/proxy/mld_sender.hpp \ + include/proxy/sender.hpp \ + include/utils/mroute_socket.hpp \ + include/utils/mc_socket.hpp \ + include/utils/addr_storage.hpp \ + include/proxy/def.hpp \ + include/proxy/interfaces.hpp \ + include/utils/if_prop.hpp \ + include/utils/reverse_path_filter.hpp \ + include/proxy/message_format.hpp \ + include/proxy/timers_values.hpp \ + include/parser/interface.hpp \ + include/utils/extended_mld_defines.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o mld_sender.o src/proxy/mld_sender.cpp + +igmp_sender.o: src/proxy/igmp_sender.cpp include/hamcast_logging.h \ + include/proxy/igmp_sender.hpp \ + include/proxy/sender.hpp \ + include/utils/mroute_socket.hpp \ + include/utils/mc_socket.hpp \ + include/utils/addr_storage.hpp \ + include/proxy/def.hpp \ + include/proxy/interfaces.hpp \ + include/utils/if_prop.hpp \ + include/utils/reverse_path_filter.hpp \ + include/proxy/message_format.hpp \ + include/proxy/timers_values.hpp \ + include/parser/interface.hpp \ + include/utils/extended_igmp_defines.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o igmp_sender.o src/proxy/igmp_sender.cpp + +proxy_instance.o: src/proxy/proxy_instance.cpp include/hamcast_logging.h \ + include/proxy/proxy_instance.hpp \ + include/proxy/worker.hpp \ + include/proxy/message_queue.hpp \ + include/proxy/message_format.hpp \ + include/utils/addr_storage.hpp \ + include/proxy/def.hpp \ + include/proxy/interfaces.hpp \ + include/utils/if_prop.hpp \ + include/utils/reverse_path_filter.hpp \ + include/proxy/timers_values.hpp \ + include/parser/interface.hpp \ + include/proxy/querier.hpp \ + include/proxy/membership_db.hpp \ + include/proxy/receiver.hpp \ + include/utils/mroute_socket.hpp \ + include/utils/mc_socket.hpp \ + include/proxy/igmp_receiver.hpp \ + include/proxy/mld_receiver.hpp \ + include/proxy/sender.hpp \ + include/proxy/igmp_sender.hpp \ + include/proxy/mld_sender.hpp \ + include/proxy/routing.hpp \ + include/proxy/timing.hpp \ + include/proxy/routing_management.hpp \ + include/proxy/simple_mc_proxy_routing.hpp \ + include/proxy/simple_routing_data.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o proxy_instance.o src/proxy/proxy_instance.cpp + +routing.o: src/proxy/routing.cpp include/hamcast_logging.h \ + include/proxy/routing.hpp \ + include/utils/if_prop.hpp \ + include/proxy/interfaces.hpp \ + include/utils/reverse_path_filter.hpp \ + include/utils/addr_storage.hpp \ + include/utils/mroute_socket.hpp \ + include/utils/mc_socket.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o routing.o src/proxy/routing.cpp + +worker.o: src/proxy/worker.cpp include/hamcast_logging.h \ + include/proxy/worker.hpp \ + include/proxy/message_queue.hpp \ + include/proxy/message_format.hpp \ + include/utils/addr_storage.hpp \ + include/proxy/def.hpp \ + include/proxy/interfaces.hpp \ + include/utils/if_prop.hpp \ + include/utils/reverse_path_filter.hpp \ + include/proxy/timers_values.hpp \ + include/parser/interface.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o worker.o src/proxy/worker.cpp + +timing.o: src/proxy/timing.cpp include/hamcast_logging.h \ + include/proxy/timing.hpp \ + include/proxy/message_format.hpp \ + include/utils/addr_storage.hpp \ + include/proxy/def.hpp \ + include/proxy/interfaces.hpp \ + include/utils/if_prop.hpp \ + include/utils/reverse_path_filter.hpp \ + include/proxy/timers_values.hpp \ + include/parser/interface.hpp \ + include/proxy/worker.hpp \ + include/proxy/message_queue.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o timing.o src/proxy/timing.cpp + +check_if.o: src/proxy/check_if.cpp include/hamcast_logging.h \ + include/proxy/check_if.hpp \ + include/utils/if_prop.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o check_if.o src/proxy/check_if.cpp + +check_kernel.o: src/proxy/check_kernel.cpp include/hamcast_logging.h \ + include/proxy/check_kernel.hpp \ + include/utils/mroute_socket.hpp \ + include/utils/mc_socket.hpp \ + include/utils/addr_storage.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o check_kernel.o src/proxy/check_kernel.cpp + +membership_db.o: src/proxy/membership_db.cpp include/proxy/membership_db.hpp \ + include/utils/addr_storage.hpp \ + include/proxy/def.hpp \ + include/proxy/message_format.hpp \ + include/hamcast_logging.h \ + include/proxy/interfaces.hpp \ + include/utils/if_prop.hpp \ + include/utils/reverse_path_filter.hpp \ + include/proxy/timers_values.hpp \ + include/parser/interface.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o membership_db.o src/proxy/membership_db.cpp + +querier.o: src/proxy/querier.cpp include/hamcast_logging.h \ + include/proxy/querier.hpp \ + include/proxy/membership_db.hpp \ + include/utils/addr_storage.hpp \ + include/proxy/def.hpp \ + include/proxy/message_format.hpp \ + include/proxy/interfaces.hpp \ + include/utils/if_prop.hpp \ + include/utils/reverse_path_filter.hpp \ + include/proxy/timers_values.hpp \ + include/parser/interface.hpp \ + include/proxy/timing.hpp \ + include/proxy/sender.hpp \ + include/utils/mroute_socket.hpp \ + include/utils/mc_socket.hpp \ + include/proxy/igmp_sender.hpp \ + include/proxy/mld_sender.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o querier.o src/proxy/querier.cpp + +timers_values.o: src/proxy/timers_values.cpp include/proxy/timers_values.hpp \ + include/hamcast_logging.h \ + include/proxy/membership_db.hpp \ + include/utils/addr_storage.hpp \ + include/proxy/def.hpp \ + include/proxy/message_format.hpp \ + include/proxy/interfaces.hpp \ + include/utils/if_prop.hpp \ + include/utils/reverse_path_filter.hpp \ + include/parser/interface.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o timers_values.o src/proxy/timers_values.cpp + +interfaces.o: src/proxy/interfaces.cpp include/hamcast_logging.h \ + include/proxy/interfaces.hpp \ + include/utils/if_prop.hpp \ + include/utils/reverse_path_filter.hpp \ + include/utils/addr_storage.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o interfaces.o src/proxy/interfaces.cpp + +def.o: src/proxy/def.cpp include/proxy/def.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o def.o src/proxy/def.cpp + +simple_mc_proxy_routing.o: src/proxy/simple_mc_proxy_routing.cpp include/hamcast_logging.h \ + include/proxy/simple_mc_proxy_routing.hpp \ + include/proxy/routing_management.hpp \ + include/proxy/def.hpp \ + include/proxy/simple_routing_data.hpp \ + include/parser/interface.hpp \ + include/utils/addr_storage.hpp \ + include/proxy/interfaces.hpp \ + include/utils/if_prop.hpp \ + include/utils/reverse_path_filter.hpp \ + include/proxy/proxy_instance.hpp \ + include/proxy/worker.hpp \ + include/proxy/message_queue.hpp \ + include/proxy/message_format.hpp \ + include/proxy/timers_values.hpp \ + include/proxy/querier.hpp \ + include/proxy/membership_db.hpp \ + include/proxy/routing.hpp \ + include/proxy/sender.hpp \ + include/utils/mroute_socket.hpp \ + include/utils/mc_socket.hpp \ + include/proxy/timing.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o simple_mc_proxy_routing.o src/proxy/simple_mc_proxy_routing.cpp + +simple_routing_data.o: src/proxy/simple_routing_data.cpp include/hamcast_logging.h \ + include/proxy/simple_routing_data.hpp \ + include/proxy/def.hpp \ + include/proxy/message_format.hpp \ + include/utils/addr_storage.hpp \ + include/proxy/interfaces.hpp \ + include/utils/if_prop.hpp \ + include/utils/reverse_path_filter.hpp \ + include/proxy/timers_values.hpp \ + include/parser/interface.hpp \ + include/utils/mroute_socket.hpp \ + include/utils/mc_socket.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o simple_routing_data.o src/proxy/simple_routing_data.cpp + +scanner.o: src/parser/scanner.cpp include/hamcast_logging.h \ + include/parser/scanner.hpp \ + include/parser/token.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o scanner.o src/parser/scanner.cpp + +token.o: src/parser/token.cpp include/hamcast_logging.h \ + include/parser/token.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o token.o src/parser/token.cpp + +configuration.o: src/parser/configuration.cpp include/hamcast_logging.h \ + include/parser/configuration.hpp \ + include/parser/token.hpp \ + include/parser/interface.hpp \ + include/utils/addr_storage.hpp \ + include/proxy/def.hpp \ + include/proxy/interfaces.hpp \ + include/utils/if_prop.hpp \ + include/utils/reverse_path_filter.hpp \ + include/parser/parser.hpp \ + include/parser/scanner.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o configuration.o src/parser/configuration.cpp + +parser.o: src/parser/parser.cpp include/hamcast_logging.h \ + include/parser/parser.hpp \ + include/parser/scanner.hpp \ + include/proxy/def.hpp \ + include/parser/token.hpp \ + include/parser/interface.hpp \ + include/utils/addr_storage.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o parser.o src/parser/parser.cpp + +interface.o: src/parser/interface.cpp include/hamcast_logging.h \ + include/parser/interface.hpp \ + include/utils/addr_storage.hpp \ + include/proxy/def.hpp \ + include/proxy/interfaces.hpp \ + include/utils/if_prop.hpp \ + include/utils/reverse_path_filter.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o interface.o src/parser/interface.cpp