[mcproxy] Add support for mcproxy v1.1.0. 21/head
authorÁlvaro Fernández Rojas <noltari@gmail.com>
Thu, 20 Mar 2014 15:46:14 +0000 (16:46 +0100)
committerÁlvaro Fernández Rojas <noltari@gmail.com>
Thu, 20 Mar 2014 15:46:14 +0000 (16:46 +0100)
mcproxy/Makefile [new file with mode: 0644]
mcproxy/files/mcproxy.conf [new file with mode: 0644]
mcproxy/files/mcproxy.init [new file with mode: 0755]
mcproxy/patches/100-stoi_remove.patch [new file with mode: 0644]
mcproxy/patches/200-uclibc_sourcefilter.patch [new file with mode: 0644]
mcproxy/src/Makefile [new file with mode: 0644]

diff --git a/mcproxy/Makefile b/mcproxy/Makefile
new file mode 100644 (file)
index 0000000..f5d6a1d
--- /dev/null
@@ -0,0 +1,70 @@
+#
+# Copyright (C) 2014 Alvaro Fernandez Rojas <noltari@gmail.com>
+#
+# 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 (file)
index 0000000..d538daa
--- /dev/null
@@ -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 (executable)
index 0000000..b95176f
--- /dev/null
@@ -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 (file)
index 0000000..944ea40
--- /dev/null
@@ -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<addr_match> 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 (file)
index 0000000..b6d6a90
--- /dev/null
@@ -0,0 +1,138 @@
+--- a/mcproxy/src/utils/mc_socket.cpp
++++ b/mcproxy/src/utils/mc_socket.cpp
+@@ -37,6 +37,135 @@
+ #include <numeric>
+ #include <unistd.h>
++#ifdef __UCLIBC__
++#include <assert.h>
++#include <netax25/ax25.h>
++#include <netipx/ipx.h>
++#include <stdlib.h>
++#include <sys/param.h>
++#include <sys/socket.h>
++
++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 (file)
index 0000000..c135fb5
--- /dev/null
@@ -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