Code Monkey home page Code Monkey logo

hpim_dm's People

Contributors

pedrofran12 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

elvissmog

hpim_dm's Issues

IGMP use as client and router?

Hi,

I want to implement IGMP to use it for receiving multicast traffic i.e. device should act as client. And again want to use it for router/snooper.

Is this both use cases of IGMP possible??

Thanks.

Unicast Routing Protocols

HPIM-DM is an hard state multicast routing protocol that uses the unicast routing table for RPF checks and also to detect loops:

  • One of the interfaces is elected as the "root-interface" or "iif" that will be used to receive multicast data packets and to send interest messages upstream the tree. All the other interfaces are named "non-root interfaces" or "oifs" that are used to forward multicast data packets received from the "root interface", as well to send upstream messages in order to elect a single multicast forwarder per link (in case more than one non-root interface is connected to a link). Multicast data packets received on "non-root interfaces" are simply discarded;
  • HPIM-DM uses the "feasibility condition", also used by some unicast routing protocols, to prevent the formation of routing loops, which could lead to the indefinite maintenance of multicast trees on routers. This condition states that a router only considers a tree to be active when there is an upstream router connected to a root interface with a lower unicast cost compared to the router itself (an upstream router must be closer to a multicast source from a unicast routing point of view). For routers directly connected to sources, a timer is used to determine if the source of multicast traffic is active.

This HPIM-DM implemenation checks the Linux unicast routing table (information from ip route) to determine the root interface as well to obtain unicast cost to a multicast source. Due to the feasibility condition used on HPIM-DM, the Linux unicast routing table must have consistent information. However some routing packages like most recent versions of Quagga set the metric of routes with a dummy value causing HPIM-DM to false suspect the existence of a loop and to not create multicast trees as expected.

This issue has the goal of listing unicast routing packages that were tested and are supported by this implementation of HPIM-DM, in which routing information is stored consistently on the Linux unicast routing table.

  • Quagga version 0.99.22.4 or older

TO-DO Improvements

This issue lists some ideas and future improvements that could be performed to HPIM-DM implementation/specification.

  • Relax the interest storage requirement of Assert Losers. Requires updating the specification.
  • BFD support?
  • Multiple physical interfaces of the same router directly connected to the source. If these interfaces are not a LAG there is the possibility of a loop (one interface considered root and the other(s) non-root -> which may cause data packets to be forwarded again to the source subnet by the non-root interface). Check specification and implementation if there is no issue (DONE #6).
  • Security -> Implement control message integrity & authentication check (DONE #3).
  • IGMPv3 and MLDv2.
  • IPv6 multicast routing support (update Kernel and implement MLD). (DONE #7)
  • Option to ignore the Feasibility Condition in determining the tree state. This may be useful in sub-topologies where it is impossible to form a network loop and in which there are different routing protocols being used (ex: all routers use OSPF but a subset uses default static routes).
  • All code should be in hpimdm package (in order to allow hpim-dm and pim-dm implementations to coexist). (DONE #4)
  • More automation on tests.
  • Forwarding state of a non-root interface that was AW should be preserved for a given amount of time to prevent loss of data packets when the AW changes. (DONE #5)
  • Better debug messages.
  • Try to remove tcpdump dependency (manually create BPF filter bytecode).
  • Change API used to access unicast routing information (ipdb will become deprecated).
  • Perform tests using other environment (current one does not have support for IPv6 multicast routing - limitations at the kernel level).
  • Multiple tables support. (DONE)
  • Have a configuration file to configure everything on startup.(DONE)
  • Multicast routing protocol takes into consideration interest of own router (router has application that joined some multicast groups)

Multiple tables support

HPIM-DM v1.3.3 supports the definition of multiple routing tables.

Unicast routing table:

  • By default, RPF checks and unicast metric information is obtained from the default unicast routing table (id 254). If intended this information can be obtained from a different table just by setting the expected table id at startup with -uvrf UNICAST_TABLE_ID.

Multicast routing table:

  • By default, all multicast trees are set on the default multicast routing table (id 0). If intended trees can be set on a different table by setting the expected table id at startup with -mvrf MULTICAST_TABLE_ID.
  • If the multicast routing table is different from the default one, multicast rules are automatically defined for all interfaces that are added to the protocol process. If interface eth0 is added to the protocol and the multicast routing table id is 5, the rules that are automatically defined are:
$ ip mrule add iif eth0 lookup 5
$ ip mrule add oif eth0 lookup 5

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.