From 54de866e97c7ef7824b620bc4d00eda2d93e5117 Mon Sep 17 00:00:00 2001 From: Brian Candler Date: Fri, 29 Apr 2011 16:34:04 +0100 Subject: [PATCH] cacheinfo structs --- lib/netlink/message.rb | 15 +++++++++++++-- lib/netlink/rtsocket.rb | 6 +++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/netlink/message.rb b/lib/netlink/message.rb index a34a460..2f86c0a 100644 --- a/lib/netlink/message.rb +++ b/lib/netlink/message.rb @@ -15,6 +15,9 @@ module Netlink :tx_window_errors, :rx_compressed, :tx_compressed + RTACacheInfo = Struct.new :clntref, :lastuse, :expires, :error, :used, :id, :ts, :tsage + IFACacheInfo = Struct.new :prefered, :valid, :cstamp, :tstamp + # Base class for Netlink messages class Message # Map of numeric message type code => message class @@ -44,6 +47,14 @@ module Netlink :pack => lambda { |val| val.to_a.pack("Q23") }, :unpack => lambda { |str| LinkStats.new(*(str.unpack("Q23"))) }, }, + :rta_cacheinfo => { + :pack => lambda { |val| val.to_a.pack("L*") }, + :unpack => lambda { |str| RTACacheInfo.new(*(str.unpack("L*"))) }, + }, + :ifa_cacheinfo => { + :pack => lambda { |val| val.to_a.pack("L*") }, + :unpack => lambda { |str| IFACacheInfo.new(*(str.unpack("L*"))) }, + }, :l3addr => { :pack => lambda { |val| val.hton }, :unpack => lambda { |val| IPAddr.new_ntoh(val) }, @@ -270,7 +281,7 @@ module Netlink rtattr :label, IFA_LABEL, :cstring rtattr :broadcast, IFA_BROADCAST, :l3addr rtattr :anycast, IFA_ANYCAST, :l3addr - rtattr :cacheinfo, IFA_CACHEINFO + rtattr :cacheinfo, IFA_CACHEINFO, :ifa_cacheinfo rtattr :multicast, IFA_MULTICAST, :l3addr end @@ -295,7 +306,7 @@ module Netlink rtattr :metrics, RTA_METRICS rtattr :multipath, RTA_MULTIPATH rtattr :flow, RTA_FLOW - rtattr :cacheinfo, RTA_CACHEINFO + rtattr :cacheinfo, RTA_CACHEINFO, :rta_cacheinfo rtattr :table2, RTA_TABLE, :uint32 # NOTE: table in two places! end end diff --git a/lib/netlink/rtsocket.rb b/lib/netlink/rtsocket.rb index 598e0b2..c5ddcbf 100644 --- a/lib/netlink/rtsocket.rb +++ b/lib/netlink/rtsocket.rb @@ -93,14 +93,14 @@ if __FILE__ == $0 addrs = nl.addrs_by_index(:family=>Socket::AF_UNSPEC) routes = nl.routes_by_oif(:family=>Socket::AF_UNSPEC) links.each do |link| - #p link + p link if $VERBOSE puts "#{link.ifname}" addrs[link.index].each do |addr| - #p addr + p addr if $VERBOSE puts " family=#{addr.family} #{addr.address}/#{addr.prefixlen} label=#{addr.label}" end routes[link.index].each do |route| - #p route + p route if $VERBOSE puts " >> family=#{route.family} #{route.dst}/#{route.dst_len} gw=#{route.gateway}" end end