routes.get

This commit is contained in:
Brian Candler
2011-05-03 17:17:15 +01:00
parent bdd75c611c
commit d13662268b
3 changed files with 14 additions and 2 deletions

View File

@@ -22,3 +22,6 @@ pp rt.routes.list(:family=>Socket::AF_INET, :table=>Netlink::RT_TABLE_MAIN).to_a
puts "\nDefault route is probably:"
pp rt.routes.list(:family=>Socket::AF_INET, :table=>Netlink::RT_TABLE_MAIN).
min_by { |route| route.dst_len }
puts "\nTraffic to 192.168.1.1 goes out via:"
puts rt.ifname(rt.routes.get(:dst=>"192.168.1.1").oif)

View File

@@ -128,10 +128,10 @@ module Netlink
# an exception if any error message is returned, or on timeout.
#
# (Compare: rtnl_talk in lib/libnetlink.c, with answer=NULL)
def cmd(type, msg, flags=NLM_F_REQUEST, timeout=@timeout, sockaddr=SOCKADDR_DEFAULT)
def cmd(type, msg, flags=NLM_F_REQUEST, resp_type=NLMSG_ERROR, timeout=@timeout, sockaddr=SOCKADDR_DEFAULT)
send_request(type, msg, flags|NLM_F_ACK, sockaddr)
receive_responses(true, timeout) do |type,msg|
return if type == NLMSG_ERROR
return msg if type == resp_type
false
end
end

View File

@@ -139,6 +139,15 @@ module Netlink
iproute_modify(RTM_DELROUTE, 0, opt)
end
# Get route matching given criteria
def get(msg)
msg = RT.new(msg)
raise "Missing :dst" unless msg.dst
msg.iif = index(msg.iif) if msg.iif.is_a?(String)
msg.oif = index(msg.oif) if msg.oif.is_a?(String)
@rtsocket.cmd RTM_GETROUTE, msg, NLM_F_REQUEST, RTM_NEWROUTE
end
def iproute_modify(code, flags, msg) #:nodoc:
msg = RT.new(msg)