Class: Construqt::Bgps::Filter

Inherits:
Object
  • Object
show all
Defined in:
lib/construqt/bgps.rb

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Filter

Returns a new instance of Filter.



77
78
79
80
# File 'lib/construqt/bgps.rb', line 77

def initialize(name)
  @name = name
  @list = []
end

Instance Method Details

#accept(cfg) ⇒ Object



114
115
116
117
118
119
# File 'lib/construqt/bgps.rb', line 114

def accept(cfg)
  cfg = {}.merge(cfg)
  cfg['rule'] = 'accept'
  addr_v_(cfg)
  @list << cfg if cfg['network']
end

#addr_v_(cfg) ⇒ Object



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/construqt/bgps.rb', line 90

def addr_v_(cfg)
  [OpenStruct.new({:code=>4, :is? => lambda {|i| i.ipv4? }, :max_prefix=>32}),
   OpenStruct.new({:code=>6, :is? => lambda {|i| i.ipv6? }, :max_prefix=>128})].each do |family|
    addr = cfg["addr_v#{family.code}"]
    next unless addr
    cfg.delete("addr_v#{family.code}")
    addr_sub_prefix = cfg['addr_sub_prefix']
    cfg.delete('addr_sub_prefix')
    #puts addr.inspect
    (addr.kind_of?(Construqt::Addresses::Address) ? [addr] : addr).each do |addr|
      addr.ips.each do |net|
        next unless family.is?.call(net)
        network = Construqt::Addresses::Address.new
        network.add_ip(net.to_string)
        cfg = { 'network' => network }.merge(cfg)
        cfg['prefix_length'] = [net.prefix,family.max_prefix] if addr_sub_prefix
        @list << cfg
      end
    end

    nil
  end
end

#listObject



82
83
84
# File 'lib/construqt/bgps.rb', line 82

def list
  @list
end

#nameObject



86
87
88
# File 'lib/construqt/bgps.rb', line 86

def name
  @name
end

#reject(cfg) ⇒ Object



121
122
123
124
125
126
# File 'lib/construqt/bgps.rb', line 121

def reject(cfg)
  cfg = {}.merge(cfg)
  cfg['rule'] = 'reject'
  addr_v_(cfg)
  @list << cfg if cfg['network']
end