Module: Linux::Ip::Route

Defined in:
lib/linux/ip/route.rb

Defined Under Namespace

Classes: IpRoute

Class Method Summary collapse

Class Method Details

.parseObject



99
100
101
# File 'lib/linux/ip/route.rb', line 99

def self.parse
  parse_from_lines(IO.popen("ip -4 route show").read.lines.to_a + IO.popen("ip -6 route show").read.lines.to_a)
end

.parse_from_lines(lines) ⇒ Object

23: br202: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default

link/ether d0:27:88:d1:01:6d brd ff:ff:ff:ff:ff:ff
inet 10.10.103.11/22 brd 10.10.103.255 scope global br202
   valid_lft forever preferred_lft forever
inet6 fe80::84c6:95ff:feb7:d76d/64 scope link
   valid_lft forever preferred_lft forever


66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/linux/ip/route.rb', line 66

def self.parse_from_lines(lines)
  ip_route = IpRoute.new
  iface = nil
  lines.each do |line|
      line = line.strip.chomp
      dev_m = /^([0-9a-fA-F\.\:\/]+)\s+dev\s+([a-z0-9\.]+)\s*(.*)$/.match(line)
      if dev_m
        #puts "Dev #{dev_m[2]} -> #{dev_m.inspect}"
        ip_route.add_dev(dev_m[2], dev_m[1], dev_m[3])
      else
        via_m = /^([0-9a-fA-F\.\:\/]+|default)\s+via\s+([a-z0-9\.\:]+)\s+dev\s+([a-z0-9\.]+)\s*(.*)$/.match(line)
        if via_m
          #puts "Via #{via_m[3]} -> #{via_m.inspect}"
          ip_route.add_via(via_m[3], via_m[1], via_m[2], via_m[4])
        else
          direct_m = /^(blackhole)\s+([0-9a-fA-F\.\:\/]+)$/.match(line)
          if direct_m
            ip_route.add_via(direct_m[1], direct_m[2], nil, "")
          else
            # unreachable 2a04:2f80::/29 dev lo  metric 1024  error -101
            unreachable_m = /^(unreachable)\s+([0-9a-fA-F\.\:\/]+)\s+dev\s+([a-z0-9\.]+)\s+(.*)$/.match(line)
            if unreachable_m
              ip_route.add_dev(unreachable_m[3], unreachable_m[2], unreachable_m[1]+" "+unreachable_m[4])
            else
              puts "> #{line}"
            end
          end
        end
      end
  end
  ip_route
end