vxlan 0.2.0 → 0.2.2

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.
@@ -15,6 +15,7 @@ module Vxlan
15
15
 
16
16
  nve_members_by_vni = @configuration.fetch(:nve).fetch(:members, {})
17
17
  vlan_mappings_by_vni = @configuration.fetch(:vlan_vnis).group_by { |_vlan, vni| vni }
18
+ vrf_vnis = @configuration.fetch(:vrfs).values.filter_map { |settings| settings[:vni] }.to_set
18
19
  evpn_vnis = @configuration.fetch(:evpn)
19
20
  findings = []
20
21
  vlan_mappings_by_vni.each do |vni, entries|
@@ -23,14 +24,24 @@ module Vxlan
23
24
  findings << { code: :vlan_vni_without_nve, vni: vni, vlan_ids: entries.map(&:first).sort }
24
25
  end
25
26
  nve_members_by_vni.each do |vni, settings|
26
- next if settings[:associate_vrf]
27
+ if settings[:associate_vrf]
28
+ findings << { code: :nve_l3_without_vrf, vni: vni } unless vrf_vnis.include?(vni)
29
+ next
30
+ end
27
31
 
28
32
  findings << { code: :nve_l2_without_vlan, vni: vni } unless vlan_mappings_by_vni.key?(vni)
29
33
  if @configuration[:nv_overlay_evpn] && !evpn_vnis.key?(vni)
30
34
  findings << { code: :nve_l2_without_evpn, vni: vni }
31
35
  end
32
36
  end
33
- evpn_vnis.each_key { |vni| findings << { code: :evpn_vni_without_nve, vni: vni } unless nve_members_by_vni.key?(vni) }
37
+ evpn_vnis.each do |vni, settings|
38
+ member = nve_members_by_vni[vni]
39
+ if !member
40
+ findings << { code: :evpn_vni_without_nve, vni: vni }
41
+ elsif (settings[:type] == "l3") != member[:associate_vrf]
42
+ findings << { code: :vni_layer_conflict, vni: vni, evpn_type: settings[:type] }
43
+ end
44
+ end
34
45
  @configuration.fetch(:vrfs).each do |name, settings|
35
46
  next unless settings[:vni]
36
47
  member = nve_members_by_vni[settings[:vni]]
@@ -14,7 +14,7 @@ module Vxlan
14
14
  def call(address_family: "ipv4")
15
15
  raise ArgumentError, "Unsupported address family" unless %w[ipv4 ipv6].include?(address_family)
16
16
 
17
- bindings = route_map_bindings.transform_values(&:uniq)
17
+ consumers_by_route_map = route_map_consumers.transform_values(&:uniq)
18
18
  references = @configuration.fetch(:route_maps).each_with_object({}) do |(name, entries), result|
19
19
  entries.sort_by { |entry| entry.fetch(:sequence) }.each do |entry|
20
20
  matches = entry.fetch(:prefix_list_matches) do
@@ -22,7 +22,7 @@ module Vxlan
22
22
  end
23
23
  matches.select { |match| match[:address_family] == address_family }.each do |match|
24
24
  route_map_reference = { type: "route_map", name: name, sequence: entry.fetch(:sequence), action: entry.fetch(:action),
25
- bindings: bindings.fetch(name, []).dup }
25
+ bindings: consumers_by_route_map.fetch(name, []).dup }
26
26
  route_map_reference[:selector] = match[:selector] unless match[:selector] == "address"
27
27
  match.fetch(:names).uniq.each do |prefix_list|
28
28
  (result[prefix_list] ||= []) << route_map_reference
@@ -37,7 +37,7 @@ module Vxlan
37
37
  private
38
38
 
39
39
  # 关联关系保留协议、VRF、地址族及对等体,避免共享策略被混用。
40
- def route_map_bindings
40
+ def route_map_consumers
41
41
  result = Hash.new { |hash, key| hash[key] = [] }
42
42
  bgp = @configuration.fetch(:bgp)
43
43
  { "default" => bgp }.merge(bgp.fetch(:vrfs, {})).each do |vrf, settings|
data/lib/vxlan/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Vxlan
4
4
  # 公开包版本,供 RubyGems 元数据和运行时调用方共用。
5
- VERSION = "0.2.0"
5
+ VERSION = "0.2.2"
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vxlan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gatework contributors
@@ -13,30 +13,30 @@ dependencies:
13
13
  name: ctx_parser
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
- - - ">="
16
+ - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: '0'
18
+ version: 0.2.0
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
- - - ">="
23
+ - - "~>"
24
24
  - !ruby/object:Gem::Version
25
- version: '0'
25
+ version: 0.2.0
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: ctx_driver
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
- - - ">="
30
+ - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: '0'
32
+ version: 0.2.0
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - ">="
37
+ - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '0'
39
+ version: 0.2.0
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: digest
42
42
  requirement: !ruby/object:Gem::Requirement
@@ -81,6 +81,7 @@ files:
81
81
  - lib/vxlan.rb
82
82
  - lib/vxlan/bgp_neighbors.rb
83
83
  - lib/vxlan/cisco_nxos/configuration.rb
84
+ - lib/vxlan/cisco_nxos/configuration_state.rb
84
85
  - lib/vxlan/cisco_nxos/document.rb
85
86
  - lib/vxlan/cisco_nxos/evpn_l2route.rb
86
87
  - lib/vxlan/cisco_nxos/parser.rb