bgp4r 0.0.14 → 0.0.15
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.
- data/bgp/messages/message.rb +1 -0
- data/bgp/messages/update.rb +5 -0
- data/bgp/path_attributes/aggregator.rb +1 -1
- data/bgp/path_attributes/aigp.rb +3 -3
- data/bgp/path_attributes/attribute.rb +1 -1
- data/bgp/path_attributes/attributes.rb +3 -1
- data/bgp/path_attributes/cluster_list.rb +3 -20
- data/bgp/path_attributes/extended_communities.rb +38 -16
- data/bgp/path_attributes/extended_community.rb +5 -2
- data/bgp/path_attributes/multi_exit_disc.rb +1 -1
- data/bgp/path_attributes/originator_id.rb +2 -2
- data/bgp/path_attributes/path_attribute.rb +30 -39
- data/bgp4r.gemspec +9 -8
- data/test/unit/messages/update_test.rb +129 -8
- data/test/unit/path_attributes/aggregator_test.rb +1 -1
- data/test/unit/path_attributes/aigp_test.rb +3 -3
- data/test/unit/path_attributes/cluster_list_test.rb +2 -2
- data/test/unit/path_attributes/extended_communities_test.rb +27 -3
- data/test/unit/path_attributes/path_attribute_test.rb +84 -2
- metadata +3 -8
- data/bgp/path_attributes/tlvs/tlv.rb +0 -18
- data/examples/test.rb +0 -15
- data/examples/test2.rb +0 -116
- data/test/unit/path_attributes/tlvs/tlv_test.rb +0 -33
    
        data/bgp/messages/message.rb
    CHANGED
    
    
    
        data/bgp/messages/update.rb
    CHANGED
    
    | @@ -56,6 +56,7 @@ class BGP::Update < BGP::Message | |
| 56 56 | 
             
              end
         | 
| 57 57 |  | 
| 58 58 | 
             
              def initialize(*args, &block)
         | 
| 59 | 
            +
                @msg_type=UPDATE
         | 
| 59 60 | 
             
                @nlri, @path_attribute, @withdrawn=nil,nil,nil
         | 
| 60 61 | 
             
                @session_info = Info.new
         | 
| 61 62 | 
             
                if args[0].is_a?(String) and args[0].is_packed?
         | 
| @@ -66,6 +67,10 @@ class BGP::Update < BGP::Message | |
| 66 67 | 
             
                  end
         | 
| 67 68 | 
             
                elsif args[0].is_a?(self.class)
         | 
| 68 69 | 
             
                  parse(args[0].encode, *args[1..-1])
         | 
| 70 | 
            +
                elsif args[0].is_a?(Hash)
         | 
| 71 | 
            +
                  @withdrawn = Withdrawn.new(*args[0][:withdrawns])                if args[0].has_key?(:withdrawns)
         | 
| 72 | 
            +
                  @path_attribute = Path_attribute.new(args[0][:path_attributes])  if args[0].has_key?(:path_attributes)
         | 
| 73 | 
            +
                  @nlri = Nlri.new(*args[0][:nlris])                               if args[0].has_key?(:nlris)
         | 
| 69 74 | 
             
                else
         | 
| 70 75 | 
             
                  @msg_type=UPDATE
         | 
| 71 76 | 
             
                  set(*args)
         | 
    
        data/bgp/path_attributes/aigp.rb
    CHANGED
    
    | @@ -24,7 +24,7 @@ module BGP | |
| 24 24 | 
             
                end
         | 
| 25 25 |  | 
| 26 26 | 
             
                def to_hash
         | 
| 27 | 
            -
                  {: | 
| 27 | 
            +
                  {:aigp=> to_i}
         | 
| 28 28 | 
             
                end
         | 
| 29 29 |  | 
| 30 30 | 
             
                def accumulated_igp_metric
         | 
| @@ -51,8 +51,8 @@ module BGP | |
| 51 51 | 
             
              class Aigp
         | 
| 52 52 | 
             
                class << self
         | 
| 53 53 | 
             
                  def new_hash(_arg={})
         | 
| 54 | 
            -
                    arg = {: | 
| 55 | 
            -
                    new arg[: | 
| 54 | 
            +
                    arg = {:aigp=>0}.merge(_arg)
         | 
| 55 | 
            +
                    new arg[:aigp]
         | 
| 56 56 | 
             
                  end
         | 
| 57 57 | 
             
                end
         | 
| 58 58 | 
             
              end
         | 
| @@ -55,6 +55,8 @@ module BGP | |
| 55 55 | 
             
                    parse(args[0])
         | 
| 56 56 | 
             
                  elsif args[0].is_a?(self.class)
         | 
| 57 57 | 
             
                    parse(args[0].encode, *args[1..-1])
         | 
| 58 | 
            +
                  elsif args[0].is_a?(Hash)
         | 
| 59 | 
            +
                    add *args[0][:cluster_list]
         | 
| 58 60 | 
             
                  else
         | 
| 59 61 | 
             
                    add(*args)
         | 
| 60 62 | 
             
                  end
         | 
| @@ -102,7 +104,7 @@ module BGP | |
| 102 104 | 
             
                end
         | 
| 103 105 |  | 
| 104 106 | 
             
                def to_hash
         | 
| 105 | 
            -
                  {: | 
| 107 | 
            +
                  {:cluster_list=>@cluster_ids.collect { |c| c.to_s  }}
         | 
| 106 108 | 
             
                end
         | 
| 107 109 |  | 
| 108 110 | 
             
                def sort!
         | 
| @@ -116,25 +118,6 @@ module BGP | |
| 116 118 |  | 
| 117 119 | 
             
              end
         | 
| 118 120 |  | 
| 119 | 
            -
              class Cluster_list
         | 
| 120 | 
            -
                class << self
         | 
| 121 | 
            -
                  def new_hash(arg={})
         | 
| 122 | 
            -
                    o = new
         | 
| 123 | 
            -
                    [:cluster_ids].each do |set_type|
         | 
| 124 | 
            -
                      next unless arg.has_key? set_type
         | 
| 125 | 
            -
                      case set_type
         | 
| 126 | 
            -
                      when :cluster_ids
         | 
| 127 | 
            -
                        o << arg[set_type]
         | 
| 128 | 
            -
                      else
         | 
| 129 | 
            -
                        raise
         | 
| 130 | 
            -
                      end 
         | 
| 131 | 
            -
                    end
         | 
| 132 | 
            -
                    o
         | 
| 133 | 
            -
                    
         | 
| 134 | 
            -
                  end
         | 
| 135 | 
            -
                end
         | 
| 136 | 
            -
              end
         | 
| 137 | 
            -
             | 
| 138 121 | 
             
            end
         | 
| 139 122 |  | 
| 140 123 | 
             
            load "../../test/unit/path_attributes/#{ File.basename($0.gsub(/.rb/,'_test.rb'))}" if __FILE__ == $0
         | 
| @@ -29,20 +29,24 @@ module BGP | |
| 29 29 | 
             
              class Extended_communities < Attr
         | 
| 30 30 |  | 
| 31 31 | 
             
                class << self
         | 
| 32 | 
            -
                  def new_hash( | 
| 32 | 
            +
                  def new_hash(*args)
         | 
| 33 | 
            +
                    raise unless args[0].is_a?(Hash)
         | 
| 33 34 | 
             
                    o = new
         | 
| 34 | 
            -
                     | 
| 35 | 
            -
                       | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
                         | 
| 45 | 
            -
             | 
| 35 | 
            +
                    args.each do |arg|
         | 
| 36 | 
            +
                      arg.keys.each do |comm|
         | 
| 37 | 
            +
                        case comm
         | 
| 38 | 
            +
                        when :extended_communities ; o = new_hash *args[0][:extended_communities]
         | 
| 39 | 
            +
                        when :color                ; o << Color.new(*arg[comm])
         | 
| 40 | 
            +
                        when :route_target         ; o << Route_target.new(*arg[comm])
         | 
| 41 | 
            +
                        when :link_bandwidth       ; o << Link_bandwidth.new(*arg[comm])
         | 
| 42 | 
            +
                        when :ospf_domain_id       ; o << Ospf_domain_id.new(*arg[comm])
         | 
| 43 | 
            +
                        when :encapsulation        ; o << Encapsulation.new(*arg[comm])
         | 
| 44 | 
            +
                        when :route_origin         ; o << Route_origin.new(*arg[comm])
         | 
| 45 | 
            +
                        when :ospf_router_id       ; o << Ospf_router_id.new(*arg[comm])
         | 
| 46 | 
            +
                        else
         | 
| 47 | 
            +
                          raise
         | 
| 48 | 
            +
                        end 
         | 
| 49 | 
            +
                      end
         | 
| 46 50 | 
             
                    end
         | 
| 47 51 | 
             
                    o        
         | 
| 48 52 | 
             
                  end
         | 
| @@ -55,11 +59,13 @@ module BGP | |
| 55 59 |  | 
| 56 60 | 
             
                  if args[0].is_a?(String) and args[0].is_packed?
         | 
| 57 61 | 
             
                    parse(args[0])
         | 
| 62 | 
            +
                    return
         | 
| 58 63 | 
             
                  elsif args[0].is_a?(self.class)
         | 
| 59 64 | 
             
                    parse(args[0].encode, *args[1..-1])
         | 
| 60 65 | 
             
                  else
         | 
| 61 66 | 
             
                    add(*args)
         | 
| 62 67 | 
             
                  end
         | 
| 68 | 
            +
                  yield(self) if block_given?
         | 
| 63 69 | 
             
                end
         | 
| 64 70 |  | 
| 65 71 | 
             
                def add(*args)
         | 
| @@ -80,9 +86,7 @@ module BGP | |
| 80 86 | 
             
                alias << add
         | 
| 81 87 |  | 
| 82 88 | 
             
                def to_hash
         | 
| 83 | 
            -
                   | 
| 84 | 
            -
                  @communities.each { |c|  h = h.merge( { c.class.to_s.split('::').last.downcase.to_sym => c.instance_eval { value2 } }) }
         | 
| 85 | 
            -
                  h
         | 
| 89 | 
            +
                  {:extended_communities=> @communities.collect  { |c| c.to_hash }}
         | 
| 86 90 | 
             
                end
         | 
| 87 91 |  | 
| 88 92 | 
             
                def extended_communities
         | 
| @@ -94,6 +98,24 @@ module BGP | |
| 94 98 | 
             
                  s.join("\n")
         | 
| 95 99 | 
             
                end
         | 
| 96 100 |  | 
| 101 | 
            +
                def find(klass)
         | 
| 102 | 
            +
                  communities.find { |c| c.is_a?(klass) }
         | 
| 103 | 
            +
                end
         | 
| 104 | 
            +
                
         | 
| 105 | 
            +
                %w{ 
         | 
| 106 | 
            +
                  color
         | 
| 107 | 
            +
                  route_target
         | 
| 108 | 
            +
                  link_bandwidth
         | 
| 109 | 
            +
                  ospf_domain_id
         | 
| 110 | 
            +
                  encapsulation
         | 
| 111 | 
            +
                  route_origin
         | 
| 112 | 
            +
                  ospf_router_id      
         | 
| 113 | 
            +
                }.each do |ecom|
         | 
| 114 | 
            +
                  define_method("#{ecom}") do
         | 
| 115 | 
            +
                    find(BGP.const_get(ecom.capitalize))
         | 
| 116 | 
            +
                  end
         | 
| 117 | 
            +
                end
         | 
| 118 | 
            +
                
         | 
| 97 119 | 
             
                def to_s(method=:default)
         | 
| 98 120 | 
             
                  super(extended_communities, method)
         | 
| 99 121 | 
             
                end
         | 
| @@ -47,8 +47,7 @@ module BGP | |
| 47 47 | 
             
                FLOAT = -1
         | 
| 48 48 |  | 
| 49 49 | 
             
                DEFAULT_OPAQUE_ENCODING = 'H12'
         | 
| 50 | 
            -
             | 
| 51 | 
            -
                
         | 
| 50 | 
            +
             | 
| 52 51 | 
             
                def encode
         | 
| 53 52 | 
             
                  [@type, @subtype, _encoded_value_].pack('CCa6')
         | 
| 54 53 | 
             
                end
         | 
| @@ -128,6 +127,10 @@ module BGP | |
| 128 127 | 
             
                def to_s
         | 
| 129 128 | 
             
                  "#{name}: #{value}"
         | 
| 130 129 | 
             
                end
         | 
| 130 | 
            +
                
         | 
| 131 | 
            +
                def to_hash
         | 
| 132 | 
            +
                  { self.class.to_s.split('::').last.downcase.to_sym => value2 }
         | 
| 133 | 
            +
                end
         | 
| 131 134 |  | 
| 132 135 | 
             
                private
         | 
| 133 136 |  | 
| @@ -32,7 +32,7 @@ module BGP | |
| 32 32 |  | 
| 33 33 | 
             
                class << self
         | 
| 34 34 | 
             
                  def new_hash(arg={})
         | 
| 35 | 
            -
                    new arg[: | 
| 35 | 
            +
                    new arg[:originator_id]
         | 
| 36 36 | 
             
                  end
         | 
| 37 37 | 
             
                end
         | 
| 38 38 |  | 
| @@ -69,7 +69,7 @@ module BGP | |
| 69 69 | 
             
                end
         | 
| 70 70 |  | 
| 71 71 | 
             
                def to_hash
         | 
| 72 | 
            -
                  {: | 
| 72 | 
            +
                  {:originator_id=> originator_id}
         | 
| 73 73 | 
             
                end
         | 
| 74 74 |  | 
| 75 75 | 
             
                def originator_id=(val)
         | 
| @@ -35,6 +35,7 @@ module BGP | |
| 35 35 | 
             
                    @attributes=[]
         | 
| 36 36 | 
             
                    while s.size>0
         | 
| 37 37 | 
             
                      @attributes << Attr.factory(*args)
         | 
| 38 | 
            +
                      @attributes
         | 
| 38 39 | 
             
                    end
         | 
| 39 40 | 
             
                  elsif args.size ==1 and args[0].is_a?(Hash)
         | 
| 40 41 | 
             
                    @attributes = []
         | 
| @@ -48,13 +49,15 @@ module BGP | |
| 48 49 | 
             
                      when :as_path                ; As_path.new_hash(args[0][attr])
         | 
| 49 50 | 
             
                      when :as4_path               ; As4_path.new_hash(args[0][attr])
         | 
| 50 51 | 
             
                      when :origin                 ; Origin.new(args[0][attr])
         | 
| 52 | 
            +
                      when :originator_id          ; Originator_id.new(args[0][attr])
         | 
| 51 53 | 
             
                      when :cluster_list           ; Cluster_list.new(*args[0][attr])
         | 
| 52 54 | 
             
                      when :aggregator             ; Aggregator.new(args[0][attr])
         | 
| 53 55 | 
             
                      when :as4_aggregator         ; As4_aggregator.new(args[0][attr])
         | 
| 54 56 | 
             
                      when :originator_id          ; Originator_id.new(args[0][attr])
         | 
| 55 57 | 
             
                      when :communities, :community; Communities.new(args[0][attr])
         | 
| 58 | 
            +
                      when :aigp                   ; Aigp.new(args[0][attr])
         | 
| 56 59 | 
             
                      when :extended_communities, :extended_community
         | 
| 57 | 
            -
                        Extended_communities.new_hash(args[0][attr])
         | 
| 60 | 
            +
                        Extended_communities.new_hash(*args[0][attr])
         | 
| 58 61 | 
             
                      when :atomic_aggregate       ; Atomic_aggregate.new
         | 
| 59 62 | 
             
                        # FIXME: add other attr here ...
         | 
| 60 63 | 
             
                      else 
         | 
| @@ -192,7 +195,21 @@ module BGP | |
| 192 195 | 
             
                  self
         | 
| 193 196 | 
             
                end
         | 
| 194 197 |  | 
| 195 | 
            -
                def  | 
| 198 | 
            +
                def sort
         | 
| 199 | 
            +
                  attributes.sort { |a,b| a.type <=> b.type }
         | 
| 200 | 
            +
                  Path_attribute.new(*attributes.sort { |a,b| a.type <=> b.type })
         | 
| 201 | 
            +
                end
         | 
| 202 | 
            +
             | 
| 203 | 
            +
                def sort!
         | 
| 204 | 
            +
                  attributes.sort! { |a,b| a.type <=> b.type }
         | 
| 205 | 
            +
                  self
         | 
| 206 | 
            +
                end
         | 
| 207 | 
            +
             | 
| 208 | 
            +
                def <=>(other)
         | 
| 209 | 
            +
                  self.sort.to_shex <=> other.sort.to_shex
         | 
| 210 | 
            +
                end
         | 
| 211 | 
            +
                
         | 
| 212 | 
            +
                  def delete(*klasses)
         | 
| 196 213 | 
             
                  for klass in klasses
         | 
| 197 214 | 
             
                    next unless klass.is_a?(Class)
         | 
| 198 215 | 
             
                    attributes.delete_if { |x| x.class == klass }
         | 
| @@ -214,10 +231,14 @@ module BGP | |
| 214 231 | 
             
                  mp_reach 
         | 
| 215 232 | 
             
                  mp_unreach 
         | 
| 216 233 | 
             
                  extended_communities 
         | 
| 217 | 
            -
                }.each do |attr| | 
| 234 | 
            +
                }.each do |attr|
         | 
| 218 235 | 
             
                  define_method("has_a_#{attr}_attr?") do
         | 
| 219 236 | 
             
                    has? BGP.const_get(attr.capitalize)
         | 
| 220 237 | 
             
                  end
         | 
| 238 | 
            +
                  define_method("#{attr}") do
         | 
| 239 | 
            +
                    k = BGP.const_get(attr.capitalize)
         | 
| 240 | 
            +
                    @attributes.find { |a| a.is_a?(k) }
         | 
| 241 | 
            +
                  end
         | 
| 221 242 | 
             
                  eval "alias :has_an_#{attr}? :has_a_#{attr}_attr?" if (attr =~ /^[aeiou]/)
         | 
| 222 243 | 
             
                end
         | 
| 223 244 |  | 
| @@ -237,6 +258,11 @@ module BGP | |
| 237 258 | 
             
                  when :communities, :community ; Communities
         | 
| 238 259 | 
             
                  end
         | 
| 239 260 | 
             
                end
         | 
| 261 | 
            +
                
         | 
| 262 | 
            +
                def method_missing(name, *args, &block)
         | 
| 263 | 
            +
                  super
         | 
| 264 | 
            +
                end
         | 
| 265 | 
            +
             | 
| 240 266 | 
             
              end
         | 
| 241 267 | 
             
            end
         | 
| 242 268 |  | 
| @@ -318,39 +344,6 @@ module BGP | |
| 318 344 | 
             
                    Unknown.new(s)
         | 
| 319 345 | 
             
                  end
         | 
| 320 346 | 
             
                end
         | 
| 321 | 
            -
             | 
| 322 | 
            -
                # def self.new_hash(_arg={:arg=>nil})
         | 
| 323 | 
            -
                #   #FIXME:
         | 
| 324 | 
            -
                #   
         | 
| 325 | 
            -
                #   arg = _arg.delete(:arg)
         | 
| 326 | 
            -
                #   
         | 
| 327 | 
            -
                #   if arg.is_a?(Neighbor::Capabilities)
         | 
| 328 | 
            -
                #     as4byte_flag = arg.as4byte?
         | 
| 329 | 
            -
                #     path_id_flag = arg
         | 
| 330 | 
            -
                #   elsif arg.is_a?(Hash)
         | 
| 331 | 
            -
                #     as4byte_flag=arg[:as4byte]
         | 
| 332 | 
            -
                #     path_id_flag=arg[:path_id]
         | 
| 333 | 
            -
                #   elsif arg.is_a?(TrueClass)
         | 
| 334 | 
            -
                #     as4byte_flag=true
         | 
| 335 | 
            -
                #     path_id_flag=nil
         | 
| 336 | 
            -
                #   elsif arg.respond_to? :as4byte?
         | 
| 337 | 
            -
                #     as4byte_flag = arg.as4byte?
         | 
| 338 | 
            -
                #     path_id_flag = arg
         | 
| 339 | 
            -
                #   else
         | 
| 340 | 
            -
                #     as4byte_flag=nil
         | 
| 341 | 
            -
                #     path_id_flag=nil
         | 
| 342 | 
            -
                #   end
         | 
| 343 | 
            -
                # 
         | 
| 344 | 
            -
                #   _arg.keys.each { |attr|
         | 
| 345 | 
            -
                #     case attr
         | 
| 346 | 
            -
                #     when :local_pref ; Local_pref.new(_arg[attr])
         | 
| 347 | 
            -
                #     when :next_hop   ; Next_hop.new(_arg[attr])
         | 
| 348 | 
            -
                #     else
         | 
| 349 | 
            -
                #     end
         | 
| 350 | 
            -
                #   }
         | 
| 351 | 
            -
                # end
         | 
| 352 | 
            -
             | 
| 353 | 
            -
             | 
| 354 347 |  | 
| 355 348 | 
             
              end
         | 
| 356 349 |  | 
| @@ -360,9 +353,7 @@ module BGP | |
| 360 353 | 
             
              #   
         | 
| 361 354 | 
             
              # p = Path_attribute.new :local_pref=>100, :next_hop => '10.0.0.1', :med=>300
         | 
| 362 355 | 
             
              # # p p
         | 
| 363 | 
            -
              # puts p | 
| 364 | 
            -
              
         | 
| 365 | 
            -
              
         | 
| 356 | 
            +
              # puts p   
         | 
| 366 357 |  | 
| 367 358 | 
             
            end
         | 
| 368 359 | 
             
            load "../../test/unit/path_attributes/#{ File.basename($0.gsub(/.rb/,'_test.rb'))}" if __FILE__ == $0
         | 
    
        data/bgp4r.gemspec
    CHANGED
    
    | @@ -5,11 +5,11 @@ | |
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 7 | 
             
              s.name = "bgp4r"
         | 
| 8 | 
            -
              s.version = "0.0. | 
| 8 | 
            +
              s.version = "0.0.15"
         | 
| 9 9 |  | 
| 10 10 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 11 | 
             
              s.authors = ["Jean-Michel Esnault"]
         | 
| 12 | 
            -
              s.date = " | 
| 12 | 
            +
              s.date = "2012-02-13"
         | 
| 13 13 | 
             
              s.description = "BGP4R is a BGP-4 ruby library to create,  send, and receive  BGP messages in an  object oriented manner"
         | 
| 14 14 | 
             
              s.email = "bgp4r@esnault.org"
         | 
| 15 15 | 
             
              s.extra_rdoc_files = [
         | 
| @@ -57,6 +57,7 @@ Gem::Specification.new do |s| | |
| 57 57 | 
             
                "bgp/orfs/orf.rb",
         | 
| 58 58 | 
             
                "bgp/orfs/prefix_orf.rb",
         | 
| 59 59 | 
             
                "bgp/path_attributes/aggregator.rb",
         | 
| 60 | 
            +
                "bgp/path_attributes/aigp.rb",
         | 
| 60 61 | 
             
                "bgp/path_attributes/as_path.rb",
         | 
| 61 62 | 
             
                "bgp/path_attributes/atomic_aggregate.rb",
         | 
| 62 63 | 
             
                "bgp/path_attributes/attribute.rb",
         | 
| @@ -79,8 +80,6 @@ Gem::Specification.new do |s| | |
| 79 80 | 
             
                "examples/routegen",
         | 
| 80 81 | 
             
                "examples/routegen.yml",
         | 
| 81 82 | 
             
                "examples/simple.rb",
         | 
| 82 | 
            -
                "examples/test.rb",
         | 
| 83 | 
            -
                "examples/test2.rb",
         | 
| 84 83 | 
             
                "examples/unit-testing/malformed_update_test.rb",
         | 
| 85 84 | 
             
                "examples/unit-testing/no_export_test.rb",
         | 
| 86 85 | 
             
                "examples/unit-testing/prepend_aspath_test.rb",
         | 
| @@ -108,6 +107,7 @@ Gem::Specification.new do |s| | |
| 108 107 | 
             
                "test/unit/nlris/nsap_test.rb",
         | 
| 109 108 | 
             
                "test/unit/nlris/prefix_test.rb",
         | 
| 110 109 | 
             
                "test/unit/nlris/rd_test.rb",
         | 
| 110 | 
            +
                "test/unit/nlris/vpn_test.rb",
         | 
| 111 111 | 
             
                "test/unit/optional_parameters/add_path_test.rb",
         | 
| 112 112 | 
             
                "test/unit/optional_parameters/as4_test.rb",
         | 
| 113 113 | 
             
                "test/unit/optional_parameters/capability_test.rb",
         | 
| @@ -119,7 +119,7 @@ Gem::Specification.new do |s| | |
| 119 119 | 
             
                "test/unit/optional_parameters/route_refresh_test.rb",
         | 
| 120 120 | 
             
                "test/unit/orfs/prefix_orf_test.rb",
         | 
| 121 121 | 
             
                "test/unit/path_attributes/aggregator_test.rb",
         | 
| 122 | 
            -
                "test/unit/path_attributes/ | 
| 122 | 
            +
                "test/unit/path_attributes/aigp_test.rb",
         | 
| 123 123 | 
             
                "test/unit/path_attributes/as_path_test.rb",
         | 
| 124 124 | 
             
                "test/unit/path_attributes/atomic_aggregate_test.rb",
         | 
| 125 125 | 
             
                "test/unit/path_attributes/attribute_test.rb",
         | 
| @@ -134,15 +134,16 @@ Gem::Specification.new do |s| | |
| 134 134 | 
             
                "test/unit/path_attributes/next_hop_test.rb",
         | 
| 135 135 | 
             
                "test/unit/path_attributes/origin_test.rb",
         | 
| 136 136 | 
             
                "test/unit/path_attributes/originator_id_test.rb",
         | 
| 137 | 
            -
                "test/unit/path_attributes/path_attribute_test.rb"
         | 
| 137 | 
            +
                "test/unit/path_attributes/path_attribute_test.rb",
         | 
| 138 | 
            +
                "test/unit/path_attributes/tunnel_encapsulation_test (Jean-Michel's Laptop's conflicted copy 2011-11-02).rb"
         | 
| 138 139 | 
             
              ]
         | 
| 139 140 | 
             
              s.homepage = "http://github.com/jesnault/bgp4r/tree/master"
         | 
| 140 141 | 
             
              s.require_paths = ["."]
         | 
| 141 142 | 
             
              s.required_ruby_version = Gem::Requirement.new(">= 1.8.6")
         | 
| 142 143 | 
             
              s.rubyforge_project = "bgp4r"
         | 
| 143 | 
            -
              s.rubygems_version = "1.8. | 
| 144 | 
            +
              s.rubygems_version = "1.8.11"
         | 
| 144 145 | 
             
              s.summary = "A BGP-4 Ruby Library"
         | 
| 145 | 
            -
              s.test_files = ["test/functional", "test/functional/add_path_test.rb", "test/functional/live_feed_test.rb", "test/helpers", "test/helpers/server.rb", "test/misc", "test/misc/misc.rb", "test/unit", "test/unit/common_test.rb", "test/unit/iana_test.rb", "test/unit/messages", "test/unit/messages/capability_test.rb", "test/unit/messages/keepalive_test.rb", "test/unit/messages/markers_test.rb", "test/unit/messages/message_test.rb", "test/unit/messages/notification_test.rb", "test/unit/messages/open_test.rb", "test/unit/messages/route_refresh_test.rb", "test/unit/messages/update_test.rb", "test/unit/neighbor", "test/unit/neighbor/add_path_cap_test.rb", "test/unit/neighbor/neighbor_test.rb", "test/unit/nlris", "test/unit/nlris/inet_test.rb", "test/unit/nlris/label_test.rb", "test/unit/nlris/labeled_test.rb", "test/unit/nlris/nlri_test.rb", "test/unit/nlris/nsap_test.rb", "test/unit/nlris/prefix_test.rb", "test/unit/nlris/rd_test.rb", "test/unit/optional_parameters", "test/unit/optional_parameters/add_path_test.rb", "test/unit/optional_parameters/as4_test.rb", "test/unit/optional_parameters/capability_test.rb", "test/unit/optional_parameters/dynamic_test.rb", "test/unit/optional_parameters/graceful_restart_test.rb", "test/unit/optional_parameters/mbgp_test.rb", "test/unit/optional_parameters/optional_parameter_test.rb", "test/unit/optional_parameters/orf_test.rb", "test/unit/optional_parameters/route_refresh_test.rb", "test/unit/orfs", "test/unit/orfs/prefix_orf_test.rb", "test/unit/path_attributes", "test/unit/path_attributes/aggregator_test.rb", "test/unit/path_attributes/ | 
| 146 | 
            +
              s.test_files = ["test/functional", "test/functional/add_path_test.rb", "test/functional/live_feed_test.rb", "test/helpers", "test/helpers/server.rb", "test/misc", "test/misc/misc.rb", "test/unit", "test/unit/common_test.rb", "test/unit/iana_test.rb", "test/unit/messages", "test/unit/messages/capability_test.rb", "test/unit/messages/keepalive_test.rb", "test/unit/messages/markers_test.rb", "test/unit/messages/message_test.rb", "test/unit/messages/notification_test.rb", "test/unit/messages/open_test.rb", "test/unit/messages/route_refresh_test.rb", "test/unit/messages/update_test.rb", "test/unit/neighbor", "test/unit/neighbor/add_path_cap_test.rb", "test/unit/neighbor/neighbor_test.rb", "test/unit/nlris", "test/unit/nlris/inet_test.rb", "test/unit/nlris/label_test.rb", "test/unit/nlris/labeled_test.rb", "test/unit/nlris/nlri_test.rb", "test/unit/nlris/nsap_test.rb", "test/unit/nlris/prefix_test.rb", "test/unit/nlris/rd_test.rb", "test/unit/nlris/vpn_test.rb", "test/unit/optional_parameters", "test/unit/optional_parameters/add_path_test.rb", "test/unit/optional_parameters/as4_test.rb", "test/unit/optional_parameters/capability_test.rb", "test/unit/optional_parameters/dynamic_test.rb", "test/unit/optional_parameters/graceful_restart_test.rb", "test/unit/optional_parameters/mbgp_test.rb", "test/unit/optional_parameters/optional_parameter_test.rb", "test/unit/optional_parameters/orf_test.rb", "test/unit/optional_parameters/route_refresh_test.rb", "test/unit/orfs", "test/unit/orfs/prefix_orf_test.rb", "test/unit/path_attributes", "test/unit/path_attributes/aggregator_test.rb", "test/unit/path_attributes/aigp_test.rb", "test/unit/path_attributes/as_path_test.rb", "test/unit/path_attributes/atomic_aggregate_test.rb", "test/unit/path_attributes/attribute_test.rb", "test/unit/path_attributes/cluster_list_test.rb", "test/unit/path_attributes/communities_test.rb", "test/unit/path_attributes/extended_communities_test.rb", "test/unit/path_attributes/extended_community_test.rb", "test/unit/path_attributes/local_pref_test.rb", "test/unit/path_attributes/mp_reach_test.rb", "test/unit/path_attributes/mp_unreach_test.rb", "test/unit/path_attributes/multi_exit_disc_test.rb", "test/unit/path_attributes/next_hop_test.rb", "test/unit/path_attributes/origin_test.rb", "test/unit/path_attributes/originator_id_test.rb", "test/unit/path_attributes/path_attribute_test.rb", "test/unit/path_attributes/tunnel_encapsulation_test (Jean-Michel's Laptop's conflicted copy 2011-11-02).rb"]
         | 
| 146 147 |  | 
| 147 148 | 
             
              if s.respond_to? :specification_version then
         | 
| 148 149 | 
             
                s.specification_version = 3
         | 
| @@ -51,12 +51,12 @@ class Update_Test < Test::Unit::TestCase | |
| 51 51 | 
             
                  :path_attributes=> {
         | 
| 52 52 | 
             
                    :origin=>:incomplete,
         | 
| 53 53 | 
             
                    :as_path=>{},
         | 
| 54 | 
            -
                    : | 
| 54 | 
            +
                    :med=>0,
         | 
| 55 55 | 
             
                    :local_pref=>100,
         | 
| 56 56 | 
             
                    :communities=>["10283:20103"],
         | 
| 57 | 
            -
                    :route_target=>[10283, 30000],
         | 
| 58 | 
            -
                    : | 
| 59 | 
            -
                    : | 
| 57 | 
            +
                    :extended_communities=>[{:route_target=>[10283, 30000]}],
         | 
| 58 | 
            +
                    :cluster_list=>["0.0.0.1"],
         | 
| 59 | 
            +
                    :originator_id=>"81.52.17.128",
         | 
| 60 60 | 
             
                    :mp_reach=> {
         | 
| 61 61 | 
             
                      :safi=>128,
         | 
| 62 62 | 
             
                      :afi=>1,
         | 
| @@ -66,8 +66,15 @@ class Update_Test < Test::Unit::TestCase | |
| 66 66 | 
             
                  }
         | 
| 67 67 | 
             
                }
         | 
| 68 68 |  | 
| 69 | 
            +
                assert_equal(h[:path_attributes][:originator_id], m.to_hash[:path_attributes][:originator_id])
         | 
| 70 | 
            +
                assert_equal(h[:path_attributes][:as_path], m.to_hash[:path_attributes][:as_path])
         | 
| 71 | 
            +
                assert_equal(h[:path_attributes][:multi_exit_disc], m.to_hash[:path_attributes][:multi_exit_disc])
         | 
| 72 | 
            +
                assert_equal(h[:path_attributes][:local_pref], m.to_hash[:path_attributes][:local_pref])
         | 
| 73 | 
            +
                assert_equal(h[:path_attributes][:originator_id], m.to_hash[:path_attributes][:originator_id])
         | 
| 74 | 
            +
                assert_equal(h[:path_attributes][:mp_unreach], m.to_hash[:path_attributes][:mp_unreach])
         | 
| 75 | 
            +
                assert_equal(h[:path_attributes], m.to_hash[:path_attributes])
         | 
| 69 76 | 
             
                assert_equal(h, m.to_hash)
         | 
| 70 | 
            -
             | 
| 77 | 
            +
              
         | 
| 71 78 | 
             
                s = 'ffffffffffffffffffffffffffffffff0050020000002f40010101400304c0a80105800404000000644005040000006440020402010064c0080c051f00010137003b0af50040200a0a0a0a2020202020'
         | 
| 72 79 | 
             
                m = Message.factory([s].pack('H*'))
         | 
| 73 80 | 
             
                assert_equal(Update, m.class)
         | 
| @@ -132,6 +139,20 @@ class Update_Test < Test::Unit::TestCase | |
| 132 139 | 
             
                assert_equal 2, an_update.nlri.size
         | 
| 133 140 | 
             
                an_update << Nlri.new('21.0.0.0/11', '22.0.0.0/22')
         | 
| 134 141 | 
             
                assert_equal 4, an_update.nlri.size
         | 
| 142 | 
            +
                
         | 
| 143 | 
            +
                h = {
         | 
| 144 | 
            +
                  :path_attributes=> {
         | 
| 145 | 
            +
                    :multi_exit_disc=>100, 
         | 
| 146 | 
            +
                    :local_pref=>113, 
         | 
| 147 | 
            +
                    :next_hop=>"10.0.0.1", 
         | 
| 148 | 
            +
                    :origin=>:egp
         | 
| 149 | 
            +
                  }, 
         | 
| 150 | 
            +
                  :nlris=> ["77.0.0.0/17", "88.0.0.0/18", "21.0.0.0/11", "22.0.0.0/22"]
         | 
| 151 | 
            +
                }
         | 
| 152 | 
            +
             | 
| 153 | 
            +
                upd = Update.new h
         | 
| 154 | 
            +
                assert_equal(0, an_update.path_attribute <=> upd.path_attribute)
         | 
| 155 | 
            +
                
         | 
| 135 156 | 
             
              end
         | 
| 136 157 |  | 
| 137 158 | 
             
              def test_factory_to_build_update_with_session_info
         | 
| @@ -237,7 +258,7 @@ class Update_Test < Test::Unit::TestCase | |
| 237 258 | 
             
                h = {
         | 
| 238 259 | 
             
                  :path_attributes=>{
         | 
| 239 260 | 
             
                    :as_path=>{:sequence=>[100]},
         | 
| 240 | 
            -
                    : | 
| 261 | 
            +
                    :med=>20,
         | 
| 241 262 | 
             
                    :mp_reach=>{
         | 
| 242 263 | 
             
                      :nexthop=>["10.0.0.1"],
         | 
| 243 264 | 
             
                      :safi=>128,
         | 
| @@ -307,7 +328,7 @@ class Update_Test < Test::Unit::TestCase | |
| 307 328 | 
             
                h = {
         | 
| 308 329 | 
             
                  :path_attributes=>{
         | 
| 309 330 | 
             
                    :as_path=>{}, 
         | 
| 310 | 
            -
                    : | 
| 331 | 
            +
                    :med=>0, 
         | 
| 311 332 | 
             
                    :mp_reach=>{
         | 
| 312 333 | 
             
                      :nexthop=>["1.1.1.1"], 
         | 
| 313 334 | 
             
                      :safi=>128, 
         | 
| @@ -316,10 +337,14 @@ class Update_Test < Test::Unit::TestCase | |
| 316 337 | 
             
                    }, 
         | 
| 317 338 | 
             
                    :local_pref=>1, 
         | 
| 318 339 | 
             
                    :origin=>:egp, 
         | 
| 319 | 
            -
                    :route_target=>[4, 1]
         | 
| 340 | 
            +
                    :extended_communities=>[{:route_target=>[4, 1] }]
         | 
| 320 341 | 
             
                  }
         | 
| 321 342 | 
             
                }
         | 
| 322 343 | 
             
                assert_equal(h, upd.to_hash)
         | 
| 344 | 
            +
                assert_equal(BGP::Route_target, upd.path_attribute.extended_communities.route_target.class)
         | 
| 345 | 
            +
                assert_equal(BGP::Route_target, upd.path_attribute.extended_communities.route_target.to_s)
         | 
| 346 | 
            +
                assert_equal(128, upd.path_attribute.mp_reach.safi)
         | 
| 347 | 
            +
                assert_equal('Label Stack=16000 (bottom) RD=19:17, ID=1, IPv4=10.1.1.0/24', upd.path_attribute.mp_reach.nlris[0].to_s)
         | 
| 323 348 | 
             
              end
         | 
| 324 349 |  | 
| 325 350 | 
             
              def test_factory_to_build_a_withdrawn_update_for_inet_mpls_vpn_unicast_with_path_id
         | 
| @@ -342,6 +367,102 @@ class Update_Test < Test::Unit::TestCase | |
| 342 367 | 
             
                  }
         | 
| 343 368 | 
             
                }
         | 
| 344 369 | 
             
                assert_equal(h, upd.to_hash)
         | 
| 370 | 
            +
                upd2 = Update.new upd.to_hash
         | 
| 371 | 
            +
                assert_equal(upd2.to_shex, upd.to_shex)
         | 
| 345 372 | 
             
              end
         | 
| 373 | 
            +
              
         | 
| 374 | 
            +
              def test_to_hash
         | 
| 375 | 
            +
                h = {:nlris=>
         | 
| 376 | 
            +
                  ["59.88.128.0/18",
         | 
| 377 | 
            +
                    "59.88.192.0/18",
         | 
| 378 | 
            +
                    "59.89.0.0/18",
         | 
| 379 | 
            +
                    "59.89.192.0/18",
         | 
| 380 | 
            +
                    "59.90.0.0/18",
         | 
| 381 | 
            +
                    "59.90.64.0/18",
         | 
| 382 | 
            +
                    "59.90.128.0/18",
         | 
| 383 | 
            +
                    "59.90.192.0/18",
         | 
| 384 | 
            +
                    "59.91.192.0/18",
         | 
| 385 | 
            +
                    "59.93.128.0/18",
         | 
| 386 | 
            +
                    "59.93.192.0/18",
         | 
| 387 | 
            +
                    "59.94.0.0/18",
         | 
| 388 | 
            +
                    "59.94.64.0/18",
         | 
| 389 | 
            +
                    "59.94.128.0/18",
         | 
| 390 | 
            +
                    "59.94.192.0/18",
         | 
| 391 | 
            +
                    "59.95.0.0/18",
         | 
| 392 | 
            +
                    "59.95.128.0/18",
         | 
| 393 | 
            +
                    "59.96.128.0/18",
         | 
| 394 | 
            +
                    "59.96.192.0/18",
         | 
| 395 | 
            +
                    "59.97.128.0/18",
         | 
| 396 | 
            +
                    "59.97.192.0/18",
         | 
| 397 | 
            +
                    "59.98.192.0/18",
         | 
| 398 | 
            +
                    "59.99.0.0/18",
         | 
| 399 | 
            +
                    "59.99.64.0/18",
         | 
| 400 | 
            +
                    "117.197.0.0/18",
         | 
| 401 | 
            +
                    "117.197.64.0/18",
         | 
| 402 | 
            +
                    "117.197.128.0/18",
         | 
| 403 | 
            +
                    "117.198.128.0/18",
         | 
| 404 | 
            +
                    "117.198.192.0/18",
         | 
| 405 | 
            +
                    "117.199.64.0/18",
         | 
| 406 | 
            +
                    "117.199.128.0/18",
         | 
| 407 | 
            +
                    "117.199.192.0/18",
         | 
| 408 | 
            +
                    "117.200.0.0/18",
         | 
| 409 | 
            +
                    "117.200.64.0/18",
         | 
| 410 | 
            +
                    "117.201.0.0/18",
         | 
| 411 | 
            +
                    "117.201.64.0/18",
         | 
| 412 | 
            +
                    "117.202.192.0/18",
         | 
| 413 | 
            +
                    "117.203.0.0/18",
         | 
| 414 | 
            +
                    "117.203.128.0/18",
         | 
| 415 | 
            +
                    "117.203.192.0/18",
         | 
| 416 | 
            +
                    "117.205.0.0/18",
         | 
| 417 | 
            +
                    "117.205.64.0/18",
         | 
| 418 | 
            +
                    "117.205.192.0/18",
         | 
| 419 | 
            +
                    "117.206.128.0/18",
         | 
| 420 | 
            +
                    "117.206.192.0/18",
         | 
| 421 | 
            +
                    "117.207.0.0/18",
         | 
| 422 | 
            +
                    "117.207.128.0/18",
         | 
| 423 | 
            +
                    "117.209.192.0/18",
         | 
| 424 | 
            +
                    "117.210.0.0/18",
         | 
| 425 | 
            +
                    "117.210.64.0/18",
         | 
| 426 | 
            +
                    "117.210.128.0/18",
         | 
| 427 | 
            +
                    "117.210.192.0/18",
         | 
| 428 | 
            +
                    "117.212.0.0/18",
         | 
| 429 | 
            +
                    "117.212.64.0/18",
         | 
| 430 | 
            +
                    "117.214.0.0/18",
         | 
| 431 | 
            +
                    "117.214.128.0/18",
         | 
| 432 | 
            +
                    "117.214.192.0/18",
         | 
| 433 | 
            +
                    "117.218.0.0/18",
         | 
| 434 | 
            +
                    "117.239.0.0/18",
         | 
| 435 | 
            +
                    "117.239.64.0/18",
         | 
| 436 | 
            +
                    "117.239.128.0/18",
         | 
| 437 | 
            +
                    "117.239.192.0/18",
         | 
| 438 | 
            +
                    "117.241.0.0/18",
         | 
| 439 | 
            +
                    "117.241.64.0/18",
         | 
| 440 | 
            +
                    "117.241.128.0/18",
         | 
| 441 | 
            +
                    "117.241.192.0/18",
         | 
| 442 | 
            +
                    "117.242.0.0/18",
         | 
| 443 | 
            +
                    "117.242.64.0/18",
         | 
| 444 | 
            +
                    "117.242.128.0/18",
         | 
| 445 | 
            +
                    "117.242.192.0/18",
         | 
| 446 | 
            +
                    "210.212.0.0/18",
         | 
| 447 | 
            +
                    "210.212.64.0/18",
         | 
| 448 | 
            +
                    "210.212.128.0/18",
         | 
| 449 | 
            +
                    "210.212.192.0/18",
         | 
| 450 | 
            +
                    "218.248.0.0/18",
         | 
| 451 | 
            +
                    "218.248.128.0/18"],
         | 
| 452 | 
            +
                    :path_attributes=> {
         | 
| 453 | 
            +
                      :communities=>["28289:65500"],
         | 
| 454 | 
            +
                      :origin=>:igp,
         | 
| 455 | 
            +
                      :as_path=>{:sequence=>[28289, 53131, 16735, 3549, 9829, 9829, 9829]},
         | 
| 456 | 
            +
                      :next_hop=>"187.121.193.33"
         | 
| 457 | 
            +
                    }
         | 
| 458 | 
            +
                  }
         | 
| 459 | 
            +
                   u = Update.new h       
         | 
| 460 | 
            +
                   assert_equal(h, u.to_hash)
         | 
| 461 | 
            +
                          
         | 
| 462 | 
            +
                   # s = "ffffffffffffffffffffffffffffffff016c02000000254001010040021002076e81cf8b415f0ddd266526652665400304bb79c121c008046e81ffdc123b5880123b58c0123b5900123b59c0123b5a00123b5a40123b5a80123b5ac0123b5bc0123b5d80123b5dc0123b5e00123b5e40123b5e80123b5ec0123b5f00123b5f80123b6080123b60c0123b6180123b61c0123b62c0123b6300123b63401275c5001275c5401275c5801275c6801275c6c01275c7401275c7801275c7c01275c8001275c8401275c9001275c9401275cac01275cb001275cb801275cbc01275cd001275cd401275cdc01275ce801275cec01275cf001275cf801275d1c01275d2001275d2401275d2801275d2c01275d4001275d4401275d6001275d6801275d6c01275da001275ef001275ef401275ef801275efc01275f1001275f1401275f1801275f1c01275f2001275f2401275f2801275f2c012d2d40012d2d44012d2d48012d2d4c012daf80012daf880" 
         | 
| 463 | 
            +
                   # assert_equal(s, u.to_shex)
         | 
| 464 | 
            +
              end
         | 
| 465 | 
            +
              
         | 
| 466 | 
            +
              
         | 
| 346 467 |  | 
| 347 468 | 
             
            end
         | 
| @@ -67,6 +67,6 @@ class Aggregator_Test < Test::Unit::TestCase | |
| 67 67 | 
             
                ag1 = Aggregator.new('10.0.0.1', 100)
         | 
| 68 68 | 
             
                ag2 = Aggregator.new :asn=> 100, :address=> '10.0.0.1'
         | 
| 69 69 | 
             
                assert_equal(ag1.encode,ag2.encode)
         | 
| 70 | 
            -
                assert_equal({:asn=>100, :address=>"10.0.0.1"}, ag2.to_hash)
         | 
| 70 | 
            +
                assert_equal({:asn=>100, :address=>"10.0.0.1"}, ag2.to_hash[:aggregator])
         | 
| 71 71 | 
             
              end
         | 
| 72 72 | 
             
            end
         | 
| @@ -19,11 +19,11 @@ class TestAigp < Test::Unit::TestCase | |
| 19 19 | 
             
              end
         | 
| 20 20 | 
             
              def test_2
         | 
| 21 21 | 
             
                assert Aigp.new_hash
         | 
| 22 | 
            -
                assert Aigp.new_hash : | 
| 22 | 
            +
                assert Aigp.new_hash :aigp=> 0x1f2f3f4f5f6f7f8f
         | 
| 23 23 | 
             
                m1 = Aigp.new 0x1f2f3f4f5f6f7f8f
         | 
| 24 | 
            -
                m2 = Aigp.new_hash : | 
| 24 | 
            +
                m2 = Aigp.new_hash :aigp=> 0x1f2f3f4f5f6f7f8f
         | 
| 25 25 | 
             
                assert_equal(m1.encode, m2.encode)
         | 
| 26 | 
            -
                assert_equal({: | 
| 26 | 
            +
                assert_equal({:aigp=>2247084349217275791}, m2.to_hash)
         | 
| 27 27 | 
             
              end
         | 
| 28 28 | 
             
            end
         | 
| 29 29 |  | 
| @@ -38,7 +38,7 @@ class Cluster_list_Test < Test::Unit::TestCase | |
| 38 38 | 
             
              end
         | 
| 39 39 | 
             
              def test_2
         | 
| 40 40 | 
             
                cids = ['1.1.1.1', '2.2.2.2', '3.3.3.3']
         | 
| 41 | 
            -
                clist1 = Cluster_list. | 
| 42 | 
            -
                assert_equal( cids, clist1.to_hash[: | 
| 41 | 
            +
                clist1 = Cluster_list.new :cluster_list=> cids
         | 
| 42 | 
            +
                assert_equal( cids, clist1.to_hash[:cluster_list])
         | 
| 43 43 | 
             
              end
         | 
| 44 44 | 
             
            end
         | 
| @@ -67,7 +67,10 @@ class Extended_communitiesTest < Test::Unit::TestCase | |
| 67 67 | 
             
                ec2 = Extended_communities.new_hash(ec.to_hash)
         | 
| 68 68 | 
             
                assert_equal(ec.to_hash, Extended_communities.new_hash(ec.to_hash).to_hash)
         | 
| 69 69 | 
             
                ec = Extended_communities.new_hash  :color => 100, :link_bandwidth => 999_999_999, :route_origin => ['10.0.1.2', 10], :encapsulation => :ipip
         | 
| 70 | 
            -
                assert_equal( | 
| 70 | 
            +
                assert_equal(ec.to_hash, Extended_communities.new_hash(ec.to_hash).to_hash)
         | 
| 71 | 
            +
                assert_equal({:color=>100}, ec.color.to_hash)
         | 
| 72 | 
            +
                ec = Extended_communities.new_hash :extended_communities=>[{:route_target=>[13111, 26054]}]
         | 
| 73 | 
            +
                assert_equal({:extended_communities=>[{:route_target=>[13111, 26054]}]}, ec.to_hash)
         | 
| 71 74 | 
             
              end
         | 
| 72 75 | 
             
              def test_sort
         | 
| 73 76 | 
             
                ec = Extended_communities.new
         | 
| @@ -137,7 +140,28 @@ class Extended_communitiesTest < Test::Unit::TestCase | |
| 137 140 | 
             
                assert_equal(0, ec <=> ec2)
         | 
| 138 141 | 
             
                assert(! ec.eql?(ec2))
         | 
| 139 142 | 
             
              end
         | 
| 143 | 
            +
              def test_getters
         | 
| 144 | 
            +
                ec = Extended_communities.new do |c|    
         | 
| 145 | 
            +
                  c.add(Color.new(100))
         | 
| 146 | 
            +
                  c.add(Link_bandwidth.new(999_999_999))
         | 
| 147 | 
            +
                  c.add(Route_target.new('10.0.1.2',10))
         | 
| 148 | 
            +
                  c.add(Ospf_domain_id.new('9.1.0.1'))
         | 
| 149 | 
            +
                  c.add(Route_target.new('11.0.1.1',10))
         | 
| 150 | 
            +
                  c.add(Route_target.new('8.0.1.1',10))
         | 
| 151 | 
            +
                  c.add(Route_target.new('7.0.1.1',8))
         | 
| 152 | 
            +
                  c.add(Encapsulation.new(:l2tpv3))
         | 
| 153 | 
            +
                  c.add(Ospf_domain_id.new('20.0.0.1'))
         | 
| 154 | 
            +
                  c.add(Route_origin.new('10.0.3.2',9))
         | 
| 155 | 
            +
                  c.add(Route_target.new('10.0.3.2',7))
         | 
| 156 | 
            +
                  c.add(Ospf_router_id.new('10.0.0.1'))
         | 
| 157 | 
            +
                end
         | 
| 158 | 
            +
                assert_equal('Color: 100',ec.color.to_s)
         | 
| 159 | 
            +
                assert_equal('Route target: 10.0.1.2:10',ec.route_target.to_s)
         | 
| 160 | 
            +
                assert_equal('Ospf domain id: 9.1.0.1:0',ec.ospf_domain_id.to_s)
         | 
| 161 | 
            +
                assert_equal('Encapsulation: 1',ec.encapsulation.to_s)
         | 
| 162 | 
            +
                assert_equal('Ospf router id: 10.0.0.1:0',ec.ospf_router_id.to_s)
         | 
| 163 | 
            +
                assert_equal('Link bandwidth: 1000000000.0',ec.link_bandwidth.to_s)
         | 
| 164 | 
            +
                assert_equal('Route origin: 10.0.3.2:9',ec.route_origin.to_s)
         | 
| 165 | 
            +
              end
         | 
| 140 166 |  | 
| 141 167 | 
             
            end
         | 
| 142 | 
            -
             | 
| 143 | 
            -
            #MiniTest::Unit.autorun
         | 
| @@ -180,7 +180,7 @@ class Path_attribute_Test < Test::Unit::TestCase # :nodoc: | |
| 180 180 | 
             
                                        :as_path=> {:set=> [1,2], :sequence=>[3,4], :confed_sequence=>[5,6], :confed_set=>[7,8]},
         | 
| 181 181 | 
             
                                        :cluster_list=> ['1.1.1.1', '2.2.2.2', '3.3.3.3'],
         | 
| 182 182 | 
             
                                        :communities=> ["145:30", "145:40", "145:50", "145:60", :no_export, :no_advertise,],
         | 
| 183 | 
            -
                                        :extended_communities=>  | 
| 183 | 
            +
                                        :extended_communities=> [ :color => 100, :link_bandwidth => 999_999_999, :route_origin => ['10.0.1.2', 10], :encapsulation => :ipip ],
         | 
| 184 184 | 
             
                                        :aggregator=> { :address=>'1.1.1.1', :asn=>100 },
         | 
| 185 185 | 
             
                                        :originator_id=> '2.2.2.2',
         | 
| 186 186 | 
             
                                        :as4_aggregator=> { :asn=> 200, :address=> '4.4.4.4' },
         | 
| @@ -204,6 +204,31 @@ class Path_attribute_Test < Test::Unit::TestCase # :nodoc: | |
| 204 204 |  | 
| 205 205 | 
             
              end
         | 
| 206 206 |  | 
| 207 | 
            +
              def test_9
         | 
| 208 | 
            +
                pa1 = Path_attribute.new { |p|  
         | 
| 209 | 
            +
                  p << Multi_exit_disc.new(222)
         | 
| 210 | 
            +
                  p << Next_hop.new('1.1.1.1')
         | 
| 211 | 
            +
                  p << Local_pref.new(333)
         | 
| 212 | 
            +
                  p << As_path.new( :set=> [1,2,3,4], :sequence=> [11,12,13])
         | 
| 213 | 
            +
                  p << Origin.new(1)
         | 
| 214 | 
            +
                }
         | 
| 215 | 
            +
                pa2 = Path_attribute.new { |p|  
         | 
| 216 | 
            +
                  p << Next_hop.new('1.1.1.1')
         | 
| 217 | 
            +
                  p << Origin.new(1)
         | 
| 218 | 
            +
                  p << Local_pref.new(333)
         | 
| 219 | 
            +
                  p << As_path.new(:sequence=> [11,12,14], :set=> [1,2,3,4])
         | 
| 220 | 
            +
                  p << Multi_exit_disc.new(222)
         | 
| 221 | 
            +
                }
         | 
| 222 | 
            +
                assert_not_equal(pa1.to_shex,pa2.to_shex)
         | 
| 223 | 
            +
                assert_equal(pa1.sort.to_shex, pa2.sort.to_shex)
         | 
| 224 | 
            +
                assert_equal(0, pa1 <=> pa2)
         | 
| 225 | 
            +
                pa1.add(Communities.new("1:1"))
         | 
| 226 | 
            +
                assert_equal(1, pa1 <=> pa2)
         | 
| 227 | 
            +
                pa2.insert(Communities.new("1:1"))
         | 
| 228 | 
            +
                assert_equal(0, pa1 <=> pa2)
         | 
| 229 | 
            +
              end
         | 
| 230 | 
            +
                
         | 
| 231 | 
            +
              
         | 
| 207 232 | 
             
              def test_path_attribute_path_id_true_and_as4byte_false
         | 
| 208 233 | 
             
                path_attr = Path_attribute.new
         | 
| 209 234 | 
             
                path_attr.insert(
         | 
| @@ -223,6 +248,63 @@ class Path_attribute_Test < Test::Unit::TestCase # :nodoc: | |
| 223 248 | 
             
                # TODO: UT: a path attr with mp_unreach w path_id
         | 
| 224 249 | 
             
                # TODO: UT: a path attr with mp_reach w path_id and as4
         | 
| 225 250 |  | 
| 226 | 
            -
              end | 
| 251 | 
            +
              end
         | 
| 227 252 |  | 
| 253 | 
            +
              def test_hash
         | 
| 254 | 
            +
                
         | 
| 255 | 
            +
                h = {
         | 
| 256 | 
            +
                  :aigp=> 0x1f2f3f4f5f6f7f8f,
         | 
| 257 | 
            +
                  :aggregator=>{:asn=>100, :address=>"10.0.0.1"},
         | 
| 258 | 
            +
                  :cluster_list=>["1.0.1.1"], 
         | 
| 259 | 
            +
                  :as_path=>{}, 
         | 
| 260 | 
            +
                  :communities=>["1133:2015"], 
         | 
| 261 | 
            +
                  :local_pref=>113, 
         | 
| 262 | 
            +
                  :origin=>:incomplete,
         | 
| 263 | 
            +
                  :med=>10, 
         | 
| 264 | 
            +
                  :extended_communities=>[{:route_target=>[13111, 26054]}], 
         | 
| 265 | 
            +
                  :originator_id=>"196.168.28.123", 
         | 
| 266 | 
            +
                  :mp_reach=>{
         | 
| 267 | 
            +
                    :nexthop=>["10.0.0.2"], :afi=>1, :safi=>128, 
         | 
| 268 | 
            +
                    :nlris=>[
         | 
| 269 | 
            +
                      {:label=>2226, :prefix=>"172.23.21.113/32", :rd=>[1311, 4567814]}, 
         | 
| 270 | 
            +
                      {:label=>2151, :prefix=>"10.48.9.175/32",   :rd=>[1311, 32117824]}, 
         | 
| 271 | 
            +
                      {:label=>3382, :prefix=>"172.33.169.92/32", :rd=>[1311, 80037224]}, 
         | 
| 272 | 
            +
                      {:label=>1452, :prefix=>"10.46.52.31/32",   :rd=>[1311, 3117824]}, 
         | 
| 273 | 
            +
                      {:label=>3785, :prefix=>"172.41.96.104/32", :rd=>[1311, 45657424]}, 
         | 
| 274 | 
            +
                      {:label=>5228, :prefix=>"10.46.53.69/32",   :rd=>[1311, 59407624]}, 
         | 
| 275 | 
            +
                      {:label=>5141, :prefix=>"172.21.55.36/32",  :rd=>[1311, 321617824]}, 
         | 
| 276 | 
            +
                      {:label=>3724, :prefix=>"10.99.25.81/32",   :rd=>[1311, 311197824]}, 
         | 
| 277 | 
            +
                      {:label=>2281, :prefix=>"10.35.9.169/32",   :rd=>[1311, 321147824]}, 
         | 
| 278 | 
            +
                      {:label=>4615, :prefix=>"10.65.128.200/32", :rd=>[1311, 6627884]}, 
         | 
| 279 | 
            +
                      {:label=>3404, :prefix=>"172.29.96.8/32",   :rd=>[1311, 45657824]}, 
         | 
| 280 | 
            +
                      {:label=>3767, :prefix=>"10.32.19.165/32",  :rd=>[1311, 44657824]}, 
         | 
| 281 | 
            +
                      {:label=>3451, :prefix=>"10.14.186.28/32",  :rd=>[1311, 45657824]}, 
         | 
| 282 | 
            +
                      {:label=>3027, :prefix=>"10.95.176.91/32",  :rd=>[1311, 371197824]}, 
         | 
| 283 | 
            +
                      {:label=>5034, :prefix=>"10.24.176.99/32",  :rd=>[1311, 321197824]}, 
         | 
| 284 | 
            +
                      {:label=>3565, :prefix=>"10.72.83.239/32",  :rd=>[1311, 311197824]}, 
         | 
| 285 | 
            +
                      {:label=>3551, :prefix=>"10.45.142.161/32", :rd=>[1311, 321157824]}, 
         | 
| 286 | 
            +
                      {:label=>5238, :prefix=>"10.32.83.219/32",  :rd=>[1311, 351177824]}, 
         | 
| 287 | 
            +
                      {:label=>5223, :prefix=>"10.13.142.117/32", :rd=>[1311, 321197824]}, 
         | 
| 288 | 
            +
                      {:label=>3360, :prefix=>"172.50.34.141/32", :rd=>[1311, 348987824]},  
         | 
| 289 | 
            +
                      {:label=>3579, :prefix=>"10.26.42.36/32",   :rd=>[1311, 325697824]}, 
         | 
| 290 | 
            +
                      {:label=>4118, :prefix=>"10.76.42.34/32",   :rd=>[1311, 347517824]}, 
         | 
| 291 | 
            +
                      {:label=>3971, :prefix=>"172.21.192.24/32", :rd=>[1311, 86627824]},
         | 
| 292 | 
            +
                      {:label=>4223, :prefix=>"10.12.209.131/32", :rd=>[1311, 42655824]}, 
         | 
| 293 | 
            +
                      {:label=>2241, :prefix=>"10.34.186.201/32", :rd=>[1311, 42656824]},
         | 
| 294 | 
            +
                    ], 
         | 
| 295 | 
            +
                  }
         | 
| 296 | 
            +
                }
         | 
| 297 | 
            +
                
         | 
| 298 | 
            +
                assert_equal(h[:local_pref], Path_attribute.new(h).to_hash[:local_pref])
         | 
| 299 | 
            +
                assert_equal(h[:as_path], Path_attribute.new(h).to_hash[:as_path])
         | 
| 300 | 
            +
                assert_equal(h[:extended_communities], Path_attribute.new(h).to_hash[:extended_communities])
         | 
| 301 | 
            +
                assert_equal(h[:communities], Path_attribute.new(h).to_hash[:communities])
         | 
| 302 | 
            +
                assert_equal(h[:cluster_list], Path_attribute.new(h).to_hash[:cluster_list])
         | 
| 303 | 
            +
                assert_equal(h[:aggregator], Path_attribute.new(h).to_hash[:aggregator])
         | 
| 304 | 
            +
                assert_equal(h[:mp_reach], Path_attribute.new(h).to_hash[:mp_reach])
         | 
| 305 | 
            +
                assert_equal(h, Path_attribute.new(h).to_hash)
         | 
| 306 | 
            +
                
         | 
| 307 | 
            +
              end
         | 
| 308 | 
            +
                  
         | 
| 228 309 | 
             
            end
         | 
| 310 | 
            +
             | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: bgp4r
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.15
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2012-02- | 
| 12 | 
            +
            date: 2012-02-13 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies: []
         | 
| 14 14 | 
             
            description: BGP4R is a BGP-4 ruby library to create,  send, and receive  BGP messages
         | 
| 15 15 | 
             
              in an  object oriented manner
         | 
| @@ -77,15 +77,12 @@ files: | |
| 77 77 | 
             
            - bgp/path_attributes/origin.rb
         | 
| 78 78 | 
             
            - bgp/path_attributes/originator_id.rb
         | 
| 79 79 | 
             
            - bgp/path_attributes/path_attribute.rb
         | 
| 80 | 
            -
            - bgp/path_attributes/tlvs/tlv.rb
         | 
| 81 80 | 
             
            - bgp4r.gemspec
         | 
| 82 81 | 
             
            - bgp4r.rb
         | 
| 83 82 | 
             
            - examples/a_live_feed
         | 
| 84 83 | 
             
            - examples/routegen
         | 
| 85 84 | 
             
            - examples/routegen.yml
         | 
| 86 85 | 
             
            - examples/simple.rb
         | 
| 87 | 
            -
            - examples/test.rb
         | 
| 88 | 
            -
            - examples/test2.rb
         | 
| 89 86 | 
             
            - examples/unit-testing/malformed_update_test.rb
         | 
| 90 87 | 
             
            - examples/unit-testing/no_export_test.rb
         | 
| 91 88 | 
             
            - examples/unit-testing/prepend_aspath_test.rb
         | 
| @@ -141,7 +138,6 @@ files: | |
| 141 138 | 
             
            - test/unit/path_attributes/origin_test.rb
         | 
| 142 139 | 
             
            - test/unit/path_attributes/originator_id_test.rb
         | 
| 143 140 | 
             
            - test/unit/path_attributes/path_attribute_test.rb
         | 
| 144 | 
            -
            - test/unit/path_attributes/tlvs/tlv_test.rb
         | 
| 145 141 | 
             
            - test/unit/path_attributes/tunnel_encapsulation_test (Jean-Michel's Laptop's conflicted
         | 
| 146 142 | 
             
              copy 2011-11-02).rb
         | 
| 147 143 | 
             
            homepage: http://github.com/jesnault/bgp4r/tree/master
         | 
| @@ -164,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 164 160 | 
             
                  version: '0'
         | 
| 165 161 | 
             
            requirements: []
         | 
| 166 162 | 
             
            rubyforge_project: bgp4r
         | 
| 167 | 
            -
            rubygems_version: 1.8. | 
| 163 | 
            +
            rubygems_version: 1.8.11
         | 
| 168 164 | 
             
            signing_key: 
         | 
| 169 165 | 
             
            specification_version: 3
         | 
| 170 166 | 
             
            summary: A BGP-4 Ruby Library
         | 
| @@ -220,6 +216,5 @@ test_files: | |
| 220 216 | 
             
            - test/unit/path_attributes/origin_test.rb
         | 
| 221 217 | 
             
            - test/unit/path_attributes/originator_id_test.rb
         | 
| 222 218 | 
             
            - test/unit/path_attributes/path_attribute_test.rb
         | 
| 223 | 
            -
            - test/unit/path_attributes/tlvs/tlv_test.rb
         | 
| 224 219 | 
             
            - test/unit/path_attributes/tunnel_encapsulation_test (Jean-Michel's Laptop's conflicted
         | 
| 225 220 | 
             
              copy 2011-11-02).rb
         | 
| @@ -1,18 +0,0 @@ | |
| 1 | 
            -
            module BGP
         | 
| 2 | 
            -
              module TLV
         | 
| 3 | 
            -
                attr_accessor :tlv_type
         | 
| 4 | 
            -
                def encode(value)
         | 
| 5 | 
            -
                  p 'IN ENCODE TLV'
         | 
| 6 | 
            -
                  [@tlv_type, value.size, value].pack('nna*')
         | 
| 7 | 
            -
                end
         | 
| 8 | 
            -
              end
         | 
| 9 | 
            -
              module STLV
         | 
| 10 | 
            -
                attr_accessor :stlv_type
         | 
| 11 | 
            -
                def encode(value)
         | 
| 12 | 
            -
                   [@stlv_type, value.size, value].pack('CCa*')
         | 
| 13 | 
            -
                end
         | 
| 14 | 
            -
              end
         | 
| 15 | 
            -
            end
         | 
| 16 | 
            -
             | 
| 17 | 
            -
            load "../../../test/unit/path_attributes/tlvs/#{ File.basename($0.gsub(/.rb/,'_test.rb'))}" if __FILE__ == $0
         | 
| 18 | 
            -
             | 
    
        data/examples/test.rb
    DELETED
    
    | @@ -1,15 +0,0 @@ | |
| 1 | 
            -
            require 'bgp4r'
         | 
| 2 | 
            -
            include BGP
         | 
| 3 | 
            -
            Log.create
         | 
| 4 | 
            -
            n = Neighbor.new 4, 1, 180, '1.1.1.1','127.0.0.1', '127.0.0.1'
         | 
| 5 | 
            -
            # n.start :auto_retry => true
         | 
| 6 | 
            -
            n.start :port=> 8090
         | 
| 7 | 
            -
             | 
| 8 | 
            -
            sleep(200)
         | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
            __END__
         | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
            @c = Neighbor.new(4, 100, 180, '0.0.0.2', '127.0.0.1', '127.0.0.1')
         | 
| 15 | 
            -
            @c.add_cap add_path_cap2
         | 
    
        data/examples/test2.rb
    DELETED
    
    | @@ -1,116 +0,0 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
            require 'rubygems'
         | 
| 3 | 
            -
            require 'eventmachine'
         | 
| 4 | 
            -
            require 'bgp4r'
         | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
            include BGP
         | 
| 8 | 
            -
             | 
| 9 | 
            -
            pa = Path_attribute.new(
         | 
| 10 | 
            -
              Origin.new,
         | 
| 11 | 
            -
              Next_hop.new('10.0.0.1'),
         | 
| 12 | 
            -
              Local_pref.new(300),
         | 
| 13 | 
            -
              Communities.new('10:1 10:2 10:3'),
         | 
| 14 | 
            -
              As_path.new('100 200 300 400')
         | 
| 15 | 
            -
            )
         | 
| 16 | 
            -
             | 
| 17 | 
            -
            times = 133
         | 
| 18 | 
            -
            pack=13
         | 
| 19 | 
            -
            nlri = IPAddr.new '11.0.0.1/24'
         | 
| 20 | 
            -
             | 
| 21 | 
            -
            nlris = Nlri.new
         | 
| 22 | 
            -
             | 
| 23 | 
            -
            updates = Fiber.new do
         | 
| 24 | 
            -
              (1..times.to_i).each do |n|
         | 
| 25 | 
            -
                nlris << (nlri ^ n)
         | 
| 26 | 
            -
                next unless (n % pack) == 0 or (n == times)
         | 
| 27 | 
            -
                Fiber.yield Update.new(pa, nlris)
         | 
| 28 | 
            -
                nlris = Nlri.new
         | 
| 29 | 
            -
              end
         | 
| 30 | 
            -
            end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
            p updates.resume
         | 
| 33 | 
            -
            p updates.resume
         | 
| 34 | 
            -
            p updates.resume
         | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
            __END__
         | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
            pa = Path_attribute.new(
         | 
| 44 | 
            -
              Origin.new(@origin),
         | 
| 45 | 
            -
              Next_hop.new(@nexthop),
         | 
| 46 | 
            -
              Local_pref.new(@local_pref),
         | 
| 47 | 
            -
              Communities.new(*(@communities.split.map { |com| com.to_i})),
         | 
| 48 | 
            -
              As_path.new(*(@as_path.split.map { |as| as.to_i}))
         | 
| 49 | 
            -
            )
         | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
            nlris = Nlri.new
         | 
| 53 | 
            -
            (1..@times.to_i).each do |n|
         | 
| 54 | 
            -
              nlris << (@nlri ^ n)
         | 
| 55 | 
            -
              next unless (n % @pack) == 0 or (n == @times)
         | 
| 56 | 
            -
              neighbor.send_message Update.new(pa, nlris)
         | 
| 57 | 
            -
              nlris = Nlri.new
         | 
| 58 | 
            -
            end
         | 
| 59 | 
            -
             | 
| 60 | 
            -
            words = Fiber.new do File.foreach("testfile") do |line|
         | 
| 61 | 
            -
            line.scan(/\w+/) do |word| Fiber.yield word.downcase
         | 
| 62 | 
            -
            end end
         | 
| 63 | 
            -
            end
         | 
| 64 | 
            -
            Prepared exclusively for Jean-Michel Esnault
         | 
| 65 | 
            -
            FIBERS 176
         | 
| 66 | 
            -
            counts = Hash.new(0) while word = words.resume
         | 
| 67 | 
            -
              counts[word] += 1
         | 
| 68 | 
            -
            end
         | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
            __END__
         | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
            Thread.abort_on_exception = true
         | 
| 79 | 
            -
             | 
| 80 | 
            -
            Log.create
         | 
| 81 | 
            -
             | 
| 82 | 
            -
            class Session
         | 
| 83 | 
            -
              def initialize
         | 
| 84 | 
            -
              end
         | 
| 85 | 
            -
              def start(arg={})
         | 
| 86 | 
            -
                options = {:duration=> 120, :as=> 1, :holdtime=> 180, :id=> '2.2.2.2', :peer=> '127.0.0.1'}.merge(arg)
         | 
| 87 | 
            -
                
         | 
| 88 | 
            -
                Thread.new do 
         | 
| 89 | 
            -
                  EM.run do
         | 
| 90 | 
            -
                    @c = EM.connect(options[:peer], 8090, 
         | 
| 91 | 
            -
                            BGP::ConnectionHandler, 4, 
         | 
| 92 | 
            -
                            options[:as], options[:holdtime], options[:id], options[:peer])
         | 
| 93 | 
            -
                    @c.add_observer(self)
         | 
| 94 | 
            -
                  end
         | 
| 95 | 
            -
                end
         | 
| 96 | 
            -
              end
         | 
| 97 | 
            -
              
         | 
| 98 | 
            -
              def update(*args)
         | 
| 99 | 
            -
              end
         | 
| 100 | 
            -
              
         | 
| 101 | 
            -
              def stop
         | 
| 102 | 
            -
                EM.stop
         | 
| 103 | 
            -
              end
         | 
| 104 | 
            -
            end
         | 
| 105 | 
            -
             | 
| 106 | 
            -
            n = Session.new
         | 
| 107 | 
            -
            n.start :duration=> 120, :as=> 1, :holdtime=> 10, :id=> '2.2.2.2', :peer=> '127.0.0.1'
         | 
| 108 | 
            -
             | 
| 109 | 
            -
            p 'HERE ABOUT TO SLEEP'
         | 
| 110 | 
            -
            sleep(20)
         | 
| 111 | 
            -
            p $c
         | 
| 112 | 
            -
            p "ABOUT TO SHUT DOWN EM"
         | 
| 113 | 
            -
            n.stop
         | 
| 114 | 
            -
             | 
| 115 | 
            -
             | 
| 116 | 
            -
            __END__
         | 
| @@ -1,33 +0,0 @@ | |
| 1 | 
            -
            require "test/unit"
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            require "bgp/path_attributes/tlvs/tlv"
         | 
| 4 | 
            -
            require 'bgp/path_attributes/attribute'
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            module BGP
         | 
| 7 | 
            -
              class MyAttr < Attr
         | 
| 8 | 
            -
                include TLV
         | 
| 9 | 
            -
                include STLV
         | 
| 10 | 
            -
                def initialize(value)
         | 
| 11 | 
            -
                  @flags, @type = OPTIONAL_NON_TRANSITIVE, 55
         | 
| 12 | 
            -
                  @value = value
         | 
| 13 | 
            -
                  @tlv_type=1
         | 
| 14 | 
            -
                  @stlv_type=2
         | 
| 15 | 
            -
                end
         | 
| 16 | 
            -
                def encode
         | 
| 17 | 
            -
                  super(@value)
         | 
| 18 | 
            -
                end
         | 
| 19 | 
            -
              end
         | 
| 20 | 
            -
            end
         | 
| 21 | 
            -
             | 
| 22 | 
            -
            class TestBgpPathAttributesTlvsTlv < Test::Unit::TestCase
         | 
| 23 | 
            -
              include BGP
         | 
| 24 | 
            -
              def test_1
         | 
| 25 | 
            -
                attr = MyAttr.new([0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef].pack('N*'))
         | 
| 26 | 
            -
                assert_equal('803716 0001 0012 02 10 deadbeef deadbeef deadbeef deadbeef'.split.join, attr.to_shex)
         | 
| 27 | 
            -
                assert_equal(2, attr.stlv_type)
         | 
| 28 | 
            -
                assert_equal(1, attr.tlv_type)
         | 
| 29 | 
            -
              end
         | 
| 30 | 
            -
            end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             |