1290001Sglebius#ifndef NETWORKING_H 2290001Sglebius#define NETWORKING_H 3290001Sglebius 4290001Sglebius#include <arpa/inet.h> 5290001Sglebius#include <netinet/in.h> 6290001Sglebius 7290001Sglebius#include <strings.h> 8290001Sglebius#include <errno.h> 9290001Sglebius#include <config.h> 10290001Sglebius#include <netdb.h> 11290001Sglebius#include <unistd.h> 12290001Sglebius#include <sys/types.h> 13290001Sglebius#include <sys/socket.h> 14290001Sglebius 15290001Sglebius#include <ntp_rfc2553.h> 16290001Sglebius#include <ntp_stdlib.h> 17290001Sglebius#include <ntp_machine.h> 18290001Sglebius#include <ntp_unixtime.h> 19290001Sglebius#include <ntp_fp.h> 20290001Sglebius#include <ntp.h> 21290001Sglebius 22290001Sglebius#include "crypto.h" 23290001Sglebius#include "log.h" 24290001Sglebius#include "sntp-opts.h" 25290001Sglebius#include "utilities.h" 26290001Sglebius 27290001Sglebius/* FIXME To be replaced by the constants in ntp.h */ 28290001Sglebius#define SERVER_UNUSEABLE -1 /* Skip server */ 29290001Sglebius#define PACKET_UNUSEABLE -2 /* Discard packet and try to get a useable packet again if not tried too often */ 30290001Sglebius#define SERVER_AUTH_FAIL -3 /* Authentication failed, act upon settings */ 31290001Sglebius#define KOD_DEMOBILIZE -4 /* KOD packet with code DENY or RSTR, stop all communication and save KOD information */ 32290001Sglebius#define KOD_RATE -5 /* KOD packet with code RATE, reduce poll intervall */ 33290001Sglebius#define BROADCAST_FAILED -6 34290001Sglebius 35290001Sglebius/* prototypes */ 36290001Sglebiusint sendpkt(SOCKET rsock, sockaddr_u *dest, struct pkt *pkt, int len); 37290001Sglebiusint recvdata(SOCKET rsock, sockaddr_u *sender, void *rdata, 38290001Sglebius int rdata_len); 39290001Sglebiusint recvpkt(SOCKET rsock, struct pkt *rpkt, unsigned int rsize, 40290001Sglebius struct pkt *spkt); 41290001Sglebiusint process_pkt(struct pkt *rpkt, sockaddr_u *sas, int pkt_len, 42290001Sglebius int mode, struct pkt *spkt, const char *func_name); 43290001Sglebius 44290001Sglebius/* Shortened peer structure. Not absolutely necessary yet */ 45290001Sglebiusstruct speer { 46290001Sglebius struct speer *next; 47290001Sglebius sockaddr_u srcadr; 48290001Sglebius u_char version; 49290001Sglebius u_char hmode; 50290001Sglebius u_char hpoll; 51290001Sglebius u_char minpoll; 52290001Sglebius u_char maxpoll; 53290001Sglebius u_int flags; 54290001Sglebius u_char num_events; 55290001Sglebius u_char ttl; 56290001Sglebius u_char leap; 57290001Sglebius u_char pmode; 58290001Sglebius u_char stratum; 59290001Sglebius u_char ppoll; 60290001Sglebius u_char precision; /* should be s_char */ 61290001Sglebius u_int32 refid; 62290001Sglebius l_fp reftime; 63290001Sglebius keyid_t keyid; 64290001Sglebius 65290001Sglebius#ifdef AUTOKEY 66290001Sglebius#define clear_to_zero opcode 67290001Sglebius u_int32 opcode; /* last request opcode */ 68290001Sglebius associd_t assoc; /* peer association ID */ 69290001Sglebius u_int32 crypto; /* peer status word */ 70290001Sglebius EVP_PKEY *pkey; /* public key */ 71290001Sglebius const EVP_MD *digest; /* message digest algorithm */ 72290001Sglebius char *subject; /* certificate subject name */ 73290001Sglebius char *issuer; /* certificate issuer name */ 74290001Sglebius struct cert_info *xinfo; /* issuer certificate */ 75290001Sglebius keyid_t pkeyid; /* previous key ID */ 76290001Sglebius keyid_t hcookie; /* host cookie */ 77290001Sglebius keyid_t pcookie; /* peer cookie */ 78290001Sglebius const struct pkey_info *ident_pkey; /* identity key */ 79290001Sglebius BIGNUM *iffval; /* identity challenge (IFF, GQ, MV) */ 80290001Sglebius const BIGNUM *grpkey; /* identity challenge key (GQ) */ 81290001Sglebius struct value cookval; /* receive cookie values */ 82290001Sglebius struct value recval; /* receive autokey values */ 83290001Sglebius struct exten *cmmd; /* extension pointer */ 84290001Sglebius u_long refresh; /* next refresh epoch */ 85290001Sglebius 86290001Sglebius /* 87290001Sglebius * Variables used by authenticated server 88290001Sglebius */ 89290001Sglebius keyid_t *keylist; /* session key ID list */ 90290001Sglebius int keynumber; /* current key number */ 91290001Sglebius struct value encrypt; /* send encrypt values */ 92290001Sglebius struct value sndval; /* send autokey values */ 93290001Sglebius#else /* !AUTOKEY follows */ 94290001Sglebius#define clear_to_zero status 95290001Sglebius#endif /* !AUTOKEY */ 96290001Sglebius 97290001Sglebius l_fp rec; /* receive time stamp */ 98290001Sglebius l_fp xmt; /* transmit time stamp */ 99290001Sglebius l_fp dst; /* destination timestamp */ 100290001Sglebius l_fp aorg; /* origin timestamp */ 101290001Sglebius l_fp borg; /* alternate origin timestamp */ 102290001Sglebius double offset; /* peer clock offset */ 103290001Sglebius double delay; /* peer roundtrip delay */ 104290001Sglebius}; 105290001Sglebius 106290001Sglebius 107290001Sglebius 108290001Sglebius 109290001Sglebius 110290001Sglebius#endif 111