IPv6 Advanced Protocols Implementation

Multicast Listener Discovery Protocol (IPv6 Multicasting)

The Multicast Listener Discovery (MLD) protocol is the multicast group management protocol for IPv6 and is used to exchange group information between multicast hosts and routers. The MLD protocol was designed based on IGMP, the Internet Group Management Protocol for IPv4, and the protocol specification is the same in many points. Unlike IGMP, however, MLD […]

Multicast Routing Fundamentals (IPv6 Multicasting) Part 1

Routing and forwarding in multicast are quite different from unicast. First, since there are typically multiple recipients of a single original packet, the packet’s delivery path has many branches, making the entire path a distribution tree. Secondly, unlike unicast routing, the source address information has an important role in forwarding multicast packets. Additionally, behavior of […]

Multicast Routing Fundamentals (IPv6 Multicasting) Part 2

PIM Dense Mode PIM-DM operates on the flood and prune model. Initially, multicast packets are flooded throughout the entire PIM routing domain with the PIM-DM protocol. Unnecessary delivery paths to leaf networks that are without any group memberships are then pruned from the forwarding tree using the PIM Join/Prune messages. This process has been illustrated […]

Code Introduction (IPv6 Multicasting)

The KAME implementation of IPv6 multicasting supports both the host and the router aspects of the protocols. Figure 2-17 provides an overview of the architecture of the KAME multicast implementation. The host aspect of the MLD protocol is implemented in the kernel. User applications access the host services related to IPv6 multicasting through the Basic […]

MLD Implementation (IPv6 Multicasting) Part 1

Figure 2-18 depicts relationships among various MLD functions. These functions generally work on in6_multi{} structures, each of which maintains kernel internal parameters of a multicast group address that the node joins. There are three major paths in MLD protocol processing. One is handling inbound MLD messages by the mld6_input() function.These operations are performed by the […]

MLD Implementation (IPv6 Multicasting) Part 2

Leaving a Group: mld6_stop_listening() Function The mld6_stop_listening() function is called when a node leaves a multicast group and performs the state transition to Non-Listener in Figure 2-19. It sends a Multicast Listener Done message if it sent the latest Report message for the group. Listing 2-5         439-452 all_sa is set to […]

MLD Implementation (IPv6 Multicasting) Part 3

Process MLD Report Listing 2-9             737—748 If a Report message from a different node is received, the receiving node is not responsible for sending Done messages any more. This case is easy for a host, since it does not loop its own Report messages back to itself (see Listing […]

IPv6 Multicast Interface: mif6{} Structure (IPv6 Multicasting)

The KAME kernel maintains a separate data structure for interfaces that are used in multicast forwarding. These interfaces are called multicast interfaces. The corresponding notion in the IPv4 multicast routing implementation is called virtual interfaces, since the implementation was originally developed for DVMRP, which used tunneling to bypass routers that do not support the protocol. […]

IPv6 Multicast Routing API Part 1

The IPv6 multicast routing daemons manipulate the forwarding information maintained in the kernel via socket options and through ioctl commands. Figure 2-21 shows call graphs of the related functions. Table 2-7 summarizes socket options used by the multicast routing daemon. These are effectively only available on an ICMPv6 socket as we will see in Section […]

IPv6 Multicast Routing API Part 2

add_m6if() Function The add_m6if() function adds a multicast interface into the kernel via the MRT6_ADD_MIF socket option. The option argument is a pointer to the mif6ctl{} structure, which is defined in Listing 2-22. Listing 2-22 mif6c_mifi specifies the index of the multicast interface to be created. The mif6c_flags member specifies attributes of the interface. The […]