public inbox for netdev@vger.kernel.org 
 help / color / mirror / Atom feed
From: Eric Dumazet <dada1@cosmosbay•com>
To: Varun Chandramohan <varunc@linux•vnet.ibm.com>
Cc: davem@davemloft•net, netdev@vger•kernel.org, kaber@trash•net,
	socketcan@hartkopp•net, shemminger@linux-foundation•org,
	krkumar2@in•ibm.com
Subject: Re: [PATCH 3/4 -rev1] Initilize and populate age field
Date: Thu, 26 Jul 2007 08:03:08 +0200	[thread overview]
Message-ID: <46A8391C.2020605@cosmosbay.com> (raw)
In-Reply-To: <20070726104554.cc95eedd.varunc@linux.vnet.ibm.com>

Varun Chandramohan a écrit :
> The age field is filled with the current time at the time of creation of the route. When the routes are dumped
> then the age value stored in the route structure is subtracted from the current time value and the difference is the age expressed in secs.
> 
> Signed-off-by: Varun Chandramohan <varunc@linux•vnet.ibm.com>
> ---
>  net/ipv4/fib_hash.c      |    3 +++
>  net/ipv4/fib_lookup.h    |    3 ++-
>  net/ipv4/fib_semantics.c |   16 +++++++++++++---
>  net/ipv4/fib_trie.c      |    1 +
>  4 files changed, 19 insertions(+), 4 deletions(-)
> 
> diff --git a/net/ipv4/fib_hash.c b/net/ipv4/fib_hash.c
> index 07e843a..faa7364 100644
> --- a/net/ipv4/fib_hash.c
> +++ b/net/ipv4/fib_hash.c
> @@ -448,6 +448,7 @@ static int fn_hash_insert(struct fib_tab
>  			fa->fa_info = fi;
>  			fa->fa_type = cfg->fc_type;
>  			fa->fa_scope = cfg->fc_scope;
> +			fa->fa_age = 0;
>  			state = fa->fa_state;
>  			fa->fa_state &= ~FA_S_ACCESSED;
>  			fib_hash_genid++;
> @@ -507,6 +508,7 @@ static int fn_hash_insert(struct fib_tab
>  	new_fa->fa_type = cfg->fc_type;
>  	new_fa->fa_scope = cfg->fc_scope;
>  	new_fa->fa_state = 0;
> +	new_fa->fa_age = 0;
>  
>  	/*
>  	 * Insert new entry to the list.
> @@ -697,6 +699,7 @@ fn_hash_dump_bucket(struct sk_buff *skb,
>  					  f->fn_key,
>  					  fz->fz_order,
>  					  fa->fa_tos,
> +					  &fa->fa_age,
>  					  fa->fa_info,
>  					  NLM_F_MULTI) < 0) {
>  				cb->args[4] = i;
> diff --git a/net/ipv4/fib_lookup.h b/net/ipv4/fib_lookup.h
> index eef9eec..c9145b5 100644
> --- a/net/ipv4/fib_lookup.h
> +++ b/net/ipv4/fib_lookup.h
> @@ -13,6 +13,7 @@ struct fib_alias {
>  	u8			fa_type;
>  	u8			fa_scope;
>  	u8			fa_state;
> +	time_t			fa_age;
>  };
>  
>  #define FA_S_ACCESSED	0x01
> @@ -27,7 +28,7 @@ extern struct fib_info *fib_create_info(
>  extern int fib_nh_match(struct fib_config *cfg, struct fib_info *fi);
>  extern int fib_dump_info(struct sk_buff *skb, u32 pid, u32 seq, int event,
>  			 u32 tb_id, u8 type, u8 scope, __be32 dst,
> -			 int dst_len, u8 tos, struct fib_info *fi,
> +			 int dst_len, u8 tos, time_t *age, struct fib_info *fi,
>  			 unsigned int);
>  extern void rtmsg_fib(int event, __be32 key, struct fib_alias *fa,
>  		      int dst_len, u32 tb_id, struct nl_info *info,
> diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
> index c434119..1822d92 100644
> --- a/net/ipv4/fib_semantics.c
> +++ b/net/ipv4/fib_semantics.c
> @@ -278,7 +278,8 @@ static inline size_t fib_nlmsg_size(stru
>  			 + nla_total_size(4) /* RTA_TABLE */
>  			 + nla_total_size(4) /* RTA_DST */
>  			 + nla_total_size(4) /* RTA_PRIORITY */
> -			 + nla_total_size(4); /* RTA_PREFSRC */
> +			 + nla_total_size(4) /* RTA_PREFSRC */
> +			 + nla_total_size(4); /*RTA_AGE*/

Not clear to me what happens on platforms where sizeof(time_t) is 8


>  
>  	/* space for nested metrics */
>  	payload += nla_total_size((RTAX_MAX * nla_total_size(4)));
> @@ -313,7 +314,7 @@ void rtmsg_fib(int event, __be32 key, st
>  
>  	err = fib_dump_info(skb, info->pid, seq, event, tb_id,
>  			    fa->fa_type, fa->fa_scope, key, dst_len,
> -			    fa->fa_tos, fa->fa_info, nlm_flags);
> +			    fa->fa_tos, &fa->fa_age, fa->fa_info, nlm_flags);
>  	if (err < 0) {
>  		/* -EMSGSIZE implies BUG in fib_nlmsg_size() */
>  		WARN_ON(err == -EMSGSIZE);
> @@ -940,11 +941,12 @@ __be32 __fib_res_prefsrc(struct fib_resu
>  }
>  
>  int fib_dump_info(struct sk_buff *skb, u32 pid, u32 seq, int event,
> -		  u32 tb_id, u8 type, u8 scope, __be32 dst, int dst_len, u8 tos,
> +		  u32 tb_id, u8 type, u8 scope, __be32 dst, int dst_len, u8 tos, time_t *age,
>  		  struct fib_info *fi, unsigned int flags)
>  {
>  	struct nlmsghdr *nlh;
>  	struct rtmsg *rtm;
> +	struct timeval tv;
>  
>  	nlh = nlmsg_put(skb, pid, seq, event, sizeof(*rtm), flags);
>  	if (nlh == NULL)
> @@ -985,6 +987,14 @@ int fib_dump_info(struct sk_buff *skb, u
>  			NLA_PUT_U32(skb, RTA_FLOW, fi->fib_nh[0].nh_tclassid);
>  #endif
>  	}
> +
> +	do_gettimeofday(&tv);
> +	if (!*age) {
> +		*age = timeval_to_sec(&tv);
> +		NLA_PUT_U32(skb, RTA_AGE, *age);

here, what happens if sizeof(time_t) is not 4 ?

> +	} else {
> +		NLA_PUT_U32(skb, RTA_AGE, timeval_to_sec(&tv) - *age);
> +	}
>  #ifdef CONFIG_IP_ROUTE_MULTIPATH
>  	if (fi->fib_nhs > 1) {
>  		struct rtnexthop *rtnh;
> diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
> index 30e332a..be2d1d6 100644
> --- a/net/ipv4/fib_trie.c
> +++ b/net/ipv4/fib_trie.c
> @@ -1884,6 +1884,7 @@ static int fn_trie_dump_fa(t_key key, in
>  				  xkey,
>  				  plen,
>  				  fa->fa_tos,
> +				  &fa->fa_age,
>  				  fa->fa_info, 0) < 0) {
>  			cb->args[4] = i;
>  			return -1;


  reply	other threads:[~2007-07-26  6:12 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-26  5:15 [PATCH 3/4 -rev1] Initilize and populate age field Varun Chandramohan
2007-07-26  6:03 ` Eric Dumazet [this message]
2007-07-26  6:27   ` Varun Chandramohan
2007-07-26  6:37     ` Eric Dumazet
2007-07-26  6:59       ` Varun Chandramohan
  -- strict thread matches above, loose matches on Subject: below --
2007-08-07  4:52 Varun Chandramohan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=46A8391C.2020605@cosmosbay.com \
    --to=dada1@cosmosbay$(echo .)com \
    --cc=davem@davemloft$(echo .)net \
    --cc=kaber@trash$(echo .)net \
    --cc=krkumar2@in$(echo .)ibm.com \
    --cc=netdev@vger$(echo .)kernel.org \
    --cc=shemminger@linux-foundation$(echo .)org \
    --cc=socketcan@hartkopp$(echo .)net \
    --cc=varunc@linux$(echo .)vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox