Skip to content
Snippets Groups Projects
Verified Commit 052717b4 authored by Aleksandr Kurbatov's avatar Aleksandr Kurbatov Committed by Karel van Klink
Browse files

BFD settings changes

- BFD model should have separate interval setting for RX and TX, hence
`bfd_interval` -> `bfd_interval_rx`, `bfd_interval_tx`;
- BFD model is only relevant to the SBP interface (with all attributes);
- BGP session will only have a simple flag `bfd_enabled` with default
`False`;
- BFD class models moved from `bgp_session.py` to
`service_binding_port.py`.
parent 60efd98b
No related branches found
No related tags found
1 merge request!298Add BFD configuration to Service binding ports
......@@ -19,34 +19,6 @@ class IPFamily(strEnum):
V6MULTICAST = "v6multicast"
class BFDSettingsInactive(
ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="BFDSettings"
):
"""Settings for :term:`BFD`, see :class:`BFDSettings`."""
bfd_enabled: bool = False
bfd_interval: int | None = None
bfd_multiplier: int | None = None
class BFDSettingsProvisioning(BFDSettingsInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
"""Settings for :term:`BFD`, see :class:`BFDSettings`."""
bfd_enabled: bool
bfd_interval: int | None
bfd_multiplier: int | None
class BFDSettings(BFDSettingsProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
"""A set of settings for :term:`BFD`."""
#: Whether :term:`BFD` is enabled.
bfd_enabled: bool
#: The :term:`BFD` interval, if enabled.
bfd_interval: int | None
#: The :term:`BFD` multiplier, if enabled.
bfd_multiplier: int | None
class BGPSessionInactive(ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="BGPSession"):
"""A :term:`BGP` session that is currently inactive. See :class:`BGPSession`."""
......@@ -60,7 +32,7 @@ class BGPSessionInactive(ProductBlockModel, lifecycle=[SubscriptionLifecycle.INI
is_multi_hop: bool = False
is_passive: bool = False
rtbh_enabled: bool = False
bfd_settings: BFDSettingsInactive
bfd_enabled: bool = False
class BGPSessionProvisioning(BGPSessionInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
......@@ -75,7 +47,7 @@ class BGPSessionProvisioning(BGPSessionInactive, lifecycle=[SubscriptionLifecycl
is_multi_hop: bool
is_passive: bool
rtbh_enabled: bool
bfd_settings: BFDSettingsProvisioning
bfd_enabled: bool
class BGPSession(BGPSessionProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
......@@ -100,4 +72,4 @@ class BGPSession(BGPSessionProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE
#: Whether Remote Triggered Blackhole is enabled
rtbh_enabled: bool
#: Settings for :term:`BFD`.
bfd_settings: BFDSettings
bfd_enabled: bool
......@@ -8,9 +8,6 @@ from orchestrator.types import SubscriptionLifecycle
from pydantic import Field
from gso.products.product_blocks.bgp_session import (
BFDSettings,
BFDSettingsInactive,
BFDSettingsProvisioning,
BGPSession,
BGPSessionInactive,
BGPSessionProvisioning,
......@@ -20,6 +17,38 @@ from gso.utils.shared_enums import SBPType
from gso.utils.types.ip_address import IPv4AddressType, IPV4Netmask, IPv6AddressType, IPV6Netmask
from gso.utils.types.virtual_identifiers import VLAN_ID
class BFDSettingsInactive(
ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="BFDSettings"
):
"""Settings for :term:`BFD`, see :class:`BFDSettings`."""
bfd_enabled: bool = False
bfd_interval_rx: int | None = None
bfd_interval_tx: int | None = None
bfd_multiplier: int | None = None
class BFDSettingsProvisioning(BFDSettingsInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
"""Settings for :term:`BFD`, see :class:`BFDSettings`."""
bfd_enabled: bool
bfd_interval_rx: int | None = None
bfd_interval_tx: int | None = None
bfd_multiplier: int | None
class BFDSettings(BFDSettingsProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
"""A set of settings for :term:`BFD`."""
#: Whether :term:`BFD` is enabled.
bfd_enabled: bool
#: The :term:`BFD` interval RX, if enabled.
bfd_interval_rx: int | None
#: The :term:`BFD` interval TX, if enabled.
bfd_interval_tx: int | None
#: The :term:`BFD` multiplier, if enabled.
bfd_multiplier: int | None
class ServiceBindingPortInactive(
ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="ServiceBindingPort"
......
......@@ -57,11 +57,12 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
class BFDSettingsForm(BaseModel):
bfd_enabled: bool = False
bfd_interval: int | None = None
bfd_interval_rx: int | None = None
bfd_interval_tx: int | None = None
bfd_multiplier: int | None = None
class BaseBGPPeer(BaseModel):
bfd_settings: BFDSettingsForm = BFDSettingsForm(bfd_enabled=False)
bfd_enabled: bool = False
has_custom_policies: bool = False
authentication_key: str | None = None
multipath_enabled: bool = False
......@@ -139,11 +140,10 @@ def initialize_subscription(
"""Take all user inputs and use them to populate the subscription model."""
edge_port_fqdn_list = []
edge_port_subscription = EdgePort.from_subscription(edge_port["edge_port"])
print(binding_port_input["bgp_peers"])
sbp_bgp_session_list = [
BGPSession.new(
subscription_id=uuid4(),
bfd_settings=BFDSettings.new(subscription_id=uuid4(), **(session.pop("bfd_settings"))),
**session,
rtbh_enabled=True,
is_multi_hop=True,
)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment