Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pull] master from sonic-net:master #5

Merged
merged 187 commits into from
Dec 4, 2024

Conversation

pull[bot]
Copy link

@pull pull bot commented Feb 5, 2024

See Commits and Changes for more details.


Created by pull[bot]

Can you help keep this open source service alive? 💖 Please sponsor : )

…KUs if the buffer configuration is empty (#3114)

### What I did

Do not touch the buffer model on generic SKUs if the buffer configuration is empty.

#### How I did it

Set the buffer model to traditional on generic SKUs in Mellanox db migrator only if the buffer configuration is not default and not empty.

#### How to verify it

Manually and mock test.

### Details ####
Buffer configuration contains two parts:
1. the buffer model in `DEVICE_METADATA|localhost` which is from `init_cfg.json` and can be updated by Mellanox buffer migrator
2. the buffer pools, profiles, PGs, and queues which are renderred from the buffer templates in `config qos reload`

There was a logic to update the buffer model in Mellanox buffer migrator: if the buffer configuration is not default, the buffer model is set to traditional. However, if a device is installed from ONIE, the buffer configuration is also empty. As a result, the traditional buffer manager starts after the device is installed from ONIE, and it requires to restart the buffer manager to switch to the dynamic model. This can be done only by `config reload`.
It didn't matter since it was required to execute `config qos reload` to complete buffer configuration which required `config save` and `config reload` in any case due to issue sonic-net/sonic-buildimage#9088.
Now that the issue has been fixed and `config reload` isn't required anymore to complete `config qos reload`, we should avoid setting the buffer model to traditional in such case, otherwise `config reload` is still required to switch the buffer model.

Verified the following scenarios:
1. non-default configuration generic SKU upgrade from 202305: warm/cold boot: expected: traditional model
2. default configuration generic SKU upgrade from 201911/202305: warm/cold boot: expected: dynamic model
3. install from ONIE: expected: dynamic model
4. MSFT SKU upgrade from 201911 by cold boot/ from 202012 by warm boot: expected: traditional model
@pull pull bot added the ⤵️ pull label Feb 5, 2024
stepanblyschak and others added 28 commits February 5, 2024 09:38
### What I did

Account for static routes in route_check.py when checking route offload status.

#### How I did it

skip routes that are "connected" or "kernel".

#### How to verify it

Run on 202311, make sure it reports Loopback IPv6 address as missing.
…client.eth0.pid does not exist" (#3149)

* Fix load_mgmt_config not exit when dhclient.eth0.pid not exists

Signed-off-by: Mai Bui <maibui@microsoft.com>

* add UT

Signed-off-by: Mai Bui <maibui@microsoft.com>

---------

Signed-off-by: Mai Bui <maibui@microsoft.com>
…ump utility. (#3091)

- What I did
Add support of the nvidia-bluefield platform to generate-dump utility to collect platform-specific dumps on NVIDIA Bluefield DPU.

- How I did it
Extend platform-specific section of generate-dump utility

- How to verify it
Run "show techsupport" command to generate dump file. Verify that platform-dump directory exists in the created dump file.
…3153)

* Fix the sfputil treats page number as decimal instead of hexadecimal (#22)

Fix the sfputil treats page number as decimal instead of hexadecimal

Signed-off-by: Kebo Liu <kebol@nvidia.com>

* remove unreachable code

Signed-off-by: Kebo Liu <kebol@nvidia.com>

---------

Signed-off-by: Kebo Liu <kebol@nvidia.com>
…SIC (#3158)

This PR #3099 fixes the case where on chassis Linecard there are no BGP neighbors. However, if the Linecard has neighbors on one ASIC but not on other, the command show bgp summary displayed no neighbors. This PR fixes this.

How I did it
Add check in bgp_util to create empty peer list only once
Add UT to cover this case
* [show] Update show run all to cover all asic config in masic

* per comment
### What I did
Fix  #3164
Check Golden Config earlier before service is down.
#### How I did it
Move the check at the begining
#### How to verify it
Unit test
* Fix sfputil invalid namesapce error

* Add test case for loading port configuration

* Improve cov
Signed-off-by: Mihir Patel <patelmi@microsoft.com>
…le (#3177)

* Retrieve firmware version fields from TRANSCEIVER_FIRMWARE_INFO table

Signed-off-by: Mihir Patel <patelmi@microsoft.com>

* Fixed test failures

* Removed update_firmware_info_to_state_db function

* Revert "Removed update_firmware_info_to_state_db function"

This reverts commit 68f52a2.

---------

Signed-off-by: Mihir Patel <patelmi@microsoft.com>
* Fix for switchport mode PR

* Fix for cli.py

* Fix for indentation

* Fix for error

* Fix

* Fixing indentation errors

* Fix for error

* Fix for failures

* Fix for errors

* Fix for port version

* Fix for DB migrator versions

* Fix for db migrator version function

* Fixing versions

* Fix for cli.py

* Fix for vlan_test.py

* Fix  for failures

* Fix for unexpected characters

* Fixing error message

* Fix for routed port
…3186)

MSFT ADO: 26918588

This change is to add ERR logs generated during warm-reboot script to syslog.
Currently the ERR logs are sent in stdout and a corresponding entry is not added to syslog.
This makes it difficult to debug issues when stdout is not readily available.

How I did it
Modified existing error function to add the log entry to syslog.

How to verify it
Verified manually on physical device
ADO: 26732148 
#### What I did
Add YANG hard depdency check for AAA and TACPLUS table
#### How I did it
Add a special check
#### How to verify it
Unit test
…ateTask thread (#3187)

* CLI to skip polling for periodic infomration for a port in DomInfoUpdateTask thread

Signed-off-by: Mihir Patel <patelmi@microsoft.com>

* Fixed unit-test failure

* Modified dom_status to dom_polling

* Modified comment for failing the command

---------

Signed-off-by: Mihir Patel <patelmi@microsoft.com>
#### What I did
Add alerting for YANG validation when load_minigraph during override. This is to alert early if golden config is invalid which will breaks GCU feature. 
#### How I did it
Add alerting when `is_yang_config_validation_enabled` is not set during load_minigraph with override
#### How to verify it
Unit test
What I did
The bug can be reproduced by the following command:

root@bjw-can-7215-6:/home/admin# sonic-installer set-fips
Command: /usr/bin/fw_setenv linuxargs net.ifnames=0 loopfstype=squashfs loop=image-fips-armhf-202305.88981472-dde4d1d844/fs.squashfs systemd.unified_cgroup_hierarchy=0 varlog_size=4096 loglevel=4 logs_inram=on sonic_fips=1
Error: illegal character '=' in variable name "loopfstype=squashfs"

How I did it
It is to set the variable linuxargs to the the environment value cmdline, as the part of the Linux Kernel Cmdline. The environment variable cannot be split.
…ATE_DB is empty (#3199)

* Add skip_action_validation option to acl-loader
### What I did
Handle the SAI key value pair if it is present in sai common profile rather than specific profile for mellanox platforms. The concept of common sai profile is introduced in sonic-net/sonic-buildimage#18074 . After this the techsupport started to fail because of the absence of SAI_DUMP_STORE_PATH

#### How I did it
Check if the variable is not present in platform specific file and then read the common file. If the common file is not accessible due to syncd being down, fallback to default path which is hardcoded.


#### How to verify it
Running techsupport and ensuring it exits with code 0
…ssue on the Supervisor (#3194)

Signed-off-by: mlok <marty.lok@nokia.com>
### What I did
Handle exception in show ip interfaces command when executed during config reload. Sometimes during config reload the interfaces are removed and if show ip interfaces was executed during this time we may get the below traceback. The interface would exist when the call multi_asic_get_ip_intf_from_ns was made but would have been removed in the subsequent for loop which tries to get ip interface data for each interface

```
show ip interfaces

Traceback (most recent call last):
  File "/usr/local/bin/ipintutil", line 276, in

     main()
  File "/usr/local/bin/ipintutil", line 269, in main
    ip_intfs = get_ip_intfs(af, namespace, display)
  File "/usr/local/bin/ipintutil", line 232, in get_ip_intfs
    ip_intfs_in_ns = get_ip_intfs_in_namespace(af, namespace, display)
  File "/usr/local/bin/ipintutil", line 153, in get_ip_intfs_in_namespace
    ipaddresses = multi_asic_util.multi_asic_get_ip_intf_addr_from_ns(namespace, iface)
  File "/usr/local/lib/python3.9/dist-packages/utilities_common/multi_asic.py", line 186, in multi_asic_get_ip_intf_addr_from_ns

     ipaddresses = netifaces.ifaddresses(iface)
ValueError: You must specify a valid interface name.
```

#### How I did it
Adding try exception block so that if an interface is not present, it would be skipped.

#### How to verify it
Running show ip interface command and performing config reload in parallel
…atchdog arm before the reboot (#3203)

Signed-off-by: vadymhlushko-mlnx <vadymh@nvidia.com>
Basically port2alias Cli became broken on multi-asic platforms after introduction of sonic-net/sonic-buildimage#10960 which removed the initialization of global DB config from portconfig.py (library side) and expects application to do it, but here application side (port2alias) was not updated accordingly.

How I did it
Add load_db_config call to port2alias for initialization
### What I did
Enhanced route_check.py script to cover multi-asic platforms.
Accordingly enhanced the test files as well.

MSFT ADO: 25416673

#### How I did it
Enhanced the route_check.py script to take additional optional parameter(--n/namespace). Without this parameter, the check will be run on all asics in multi-asic platforms.
Different connections to DBs are modified accordingly to connect to relevant ns dbs.
Result will be encapsulated under different namespace. For single asic, results will be displayed under Default-Namespace("").

testData and the testfiles are enhanced accordinly.

#### How to verify it
1. Verified that all pytest UT cases are passing.
2. Verified the route_check_test.sh script on single asic and multi-asic platforms.
3. Verified Monit routecheck outputs by simulating a failure scenario on both single asic and multi-asic platforms.


output from Monit Check:
**Single Asic:**
xxx/usr/local/bin# monit status routecheck
Monit 5.20.0 uptime: 1d 20h 32m

Program 'routeCheck'
  status                       Status failed
  monitoring status            Monitored
  monitoring mode              active
  on reboot                    start
  last exit value              255
  last output                  Failure results: {{
                                   "": {
                                       "missed_ROUTE_TABLE_routes": [
                                           "20c0:d9b8:99:80::/64"
                                       ]
                                   }
                               }}
                               Failed. Look at reported mismatches above
                               add: {
                                   "": []
                               }
                               del: {
                                   "": []
                               }
  data collected               Tue, 12 Dec 2023 20:30:11

'''
**Multi Asic:**
'''
/bin# monit status routecheck
Monit 5.20.0 uptime: 1d 23h 51m

Program 'routeCheck'
  status                       Status failed
  monitoring status            Monitored
  monitoring mode              active
  on reboot                    start
  last exit value              255
  last output                  Failure results: {{
                                   "asic0": {
                                       "missed_ROUTE_TABLE_routes": [
                                           "1.0.0.0/16"
                                       ]
                                   },
                                   "asic1": {
                                       "missed_ROUTE_TABLE_routes": [
                                           "1.0.0.0/16"
                                       ]
                                   },
                                   "asic2": {
                                       "missed_ROUTE_TABLE_routes": [
                                           "1.0.0.0/16"
                                       ]
                                   }
                               }}
                               Failed. Look at reported mismatches above
                               add: {
                                   "asic0": [],
                                   "asic1": [],
                                   "asic2": []
                               }
                               del: {
                                   "asic0": [],
                                   "asic1": [],
                                   "asic2": []
                               }
  data collected               Tue, 12 Dec 2023 23:54:23
'''
…ature (#2932)

* Add "state" field in CONFIG_DB fabric_monitor table as a toggle of the
fabric port monitoring feature. The command to set this is "config
fabric port monitor state <enable/disable>"
---------
Signed-off-by: Jie Feng <jfeng@arista.com>
wen587 and others added 29 commits October 23, 2024 15:47
…onfiguration (#3021)

What I did
Added CLI commands for Banner feature according to HLD: sonic-net/SONiC#1361

How I did it
Added CLI commands to:

Enable/disable Banner feature
Configure Banner messages: login/motd/logout
Related show command
How to verify it
Manual testing
* Added function to check if disk is SATA

* Fixed eval bug unconvered by UT

* Changed logger to syslogger; fixed UT failures

* Added checks for partitions and filtered_disks; fixed static analysis issues

* Fix static analysis errors E303, E711

* Changed information delivery semantics per review comment

* Reverted syslogger to logger to maintain backward compatibility

The syslogger-to-logger change is unrelated to the sonic-utilities
change and breaks backwards compatibility. It should be a separate
commit once SysLogger is in all the older versions.

* Changed Disk 'type' --> 'Type' for uniformity

* Made the fields look uniform

* Disk Type Support for eMMC devices

* Removed old sonic_ssd import
Currently the Vnet_route_check fails if a user calls it witout sudo with the following error.

```
Traceback (most recent call last):
  File "/usr/local/bin/vnet_route_check.py", line 401, in <module>
    sys.exit(main())
  File "/usr/local/bin/vnet_route_check.py", line 364, in main
    if not check_vnet_cfg():
  File "/usr/local/bin/vnet_route_check.py", line 77, in check_vnet_cfg
    db = swsscommon.DBConnector('APPL_DB', 0)
  File "/usr/lib/python3/dist-packages/swsscommon/swsscommon.py", line 1656, in __init__
    _swsscommon.DBConnector_swiginit(self, _swsscommon.new_DBConnector(*args))
RuntimeError: Unable to connect to redis (unix-socket): Cannot assign requested address

```
#### What I did
The **route_check** script accesses the same DB tables but is able to run without the sudo rights.  To solve this problem I have changed the **Vnet_route_check** to use a TCP socket to connect to the DB as done in **route_check**. As a result the script doesn't fail with a run time error.

#### How I did it

#### How to verify it
create a new user on a T1 device which has no docker or sudoers privilage. run vnet_route check. it should fail.
#### Previous command output (if the output of a command-line utility has changed)
```
Traceback (most recent call last):
  File "/usr/local/bin/vnet_route_check.py", line 401, in <module>
    sys.exit(main())
  File "/usr/local/bin/vnet_route_check.py", line 364, in main
    if not check_vnet_cfg():
  File "/usr/local/bin/vnet_route_check.py", line 77, in check_vnet_cfg
    db = swsscommon.DBConnector('APPL_DB', 0)
  File "/usr/lib/python3/dist-packages/swsscommon/swsscommon.py", line 1656, in __init__
    _swsscommon.DBConnector_swiginit(self, _swsscommon.new_DBConnector(*args))
RuntimeError: Unable to connect to redis (unix-socket): Cannot assign requested address

```
* Add CLI for bmp configdb entity Enable/Disable.

* Add CLI for bmp configdb entity Enable/Disable.

* Use pytest.mark.parametrize to reduce duplicated code

* Use pytest.mark.parametrize to reduce duplicated code
…3557)

#### What I did
Add support of the pensando-dpu platform to generate-dump utility to collect platform-specific dumps on Pensando DPU.
#### How I did it
Extend platform-specific section of generate-dump utility
#### How to verify it
Run "show techsupport" command to generate dump file. Verify that `{dpu_container}_techsupport` directory exists in the created dump file.
#### show techsupport command output logs:-
```
{
    cat
}; docker exec syncd saidump | dummy_cleanup_method &> '/var/dump/sonic_dump_sonic_20240910_045531/dump/saidump'"
mkdir: created directory '/root/dpu_dump'
timeout --foreground 5m sudo docker exec polaris touch /data/techsupport//DSC_TechSupport_b08d.57cd.360f_2024-09-10_04-57-04_1725944224.tar.gz
timeout --foreground 5m sudo docker cp polaris:/data/techsupport//DSC_TechSupport_b08d.57cd.360f_2024-09-10_04-57-04_1725944224.tar.gz /root/dpu_dump
mkdir: created directory '/var/dump/sonic_dump_sonic_20240910_045531/polaris_techsupport'
removed '/root/dpu_dump/DSC_TechSupport_b08d.57cd.360f_2024-09-10_04-57-04_1725944224.tar.gz'
removed directory '/root/dpu_dump'
timeout --foreground 5m bash -c "dummy_cleanup_method ()
{
    cat
}; echo 10/09/2024 04:57:43:857701 | dummy_cleanup_method &> '/var/dump/sonic_dump_sonic_20240910_045531/dump/date.counter_2'"
```
```
sonic_dump_sonic_20240910_045531/proc/iomem
sonic_dump_sonic_20240910_045531/polaris_techsupport/
sonic_dump_sonic_20240910_045531/polaris_techsupport/DSC_TechSupport_b08d.57cd.360f_2024-09-10_04-57-04_1725944224.tar.gz
sonic_dump_sonic_20240910_045531/core/
```
```
root@sonic:/home/admin# cd /var/dump/
root@sonic:/var/dump# ls
sonic_dump_sonic_20240910_045531.tar.gz
root@sonic:/var/dump# tar -xzf sonic_dump_sonic_20240910_045531.tar.gz
root@sonic:/var/dump# cd sonic_dump_sonic_20240910_045531/
root@sonic:/var/dump/sonic_dump_sonic_20240910_045531# cd polaris_techsupport/
root@sonic:/var/dump/sonic_dump_sonic_20240910_045531/polaris_techsupport# ls
DSC_TechSupport_b08d.57cd.360f_2024-09-10_04-57-04_1725944224.tar.gz
root@sonic:/var/dump/sonic_dump_sonic_20240910_045531/polaris_techsupport#
```
#### /usr/local/bin/generate_dump -n output
```
{
    cat
}; docker exec syncd saidump | dummy_cleanup_method &> '/var/dump/sonic_dump_sonic_20240910_050411/dump/saidump'"
mkdir -p /root/dpu_dump
docker exec polaris /nic/tools/collect_techsupport.sh
rm -rf /root/dpu_dump
mkdir -p /var/dump/sonic_dump_sonic_20240910_050411/dump
timeout --foreground 5m bash -c "dummy_cleanup_method ()
{
    cat
}; echo 10/09/2024 05:04:40:130209 | dummy_cleanup_method &> '/var/dump/sonic_dump_sonic_20240910_050411/dump/date.counter_2'"
```
This PR fixes sonic-net/sonic-buildimage#18773

How I did it
Parallely execute route_check on each Asic.
Parallelly fetch ipv4 routes and ipv6 routes.

How to verify it
execute "time route_check.py" on T2 chassis having 32k v4+32k v6 routes.
Results:
Before:
Checking routes for namespaces: ['asic0', 'asic1']

real 3m16.387s
user 1m26.084s
sys 0m7.275s

After:
time route_check.py
real 1m30.675s
user 1m33.777s
sys 0m8.209s
What I did
Bypass stdin input for config reload to avoid double json read which will cause issue

How I did it
Add a bypass check

How to verify it
UT and manual test
What I did
Changed the data type casting to float if count coming is too large or in scientific notation .

How I did it
made it float then type cast to int for display purpose

How to verify it
Manually passed big value and see the count output if it breaks or works
#### What I did

Addressing the [issue 20508](sonic-net/sonic-buildimage#20508).

ADO: 29979987

#### How I did it

Remove temp file as intermediate steps.

#### How to verify it

```
admin@str2-7250-lc1-2:~$ cat test.json 

[
 {
        "op": "add",
        "path": "/asic0/BGP_DEVICE_GLOBAL/STATE/idf_isolation_state",
        "value": "unisolated"
    }
]

admin@str2-7250-lc1-2:~$ sudo config apply-patch test.json 
sonic_yang(6):Note: Below table(s) have no YANG models: DHCP_SERVER
sonic_yang(6):Note: Below table(s) have no YANG models: LOGGER
sonic_yang(6):Note: Below table(s) have no YANG models: LOGGER
Patch Applier: asic0: Patch application starting.
Patch Applier: asic0: Patch: [{"op": "add", "path": "/BGP_DEVICE_GLOBAL/STATE/idf_isolation_state", "value": "unisolated"}]
Patch Applier: asic0 getting current config db.
Patch Applier: asic0: simulating the target full config after applying the patch.
Patch Applier: asic0: validating all JsonPatch operations are permitted on the specified fields
Patch Applier: asic0: validating target config does not have empty tables,
                            since they do not show up in ConfigDb.
Patch Applier: asic0: sorting patch updates.
Patch Applier: The asic0 patch was converted into 1 change:
Patch Applier: asic0: applying 1 change in order:
Patch Applier:   * [{"op": "replace", "path": "/BGP_DEVICE_GLOBAL/STATE/idf_isolation_state", "value": "unisolated"}]
Patch Applier: asic0: verifying patch updates are reflected on ConfigDB.
Patch Applier: asic0 patch application completed.
Patch applied successfully.


admin@str2-7250-lc1-2:~$ show ver

SONiC Software Version: SONiC.20220532.72
SONiC OS Version: 11
Distribution: Debian 11.9
Kernel: 5.10.0-23-2-amd64
Build commit: 7766169087
Build date: Fri Oct  4 00:15:40 UTC 2024
Built by: azureuser@98b2318ac000000

Platform: x86_64-nokia_ixr7250e_36x400g-r0
HwSKU: Nokia-IXR7250E-36x100G
ASIC: broadcom
ASIC Count: 2
Serial Number: NS220304200
Model Number: 3HE12578AARA01
Hardware Revision: 56
Uptime: 05:08:45 up 2 days, 10:16,  1 user,  load average: 1.64, 1.82, 1.74
Date: Fri 25 Oct 2024 05:08:45

Docker images:
REPOSITORY                 TAG           IMAGE ID       SIZE
docker-mux                 20220532.72   a27de04f0900   375MB
docker-mux                 latest        a27de04f0900   375MB
docker-macsec              latest        9cad4ac054db   372MB
docker-sonic-restapi       20220532.72   2dc9b6c42cdb   345MB
docker-sonic-restapi       latest        2dc9b6c42cdb   345MB
docker-orchagent           20220532.72   560867c70e69   360MB
docker-orchagent           latest        560867c70e69   360MB
docker-fpm-frr             20220532.72   525aad3b1670   367MB
docker-fpm-frr             latest        525aad3b1670   367MB
docker-teamd               20220532.72   9bc2875ba21c   343MB
docker-teamd               latest        9bc2875ba21c   343MB
docker-syncd-brcm-dnx      20220532.72   58ee35f9df5b   674MB
docker-syncd-brcm-dnx      latest        58ee35f9df5b   674MB
docker-gbsyncd-credo       20220532.72   5084ec39b3fc   346MB
docker-gbsyncd-credo       latest        5084ec39b3fc   346MB
docker-gbsyncd-broncos     20220532.72   f1011e5ed75c   374MB
docker-gbsyncd-broncos     latest        f1011e5ed75c   374MB
docker-dhcp-relay          latest        137faf5f4038   337MB
docker-platform-monitor    20220532.72   41d6954ab85a   452MB
docker-platform-monitor    latest        41d6954ab85a   452MB
docker-snmp                20220532.72   916f66a40a77   376MB
docker-snmp                latest        916f66a40a77   376MB
docker-sonic-telemetry     20220532.72   e8037e0fd00c   407MB
docker-sonic-telemetry     latest        e8037e0fd00c   407MB
docker-router-advertiser   20220532.72   a5afbccec5da   327MB
docker-router-advertiser   latest        a5afbccec5da   327MB
docker-lldp                20220532.72   01386dd544cf   369MB
docker-lldp                latest        01386dd544cf   369MB
docker-database            20220532.72   2da62f2abd04   327MB
docker-database            latest        2da62f2abd04   327MB
docker-acms                20220532.72   264a51a7a259   374MB
docker-acms                latest        264a51a7a259   374MB
k8s.gcr.io/pause           3.5           ed210e3e4a5b   683kB
```
#### What I did

Addressing issue [#20377](sonic-net/sonic-buildimage#20377). The issue caused by unescape in JsonPointer implementation which followed [RFC 6901](https://www.rfc-editor.org/rfc/rfc6901)

```python
pointer = jsonpointer.JsonPointer(path)

...

class JsonPointer(object):
    """A JSON Pointer that can reference parts of a JSON document"""

    # Array indices must not contain:
    # leading zeros, signs, spaces, decimals, etc
    _RE_ARRAY_INDEX = re.compile('0|[1-9][0-9]*$')
    _RE_INVALID_ESCAPE = re.compile('(~[^01]|~$)')

    def __init__(self, pointer):

        # validate escapes
        invalid_escape = self._RE_INVALID_ESCAPE.search(pointer)
        if invalid_escape:
            raise JsonPointerException('Found invalid escape {}'.format(
                invalid_escape.group()))

        parts = pointer.split('/')
        if parts.pop(0) != '':
            raise JsonPointerException('Location must start with /')

        parts = [unescape(part) for part in parts]
        self.parts = parts
```

#### How I did it

Re-escape `/` to `~1` to match the real key in json, and [JsonPatch](https://www.rfc-editor.org/rfc/rfc6902#appendix-A.14) will handle it correctly.

#### How to verify it

```shell
admin@str2-7250-lc1-2:~$ cat link.json 
[
    {
        "op": "add",
        "path": "/asic1/PORTCHANNEL_INTERFACE/PortChannel106|10.0.0.6~131",
        "value": {}
    }
]
admin@str2-7250-lc1-2:~$ sudo config apply-patch link.json 
sonic_yang(6):Note: Below table(s) have no YANG models: DHCP_SERVER
sonic_yang(6):Note: Below table(s) have no YANG models: LOGGER
sonic_yang(6):Note: Below table(s) have no YANG models: LOGGER
Patch Applier: asic1: Patch application starting.
Patch Applier: asic1: Patch: [{"op": "add", "path": "/PORTCHANNEL_INTERFACE/PortChannel106|10.0.0.6~131", "value": {}}]
Patch Applier: asic1 getting current config db.
Patch Applier: asic1: simulating the target full config after applying the patch.
Patch Applier: asic1: validating all JsonPatch operations are permitted on the specified fields
Patch Applier: asic1: validating target config does not have empty tables,
                            since they do not show up in ConfigDb.
Patch Applier: asic1: sorting patch updates.
Patch Applier: The asic1 patch was converted into 0 changes.
Patch Applier: asic1: applying 0 changes in order.
Patch Applier: asic1: verifying patch updates are reflected on ConfigDB.
Patch Applier: asic1 patch application completed.
Patch applied successfully.
```
…g it before starting (#3344)

What I did
Add logic to disable the feature before stopping and enabling it before starting in order to properly clean the systemd symlinks to avoid issues with delayed attribute explained in the How to verify it section.

How I did it
Add the systemctl disable ... after the systemctl stop... and the systemctl enable ... before the systemctl start .. for some feature.

How to verify it
Add repository for some featureX
sonic-package-manager repository <featureX> <URL>
Install featureX version 1.0.0 where the delayed flag is equal to false (delayed flag means - the feature will be started right after the system boots or after the PortInitDone event)
sonic-package-manager install featureX==1.0.0 -y
Enable the feature in SONiC
config feature state featureX enabled
Install featureX version 1.0.1 where the delayed flag is equal to true
sonic-package-manager install featureX==1.0.1 -y
Check the manifest file to verify the delayed field value
sonic-package-manager show package manifest featureX
config save -y
reboot
Check that the featureX is delayed on the system start
Update Mellanox-SN5600-C256X1 to be Mellanox-SN5600-C256S1 in gcu_field_operation_validators.conf.json
What I did
Add unit test/runtime alert for db_migrator.py/load_minigraph: ConfigDB passing yang validation

How I did it
Use subprocess to run yang validation, and then warm-reboot performance will not change.
Check /etc/sonic/mgmt_test_mark, this mark_file means this device is under end to end test.

For unit test, db_migrator will wait for validation result and raise exception.
For end to end test, db_migrator will wait for validation result and raise exception.
How to verify it
Run unit test and run end to end test
)

Signed-off-by: Pavan Naregundi <pnaregundi@marvell.com>
During the show techsupport, generate_dump calls techsupport_cleanup with current generated file. The techsupport_cleanup verifies the file path provided for file last modification timestamp and on success only proceeds to cleanup. It expects the file to be modified within last 20 secs. Sometimes when file is big, gzip takes more that 20 sec. Due to this, the last modify timestamp to current time stamp diff is greater than 20 and verify_recent_file_creation fails causing cleanup to fail.

How I did it
touch the tarfile after finishing the gzip to refresh modify timestamp.

How to verify it
run show techsupport
* PVST co pr commit

* PVST co pr commit

* Trigger Pipelines

* Fix for pre-commit

* Fix pre-commit failures

* fix pre-commit failures

* fix pre-commit failures

* fix pre-commit failures

* pre-commit fixes

* pre-commit fixes

* pre-commit fixes

* pre-commit fixes

* fix precommit failures

* fix precommit failures

* fix precommit failures

* fix precommit failures

* fix precommit failures

* fix precommit failures

* fix precommit failures

* fix precommit failures

* fix precommit failures

* Fix stp test failures

* Fix stp test failures

* Fix stp test failures

* fix precommit failures

* fix precommit failures

* fix precommit failures

* Fix stp test failures

* Fixing spacing errors in stp_test

* Fix stp test failures

* Fix stp test failures

* Fix stp test failures

* Fix stp test failures

* Fix stp test failures

* Fix stp test failures

* Remove svscode settings

* Addressed review comments

* Addressed review comments

* Addressed review comments

* Addressed review comments

* Fix test errors

* Fix test issues

* Fix test issues

* Fix test issues

* Fix test issues

* fix test failures

* fix test failures

* fix test failures

* fix test failures

* fix test failures

* fix test failures

* fix test failures

* fix test failures

* fix test failures

* fix test failures

* fix test failures

* fix test failures

* fix test failures

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix failures

* Fix failures

* Fix failures

* Fix failures

* Fix failures

* Fix failures

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* fix errors

* fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Fix errors

* Addressing review comments

* Addressing review comments

* Addressing review comments

* Addressing review comments

* Addressing review comments

* Addressing review comments

---------

Co-authored-by: Rida Hanif <rida.hanif@xflowresearch.com>
Co-authored-by: ridahanif96 <ridahanif958@gmail.com>
Co-authored-by: Wajahat Razi <wajahat37@gmail.com>
Add Mellanox-SN5600-C224O8 SKU to Spectrum-4 list in gcu_field_operation_validators.conf.json
Fetch boot arguments from the next boot image by reading it from
uboot environment variables.

Signed-off-by: Parthiv Shah <parthiv@marvell.com>
* Supports FRR-VRRP configuration

Signed-off-by: philo <philo@micasnetworks.com>

* Supports FRR-VRRP configuration

Signed-off-by: philo <philo@micasnetworks.com>

* Update main.py

* Update vrrp_test.py

* Update main.py

* Update vrrp_test.py

* Update main.py

* update vrrp_test.py

Signed-off-by: philo <philo@micasnetworks.com>

* update vrrp_test.py

Signed-off-by: philo <philo@micasnetworks.com>

* update vrrp_test.py

Signed-off-by: philo <philo@micasnetworks.com>

* fix Static Analysis

Signed-off-by: philo <philo@micasnetworks.com>

* del vrrp instance shutdown and startup commonds

Signed-off-by: philo <philo@micasnetworks.com>

* Update main.py

* update config/main.py

Signed-off-by: philo <philo@micasnetworks.com>

---------

Signed-off-by: philo <philo@micasnetworks.com>
* Add port FEC BER show changes

Signed-off-by: vincent ng <vincent.ng@arista.com>

* Add port FEC BER show changes

Signed-off-by: vincent ng <vincent.ng@arista.com>

* Add port FEC BER show changes

Signed-off-by: vincent ng <vincent.ng@arista.com>

* Add port FEC BER show changes

Signed-off-by: vincent ng <vincent.ng@arista.com>

* Add port FEC BER show changes

Signed-off-by: vincent ng <vincent.ng@arista.com>

---------

Signed-off-by: vincent ng <vincent.ng@arista.com>
…3610)

* Extra delay between running firmware and updating firmware version

Signed-off-by: Stephen Sun <stephens@nvidia.com>

* Fix review comments

Signed-off-by: Stephen Sun <stephens@nvidia.com>

---------

Signed-off-by: Stephen Sun <stephens@nvidia.com>
Fix the object name and because of which, counterpoll show for ENI is not working
…lders (#3631)

- What I did
Support saving folders.

- How I did it
Add a check to the save_file command, if the path that was provided is to a folder, use an appropriate method.

- How to verify it
Previously when a folder was given to be saved using this function, an empty file with the folder name would be created.
This PR is accompanied by sonic-net/sonic-swss-common#931 and sonic-net/sonic-buildimage#20108

What I did
Validate interface name length does not exceed the limitation of IFNAMSIZ to align to kernel restrictions.

How I did it
Add validation checks in the relevant config functions for the following interface types:

vxlan
vlan
vrf
loopback
subinterface
portchannel

How to verify it
UT tests added

Previous command output (if the output of a command-line utility has changed)
New command output (if the output of a command-line utility has changed)
#### What I did
Added support for the following DASH objects for the dump utility:
`dash_acl_group`
`dash_acl_out`
`dash_acl_rule`
`dash_appliance`
`dash_prefix_tag`
`dash_eni`
`dash_qos`
`dash_route`
`dash_route_rule`
`dash_vnet_mapping`
`dash_vnet`

This PR also adds Match infra update in order to consider Dash objects, so new match requests can be created with the fields present in the dash objects to obtain the fields/keys.

#### How I did it
Added `protobuf` library and `libdashapi` to `sonic-utilities`, this is required as the dash objects are stored in the APPL_DB in protobuf format, and we need the .proto files which are available in the `libdashapi` package. We also use `redis` package instead of the `SonicV2Connector` since `SonicV2Connector` `get_all` function from the connector considers null terminated strings so the complete protobuf data is not obtained using `get_all` function
#### How to verify it
`dump state all <dash_object>`
Examples:
```
admin@sonic:~$ dump state dash_vnet Vnet1 -t
+-------------------+-----------+--------------------------------------------------------------------------------------------+
| dash_vnet_table   | DB_NAME   | DUMP                                                                                       |
+===================+===========+============================================================================================+
| Vnet1             | APPL_DB   | +-----------------------+----------------------------------------------------+             |
|                   |           | | Keys                  | field-value pairs                                  |             |
|                   |           | +=======================+====================================================+             |
|                   |           | | DASH_VNET_TABLE:Vnet1 | +---------+--------------------------------------+ |             |
|                   |           | |                       | | field   | value                                | |             |
|                   |           | |                       | |---------+--------------------------------------| |             |
|                   |           | |                       | | vni     | 50                                   | |             |
|                   |           | |                       | | guid    | 5526cce8-26ab-4193-b946-ccc0e8f930b0 | |             |
|                   |           | |                       | +---------+--------------------------------------+ |             |
|                   |           | +-----------------------+----------------------------------------------------+             |
+-------------------+-----------+--------------------------------------------------------------------------------------------+
| Vnet1             | ASIC_DB   | +------------------------------------------------------+---------------------------------+ |
|                   |           | | Keys                                                 | field-value pairs               | |
|                   |           | +======================================================+=================================+ |
|                   |           | | ASIC_STATE:SAI_OBJECT_TYPE_VNET:oid:0x7a000000000021 | +-------------------+---------+ | |
|                   |           | |                                                      | | field             |   value | | |
|                   |           | |                                                      | |-------------------+---------| | |
|                   |           | |                                                      | | SAI_VNET_ATTR_VNI |    100  | | |
|                   |           | |                                                      | +-------------------+---------+ | |
|                   |           | +------------------------------------------------------+---------------------------------+ |
|                   |           | +----------------------+--------------------+                                              |
|                   |           | | vid                  | rid                |                                              |
|                   |           | +======================+====================+                                              |
|                   |           | | oid:0x7a000000000021 | oid:0xffff70009130 |                                              |
|                   |           | +----------------------+--------------------+                                              |
+-------------------+-----------+--------------------------------------------------------------------------------------------+
```
```
admin@sonic:~$ dump state dash_acl_rule all
{
    "group1:rule1": {
        "APPL_DB": {
            "keys": [
                {
                    "DASH_ACL_RULE_TABLE:group1:rule1": {
                        "action": "ACTION_PERMIT",
                        "terminating": true,
                        "src_addr": [
                            "0.0.0.0/0"
                        ],
                        "dst_addr": [
                            "0.0.0.0/0"
                        ],
                        "src_port": [
                            {
                                "value": 80
                            }
                        ],
                        "dst_port": [
                            {
                                "value": 5005
                            }
                        ]
                    }
                }
            ],
            "tables_not_found": []
        }
    }
}
```
…lities (#3056)

[cisco|express-boot]: Add support for cisco express boot in sonic-utilities
@developfast developfast merged commit 35c7af8 into developfast:master Dec 4, 2024
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.