From f7cc1927a864f536bae30368d91ea885c0d0922b Mon Sep 17 00:00:00 2001 From: Ghulam-Bahoo Date: Fri, 14 Jun 2024 16:11:37 +0500 Subject: [PATCH 1/7] initial version --- doc/kdump/images/kdump-ssh.drawio.png | Bin 0 -> 110524 bytes doc/kdump/kdump_Remote_SSH_HLD.md | 211 ++++++++++++++++++++++++++ 2 files changed, 211 insertions(+) create mode 100644 doc/kdump/images/kdump-ssh.drawio.png create mode 100644 doc/kdump/kdump_Remote_SSH_HLD.md diff --git a/doc/kdump/images/kdump-ssh.drawio.png b/doc/kdump/images/kdump-ssh.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..e94e71f8f5615b0695b2ca3e2adc3cdd1d3ebe9b GIT binary patch literal 110524 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 literal 0 HcmV?d00001 diff --git a/doc/kdump/kdump_Remote_SSH_HLD.md b/doc/kdump/kdump_Remote_SSH_HLD.md new file mode 100644 index 0000000000..eda7e4dcf8 --- /dev/null +++ b/doc/kdump/kdump_Remote_SSH_HLD.md @@ -0,0 +1,211 @@ +# kdump_Remote_SSH + +## High Level Design Document +**Rev 0.1** + +## Table of Contents + + + +- [High Level Design Document](#high-level-design-document) +- [Table of Contents](#table-of-contents) +- [List of Tables](#list-of-tables) +- [Revision](#revision) +- [About this Manual](#about-this-manual) +- [Scope](#scope) +- [Definitions/Abbreviations](#definitionsabbreviations) + - [Table 1: Abbreviations](#table-1-abbreviations) +- [Requirements Overview ](#requirements-overview-a-namerequirements-overviewa) + - [Functional Requirements ](#functional-requirements-a-namefunctional-requirementsa) + - [Scalability Requirements](#scalability-requirements) + - [Warmboot Requirements](#warmboot-requirements) + - [Configuration and Management Requirements](#configuration-and-management-requirements) + - [Configuration commands](#configuration-commands) + - [Information commands](#information-commands) +- [kdump : end-to-end flow](#kdump-end-to-end-flow) +- [Functional Description](#functional-description) + - [Design](#design) + - [Kernel core-dump service](#kernel-core-dump-service) + - [SONiC Code Changes](#sonic-code-changes) + - [Configuration commands:](#configuration-commands) + - [config kdump ](#config-kdump-enabledisable) + - [config kdump memory string](#config-kdump-memory-string) + - [config kdump num_dumps number](#config-kdump-numdumps-number) + - [show kdump [status]](#show-kdump-status) + - [show kdump files](#show-kdump-files) + - [show kdump log [X]](#show-kdump-log-x) +- [How to use the kernel core dump files](#how-to-use-the-kernel-core-dump-files) + - [Introduction](#introduction) + - [Use the kernel core dump file on the switch](#use-the-kernel-core-dump-file-on-the-switch) + - [Use the kernel core dump file on a Linux host](#use-the-kernel-core-dump-file-on-a-linux-host) + - [Analyzing the core dump](#analyzing-the-core-dump) +- [KDUMP DB](#kdump-db) +- [Test](#test) + - [Test on Different Platforms](#test-on-different-platforms) + - [Unit Test](#unit-test) + + + +## List of Tables + +[Table 1: Abbreviations](#table-1-abbreviations) + +## Revision + +Rev | Date | Author | Change Description +:---: | :-----: | :------: | :--------- +0.1 | 06/05/2024 | Gulam Bahoo, Bilal Ismail | Initial version +## Overview +This document outlines the configuration and usage of the kdump remote feature with SSH for the SONiC network operating system. Kdump, a built-in Linux kernel feature, generates and stores a crash dump file in the event of a kernel panic. It extends beyond local storage by enabling remote dumps via SSH or NFS protocols, allowing you to transmit kernel crash data to a designated remote server. This functionality facilitates offline analysis by storing crash dump files remotely. + +## Scope + +This document describes how to configure remote kdump feature in SONiC infrastructure. + +## Definitions/Abbreviations + +### Table 1: Abbreviations + +| **Term** | **Meaning** | +| ----------- | ---------------------- | +| SSH | Secure Shell | +| kdump | Kernel Dump | +| NFS | Network File System | + +## Requirements Overview + +### Functional Requirements +This section describes the SONiC requirements for kdump remote feature. + +At a high level the following should be supported: +1. The kernel core dump files must be stored on the a remote SSH server for offline analysis. +### Configuration and Management Requirements + +- SONiC CLI support for configuring remote kdump feature enable/disable via SSH. +- SONiC CLI support for configuring username and hostname of SSH server (username@server_address). +- SONiC CLI support for configuring SSH private key path for SSH server (SSH_private_Key_Path). +- SONiC CLI support for displaying SSH crededentials of SSH server. +- SONiC CLI support for displaying SSH private key path for SSH server (SSH_private_Key_Path). +- SONiC CLI support for displaying state of kdump remote feature (enable/disable). +### SSH Key Generation Requirement +The system should authenticate with the remote server using SSH keys for secure access. + +``` +ssh-keygen +``` + +You'll be prompted to choose a location to save the key pair. By default, it saves the private key to ~/.ssh/id_rsa and the public key to ~/.ssh/id_rsa.pub. + +``` +ssh-copy-id username@server_address +``` + + This helps automate passwordless SSH logins by copying your public key to authorized servers. +### Warmboot Requirements + +Configuring kdump feature always requires a cold reboot of the switch. Warmboot is not supported while generating a core file in the event of a kernel crash. + + + +## kdump : Flow Control +![alt text](./images/kdump-ssh.drawio.png) + +## Functional Description + +### Design + +The SONiC kernel core dump remote functionality can be divided into two categories: + +1. Kernel core-dump generation service +2. Storing Kernel core-dump files remotely + +## SONiC Code Changes + +Current SONiC lacks remote kernel dump functionality. To add this feature, consider enabling kdump for remote storage. + +### sonic-buildimage +1. build_debian.sh(Edit) + - Required for kdump_remote_ssh_dump: Initialize network interfaces and enable DHCP upon kernel crash. Currently used on crash kernel boot only. + +``` +sudo cp files/scripts/network-interface-state-init.sh $FILESYSTEM_ROOT/usr/sbin/network-interface-state-init.sh +``` +``` +sudo chmod +x $FILESYSTEM_ROOT/usr/sbin/network-interface-state-init.sh +``` + +2. files/build_templates/sonic-debian-extension.j2(Edit) + - Edit the kdump-tools package script to call a custom one, which shall enable ethernet interfaces in the crash kernel environment. +``` +if [ -f "$FILESYSTEM_ROOT/usr/sbin/kdump-config" ]; then + sudo sed -i "/PATH=\/bin:\/usr\/bin:\/sbin:\/usr\/sbin/a NET_INTERFACE_INIT=/usr/sbin/network-interface-state-init.sh" "$FILESYSTEM_ROOT/usr/sbin/kdump-config" + sudo sed -i "/Network not reachable/a \\\t\t\t. \$NET_INTERFACE_INIT" "$FILESYSTEM_ROOT/usr/sbin/kdump-config" +fi +``` + +3. files/scripts/network-interface-state-init.sh (Addition) +``` +#!/bin/sh + +# Get list of Ethernet interfaces excluding Docker interfaces +interfaces=$(ip -o link show | awk -F': ' '$2 ~ /^e/ && $2 !~ /^docker/ {print $2}') + +# Loop through each Ethernet interface +for interface in $interfaces; do + # Check if the interface is already up + if ! ip link show dev $interface | grep -q 'state UP'; then + # Bring up the interface if it's not already up + ip link set dev $interface up || { echo "Failed to bring up interface $interface"; continue; } + fi + + # Configure the interface to use DHCP + dhclient $interface || echo "Failed to configure DHCP for interface $interface" +done +``` + +## Configuration and management +This section describes all types of configuration and management related design. Example sub-sections for "CLI" and "Config DB" are given below. + + + +### KDUMP DB + + New attributes will be introduced to "KDUMP" table in ConfigDB for maintaining remote kdump configurations. Below is the schema for this table. + +``` + KDUMP_TABLE:{{config}} + "enabled" :{{"false"|"true"}} + "memory" :{{string}} + "num_dumps" :{{number}} + "remote" :{{"false"|"true"}} + "ssh_connection_string" :{{string}} + "ssh_private_key_path" :{{string}} +``` +### CLI Enhancements +#### Show CLI Commands +An existing SONiC CLI command is used to display the current remote kdump feature configuraitons. + +``` +show kdump config +``` + +Example output from the above command: +``` +admin@sonic:~$ show kdump config +Kdump administrative mode: Enabled +Kdump operational mode: Ready +Kdump memory reservation: 512 +Maximum number of Kdump files: 3 +Kdump remote server user@ip/hostname: ghulam@172.16.7.13 +Kdump private key file path for remote ssh connection: /home/admin/.ssh/id_rsa +``` +## Test + +### Unit Test Cases +- Enable/Disable remote kdump feature. +- Add/Remove SSH_Connection_String i.e. username@hostname. +- Add/Remove SSH_Private_Key_Path. + +## Links + - [White Paper: Red Hat Crash Utility](https://people.redhat.com/anderson/crash_whitepaper/) + - [crash utility help pages](https://people.redhat.com/anderson/help.html) \ No newline at end of file From 28467ffd359d6445d798763724de28a59b4f3f6b Mon Sep 17 00:00:00 2001 From: Ghulam-Bahoo Date: Fri, 14 Jun 2024 16:21:16 +0500 Subject: [PATCH 2/7] initial version --- doc/kdump/kdump_Remote_SSH_HLD.md | 175 ++++++++++++++++-------------- 1 file changed, 92 insertions(+), 83 deletions(-) diff --git a/doc/kdump/kdump_Remote_SSH_HLD.md b/doc/kdump/kdump_Remote_SSH_HLD.md index eda7e4dcf8..1f7f55727c 100644 --- a/doc/kdump/kdump_Remote_SSH_HLD.md +++ b/doc/kdump/kdump_Remote_SSH_HLD.md @@ -11,38 +11,30 @@ - [Table of Contents](#table-of-contents) - [List of Tables](#list-of-tables) - [Revision](#revision) -- [About this Manual](#about-this-manual) +- [Overview](#about-this-manual) - [Scope](#scope) - [Definitions/Abbreviations](#definitionsabbreviations) - [Table 1: Abbreviations](#table-1-abbreviations) +- [Introduction](#introduction) - [Requirements Overview ](#requirements-overview-a-namerequirements-overviewa) - [Functional Requirements ](#functional-requirements-a-namefunctional-requirementsa) - - [Scalability Requirements](#scalability-requirements) - - [Warmboot Requirements](#warmboot-requirements) - [Configuration and Management Requirements](#configuration-and-management-requirements) - - [Configuration commands](#configuration-commands) - - [Information commands](#information-commands) -- [kdump : end-to-end flow](#kdump-end-to-end-flow) + - [SSH Key Generation Requirements](#ssh-key-generation-requirement) +- [kdump Remote Architechture](#kdump-remote-architechture) - [Functional Description](#functional-description) - - [Design](#design) - - [Kernel core-dump service](#kernel-core-dump-service) - - [SONiC Code Changes](#sonic-code-changes) - - [Configuration commands:](#configuration-commands) - - [config kdump ](#config-kdump-enabledisable) - - [config kdump memory string](#config-kdump-memory-string) - - [config kdump num_dumps number](#config-kdump-numdumps-number) - - [show kdump [status]](#show-kdump-status) - - [show kdump files](#show-kdump-files) - - [show kdump log [X]](#show-kdump-log-x) -- [How to use the kernel core dump files](#how-to-use-the-kernel-core-dump-files) - - [Introduction](#introduction) - - [Use the kernel core dump file on the switch](#use-the-kernel-core-dump-file-on-the-switch) - - [Use the kernel core dump file on a Linux host](#use-the-kernel-core-dump-file-on-a-linux-host) - - [Analyzing the core dump](#analyzing-the-core-dump) -- [KDUMP DB](#kdump-db) + - [Design Changes](#design-changes) +- [Configurations and Management](#configuration-and-management) + - [CONFIG_DB Enhancements](#config_db-enhancements) + - [SAI API](#sai-api) + - [CLI/Yang MOdel Enhancements](#cliyang-model-enhancements) +- [CLI Enhancements](#cli-enhancements) + - [CLI Configuration Commands](#cli-configuration-commands) + - [CLI Show Commands](#cli-show-commands) +- [YANG Enhancement](#yang-enhancements) +- [Warmboot Requirements](#warmboot-requirements) - [Test](#test) - - [Test on Different Platforms](#test-on-different-platforms) - - [Unit Test](#unit-test) + - [Unit Test cases](#unit-test-cases) +- [Links](#links) @@ -54,9 +46,9 @@ Rev | Date | Author | Change Description :---: | :-----: | :------: | :--------- -0.1 | 06/05/2024 | Gulam Bahoo, Bilal Ismail | Initial version +0.1 | 06/05/2024 | Ghulam Bahoo, Bilal Ismail | Initial version ## Overview -This document outlines the configuration and usage of the kdump remote feature with SSH for the SONiC network operating system. Kdump, a built-in Linux kernel feature, generates and stores a crash dump file in the event of a kernel panic. It extends beyond local storage by enabling remote dumps via SSH or NFS protocols, allowing you to transmit kernel crash data to a designated remote server. This functionality facilitates offline analysis by storing crash dump files remotely. +This document outlines the configuration and usage of the kdump remote feature with SSH for the SONiC. ## Scope @@ -72,6 +64,9 @@ This document describes how to configure remote kdump feature in SONiC infrastru | kdump | Kernel Dump | | NFS | Network File System | +## Introduction +Kdump, a built-in Linux kernel feature, generates and stores a crash dump file in the event of a kernel panic. Currently SONiC lacks the functionality of storing dump files on a remote server. It offloads the storage from switch by saving the crasg reports to a separate designated server for offline analysis. This feature extends existing kdump feature by enabling remote dumps via SSH protocol, allowing you to transmit kernel crash data to a designated remote server. + ## Requirements Overview ### Functional Requirements @@ -81,95 +76,59 @@ At a high level the following should be supported: 1. The kernel core dump files must be stored on the a remote SSH server for offline analysis. ### Configuration and Management Requirements -- SONiC CLI support for configuring remote kdump feature enable/disable via SSH. -- SONiC CLI support for configuring username and hostname of SSH server (username@server_address). -- SONiC CLI support for configuring SSH private key path for SSH server (SSH_private_Key_Path). -- SONiC CLI support for displaying SSH crededentials of SSH server. -- SONiC CLI support for displaying SSH private key path for SSH server (SSH_private_Key_Path). -- SONiC CLI support for displaying state of kdump remote feature (enable/disable). +- CLI support for configuring remote kdump feature enable/disable via SSH. +- CLI support for configuring username and hostname of SSH server (username@server_address). +- CLI support for configuring SSH private key path for SSH server (SSH_private_Key_Path). +- CLI support for displaying SSH crededentials of SSH server. +- CLI support for displaying SSH private key path for SSH server (SSH_private_Key_Path). +- CLI support for displaying state of kdump remote feature (enable/disable). ### SSH Key Generation Requirement The system should authenticate with the remote server using SSH keys for secure access. ``` -ssh-keygen +admin@sonic: ssh-keygen ``` -You'll be prompted to choose a location to save the key pair. By default, it saves the private key to ~/.ssh/id_rsa and the public key to ~/.ssh/id_rsa.pub. +User be prompted to choose a location to save the key pair. By default, it saves the private key to ~/.ssh/id_rsa and the public key to ~/.ssh/id_rsa.pub. ``` -ssh-copy-id username@server_address +admin@sonic: ssh-copy-id username@server_address ``` - This helps automate passwordless SSH logins by copying your public key to authorized servers. -### Warmboot Requirements - -Configuring kdump feature always requires a cold reboot of the switch. Warmboot is not supported while generating a core file in the event of a kernel crash. - - + This helps automate passwordless SSH logins by copying public key to authorized servers. -## kdump : Flow Control +## kdump Remote Architechture ![alt text](./images/kdump-ssh.drawio.png) ## Functional Description -### Design +### Design Changes The SONiC kernel core dump remote functionality can be divided into two categories: 1. Kernel core-dump generation service 2. Storing Kernel core-dump files remotely -## SONiC Code Changes - Current SONiC lacks remote kernel dump functionality. To add this feature, consider enabling kdump for remote storage. -### sonic-buildimage -1. build_debian.sh(Edit) - - Required for kdump_remote_ssh_dump: Initialize network interfaces and enable DHCP upon kernel crash. Currently used on crash kernel boot only. +We are suggesting modifying the exisitng SONiC configuration as following sonic-buildimage files. + +1. build_debian.sh (Addition) -``` -sudo cp files/scripts/network-interface-state-init.sh $FILESYSTEM_ROOT/usr/sbin/network-interface-state-init.sh -``` -``` -sudo chmod +x $FILESYSTEM_ROOT/usr/sbin/network-interface-state-init.sh -``` + - Required for kdump_remote_ssh_dump: Initialize network interfaces and enable DHCP upon kernel crash. 2. files/build_templates/sonic-debian-extension.j2(Edit) - - Edit the kdump-tools package script to call a custom one, which shall enable ethernet interfaces in the crash kernel environment. -``` -if [ -f "$FILESYSTEM_ROOT/usr/sbin/kdump-config" ]; then - sudo sed -i "/PATH=\/bin:\/usr\/bin:\/sbin:\/usr\/sbin/a NET_INTERFACE_INIT=/usr/sbin/network-interface-state-init.sh" "$FILESYSTEM_ROOT/usr/sbin/kdump-config" - sudo sed -i "/Network not reachable/a \\\t\t\t. \$NET_INTERFACE_INIT" "$FILESYSTEM_ROOT/usr/sbin/kdump-config" -fi -``` + - Edit the kdump-tools package script to call a custom one, which shall enable ethernet interfaces in the crash kernel environment. 3. files/scripts/network-interface-state-init.sh (Addition) -``` -#!/bin/sh - -# Get list of Ethernet interfaces excluding Docker interfaces -interfaces=$(ip -o link show | awk -F': ' '$2 ~ /^e/ && $2 !~ /^docker/ {print $2}') - -# Loop through each Ethernet interface -for interface in $interfaces; do - # Check if the interface is already up - if ! ip link show dev $interface | grep -q 'state UP'; then - # Bring up the interface if it's not already up - ip link set dev $interface up || { echo "Failed to bring up interface $interface"; continue; } - fi - - # Configure the interface to use DHCP - dhclient $interface || echo "Failed to configure DHCP for interface $interface" -done -``` + - A script to initialize the network interfaces and enable DHCP on them. ## Configuration and management This section describes all types of configuration and management related design. Example sub-sections for "CLI" and "Config DB" are given below. -### KDUMP DB - +### CONFIG_DB Enhancements New attributes will be introduced to "KDUMP" table in ConfigDB for maintaining remote kdump configurations. Below is the schema for this table. ``` @@ -181,12 +140,32 @@ This section describes all types of configuration and management related design. "ssh_connection_string" :{{string}} "ssh_private_key_path" :{{string}} ``` + +### SAI API + +No SAI API change or addition is needed for this HLD. + + +### CLI/YANG model Enhancements ### CLI Enhancements -#### Show CLI Commands + +#### CLI Configuration Commands +New SONiC CLI commands are introduced to configure remote kdump feature. + +``` +admin@sonic: sudo config kdump remote ssh -c -p +``` +This commans will configure remote kdumo feature in SONiC. -c is the flag for connection string and -p is the flag for path to ssh_private_key + +``` +admin@sonic: sudo config kdump remote disable +``` +This command disables the remote kdump feature. +#### CLI Show Commands An existing SONiC CLI command is used to display the current remote kdump feature configuraitons. ``` -show kdump config +admin@sonic: show kdump config ``` Example output from the above command: @@ -199,6 +178,36 @@ Maximum number of Kdump files: 3 Kdump remote server user@ip/hostname: ghulam@172.16.7.13 Kdump private key file path for remote ssh connection: /home/admin/.ssh/id_rsa ``` + +### YANG Enhancements + +``` +leaf remote { + description "SSH Remote Config"; + + type string { + pattern "true|false"; + } + } + +leaf ssh_connection_string { + type string { + length 1..128; + } + } + +leaf ssh_private_key_path { + type string { + length 1..128; + } + } + +``` + +### Warmboot Requirements + +Configuring kdump feature always requires a cold reboot of the switch. Warmboot is not supported while generating a core file in the event of a kernel crash. + ## Test ### Unit Test Cases From cdba0c9b284347d5fbceb2181f4cf43e94280b1d Mon Sep 17 00:00:00 2001 From: Ghulam-Bahoo Date: Mon, 8 Jul 2024 16:13:50 +0500 Subject: [PATCH 3/7] Made Enhancements --- doc/kdump/kdump_Remote_SSH_HLD.md | 38 ++++++++++++++++++------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/doc/kdump/kdump_Remote_SSH_HLD.md b/doc/kdump/kdump_Remote_SSH_HLD.md index 1f7f55727c..8c4d0a1c5b 100644 --- a/doc/kdump/kdump_Remote_SSH_HLD.md +++ b/doc/kdump/kdump_Remote_SSH_HLD.md @@ -46,9 +46,9 @@ Rev | Date | Author | Change Description :---: | :-----: | :------: | :--------- -0.1 | 06/05/2024 | Ghulam Bahoo, Bilal Ismail | Initial version +0.1 | 06/05/2024 | Ghulam Bahoo | Initial version ## Overview -This document outlines the configuration and usage of the kdump remote feature with SSH for the SONiC. +This document outlines the configuration and usage of the kdump remote feature with ssh for the SONiC. ## Scope @@ -65,7 +65,7 @@ This document describes how to configure remote kdump feature in SONiC infrastru | NFS | Network File System | ## Introduction -Kdump, a built-in Linux kernel feature, generates and stores a crash dump file in the event of a kernel panic. Currently SONiC lacks the functionality of storing dump files on a remote server. It offloads the storage from switch by saving the crasg reports to a separate designated server for offline analysis. This feature extends existing kdump feature by enabling remote dumps via SSH protocol, allowing you to transmit kernel crash data to a designated remote server. +Kdump, a built-in Linux kernel feature, generates and stores a crash dump file in the event of a kernel panic. Currently SONiC lacks the functionality of storing dump files on a remote server. It offloads the storage from switch by saving the crash reports to a separate designated server for offline analysis. This feature extends existing kdump feature by enabling remote dumps via ssh protocol, allowing you to transfer kernel crash data to a designated remote server. ## Requirements Overview @@ -73,14 +73,13 @@ Kdump, a built-in Linux kernel feature, generates and stores a crash dump file i This section describes the SONiC requirements for kdump remote feature. At a high level the following should be supported: -1. The kernel core dump files must be stored on the a remote SSH server for offline analysis. +1. The kernel core dump files must be stored on the a remote ssh server. ### Configuration and Management Requirements -- CLI support for configuring remote kdump feature enable/disable via SSH. -- CLI support for configuring username and hostname of SSH server (username@server_address). -- CLI support for configuring SSH private key path for SSH server (SSH_private_Key_Path). -- CLI support for displaying SSH crededentials of SSH server. -- CLI support for displaying SSH private key path for SSH server (SSH_private_Key_Path). +- CLI support for configuring remote kdump feature enable/disable via ssh. +- CLI support for configuring username and hostname of ssh server (username@server_address). +- CLI support for configuring SSH private key path for ssh server (SSH_private_Key_Path). +- CLI support for displaying crededentials of ssh server. - CLI support for displaying state of kdump remote feature (enable/disable). ### SSH Key Generation Requirement The system should authenticate with the remote server using SSH keys for secure access. @@ -117,13 +116,11 @@ We are suggesting modifying the exisitng SONiC configuration as following sonic- - Required for kdump_remote_ssh_dump: Initialize network interfaces and enable DHCP upon kernel crash. -2. files/build_templates/sonic-debian-extension.j2(Edit) - - - Edit the kdump-tools package script to call a custom one, which shall enable ethernet interfaces in the crash kernel environment. -3. files/scripts/network-interface-state-init.sh (Addition) +2. files/scripts/network_setup.sh (New Addition) - A script to initialize the network interfaces and enable DHCP on them. +3. files/script/network_setup.hook (New Addition) -## Configuration and management +## Configuration and Management This section describes all types of configuration and management related design. Example sub-sections for "CLI" and "Config DB" are given below. @@ -153,9 +150,17 @@ No SAI API change or addition is needed for this HLD. New SONiC CLI commands are introduced to configure remote kdump feature. ``` -admin@sonic: sudo config kdump remote ssh -c -p +admin@sonic: sudo config kdump remote enable +``` +This commans will configure remote kdump feature in SONiC. + +``` +admin@sonic: sudo config kdump remote ssh_connection_string +``` + +``` +admin@sonic: sudo config kdump remote ssh_private_key_path ``` -This commans will configure remote kdumo feature in SONiC. -c is the flag for connection string and -p is the flag for path to ssh_private_key ``` admin@sonic: sudo config kdump remote disable @@ -175,6 +180,7 @@ Kdump administrative mode: Enabled Kdump operational mode: Ready Kdump memory reservation: 512 Maximum number of Kdump files: 3 +remote: true Kdump remote server user@ip/hostname: ghulam@172.16.7.13 Kdump private key file path for remote ssh connection: /home/admin/.ssh/id_rsa ``` From 31ad8b181ecb1141c3d0858d7d5a6311887be561 Mon Sep 17 00:00:00 2001 From: Ghulam Bahoo Date: Wed, 31 Jul 2024 12:08:00 +0500 Subject: [PATCH 4/7] Update kdump_Remote_SSH_HLD.md --- doc/kdump/kdump_Remote_SSH_HLD.md | 47 ++++++++++++++++--------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/doc/kdump/kdump_Remote_SSH_HLD.md b/doc/kdump/kdump_Remote_SSH_HLD.md index 8c4d0a1c5b..56cc1b6739 100644 --- a/doc/kdump/kdump_Remote_SSH_HLD.md +++ b/doc/kdump/kdump_Remote_SSH_HLD.md @@ -114,11 +114,12 @@ We are suggesting modifying the exisitng SONiC configuration as following sonic- 1. build_debian.sh (Addition) - - Required for kdump_remote_ssh_dump: Initialize network interfaces and enable DHCP upon kernel crash. + - Required for kdump_remote_ssh_dump: InItialize network interfaces and enable DHCP upon kernel crash. 2. files/scripts/network_setup.sh (New Addition) - A script to initialize the network interfaces and enable DHCP on them. 3. files/script/network_setup.hook (New Addition) +4. Added a daemon into files/image_config/kdump-feature/kdump-service.py (New Addition). ## Configuration and Management This section describes all types of configuration and management related design. Example sub-sections for "CLI" and "Config DB" are given below. @@ -134,8 +135,8 @@ This section describes all types of configuration and management related design. "memory" :{{string}} "num_dumps" :{{number}} "remote" :{{"false"|"true"}} - "ssh_connection_string" :{{string}} - "ssh_private_key_path" :{{string}} + "ssh_string" :{{string}} + "ssh_path" :{{string}} ``` ### SAI API @@ -155,11 +156,19 @@ admin@sonic: sudo config kdump remote enable This commans will configure remote kdump feature in SONiC. ``` -admin@sonic: sudo config kdump remote ssh_connection_string +admin@sonic: sudo config kdump remote add ssh_string username@serverip ``` ``` -admin@sonic: sudo config kdump remote ssh_private_key_path +admin@sonic: sudo config kdump remote add ssh_path /path to ssh private key/ +``` + +``` +admin@sonic: sudo config kdump remove ssh_sting +``` + +``` +admin@sonic: sudo config kdump remove ssh_path ``` ``` @@ -181,8 +190,8 @@ Kdump operational mode: Ready Kdump memory reservation: 512 Maximum number of Kdump files: 3 remote: true -Kdump remote server user@ip/hostname: ghulam@172.16.7.13 -Kdump private key file path for remote ssh connection: /home/admin/.ssh/id_rsa +ssh_string: username@serverip +ssh_path: /path to ssh_private key/ ``` ### YANG Enhancements @@ -191,21 +200,15 @@ Kdump private key file path for remote ssh connection: /home/admin/.ssh/id_rsa leaf remote { description "SSH Remote Config"; - type string { - pattern "true|false"; - } - } + type boolean; +} -leaf ssh_connection_string { - type string { - length 1..128; - } +leaf ssh_stirng { + type string; } -leaf ssh_private_key_path { - type string { - length 1..128; - } +leaf ssh_path { + type string; } ``` @@ -218,9 +221,9 @@ Configuring kdump feature always requires a cold reboot of the switch. Warmboot ### Unit Test Cases - Enable/Disable remote kdump feature. -- Add/Remove SSH_Connection_String i.e. username@hostname. -- Add/Remove SSH_Private_Key_Path. +- Add/Remove ssh_string i.e. username@hostname. +- Add/Remove ssh_path. ## Links - [White Paper: Red Hat Crash Utility](https://people.redhat.com/anderson/crash_whitepaper/) - - [crash utility help pages](https://people.redhat.com/anderson/help.html) \ No newline at end of file + - [crash utility help pages](https://people.redhat.com/anderson/help.html) From 7695f58a23dd318ad55424ab2796d054290d3952 Mon Sep 17 00:00:00 2001 From: Rida Hanif Date: Tue, 20 Aug 2024 10:34:45 +0500 Subject: [PATCH 5/7] Update kdump_Remote_SSH_HLD.md --- doc/kdump/kdump_Remote_SSH_HLD.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/doc/kdump/kdump_Remote_SSH_HLD.md b/doc/kdump/kdump_Remote_SSH_HLD.md index 56cc1b6739..209110c02a 100644 --- a/doc/kdump/kdump_Remote_SSH_HLD.md +++ b/doc/kdump/kdump_Remote_SSH_HLD.md @@ -46,7 +46,7 @@ Rev | Date | Author | Change Description :---: | :-----: | :------: | :--------- -0.1 | 06/05/2024 | Ghulam Bahoo | Initial version +0.1 | 06/05/2024 | Ghulam Bahoo, Muhammad Ali Hussnain | Initial version ## Overview This document outlines the configuration and usage of the kdump remote feature with ssh for the SONiC. @@ -199,17 +199,16 @@ ssh_path: /path to ssh_private key/ ``` leaf remote { description "SSH Remote Config"; - - type boolean; -} + type boolean; + } leaf ssh_stirng { - type string; - } + type string; +} leaf ssh_path { - type string; - } + type string; +} ``` From 40c6dec9fd57a6cecbb5505427542a0d1ef3efc9 Mon Sep 17 00:00:00 2001 From: Muhammad Ali Hussnain <91005947+muhammadalihussnain@users.noreply.github.com> Date: Fri, 6 Sep 2024 06:01:46 +0000 Subject: [PATCH 6/7] fixed typos and leaf descriptions --- doc/kdump/kdump_Remote_SSH_HLD.md | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/doc/kdump/kdump_Remote_SSH_HLD.md b/doc/kdump/kdump_Remote_SSH_HLD.md index 209110c02a..56e0a205c4 100644 --- a/doc/kdump/kdump_Remote_SSH_HLD.md +++ b/doc/kdump/kdump_Remote_SSH_HLD.md @@ -79,7 +79,7 @@ At a high level the following should be supported: - CLI support for configuring remote kdump feature enable/disable via ssh. - CLI support for configuring username and hostname of ssh server (username@server_address). - CLI support for configuring SSH private key path for ssh server (SSH_private_Key_Path). -- CLI support for displaying crededentials of ssh server. +- CLI support for displaying credentials of ssh server. - CLI support for displaying state of kdump remote feature (enable/disable). ### SSH Key Generation Requirement The system should authenticate with the remote server using SSH keys for secure access. @@ -198,16 +198,22 @@ ssh_path: /path to ssh_private key/ ``` leaf remote { - description "SSH Remote Config"; - type boolean; - } + type boolean; + description + "Enable or Disable the Kdump remote ssh mechanism"; +} -leaf ssh_stirng { - type string; +leaf ssh_string { + type string; + description + "Remote ssh connection string"; } leaf ssh_path { - type string; + type string; + description + "Remote ssh private key path"; + } ``` From 2f05dc99dad7a76dcd5aaec1b9d6ef2ca2eb500b Mon Sep 17 00:00:00 2001 From: Muhammad Ali Hussnain <91005947+muhammadalihussnain@users.noreply.github.com> Date: Tue, 1 Oct 2024 16:00:11 +0500 Subject: [PATCH 7/7] Added Hostcfg detail --- doc/kdump/kdump_Remote_SSH_HLD.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/kdump/kdump_Remote_SSH_HLD.md b/doc/kdump/kdump_Remote_SSH_HLD.md index 56e0a205c4..78cde6ad9a 100644 --- a/doc/kdump/kdump_Remote_SSH_HLD.md +++ b/doc/kdump/kdump_Remote_SSH_HLD.md @@ -119,7 +119,7 @@ We are suggesting modifying the exisitng SONiC configuration as following sonic- 2. files/scripts/network_setup.sh (New Addition) - A script to initialize the network interfaces and enable DHCP on them. 3. files/script/network_setup.hook (New Addition) -4. Added a daemon into files/image_config/kdump-feature/kdump-service.py (New Addition). +4. Updated exisitng hostcfg daemon file script/hostcfgd (Updation). ## Configuration and Management This section describes all types of configuration and management related design. Example sub-sections for "CLI" and "Config DB" are given below.