@ -1,4 +1,4 @@
/* $OpenBSD: ntp_msg.c,v 1.16 2006/07/01 18:52:46 otto Exp $ */
/* $OpenBSD: ntp_msg.c,v 1.17 2007/05/26 21:20:35 henning Exp $ */
/*
* Copyright ( c ) 2003 , 2004 Henning Brauer < henning @ openbsd . org >
@ -34,25 +34,7 @@ ntp_getmsg(struct sockaddr *sa, char *p, ssize_t len, struct ntp_msg *msg)
return ( - 1 ) ;
}
# define copyin(f,p) memcpy(&(f), (p), sizeof(f)); (p) += sizeof(f)
copyin ( msg - > status , p ) ;
copyin ( msg - > stratum , p ) ;
copyin ( msg - > ppoll , p ) ;
copyin ( msg - > precision , p ) ;
copyin ( msg - > rootdelay . int_parts , p ) ;
copyin ( msg - > rootdelay . fractions , p ) ;
copyin ( msg - > dispersion . int_parts , p ) ;
copyin ( msg - > dispersion . fractions , p ) ;
copyin ( msg - > refid , p ) ;
copyin ( msg - > reftime . int_partl , p ) ;
copyin ( msg - > reftime . fractionl , p ) ;
copyin ( msg - > orgtime . int_partl , p ) ;
copyin ( msg - > orgtime . fractionl , p ) ;
copyin ( msg - > rectime . int_partl , p ) ;
copyin ( msg - > rectime . fractionl , p ) ;
copyin ( msg - > xmttime . int_partl , p ) ;
copyin ( msg - > xmttime . fractionl , p ) ;
memcpy ( msg , p , sizeof ( * msg ) ) ;
return ( 0 ) ;
}
@ -61,36 +43,16 @@ int
ntp_sendmsg ( int fd , struct sockaddr * sa , struct ntp_msg * msg , ssize_t len ,
int auth )
{
char buf [ NTP_MSGSIZE ] ;
char * p = buf ;
socklen_t sa_len ;
# define copyout(p,f) memcpy((p), &(f), sizeof(f)); p += sizeof(f)
copyout ( p , msg - > status ) ;
copyout ( p , msg - > stratum ) ;
copyout ( p , msg - > ppoll ) ;
copyout ( p , msg - > precision ) ;
copyout ( p , msg - > rootdelay . int_parts ) ;
copyout ( p , msg - > rootdelay . fractions ) ;
copyout ( p , msg - > dispersion . int_parts ) ;
copyout ( p , msg - > dispersion . fractions ) ;
copyout ( p , msg - > refid ) ;
copyout ( p , msg - > reftime . int_partl ) ;
copyout ( p , msg - > reftime . fractionl ) ;
copyout ( p , msg - > orgtime . int_partl ) ;
copyout ( p , msg - > orgtime . fractionl ) ;
copyout ( p , msg - > rectime . int_partl ) ;
copyout ( p , msg - > rectime . fractionl ) ;
copyout ( p , msg - > xmttime . int_partl ) ;
copyout ( p , msg - > xmttime . fractionl ) ;
ssize_t n ;
if ( sa ! = NULL )
sa_len = SA_LEN ( sa ) ;
else
sa_len = 0 ;
if ( sendto ( fd , & buf , len , 0 , sa , sa_len ) ! = len ) {
n = sendto ( fd , msg , sizeof ( * msg ) , 0 , sa , sa_len ) ;
if ( n = = - 1 ) {
if ( errno = = ENOBUFS | | errno = = EHOSTUNREACH | |
errno = = ENETDOWN | | errno = = EHOSTDOWN ) {
/* logging is futile */
@ -100,5 +62,11 @@ ntp_sendmsg(int fd, struct sockaddr *sa, struct ntp_msg *msg, ssize_t len,
return ( - 1 ) ;
}
if ( n ! = sizeof ( * msg ) ) {
log_warnx ( " ntp_sendmsg: only %ld of %ld bytes sent " , n ,
sizeof ( * msg ) ) ;
return ( - 1 ) ;
}
return ( 0 ) ;
}