mbox series

[net-next,v7,0/5] amt: add initial driver for Automatic Multicast Tunneling (AMT)

Message ID 20211031160006.3367-1-ap420073@gmail.com (mailing list archive)
Headers show
Series amt: add initial driver for Automatic Multicast Tunneling (AMT) | expand

Message

Taehee Yoo Oct. 31, 2021, 4 p.m. UTC
This is an implementation of AMT(Automatic Multicast Tunneling), RFC 7450.
https://datatracker.ietf.org/doc/html/rfc7450

This implementation supports IGMPv2, IGMPv3, MLDv1, MLDv2, and IPv4
underlay.

 Summary of RFC 7450
The purpose of this protocol is to provide multicast tunneling.
The main use-case of this protocol is to provide delivery multicast
traffic from a multicast-enabled network to sites that lack multicast
connectivity to the source network.
There are two roles in AMT protocol, Gateway, and Relay.
The main purpose of Gateway mode is to forward multicast listening
information(IGMP, MLD) to the source.
The main purpose of Relay mode is to forward multicast data to listeners.
These multicast traffics(IGMP, MLD, multicast data packets) are tunneled.

Listeners are located behind Gateway endpoint.
But gateway itself can be a listener too.
Senders are located behind Relay endpoint.

    ___________       _________       _______       ________
   |           |     |         |     |       |     |        |
   | Listeners <-----> Gateway <-----> Relay <-----> Source |
   |___________|     |_________|     |_______|     |________|
      IGMP/MLD---------(encap)----------->
         <-------------(decap)--------(encap)------Multicast Data

 Usage of AMT interface
1. Create gateway interface
ip link add amtg type amt mode gateway local 10.0.0.1 discovery 10.0.0.2 \
dev gw1_rt gateway_port 2268 relay_port 2268

2. Create Relay interface
ip link add amtr type amt mode relay local 10.0.0.2 dev relay_rt \
relay_port 2268 max_tunnels 4

v1 -> v2:
 - Eliminate sparse warnings.
   - Use bool type instead of __be16 for identifying v4/v6 protocol.

v2 -> v3:
 - Fix compile warning due to unsed variable.
 - Add missing spinlock comment.
 - Update help message of amt in Kconfig.

v3 -> v4:
 - Split patch.
 - Use CHECKSUM_NONE instead of CHECKSUM_UNNECESSARY.
 - Fix compile error.

v4 -> v5:
 - Remove unnecessary rcu_read_lock().
 - Remove unnecessary amt_change_mtu().
 - Change netlink error message.
 - Add validation for IFLA_AMT_LOCAL_IP and IFLA_AMT_DISCOVERY_IP.
 - Add comments in amt.h.
 - Add missing dev_put() in error path of amt_newlink().
 - Fix typo.
 - Add BUILD_BUG_ON() in amt_smb_cb().
 - Use macro instead of magic values.
 - Use kzalloc() instead of kmalloc().
 - Add selftest script.

v5 -> v6:
 - Reset remote_ip in amt_dev_stop().

v6 -> v7:
 - Fix compile error.

Taehee Yoo (5):
  amt: add control plane of amt interface
  amt: add data plane of amt interface
  amt: add multicast(IGMP) report message handler
  amt: add mld report message handler
  selftests: add amt interface selftest script

 MAINTAINERS                          |    8 +
 drivers/net/Kconfig                  |   16 +
 drivers/net/Makefile                 |    1 +
 drivers/net/amt.c                    | 3296 ++++++++++++++++++++++++++
 include/net/amt.h                    |  385 +++
 include/uapi/linux/amt.h             |   62 +
 tools/testing/selftests/net/Makefile |    1 +
 tools/testing/selftests/net/amt.sh   |  284 +++
 tools/testing/selftests/net/config   |    1 +
 9 files changed, 4054 insertions(+)
 create mode 100644 drivers/net/amt.c
 create mode 100644 include/net/amt.h
 create mode 100644 include/uapi/linux/amt.h
 create mode 100644 tools/testing/selftests/net/amt.sh

Comments

patchwork-bot+netdevbpf@kernel.org Nov. 1, 2021, 1:40 p.m. UTC | #1
Hello:

This series was applied to netdev/net-next.git (master)
by David S. Miller <davem@davemloft.net>:

On Sun, 31 Oct 2021 16:00:01 +0000 you wrote:
> This is an implementation of AMT(Automatic Multicast Tunneling), RFC 7450.
> https://datatracker.ietf.org/doc/html/rfc7450
> 
> This implementation supports IGMPv2, IGMPv3, MLDv1, MLDv2, and IPv4
> underlay.
> 
>  Summary of RFC 7450
> The purpose of this protocol is to provide multicast tunneling.
> The main use-case of this protocol is to provide delivery multicast
> traffic from a multicast-enabled network to sites that lack multicast
> connectivity to the source network.
> There are two roles in AMT protocol, Gateway, and Relay.
> The main purpose of Gateway mode is to forward multicast listening
> information(IGMP, MLD) to the source.
> The main purpose of Relay mode is to forward multicast data to listeners.
> These multicast traffics(IGMP, MLD, multicast data packets) are tunneled.
> 
> [...]

Here is the summary with links:
  - [net-next,v7,1/5] amt: add control plane of amt interface
    https://git.kernel.org/netdev/net-next/c/b9022b53adad
  - [net-next,v7,2/5] amt: add data plane of amt interface
    https://git.kernel.org/netdev/net-next/c/cbc21dc1cfe9
  - [net-next,v7,3/5] amt: add multicast(IGMP) report message handler
    https://git.kernel.org/netdev/net-next/c/bc54e49c140b
  - [net-next,v7,4/5] amt: add mld report message handler
    https://git.kernel.org/netdev/net-next/c/b75f7095d4d4
  - [net-next,v7,5/5] selftests: add amt interface selftest script
    https://git.kernel.org/netdev/net-next/c/c08e8baea78e

You are awesome, thank you!