Sha256: 7a418f7a4469b6cc5e9e4b778d02a8242718dd3dffd3e834151992ae1f31104f

Contents?: true

Size: 1.11 KB

Versions: 3

Compression:

Stored size: 1.11 KB

Contents

module DIY
  class MacLearner
    def initialize(default_host = :A)
      @default_host = default_host
      @table = {}
    end
    
    #
    def learn(packet, where)
      raise "Only receive :A or B for where argument" unless where == :A or where == :B
      #~ @table.delete( src(packet) )
      _learn( src(packet), where)
    end
    
    def _learn(mac, where)
      @table[mac] = where
    end
    
    # 报告包所在的端口 A or B
    # 如果包不在学习表内, 返回缺省端口(默认为A)
    def tellme(packet)
      src_p = src(packet)
      if @table.has_key? src_p
        where =  @table[src_p]
      else
        where = @default_host
        _learn( src(packet), where )
      end
      _learn( dst(packet), other(where) )
      where
    end
    
    def other(where)
      if where == :A
        return :B
      elsif where == :B
        return :A
      else
        raise "Argument error"
      end
    end
    
    
    private
    def  src(packet)
      Utils.src_mac(packet)
    end
    
    def dst(packet)
      Utils.dst_mac(packet)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
DIY-pcap-0.3.5 lib/diy/mac_learner.rb
DIY-pcap-0.3.4 lib/diy/mac_learner.rb
DIY-pcap-0.3.3 lib/diy/mac_learner.rb