Skip to content

Run ip neigh flush before removing the IP address from the interface#3281

Merged
saiarcot895 merged 2 commits intosonic-net:masterfrom
saiarcot895:ignore-flush-error
Apr 29, 2024
Merged

Run ip neigh flush before removing the IP address from the interface#3281
saiarcot895 merged 2 commits intosonic-net:masterfrom
saiarcot895:ignore-flush-error

Conversation

@saiarcot895
Copy link
Contributor

@saiarcot895 saiarcot895 commented Apr 22, 2024

What I did

In the test_po_update test case, one of the things done there is to remove an IP address from a port channel interface. As part of that, the current handling for that issues a ip neigh flush dev ... command, added in #606, presumably to remove old neighbor entries that would no longer be valid. I would think that the kernel would automatically do this, but maybe it didn't back then; I'm not sure if there's been a behavior change here since then.

In some cases, this command is returning an error, saying "Failed to send flush request: No such file or directory". I'm not sure why this is; maybe when iproute2 is going through the list of neighbors, some neighbor entry was there, but then by the time it issued the deletion request, that neighbor entry was removed by the kernel since the IP address was removed. Either way, I don't believe a failure here is critical.

To get around this, run the ip neigh flush command before removing the IP address from the interface. This should make sure it succeeds. Also, update the test cases to mock out this call (so that it doesn't return an error here and bail early) and update the exit code.

How I did it

How to verify it

The ip neigh flush failure appears to be flaky, but I've seen a small uptick in those failures recently. I haven't been able to repro the error on my dev VM, so I'm not sure if this is a good enough fix if it does run into the failure case.

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)

In the test_po_update test case, one of the things done there is to
remove an IP address from a port channel interface. As part of that, the
current handling for that issues a `ip neigh flush dev ...` command,
added in sonic-net#606, presumably to remove old
neighbor entries that would no longer be valid. I would think that
the kernel would automatically do this, but maybe it didn't back then;
I'm not sure if there's been a behavior change here since then.

In some cases, this command is returning an error, saying "Failed to
send flush request: No such file or directory". I'm not sure why this
is; maybe when iproute2 is going through the list of neighbors, some
neighbor entry was there, but then by the time it issued the deletion
request, that neighbor entry was removed by the kernel since the IP
address was removed. Either way, I don't believe a failure here is
critical.

Therefore, ignore any failures from running this command.

Signed-off-by: Saikrishna Arcot <[email protected]>
@saiarcot895 saiarcot895 requested review from prsunny and yxieca April 22, 2024 20:41
prsunny
prsunny previously approved these changes Apr 22, 2024
This should make sure that the IP neighbor flush should always work.
This also requires the tests to be updated, to mock out the flush
command call since that interface won't exist.

Signed-off-by: Saikrishna Arcot <[email protected]>
@saiarcot895 saiarcot895 requested a review from prsunny April 26, 2024 17:46
@saiarcot895 saiarcot895 changed the title Ignore any error returned from ip neigh flush Run ip neigh flush before removing the IP address from the interface Apr 26, 2024
@saiarcot895 saiarcot895 merged commit 099d40c into sonic-net:master Apr 29, 2024
@saiarcot895 saiarcot895 deleted the ignore-flush-error branch April 29, 2024 20:51
arfeigin pushed a commit to arfeigin/sonic-utilities that referenced this pull request Jun 16, 2024
sonic-net#3281)

* Ignore any error returned from `ip neigh flush`

In the test_po_update test case, one of the things done there is to
remove an IP address from a port channel interface. As part of that, the
current handling for that issues a `ip neigh flush dev ...` command,
added in sonic-net#606, presumably to remove old
neighbor entries that would no longer be valid. I would think that
the kernel would automatically do this, but maybe it didn't back then;
I'm not sure if there's been a behavior change here since then.

In some cases, this command is returning an error, saying "Failed to
send flush request: No such file or directory". I'm not sure why this
is; maybe when iproute2 is going through the list of neighbors, some
neighbor entry was there, but then by the time it issued the deletion
request, that neighbor entry was removed by the kernel since the IP
address was removed. Either way, I don't believe a failure here is
critical.

Therefore, ignore any failures from running this command.

Signed-off-by: Saikrishna Arcot <[email protected]>

* Move the IP neighbor flush to be before the IP address removal

This should make sure that the IP neighbor flush should always work.
This also requires the tests to be updated, to mock out the flush
command call since that interface won't exist.

Signed-off-by: Saikrishna Arcot <[email protected]>

---------

Signed-off-by: Saikrishna Arcot <[email protected]>
nmoray pushed a commit to nmoray/sonic-utilities that referenced this pull request Jun 25, 2025
sonic-net#3281)

* Ignore any error returned from `ip neigh flush`

In the test_po_update test case, one of the things done there is to
remove an IP address from a port channel interface. As part of that, the
current handling for that issues a `ip neigh flush dev ...` command,
added in sonic-net#606, presumably to remove old
neighbor entries that would no longer be valid. I would think that
the kernel would automatically do this, but maybe it didn't back then;
I'm not sure if there's been a behavior change here since then.

In some cases, this command is returning an error, saying "Failed to
send flush request: No such file or directory". I'm not sure why this
is; maybe when iproute2 is going through the list of neighbors, some
neighbor entry was there, but then by the time it issued the deletion
request, that neighbor entry was removed by the kernel since the IP
address was removed. Either way, I don't believe a failure here is
critical.

Therefore, ignore any failures from running this command.

Signed-off-by: Saikrishna Arcot <[email protected]>

* Move the IP neighbor flush to be before the IP address removal

This should make sure that the IP neighbor flush should always work.
This also requires the tests to be updated, to mock out the flush
command call since that interface won't exist.

Signed-off-by: Saikrishna Arcot <[email protected]>

---------

Signed-off-by: Saikrishna Arcot <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants