• linux 下使rdate命令支持ipv6 ntp server 同步时间


    如果使用linux 下,busybox自带的rdate命令 去ipv6 的ntp server 同步时间的话,会提示invalid argument ;无效参数。

    那么现在下载rdate的源码并对其进行修改。源码地址 http://download.csdn.net/detail/wanhl1990/6823025 

    修改内容如下,下载源码后解压,进入解压后的文件,修改src/ntp.c 的sync_ntp() 函数的内容。

           

           struct ntp_data data;
           struct sockaddr_in6 *peer1 ;    // define peer1 +++;
    
            deadline = current_time(JAN_1970) + delay;
            *offset = 0.0;
            *error = NTP_INSANITY;
    
            //change peer to _in6 , ;
           peer1 = (struct sockaddr_in6 *)peer ;//++++++
    
            if (connect(fd, peer1, SA_LEN(peer1)) < 0) { //modify
    IPv6的结构体sockaddr_in6比sockaddr_in的结构要大,可以存储来自IPv4的连接的ip等信息 。所以按照这个方式来进行修改。

    修改完成后,对整个rdate文件进行编译,得到rdate可执行命令后,就可以安装帮助信息中的操作方法进行信息同步了。例如:rdate -n 65.55.56.206. 或者rdate -n 2001:288:5400::2.

    执行完成后,会得到当前时间与服务器同步来的时间之间的差值adjustment。使用shell脚本将该差值adjustment获取后,进行时间调整。
    out=`exec /sur/bin/rdate -n 2001:288:5400::2 -v -p`
    res=$?
    
    adjustment=`echo $out | grep adjust | sed -e 's/^.*local clock by //g' | sed -e 's/.[0-9]* seconds.*$//g' | sed -e 's/-0/0/'`

    或者这个adjustment后,使用时间戳进行时间设置即达到时间同步的作用了。


    给个例子:

    static int sntp_restart_adjustment(int adjustment)
    {
        struct timeval tv_old = {}, tv_new = {};
    
        /* Get current system's time. */
        if (gettimeofday(&tv_old, NULL) < 0)
        {
            printf ("gettimeofday() failed
    ");
            return 1 ;
        }
       
        /* Add the adjustment (measured in seconds) to the current system's time. */
        tv_new.tv_sec = tv_old.tv_sec + adjustment;
    
        /* Change system's time with the newly adjusted time. */
        if (settimeofday(&tv_new, NULL) < 0) 
        {
            printf ("settimeofday() failed
    ");
            return 1 ;
        }
            
        system("/usr/sbin/rtc %s", "up2chip");
    
        return 0;
    }


    哦了!这就是在做ipv6支持sntp所做的工作。仅供参考,欢迎留言

  • 相关阅读:
    Go语言之依赖管理
    Go之NSQ
    Redis相关
    Go语言操作mongoDB
    Go语言操作Redis
    mysql-5.7.22-winx64.zip 安装
    LL(1)文法系列(二)预测分析表
    LL(1)文法系列(三)预测分析程序
    LL(1)文法系列(一)first集和follow集
    算符优先系列之(二)算符优先关系表
  • 原文地址:https://www.cnblogs.com/wanhl/p/3510313.html
Copyright © 2020-2023  润新知