From 7682bd90392cf1e3fcbf5230c4974dcb8bd5a68a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Sat, 5 Apr 2014 14:00:31 +0200 Subject: [PATCH 1/3] [mcproxy] Update to latest version. Avoid building for GCC 4.4 and GCC 4.6 (no c++11 support). Move to routing and redirection menu. Config cleanup (disable until configured, protocol info, example instances). --- mcproxy/Makefile | 7 ++++--- mcproxy/files/mcproxy.conf | 30 ++++++++---------------------- 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/mcproxy/Makefile b/mcproxy/Makefile index b96268a..364223d 100644 --- a/mcproxy/Makefile +++ b/mcproxy/Makefile @@ -8,8 +8,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mcproxy -PKG_SOURCE_VERSION:=986523a5d714be5cf6f65e4399045cbfecd415fd -PKG_VERSION:=2014-03-25-$(PKG_SOURCE_VERSION) +PKG_SOURCE_VERSION:=df2d117dd67a7948f86d7effc5b9ea8f372466d8 +PKG_VERSION:=2014-04-05-$(PKG_SOURCE_VERSION) PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git @@ -25,9 +25,10 @@ include $(INCLUDE_DIR)/cmake.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 + DEPENDS:=+libpthread +libstdcpp @(!GCC_VERSION_4_4&&!GCC_VERSION_4_6) endef define Package/mcproxy/description diff --git a/mcproxy/files/mcproxy.conf b/mcproxy/files/mcproxy.conf index 533c0f9..60a655e 100644 --- a/mcproxy/files/mcproxy.conf +++ b/mcproxy/files/mcproxy.conf @@ -2,27 +2,13 @@ ##-- mcproxy configuration script --## ###################################### -protocol MLDv2; #IPv6 -protocol IGMPv3; #IPv4 +# Erase or comment out the following line when configured +disable; -#pinstance myProxy: eth0 ==> eth1 eth2; -#pinstance my_second_instance: tun1 ==> "vlan-eth0.2"; - -# -# This confiugration example creates -# a multicast proxy for ipv4 with the -# upstream eth0 and two downstreams. -# -# | -# | -# +------+-----+ -# | eth0 | -# | | -# | myProxy | -# | | -# | eth1 eth2 | -# +---+----+---+ -# | | -# | | -# +# Protocol: IGMPv1|IGMPv2|IGMPv3 (IPv4) - MLDv1|MLDv2 (IPv6) +protocol IGMPv3; +# Proxy Instance: upstream ==> downstream +pinstance proxy1: eth1 ==> "eth0.1"; +#pinstance proxy2: "eth0.2" ==> "br-lan"; +#pinstance proxy3: eth0 ==> eth1 eth2; From 0e39fefd7f18cf4616b0cda8663693083727d9c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Sat, 5 Apr 2014 14:12:50 +0200 Subject: [PATCH 2/3] [mcproxy] Split patches. --- mcproxy/patches/0001-add-cmake.patch | 54 ++++++++ mcproxy/patches/0002-uclibc-rm-stoi.patch | 40 ++++++ ...tch => 0003-uclibc-add-sourcefilter.patch} | 124 ------------------ 3 files changed, 94 insertions(+), 124 deletions(-) create mode 100644 mcproxy/patches/0001-add-cmake.patch create mode 100644 mcproxy/patches/0002-uclibc-rm-stoi.patch rename mcproxy/patches/{0001-Add-CMake-and-uclibc-compatibility-support.patch => 0003-uclibc-add-sourcefilter.patch} (50%) diff --git a/mcproxy/patches/0001-add-cmake.patch b/mcproxy/patches/0001-add-cmake.patch new file mode 100644 index 0000000..69bfa36 --- /dev/null +++ b/mcproxy/patches/0001-add-cmake.patch @@ -0,0 +1,54 @@ +--- /dev/null ++++ b/CMakeLists.txt +@@ -0,0 +1,51 @@ ++cmake_minimum_required(VERSION 2.8) ++ ++# Project Definition ++project(mcproxy CXX) ++set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") ++set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11") ++add_definitions(-Wall -Wextra -pedantic) ++include_directories(${CMAKE_SOURCE_DIR}/mcproxy) ++ ++ ++add_executable(mcproxy-bin mcproxy/src/main.cpp ++ mcproxy/src/hamcast_logging.cpp ++ #utils ++ mcproxy/src/utils/mc_socket.cpp ++ mcproxy/src/utils/addr_storage.cpp ++ mcproxy/src/utils/mroute_socket.cpp ++ mcproxy/src/utils/if_prop.cpp ++ mcproxy/src/utils/reverse_path_filter.cpp ++ #proxy ++ mcproxy/src/proxy/proxy.cpp ++ mcproxy/src/proxy/sender.cpp ++ mcproxy/src/proxy/receiver.cpp ++ mcproxy/src/proxy/mld_receiver.cpp ++ mcproxy/src/proxy/igmp_receiver.cpp ++ mcproxy/src/proxy/mld_sender.cpp ++ mcproxy/src/proxy/igmp_sender.cpp ++ mcproxy/src/proxy/proxy_instance.cpp ++ mcproxy/src/proxy/routing.cpp ++ mcproxy/src/proxy/worker.cpp ++ mcproxy/src/proxy/timing.cpp ++ mcproxy/src/proxy/check_if.cpp ++ mcproxy/src/proxy/check_kernel.cpp ++ mcproxy/src/proxy/membership_db.cpp ++ mcproxy/src/proxy/querier.cpp ++ mcproxy/src/proxy/timers_values.cpp ++ mcproxy/src/proxy/interfaces.cpp ++ mcproxy/src/proxy/def.cpp ++ mcproxy/src/proxy/simple_mc_proxy_routing.cpp ++ mcproxy/src/proxy/simple_routing_data.cpp ++ #parser ++ mcproxy/src/parser/scanner.cpp ++ mcproxy/src/parser/token.cpp ++ mcproxy/src/parser/configuration.cpp ++ mcproxy/src/parser/parser.cpp ++ mcproxy/src/parser/interface.cpp ++) ++target_link_libraries(mcproxy-bin pthread) ++ ++# Installation ++install(TARGETS mcproxy-bin DESTINATION bin/) ++ diff --git a/mcproxy/patches/0002-uclibc-rm-stoi.patch b/mcproxy/patches/0002-uclibc-rm-stoi.patch new file mode 100644 index 0000000..a25c9fb --- /dev/null +++ b/mcproxy/patches/0002-uclibc-rm-stoi.patch @@ -0,0 +1,40 @@ +--- a/mcproxy/src/parser/parser.cpp ++++ b/mcproxy/src/parser/parser.cpp +@@ -126,7 +126,7 @@ 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()); ++ table_number = atoi(m_current_token.get_string().c_str()); + 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"); +@@ -299,7 +299,7 @@ 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()); ++ unsigned int prefix = atoi(m_current_token.get_string().c_str()); + if (prefix > 128) { + throw; + } +@@ -561,7 +561,7 @@ 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()); ++ int tmp_timeout = atoi(m_current_token.get_string().c_str()); + 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,7 @@ addr_storage& addr_storage::set_port(uin + + addr_storage& addr_storage::set_port(const std::string& port) + { +- set_port(std::stoi(port.c_str())); ++ set_port(atoi(port.c_str())); + return *this; + } + diff --git a/mcproxy/patches/0001-Add-CMake-and-uclibc-compatibility-support.patch b/mcproxy/patches/0003-uclibc-add-sourcefilter.patch similarity index 50% rename from mcproxy/patches/0001-Add-CMake-and-uclibc-compatibility-support.patch rename to mcproxy/patches/0003-uclibc-add-sourcefilter.patch index 01571e9..8e7832c 100644 --- a/mcproxy/patches/0001-Add-CMake-and-uclibc-compatibility-support.patch +++ b/mcproxy/patches/0003-uclibc-add-sourcefilter.patch @@ -1,121 +1,3 @@ -From 7618500760e3c9c0d831714fdedb497c0738e131 Mon Sep 17 00:00:00 2001 -From: Steven Barth -Date: Tue, 25 Mar 2014 15:09:11 +0100 -Subject: [PATCH] Add CMake and uclibc support - ---- - CMakeLists.txt | 51 +++++++++++ - mcproxy/src/parser/parser.cpp | 6 +- - mcproxy/src/utils/addr_storage.cpp | 2 +- - mcproxy/src/utils/mc_socket.cpp | 2 + - mcproxy/src/utils/sourcefilter.cpp | 168 +++++++++++++++++++++++++++++++++++++ - 5 files changed, 225 insertions(+), 4 deletions(-) - create mode 100644 CMakeLists.txt - create mode 100644 mcproxy/src/utils/sourcefilter.cpp - -diff --git a/CMakeLists.txt b/CMakeLists.txt -new file mode 100644 -index 0000000..7499c19 ---- /dev/null -+++ b/CMakeLists.txt -@@ -0,0 +1,51 @@ -+cmake_minimum_required(VERSION 2.8) -+ -+# Project Definition -+project(mcproxy CXX) -+set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") -+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11") -+add_definitions(-Wall -Wextra -pedantic) -+include_directories(${CMAKE_SOURCE_DIR}/mcproxy) -+ -+ -+add_executable(mcproxy-bin mcproxy/src/main.cpp -+ mcproxy/src/hamcast_logging.cpp -+ #utils -+ mcproxy/src/utils/mc_socket.cpp -+ mcproxy/src/utils/addr_storage.cpp -+ mcproxy/src/utils/mroute_socket.cpp -+ mcproxy/src/utils/if_prop.cpp -+ mcproxy/src/utils/reverse_path_filter.cpp -+ #proxy -+ mcproxy/src/proxy/proxy.cpp -+ mcproxy/src/proxy/sender.cpp -+ mcproxy/src/proxy/receiver.cpp -+ mcproxy/src/proxy/mld_receiver.cpp -+ mcproxy/src/proxy/igmp_receiver.cpp -+ mcproxy/src/proxy/mld_sender.cpp -+ mcproxy/src/proxy/igmp_sender.cpp -+ mcproxy/src/proxy/proxy_instance.cpp -+ mcproxy/src/proxy/routing.cpp -+ mcproxy/src/proxy/worker.cpp -+ mcproxy/src/proxy/timing.cpp -+ mcproxy/src/proxy/check_if.cpp -+ mcproxy/src/proxy/check_kernel.cpp -+ mcproxy/src/proxy/membership_db.cpp -+ mcproxy/src/proxy/querier.cpp -+ mcproxy/src/proxy/timers_values.cpp -+ mcproxy/src/proxy/interfaces.cpp -+ mcproxy/src/proxy/def.cpp -+ mcproxy/src/proxy/simple_mc_proxy_routing.cpp -+ mcproxy/src/proxy/simple_routing_data.cpp -+ #parser -+ mcproxy/src/parser/scanner.cpp -+ mcproxy/src/parser/token.cpp -+ mcproxy/src/parser/configuration.cpp -+ mcproxy/src/parser/parser.cpp -+ mcproxy/src/parser/interface.cpp -+) -+target_link_libraries(mcproxy-bin pthread) -+ -+# Installation -+install(TARGETS mcproxy-bin DESTINATION bin/) -+ -diff --git a/mcproxy/src/parser/parser.cpp b/mcproxy/src/parser/parser.cpp -index c196be9..516a700 100644 ---- a/mcproxy/src/parser/parser.cpp -+++ b/mcproxy/src/parser/parser.cpp -@@ -125,7 +125,7 @@ void parser::parse_instance_definition(inst_def_set& ids) - get_next_token(); - if (m_current_token.get_type() == TT_STRING) { - try { -- table_number = std::stoi(m_current_token.get_string()); -+ table_number = atoi(m_current_token.get_string().c_str()); - 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 +298,7 @@ std::unique_ptr parser::parse_rule_part(group_mem_protocol gmp) - get_next_token(); - if (m_current_token.get_type() == TT_STRING) { - try { -- unsigned int prefix = std::stoi(m_current_token.get_string()); -+ unsigned int prefix = atoi(m_current_token.get_string().c_str()); - if (prefix > 128) { - throw; - } -@@ -560,7 +560,7 @@ void parser::parse_interface_rule_match_binding( - get_next_token(); - if (m_current_token.get_type() == TT_STRING) { - try { -- int tmp_timeout = std::stoi(m_current_token.get_string()); -+ int tmp_timeout = atoi(m_current_token.get_string().c_str()); - timeout = std::chrono::milliseconds(tmp_timeout); - } catch (...) { - error_notification(); -diff --git a/mcproxy/src/utils/addr_storage.cpp b/mcproxy/src/utils/addr_storage.cpp -index 125ccbf..e812ac9 100644 ---- a/mcproxy/src/utils/addr_storage.cpp -+++ b/mcproxy/src/utils/addr_storage.cpp -@@ -298,7 +298,7 @@ addr_storage& addr_storage::set_port(uint16_t port) - - addr_storage& addr_storage::set_port(const std::string& port) - { -- set_port(std::stoi(port.c_str())); -+ set_port(atoi(port.c_str())); - return *this; - } - -diff --git a/mcproxy/src/utils/mc_socket.cpp b/mcproxy/src/utils/mc_socket.cpp -index b8fb3ae..8c32e08 100644 --- a/mcproxy/src/utils/mc_socket.cpp +++ b/mcproxy/src/utils/mc_socket.cpp @@ -37,6 +37,8 @@ @@ -127,9 +9,6 @@ index b8fb3ae..8c32e08 100644 std::string ipAddrResolver(std::string ipAddr) { std::string str[][2] = { -diff --git a/mcproxy/src/utils/sourcefilter.cpp b/mcproxy/src/utils/sourcefilter.cpp -new file mode 100644 -index 0000000..64aafde --- /dev/null +++ b/mcproxy/src/utils/sourcefilter.cpp @@ -0,0 +1,168 @@ @@ -301,6 +180,3 @@ index 0000000..64aafde + + return result; +} --- -1.8.3.2 - From 983c205bec7f70c29e6a662c0d21cbd1b1fa3680 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Sat, 5 Apr 2014 14:21:28 +0200 Subject: [PATCH 3/3] [mcproxy] Add sourcefilter only for uClibc. --- mcproxy/patches/0003-uclibc-add-sourcefilter.patch | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/mcproxy/patches/0003-uclibc-add-sourcefilter.patch b/mcproxy/patches/0003-uclibc-add-sourcefilter.patch index 8e7832c..7c4e90c 100644 --- a/mcproxy/patches/0003-uclibc-add-sourcefilter.patch +++ b/mcproxy/patches/0003-uclibc-add-sourcefilter.patch @@ -1,17 +1,19 @@ --- a/mcproxy/src/utils/mc_socket.cpp +++ b/mcproxy/src/utils/mc_socket.cpp -@@ -37,6 +37,8 @@ +@@ -37,6 +37,10 @@ #include #include ++#ifdef __UCLIBC__ +#include "sourcefilter.cpp" ++#endif /* __UCLIBC__ */ + std::string ipAddrResolver(std::string ipAddr) { std::string str[][2] = { --- /dev/null +++ b/mcproxy/src/utils/sourcefilter.cpp -@@ -0,0 +1,168 @@ +@@ -0,0 +1,165 @@ +/* Get source filter. Linux version. + Copyright (C) 2004-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. @@ -41,9 +43,6 @@ +#include +#include + -+#define getsourcefilter getsourcefilter2 -+#define setsourcefilter setsourcefilter2 -+ +static const struct +{ + int sol; @@ -95,7 +94,7 @@ + + +int -+getsourcefilter2 (int s, uint32_t interface, const struct sockaddr *group, ++getsourcefilter (int s, uint32_t interface, const struct sockaddr *group, + socklen_t grouplen, uint32_t *fmode, uint32_t *numsrc, + struct sockaddr_storage *slist) +{ @@ -144,7 +143,7 @@ + + +int -+setsourcefilter2 (int s, uint32_t interface, const struct sockaddr *group, ++setsourcefilter (int s, uint32_t interface, const struct sockaddr *group, + socklen_t grouplen, uint32_t fmode, uint32_t numsrc, + const struct sockaddr_storage *slist) +{