From fba2d312b91f5ef11e2f6f2d7ce90d6fc979574a Mon Sep 17 00:00:00 2001 From: yaqiangz Date: Tue, 10 Oct 2023 10:09:49 +0000 Subject: [PATCH] Update --- doc/dhcp_server/images/use_case.png | Bin 0 -> 91725 bytes ...ort_based_dhcp_server_high_level_design.md | 27 ++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 doc/dhcp_server/images/use_case.png diff --git a/doc/dhcp_server/images/use_case.png b/doc/dhcp_server/images/use_case.png new file mode 100644 index 0000000000000000000000000000000000000000..668f61f6ef7654676e9c61d384b7c5c57d8c8818 GIT binary patch literal 91725 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�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 literal 0 HcmV?d00001 diff --git a/doc/dhcp_server/port_based_dhcp_server_high_level_design.md b/doc/dhcp_server/port_based_dhcp_server_high_level_design.md index fcc99df578..fb72950fd5 100644 --- a/doc/dhcp_server/port_based_dhcp_server_high_level_design.md +++ b/doc/dhcp_server/port_based_dhcp_server_high_level_design.md @@ -19,6 +19,7 @@ - [Functional Requirements](#functional-requirements) - [Configuration and Management Requirements](#configuration-and-management-requirements) - [Design](#design) + - [Design considerations](#design-considerations) - [Design Overview](#design-overview) - [Container](#container) - [DHCP Server Daemon](#dhcp-server-daemon) @@ -99,6 +100,16 @@ Configuration of DHCP server feature can be done via: * SONiC CLI # Design + +## Design considerations +* `Port based` means that client from 1 interface can only obtain ip address from specified ip pool we configured. +
+ +* Currently, we only support enabling dhcp_server per switch, means functionality of dhcp_relay cannot work with functionality dhcp_server. We will add restrictions in CLI to prevent users from configuring dhcp_relay when dhcp_server feature is enabled. Maybe add support in future releases for enabling dhcp_server feature per vlan, means enable dhcp_server in one vlan and enable dhcp_relay in other vlan. +* This feature requires changes in dhcp_relay container. But in the scenario of disabling dhcp_server feature, dhcp_relay work as previous. +* For MAC address remove scenario, like Client_A get IP_A from port_1 and then moved to port_2. In current design, client_A would keep using IP_A till lease expired, then it would get another IP from port_2 if we configured. But before this lease expire, other clients connected to port_1 cannot get IP_A. Maybe add monitoring mechanism to check fdb table and lease table, to release outdated lease from kea-dhcp-server side in time. +* In current design, we do not support reply relayed DHCP packet, maybe support this scenario by appending option 82 in future releases. + ## Design Overview We use kea-dhcp-server to reply DHCP request packet. kea-dhcp-server natively supports to assign IPs by mac or contents in DHCP packet (like client id or other options), but in our scenario kea-dhcp-server need to know which interface this packet come from. And SONiC has integrated dhcrelay, which can add interface information to option82 in packet when it relay DHCP packet. So we use it to add interface information. @@ -612,7 +623,7 @@ This sequence figure describe the work flow of dhcprelayd capture DHCP_SERVER_IP |:----------------------|:-----------------------------------------------------------| | config dhcp_server ipv4 (add \| del \| update) | Add or delete or update DHCP server config | | config dhcp_server ipv4 (enable \| disable) | Enable or disable in DHCP server | - | config dhcp_server ipv4 range (add \| del) | Add or delete DHCP server ip range | + | config dhcp_server ipv4 range (add \| del \ update) | Add, delete or update DHCP server ip range | | config dhcp_server ipv4 ip (bind \| unbind) | Bind or unbind DHCP server with ip or range | | config dhcp_server ipv4 option (add \| del) | Add or delete customized DHCP option | | config dhcp_server ipv4 option (bind \| unbind) | Bind or unbind DHCP server with option | @@ -688,13 +699,14 @@ This command is used to update dhcp_server config. config dhcp_server ipv4 update --mode PORT --infer_gw_nm --lease_time 300 Vlan1000 ``` -**config dhcp_server range add/del** +**config dhcp_server range add/del/update** This command is used to config ip range. - Usage ``` # is not required, if not given, means ip_end is equal to ip_start config dhcp_server ipv4 range add [] + config dhcp_server ipv4 range update [] config dhcp_server ipv4 range del ``` @@ -702,6 +714,8 @@ This command is used to config ip range. ``` config dhcp_server ipv4 range add range1 192.168.0.1 + config dhcp_server ipv4 range update range1 192.168.0.2 + config dhcp_server ipv4 range del range1 ``` @@ -949,6 +963,15 @@ This command is used to show dhcp_server lease. |Add without ip_end|Add success| |Add with ip_start and ip_end|Add success| |Add with ip_start greater than ip_end|Add failed| + |Add existed range|Add failed| + +- config dhcp_server ipv4 range update [] + |Case Description|Expected res| + |:-|:-| + |Update without ip_end|Update success| + |Update with ip_start and ip_end|Update success| + |Update with ip_start greater than ip_end|Update failed| + |Update existed range|Update failed| - config dhcp_server ipv4 range del |Case Description|Expected res|