From 04a14bdf2805b3d3ed5e07b65062958568886e44 Mon Sep 17 00:00:00 2001 From: Shlomi Bitton Date: Thu, 4 Mar 2021 14:15:32 +0200 Subject: [PATCH] DHCP relay for IPv6 HLD Signed-off-by: Shlomi Bitton --- doc/DHCPv6_Relay/DHCPv6_Relay_HLD.md | 155 +++++++++++++++++++++++++++ doc/DHCPv6_Relay/diagram.png | Bin 0 -> 14143 bytes doc/DHCPv6_Relay/init.svg | 3 + 3 files changed, 158 insertions(+) create mode 100644 doc/DHCPv6_Relay/DHCPv6_Relay_HLD.md create mode 100644 doc/DHCPv6_Relay/diagram.png create mode 100644 doc/DHCPv6_Relay/init.svg diff --git a/doc/DHCPv6_Relay/DHCPv6_Relay_HLD.md b/doc/DHCPv6_Relay/DHCPv6_Relay_HLD.md new file mode 100644 index 0000000000..b2220fbe22 --- /dev/null +++ b/doc/DHCPv6_Relay/DHCPv6_Relay_HLD.md @@ -0,0 +1,155 @@ +# DHCP Relay for IPv6 HLD + +# High Level Design Document + +#### Rev 0.1 + +# Table of Contents +- [DHCP Relay for IPv6 HLD](#dhcp-relay-for-ipv6-hld) +- [High Level Design Document](#high-level-design-document) + - [Rev 0.1](#rev-01) +- [Table of Contents](#table-of-contents) +- [List of Tables](#list-of-tables) +- [List of Figures](#list-of-figures) +- [Revision](#revision) +- [About this Manual](#about-this-manual) +- [Scope](#scope) +- [Definitions/Abbreviation](#definitionsabbreviation) +- [1 Requirements Overview](#1-requirements-overview) + - [1.1 Functional requirements](#11-functional-requirements) + - [1.2 Configuration and Management Requirements](#12-configuration-and-management-requirements) +- [2 Modules design](#2-modules-design) + - [2.1 DHCP Relay for IPv6 build and runtime dependencies](#21-dhcp-relay-for-ipv6-build-and-runtime-dependencies) + - [2.2 DHCP Relay for IPv6 process in dhcp-relay container](#22-dhcp-relay-for-ipv6-process-in-dhcp-relay-container) + - [2.3 DHCP Monitor](#23-dhcp-monitor) +- [3 CLI](#3-cli) +- [4 Init flow](#4-init-flow) + +# List of Tables +* [Table 1: Abbreviations](#definitionsabbreviation) + +# List of Figures +* [DHCPv6 Diagram](#2-modules-design) +* [DHCPv6 init flow](#4-init-flow) + +# Revision +| Rev | Date | Author | Change Description | +|:---:|:--------:|:---------------:|------------------------------------| +| 0.1 | 03/04 | Shlomi Bitton | Initial version | + +# About this Manual +This document provides an overview of the implementation and integration of DHCP Relay for IPv6 feature in SONiC. + +# Scope +This document describes the high level design of the DHCP Relay for IPv6 feature in SONiC. + +# Definitions/Abbreviation +| Abbreviation | Description | +|---------------|-------------------------------------------| +| DHCP | Dynamic Host Configuration Protocol | + +# 1 Requirements Overview + +## 1.1 Functional Requirements + +DHCP Relay for IPv6 feature in SONiC should meet the following high-level functional requirements: + +- Give the support for relaying DHCP packets from downstream networks to upstream networks using IPv6 addresses. +- Provide the functionality as a seperate process running on dhcp-relay docker container. +- Relaying messages to multiple unicast and multicast addresses. + +## 1.2 Configuration and Management Requirements + +- DHCPv6 trap should be enabled through the COPP manager when the DHCP relay feature is enabled and vice versa. +- Downstream network is the VLAN interface with the relay configuration. Global IPv6 address is required to be configured on that interface. +- Config DB schema should meet the following format: +``` +{ +"VLAN": { + "Vlan1000": { + "dhcp_servers": [ + "192.0.0.1", + "192.0.0.2", + ], + "dhcpv6_servers": [ + "21da:d3:0:2f3b::7", + "21da:d3:0:2f3b::6", + ], + "vlanid": "1000" + } + } +} +``` + +# 2 Modules design + +![DHCPv6 Diagram](/doc/DHCPv6_Relay/diagram.png) + +## 2.1 DHCP Relay for IPv6 build and runtime dependencies + +The DHCP Relay for IPv6 feature, same as the IPv4 version, will be based on the open source project 'isc-dhcp'. + +## 2.2 DHCP Relay for IPv6 process in dhcp-relay container + +A new process will run in parallel to the other process for IPv4 support. +The new process will listen to DHCP packets for IPv6 and forward them to the relevant interface according to the configuration. +For example, from the configuration described on the previous section, the following daemon will start: +``` +admin@sonic:/# /usr/sbin/dhcrelay -6 -d --name-alias-map-file /tmp/port-name-alias-map.txt -l Vlan1000 -u 21da:d3:0:2f3b::7%Ethernet28 -u 21da:d3:0:2f3b::6%Ethernet28 +``` + +## 2.3 DHCP Monitor + +The existing DHCP monitor will be enhanced in order to support monitoring for DHCP IPv6 as well. + +## 3 CLI + +The existing CLI will be enhanced to support configuring DHCP IPv6 along with the IPv4 support. + +**config vlan dhcp_relay add** + +Usage: +``` +config vlan dhcp_relay add +``` +Example: +``` +admin@sonic:~$ sudo config vlan dhcp_relay add 1000 21da:d3:0:2f3b::7 +Added DHCP relay destination address 21da:d3:0:2f3b::7 to Vlan1000 +Restarting DHCP relay service... +``` + +**config vlan dhcp_relay delete** + +Usage: +``` +config vlan dhcp_relay del +``` +Example: +``` +admin@sonic:~$ sudo config vlan dhcp_relay del 1000 21da:d3:0:2f3b::7 +Removed DHCP relay destination address 21da:d3:0:2f3b::7 from Vlan1000 +Restarting DHCP relay service... +``` + +**show vlan brief** + +Usage: +``` +show vlan brief +``` +Example: +``` +admin@sonic:~$ show vlan brief ++-----------+----------------------+------------+----------------+-----------------------+-------------+ +| VLAN ID | IP Address | Ports | Port Tagging | DHCP Helper Address | Proxy ARP | ++===========+======================+============+================+=======================+=============+ +| 1000 | 21da:d3:0:2f3b::6/96 | Ethernet28 | untagged | 21da:d3:0:2f3b::6 | disabled | +| | | | | 21da:d3:0:2f3b::7 | | ++-----------+----------------------+------------+----------------+-----------------------+-------------+ +``` + +## 4 Init flow + +![DHCPv6 init flow](/doc/DHCPv6_Relay/init.svg) + diff --git a/doc/DHCPv6_Relay/diagram.png b/doc/DHCPv6_Relay/diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..5efe21dbe0df50465d828e78812d6775688e210b GIT binary patch literal 14143 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 + +
dhcp_relay
Docker
dhcp_relay...
supervisorddhcrelay
Container started
Container start...
Listen to packets and
forward
Listen to packets an...
Starting dhcrelay instances by VLAN
Starting dhcrel...
Viewer does not support full SVG 1.1
\ No newline at end of file