[lvs-users] for help

张松涛 zst_007139 at 163.com
Tue Nov 22 08:30:03 GMT 2011


我编写了一个sr(最短响应时间)负载均衡器调度算法,编译后出现如下错误
    错误:隐式声明函数 ‘time’
请求帮助,谢谢!
代码如下:
/*
 * IPVS:        Shortest Response Time scheduling module
 */
 
#include <linux/module.h>
#include <linux/kernel.h>
 
#include <net/ip_vs.h>
#include <linux/time.h>
 
static int
ip_vs_sr_init_svc(struct ip_vs_service *svc)
{
        return 0;
}
 
 
static int
ip_vs_sr_done_svc(struct ip_vs_service *svc)
{
        return 0;
}
 
 
static int
ip_vs_sr_update_svc(struct ip_vs_service *svc)
{
        return 0;
}
 
 
static inline unsigned int
ip_vs_sr_dest_overhead(struct ip_vs_dest *dest)
{
 
 
  return (atomic_read(&dest->activeconns) << 8) +
                atomic_read(&dest->inactconns) + 1;
  
}
 
 
 
/*
 *      Shortest Response Time scheduling
 */
static struct ip_vs_dest *
ip_vs_sr_schedule(struct ip_vs_service *svc, const struct sk_buff *skb)
{
        struct ip_vs_dest *dest, *least;
        unsigned int loh, doh;
       
        IP_VS_DBG(6, "ip_vs_sr_schedule(): Scheduling...\n");
 
 
        list_for_each_entry(dest, &svc->destinations, n_list) {
          if (!(dest->flags & IP_VS_DEST_F_OVERLOAD) &&
              atomic_read(&dest->weight) > 0) {
            least = dest;
            loh = ip_vs_sr_dest_overhead(least);
            goto nextstage;
          }
        }
        return NULL;
 
        /*
         *    Find the destination with the least load.
         */
        nextstage:
        list_for_each_entry_continue(dest, &svc->destinations, n_list) {
          if (dest->flags & IP_VS_DEST_F_OVERLOAD)
            continue;
          doh = ip_vs_sr_dest_overhead(dest);
         
          time_t lasttime;
          time_t nowtime;
          time_t rt;
 
          int refcnt1;
          int refcnt2;
          int refcnt3;
 
          time(&lasttime);
          refcnt1 = atomic_read(&dest->refcnt);
          while(1){
          time(&nowtime);
          if(nowtime - lasttime == 10*60)
          {
           refcnt2 = atomic_read(&dest->refcnt);
           break;
          }
          }
           refcnt3 = refcnt2 - refcnt1;
           rt = 10*60/(refcnt3 - atomic_read(&dest->activeconns) - atomic_read(&dest-
>inactconns));
         
          if (loh * rt >
              doh * rt) {
            least = dest;
            loh = doh;
          }
        }
 
        IP_VS_DBG(6, "SR: server %u.%u.%u.%u:%u "
                  "activeconns %d refcnt %d weight %d overhead %d\n",
                  NIPQUAD(least->addr), ntohs(least->port),
                  atomic_read(&least->activeconns),
                  atomic_read(&least->refcnt),
                  atomic_read(&least->weight), loh);
 
        return least;
}
 
 
 
static struct ip_vs_scheduler ip_vs_sr_scheduler =
{
        .name =                 "sr",
        .refcnt =               ATOMIC_INIT(0),
        .module =               THIS_MODULE,
        .init_service =         ip_vs_sr_init_svc,
        .done_service =         ip_vs_sr_done_svc,
        .update_service =       ip_vs_sr_update_svc,
        .schedule =             ip_vs_sr_schedule,
};
 
 
static int __init ip_vs_sr_init(void)
{
        INIT_LIST_HEAD(&ip_vs_sr_scheduler.n_list);
        return register_ip_vs_scheduler(&ip_vs_sr_scheduler);
}
 
static void __exit ip_vs_sr_cleanup(void)
{
        unregister_ip_vs_scheduler(&ip_vs_sr_scheduler);
}
 
module_init(ip_vs_sr_init);
module_exit(ip_vs_sr_cleanup);
MODULE_LICENSE("GPL");


More information about the lvs-users mailing list