Giter Club home page Giter Club logo

mcproxy's Introduction

Introduction

Mcproxy is an IGMP/MLD Proxy daemon for Linux.

IGMP/MLD proxies offer the possibility option to combine local multicast networks with a larger multicast infrastructure. In contrast to multicast routers, proxies are lightweight and do not require the support of a multicast routing protocol such as PIM or DVMRP. A common use case is a local stub networks that interconnects with a remote multicast routing domain, e.g. via a tunnel. But it can also be used in PMIPv6 domain to enable multicast for sources (pmipv6-source-draft) and listeners (RFC 6224). The Mcproxy meets the requirements of the IGMP/MLD proxying standard (RFC 4605) and has additional functionalities. The multicast proxy can be instantiated multiple times, is dynamically configurable at runtime, supports multiple upstreams and peering-interfaces for a non hierarchical interconnection of multicast proxies.

If you use Mcproxy in a scientific context, please use the following citation.

Requirements

  • A g++ version equal or higher 4.8 is required.

  • To generate a makefile, qmake must be installed. This can be done with the following command:

newer systems:

    apt-get install qt5-qmake
    apt-get install qt5-default

older systems:

    apt-get install qt4-qmake
  • To use the IPv6 functionality the kernel has to be configured and compiled with the experimental kernel feature IPv6: multicast routing. For more details go to chapter Startup.

  • To use more then one proxy instance for IPv4 and IPv6 the kernel has to be configured and compiled with the experimental kernel feature IP: multicast policy routing and IPv6: multicast policy routing. For more details go to chapter Startup.

  • To build the documentation, doxygen must be installed. This can be done with the following command:

     apt-get install doxygen
    
  • The Mcproxy has to be started with root privileges.

  • A Linux kernel version greater than version 2.6.32 is required.

Compilation

Build Mcproxy in release mode:

cd mcproxy/
qmake 
make

Build Mcproxy in debug mode:

cd mcproxy/
qmake CONFIG+=debug
make

Installation

To copy Mcproxy to the system directory, run (optional):

make install

Documentation

Mcproxy includes a HTML documentation. The documentation will be located in the docs/ directory after the execution of:

make doc

Startup

At first you should check the available kernel features of your system. Type the following command:

sudo mcproxy -c

If a kernel feature you need is missing you have to reconfigure and recompile your linux kernel. In the debug folder is a README file which could help you with this problem.

To run the Mcproxy you need to create a valid configuration file. There is an example in the project folder (mcproxy.conf).

  • To run the Mcproxy in the background type the following command:

     sudo nohup mcproxy -f <path/to/config_file> &
    
  • To run the mcprocy with all available status and debug messages:

     sudo mcproxy -dsvv -f <path/to/config_file>
    

For more information see mcproxy -h or visit our project page.

Contact

Project page: http://mcproxy.realmv6.org/

Mailing list: [email protected]

Acknowledgement

Álvaro Fernández Rojas, Florian Ecard, Hai Shalom, Zhi Chen

mcproxy's People

Contributors

noltari avatar woelke avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mcproxy's Issues

IGMPv2 supported or not?

Hi

I'd like to know if mcproxy really supports IGMPv2.
According to the documentation - yes, but when I try to use it instead of igmpproxy I just get the following errors:

ERROR: protocoll not supported igmpv2 mem report
ERROR: protocoll not supported igmpv2 leave group

Or when I try to enable it in .conf file like following:
...
protocol IGMPv2; #IPv4
...
mcproxy just barks
ERROR: igmpv2 not supported
ERROR: failed to initialise query startup

BR,
Denis

Does it support auto add downstream interfaces?

I want to make mcproxy work on a pppoe server and the upstream interface is eth0,when new client up the server will generate a ppp interface such as ppp0 . ppp1 and ppp…, I want mcproxy can auto detect these ppp interface and add it to the downstream interfaces

mld_sender::send_record has an code error

the line "else if (filter_mode == EXCLUDE_MODE || filter_mode == EXCLUDE_MODE)" has an repeated expression and will lead to mld message with source specific multicast send failed. So it should be "else if (filter_mode == EXCLUDE_MODE || filter_mode == INCLUDE_MODE)" .

MLD: IPV6_MULTICAST_IF and incorrect src address of Queries

RFC 3810, 5.1.14. Source Addresses for Queries:
All MLDv2 Queries MUST be sent with a valid IPv6 link-local source address.

When you use IPV6_MULTICAST_IF you select output interface for MLD Queries but not source address. In this case Linux Kernel will select source address according to RFC6724 (prefer appropriate scope).

Example: we have multicast group FF0E::2.
General Queries have destination address FF02::1 ==> local scope ==> kernel use link-local address as a source address.
Address Specific Queries have dest address FF0E::2 ==> global scope ==> kernel use global address as a source address. As a result clients will ignore these queries.

As a solution you should use sendmsg() with IPV6_PKTINFO.

Scope issue with MLDv2 and mcproxy?

I am trying to get MLDv2 proxying to work using mcproxy. I start mcproxy manually from the command line with a configuration file specifying just upstream/downstream interfaces. Using mcproxy -dvvsf conffile I can see the client MLDv2 join being seen by mcproxy with correct S,G, but no MLDv2 join is sent to the upstream interface my mcproxy.

I am using multicast group that starts with ff38::.

When trying "omcproxy" I can successfully get multicast working by using:

omcproxy eth1,br-lan,scope=organization

If I set the scope to "global" then omcproxy doesn't work either. I can't from the documentation of mcproxy understand how to change the scope in mcproxy, if this is indeed the problem and mcproxy is not upstream joining this group because of scope filtering. Turning on debug information doesn't yield any relevant information. I am however receiving an error message saying:

ERROR: unknown filter mode

as soon as I do a join from the client downstream interface.

Delay in Routing

When testing the mcproxy on CentOS 7.6 I have noticed that the call to the add_mroute function is delayed when the node has more than 5-10 MC address bound on the upstream interface. These addresses are not routed to the downstream interface. If I stop the application that listens on these address the mcrproxy routes packet on the required MC addresses to the downstream interface in under 10 seconds. With the bound MC addresses on the upstream interface, this can blow out to 120 seconds.
Any help or ideas would be greatly appreciated.
I am using IGMPv3 with the upstream a bonded interface and the downstream a VLAN on the bonded interface.
pinstance myProxy1: bond0 ==> landsp;

I noticed the source from openwrt has been modified so I am looking into the changes.

protocol field in .conf file.

Independent of the configuration in *.conf file(i.e "protocol IGMPv2" or "protocol IGMPv3"), the proxy always sends v3 queries only.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.