neutron/neutron/plugins
Rodolfo Alonso Hernandez 4245963c71 Make ARP protection commands compatible with "ebtables-nft"
"nftables" compatible binary, "ebtables-nft", is not 100% compatible
with the legacy API, as reported in LP#1922892.

This patch fixes the following issues when using "ebtables-nft" (while
keeping compatibility with legacy binary):
- When a new chain is created, a default DROP rule is added at the end
  of the chain (append). This will prevent the error code 4 when the
  chain is listed.
- The chain rules are added at the begining of the chain (insert),
  before the default DROP rule. This will prioritize the port rules.
- The MAC rules are cleaned before the new ones are added. That will
  prevent the deletion of any new needed rule, now added after the
  deletion.
- The "ebtables" command will retry on error code 4. This is the
  error returned when the chains are listed and no rule is present
  in a new created chain (reporeted in LP#1922892).

This code is backwards compatible, that means it works with the legacy
"ebtables" binary; this is currently installed in the Neutron CI [1].
In order to test with the new binary, "ebtables-nft", two new CI jobs
are added to the periodic queue [2].

[1]1ad9ca56b0/roles/legacy_ebtables/tasks/main.yaml
[2]https://review.opendev.org/c/openstack/neutron/+/785144

Closes-Bug: #1922892
Related-Bug: #1508155
Closes-Bug: #1938670

Conflicts:
    neutron/tests/unit/plugins/ml2/drivers/linuxbridge/agent/test_arp_protect.py

Change-Id: I9463b000f6f63e65aaf91d60b30f6c92c01e3baf
(cherry picked from commit 0a931391d8)
(cherry picked from commit fafa5dacd5)
2021-08-10 09:36:10 +00:00
..
common Remove Neutron LBaaS 2019-09-20 07:46:06 +00:00
ml2 Make ARP protection commands compatible with "ebtables-nft" 2021-08-10 09:36:10 +00:00
__init__.py Finish off rebranding of the Nicira NVP plugin 2014-03-01 18:14:52 -08:00