Skip to content

[action] [PR:26617] [bgpcfgd]: Validate aggregate address prefix and reject prefixes with host bits set#2278

Merged
lizhijianrd merged 1 commit into
Azure:202603from
mssonicbld:cherry/msft-202603/26617
May 11, 2026
Merged

[action] [PR:26617] [bgpcfgd]: Validate aggregate address prefix and reject prefixes with host bits set#2278
lizhijianrd merged 1 commit into
Azure:202603from
mssonicbld:cherry/msft-202603/26617

Conversation

@mssonicbld
Copy link
Copy Markdown
Collaborator

Why I did it

When an invalid aggregate address prefix (e.g., 10.100.0.1/24 with host bits set) is configured in CONFIG_DB, bgpcfgd silently accepts it and pushes invalid commands to FRR. This can cause unexpected BGP behavior. Adding prefix validation with a clear error log makes it easier to diagnose misconfiguration.

Work item tracking
  • Microsoft ADO (number only): 37506197

How I did it

Added a validate_prefix() function in managers_aggregate_address.py that uses Python's ipaddress.ip_network(prefix, strict=True) to verify the prefix is a valid network address (no host bits set).
Called validate_prefix() at the beginning of address_set_handler(). If validation fails, the handler logs an error (log_err) with the prefix and reason, and returns False to skip the invalid entry.
Added unit tests for validate_prefix() covering valid prefixes (e.g., 10.100.0.0/16, 2001:db8::/32, 0.0.0.0/0) and invalid prefixes with host bits set.
Added integration-style test test_host_bits_set_rejected verifying that address_set_handler rejects bad prefixes, does not push commands, and marks state as inactive.

How to verify it

All tests including test_validate_prefix and test_host_bits_set_rejected should pass.

Which release branch to backport (provide reason below if selected)

  • 202305
  • 202311
  • 202405
  • 202411
  • 202505
  • 202511
  • 202603

Tested branch (Please provide the tested image version)

  • SONiC.20251110.19

Description for the changelog

Add prefix validation in bgpcfgd aggregate address manager to reject prefixes with host bits set and log an error.

Link to config_db schema for YANG module changes

Signed-off-by: Sonic Build Admin sonicbld@microsoft.com

A picture of a cute animal (not mandatory but encouraged)

… host bits set

<!--
     Please make sure you've read and understood our contributing guidelines:
     https://github.com/Azure/SONiC/blob/gh-pages/CONTRIBUTING.md

     ** Make sure all your commits include a signature generated with `git commit -s` **

     If this is a bug fix, make sure your description includes "fixes #xxxx", or
     "closes #xxxx" or "resolves #xxxx"

     Please provide the following information:
-->

#### Why I did it

When an invalid aggregate address prefix (e.g., 10.100.0.1/24 with host bits set) is configured in CONFIG_DB, bgpcfgd silently accepts it and pushes invalid commands to FRR. This can cause unexpected BGP behavior. Adding prefix validation with a clear error log makes it easier to diagnose misconfiguration.

##### Work item tracking
- Microsoft ADO **(number only)**: 37506197

#### How I did it

Added a validate_prefix() function in managers_aggregate_address.py that uses Python's ipaddress.ip_network(prefix, strict=True) to verify the prefix is a valid network address (no host bits set).
Called validate_prefix() at the beginning of address_set_handler(). If validation fails, the handler logs an error (log_err) with the prefix and reason, and returns False to skip the invalid entry.
Added unit tests for validate_prefix() covering valid prefixes (e.g., 10.100.0.0/16, 2001:db8::/32, 0.0.0.0/0) and invalid prefixes with host bits set.
Added integration-style test test_host_bits_set_rejected verifying that address_set_handler rejects bad prefixes, does not push commands, and marks state as inactive.

#### How to verify it
All tests including test_validate_prefix and test_host_bits_set_rejected should pass.
<!--
If PR needs to be backported, then the PR must be tested against the base branch and the earliest backport release branch and provide tested image version on these two branches. For example, if the PR is requested for master, 202211 and 202012, then the requester needs to provide test results on master and 202012.
-->

#### Which release branch to backport (provide reason below if selected)

<!--
- Note we only backport fixes to a release branch, *not* features!
- Please also provide a reason for the backporting below.
- e.g.
- [x] 202006
-->

- [ ] 202305
- [ ] 202311
- [ ] 202405
- [ ] 202411
- [ ] 202505
- [ ] 202511
- [x] 202603

#### Tested branch (Please provide the tested image version)

<!--
- Please provide tested image version
- e.g.
- [x] 20201231.100
-->

- [x] <!-- image version 1 --> SONiC.20251110.19
- [ ] <!-- image version 2 -->

#### Description for the changelog
<!--
Write a short (one line) summary that describes the changes in this
pull request for inclusion in the changelog:
-->
Add prefix validation in bgpcfgd aggregate address manager to reject prefixes with host bits set and log an error.

<!--
 Ensure to add label/tag for the feature raised. example - PR#2174 under sonic-utilities repo. where, Generic Config and Update feature has been labelled as GCU.
-->

#### Link to config_db schema for YANG module changes
<!--
Provide a link to config_db schema for the table for which YANG model
is defined
Link should point to correct section on https://github.com/Azure/sonic-buildimage/blob/master/src/sonic-yang-models/doc/Configuration.md
-->

Signed-off-by: Sonic Build Admin <sonicbld@microsoft.com>

#### A picture of a cute animal (not mandatory but encouraged)
@mssonicbld
Copy link
Copy Markdown
Collaborator Author

Original PR: sonic-net/sonic-buildimage#26617

@mssonicbld
Copy link
Copy Markdown
Collaborator Author

/azp run

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 1 pipeline(s).

@lizhijianrd lizhijianrd merged commit 54b8d59 into Azure:202603 May 11, 2026
4 of 11 checks 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.

2 participants