acex-devkit 1.9.0__tar.gz → 1.10.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/PKG-INFO +1 -1
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/pyproject.toml +1 -1
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/models/composed_configuration.py +105 -1
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/README.md +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/__init__.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/configdiffer/__init__.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/configdiffer/command.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/configdiffer/configdiffer.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/configdiffer/diff.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/configdiffer/old_configdiffer.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/configdiffer/old_diff.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/drivers/__init__.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/drivers/base.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/drivers/base_driver.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/exceptions/__init__.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/models/__init__.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/models/acl_model.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/models/attribute_value.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/models/container_entry.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/models/external_value.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/models/logging.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/models/management_connection.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/models/ned.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/models/node_response.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/models/spanning_tree.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/normalizer/__init__.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/normalizer/base.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/normalizer/engine.py +0 -0
- {acex_devkit-1.9.0 → acex_devkit-1.10.1}/src/acex_devkit/types/__init__.py +0 -0
|
@@ -709,6 +709,110 @@ class Services(BaseModel):
|
|
|
709
709
|
http: Optional[AttributeValue[bool]] = None # for webgui access
|
|
710
710
|
https: Optional[AttributeValue[bool]] = None # for webgui access
|
|
711
711
|
|
|
712
|
+
class NetflowFormat(str, Enum):
|
|
713
|
+
IPFIX = "IPFIX"
|
|
714
|
+
NETFLOW_V9 = "NetFlow v9"
|
|
715
|
+
NETFLOW_V5 = "NetFlow v5"
|
|
716
|
+
|
|
717
|
+
class NetflowRecordIpv4Match(BaseModel):
|
|
718
|
+
# Leaf-level ipv4 matches (Cisco style "match ipv4 <field>"). True = match this field, False = No. None = Ignore the field
|
|
719
|
+
netflow_record: Optional[AttributeValue[str]] = None # Reference to parent record, used for easier access in config component
|
|
720
|
+
dscp: Optional[AttributeValue[bool]] = None
|
|
721
|
+
fragmentation: Optional[AttributeValue[bool]] = None
|
|
722
|
+
header_length: Optional[AttributeValue[bool]] = None
|
|
723
|
+
id: Optional[AttributeValue[bool]] = None
|
|
724
|
+
length: Optional[AttributeValue[bool]] = None
|
|
725
|
+
option: Optional[AttributeValue[bool]] = None
|
|
726
|
+
precedence: Optional[AttributeValue[bool]] = None
|
|
727
|
+
protocol: Optional[AttributeValue[bool]] = None
|
|
728
|
+
section: Optional[AttributeValue[str]] = None
|
|
729
|
+
tos: Optional[AttributeValue[bool]] = None
|
|
730
|
+
total_length: Optional[AttributeValue[bool]] = None
|
|
731
|
+
ttl: Optional[AttributeValue[bool]] = None
|
|
732
|
+
version: Optional[AttributeValue[bool]] = None
|
|
733
|
+
|
|
734
|
+
class NetflowRecordAttributes(BaseModel): # Cisco flow record
|
|
735
|
+
match_ipv4: Optional[NetflowRecordIpv4Match] = None
|
|
736
|
+
#match_ipv4: Optional[Dict[str, NetflowRecordIpv4Match]] = {}
|
|
737
|
+
application_name: Optional[AttributeValue[bool]] = None
|
|
738
|
+
|
|
739
|
+
# Escape hatch for vendor-specific match knobs not yet modeled
|
|
740
|
+
match_vendor_specific: Optional[AttributeValue[Dict[str, Any]]] = None # keeping a flexible option if needed. Not advertised to users.
|
|
741
|
+
|
|
742
|
+
collect_timestamp_absolute_first: Optional[AttributeValue[bool]] = None
|
|
743
|
+
collect_timestamp_absolute_last: Optional[AttributeValue[bool]] = None
|
|
744
|
+
|
|
745
|
+
class NetflowCollectorAttributes(BaseModel): # Cisco flow monitor
|
|
746
|
+
netflow_record: Optional[AttributeValue[str]] = None # Reference to record, used for easier access in config component
|
|
747
|
+
netflow_exporter: Optional[AttributeValue[str]] = None # Reference to exporter, used for easier access in config component
|
|
748
|
+
cache_inactive: Optional[AttributeValue[int]] = None
|
|
749
|
+
cache_active: Optional[AttributeValue[int]] = None
|
|
750
|
+
interfaces: Optional[Dict[str, Reference]] = {} # allow for disabling netflow on specific interfaces
|
|
751
|
+
|
|
752
|
+
class NetflowExporterOptions(BaseModel):
|
|
753
|
+
# Mostly timeouts atm
|
|
754
|
+
interface_table_timeout: Optional[AttributeValue[int]] = None
|
|
755
|
+
vrf_table_timeout: Optional[AttributeValue[int]] = None
|
|
756
|
+
sampler_table: Optional[AttributeValue[bool]] = None
|
|
757
|
+
application_table_timeout: Optional[AttributeValue[int]] = None
|
|
758
|
+
application_attributes_timeout: Optional[AttributeValue[int]] = None
|
|
759
|
+
netflow_exporter: Optional[AttributeValue[str]] = None # Reference to parent exporter, used for easier access in config component
|
|
760
|
+
|
|
761
|
+
class NetflowExporterAttributes(ContainerEntry, BaseModel): # Cisco flow exporter
|
|
762
|
+
identity_fields: ClassVar[tuple[str, ...]] = ("address",)
|
|
763
|
+
address: Optional[AttributeValue[str]] = None
|
|
764
|
+
port: Optional[AttributeValue[int]] = None
|
|
765
|
+
netflow_format: Optional[AttributeValue[str]] = None
|
|
766
|
+
source_interface: Optional[Reference] = None
|
|
767
|
+
network_instance: Optional[AttributeValue[str]] = None
|
|
768
|
+
options: Optional[NetflowExporterOptions] = None
|
|
769
|
+
|
|
770
|
+
class NetflowGlobalConfigAttributes(BaseModel):
|
|
771
|
+
enabled: Optional[AttributeValue[bool]] = None
|
|
772
|
+
version: Optional[AttributeValue[int]] = None
|
|
773
|
+
|
|
774
|
+
class Netflow(BaseModel):
|
|
775
|
+
config: Optional[NetflowGlobalConfigAttributes] = None
|
|
776
|
+
records: Optional[Dict[str, NetflowRecordAttributes]] = {}
|
|
777
|
+
exporters: Optional[Dict[str, NetflowExporterAttributes]] = {}
|
|
778
|
+
collectors: Optional[Dict[str, NetflowCollectorAttributes]] = {}
|
|
779
|
+
|
|
780
|
+
class SflowMonitoringAttributes(BaseModel): ...
|
|
781
|
+
|
|
782
|
+
class SflowForwardingAttributes(BaseModel): ... # collector?
|
|
783
|
+
|
|
784
|
+
class SflowCollectorAttributes(ContainerEntry, BaseModel):
|
|
785
|
+
identity_fields: ClassVar[tuple[str, ...]] = ("address",)
|
|
786
|
+
address: Optional[AttributeValue[str]] = None # Destination IP address of the sFlow collector
|
|
787
|
+
port: Optional[AttributeValue[int]] = None # UDP
|
|
788
|
+
source_address: Optional[AttributeValue[str]] = None
|
|
789
|
+
network_instance: Optional[AttributeValue[str]] = None # VRF
|
|
790
|
+
interfaces: Optional[Dict[str, Reference]] = {} # allow for disabling sflow on specific interfaces
|
|
791
|
+
|
|
792
|
+
class SfloGlobalConfigAttributes(BaseModel):
|
|
793
|
+
enabled: Optional[AttributeValue[bool]] = None
|
|
794
|
+
#version: Optional[AttributeValue[int]] = None
|
|
795
|
+
dscp: Optional[AttributeValue[int]] = None # range: 0..63
|
|
796
|
+
sample_size: Optional[AttributeValue[int]] = None # Sets the maximum number of bytes to be copied from a sampled packet (content within one specific sample of a packet).
|
|
797
|
+
polling_interval: Optional[AttributeValue[int]] = None # seconds
|
|
798
|
+
ingress_sampling_rate: Optional[AttributeValue[int]] = None # sampling rate is 1/N packets. An implementation may implement the sampling rate as a statistical average, rather than a strict periodic sampling.
|
|
799
|
+
egress_sampling_rate: Optional[AttributeValue[int]] = None # sampling rate is 1/N packets. An implementation may implement the sampling rate as a statistical average, rather than a strict periodic sampling.
|
|
800
|
+
|
|
801
|
+
class Sflow(BaseModel):
|
|
802
|
+
#enabled: Optional[AttributeValue[bool]] = None
|
|
803
|
+
#version: Optional[AttributeValue[int]] = None
|
|
804
|
+
#dscp: Optional[AttributeValue[int]] = None # range: 0..63
|
|
805
|
+
#sample_size: Optional[AttributeValue[int]] = None
|
|
806
|
+
#polling_interval: Optional[AttributeValue[int]] = None
|
|
807
|
+
#ingress_sampling_rate: Optional[AttributeValue[int]] = None
|
|
808
|
+
#egress_sampling_rate: Optional[AttributeValue[int]] = None
|
|
809
|
+
collector: Optional[Dict[str, SflowCollectorAttributes]] = {}
|
|
810
|
+
# Similar structure to Netflow can be implemented here for sFlow-specific attributes
|
|
811
|
+
|
|
812
|
+
class Sampling(BaseModel):
|
|
813
|
+
netflow: Optional[Netflow] = Netflow()
|
|
814
|
+
#sflow: Optional[Sflow] = Sflow() # Sflow can be added in the future, similar structure to Netflow
|
|
815
|
+
|
|
712
816
|
class System(BaseModel):
|
|
713
817
|
config: SystemConfig = SystemConfig()
|
|
714
818
|
aaa: Optional[TripleA] = TripleA()
|
|
@@ -739,7 +843,7 @@ class ComposedConfiguration(BaseModel):
|
|
|
739
843
|
interfaces: Dict[str, InterfaceType] = {}
|
|
740
844
|
network_instances: Dict[str, NetworkInstance] = {"global": NetworkInstance(name="global")}
|
|
741
845
|
stp: Optional[SpanningTree] = SpanningTree()
|
|
742
|
-
|
|
846
|
+
sampling: Optional[Sampling] = Sampling()
|
|
743
847
|
|
|
744
848
|
"""
|
|
745
849
|
GUIDELINES FOR COMPOSED CONFIGURATION:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|