From bc9d299133066e0ebcd1de5e25cfd74320eb5ae0 Mon Sep 17 00:00:00 2001 From: Brooks Davis Date: Fri, 25 Feb 2005 19:46:41 +0000 Subject: [PATCH] Change the definition of struct if_data's member ifi_epoch from wall clock time to uptime because wall clock time may go backwards. This is a change in the API which will impact SNMP agents who are using ifi_epoch to set RFC2233's ifCounterDiscontinuityTime. None are know to exist today. This will not impact applications that are using the tuple to verify interface uniqueness except that it eliminates a race which could lead to a false assumption of uniqueness. Because this is a behavior change, bump __FreeBSD_version. Discussed with: re (jhb, scottl) MFC after: 3 days Pointed out by: pkh (way back at EuroBSDCon) Pointy hat: brooks --- UPDATING | 8 ++++++++ share/man/man9/ifnet.9 | 2 +- sys/net/if.c | 2 +- sys/net/if.h | 2 +- sys/sys/param.h | 2 +- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/UPDATING b/UPDATING index d7bf823252f5..daa6f78f9701 100644 --- a/UPDATING +++ b/UPDATING @@ -21,6 +21,14 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 6.x IS SLOW: developers choose to disable these features on build machines to maximize performance. +20050225: + The ifi_epoch member of struct if_data has been changed to + contain the uptime at which the interface was created or the + statistics zeroed rather then the wall clock time because + wallclock time may go backwards. This should have no impact + unless an snmp implementation is using this value (I know of + none at this point.) + 20050223: The layout of struct image_params has changed. You have to recompile all compatibility modules (linux, svr4, etc) for use diff --git a/share/man/man9/ifnet.9 b/share/man/man9/ifnet.9 index 86c972414d3b..9eeb34ba9b58 100644 --- a/share/man/man9/ifnet.9 +++ b/share/man/man9/ifnet.9 @@ -729,7 +729,7 @@ the current value of .Va if_capenable . .It ifi_epoch .Pq Vt time_t -The time the interface was attached or the last time the statistics +The system uptime when interface was attached or the statistics below were reset. This is intended to be used to set the SNMP variable .Va ifCounterDiscontinuityTime . diff --git a/sys/net/if.c b/sys/net/if.c index 82d078e5d24d..d2579190b14f 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -392,7 +392,7 @@ if_attach(struct ifnet *ifp) TAILQ_INIT(&ifp->if_multiaddrs); knlist_init(&ifp->if_klist, NULL); getmicrotime(&ifp->if_lastchange); - ifp->if_data.ifi_epoch = time_second; + ifp->if_data.ifi_epoch = time_uptime; #ifdef MAC mac_init_ifnet(ifp); diff --git a/sys/net/if.h b/sys/net/if.h index 0fa63d7a8add..b4d5bdbed3b9 100644 --- a/sys/net/if.h +++ b/sys/net/if.h @@ -102,7 +102,7 @@ struct if_data { u_long ifi_iqdrops; /* dropped on input, this interface */ u_long ifi_noproto; /* destined for unsupported protocol */ u_long ifi_hwassist; /* HW offload capabilities */ - time_t ifi_epoch; /* time of attach or stat reset */ + time_t ifi_epoch; /* uptime at attach or stat reset */ #ifdef __alpha__ u_int ifi_timepad; /* time_t is int, not long on alpha */ #endif diff --git a/sys/sys/param.h b/sys/sys/param.h index faa401bfbb54..59d10df7228f 100644 --- a/sys/sys/param.h +++ b/sys/sys/param.h @@ -57,7 +57,7 @@ * is created, otherwise 1. */ #undef __FreeBSD_version -#define __FreeBSD_version 600014 /* Master, propagated to newvers */ +#define __FreeBSD_version 600015 /* Master, propagated to newvers */ #ifndef LOCORE #include