1258945Sroberto#ifndef NETWORKING_H 2258945Sroberto#define NETWORKING_H 3258945Sroberto 4258945Sroberto#include <arpa/inet.h> 5258945Sroberto#include <netinet/in.h> 6258945Sroberto 7258945Sroberto#include <strings.h> 8258945Sroberto#include <errno.h> 9258945Sroberto#include <config.h> 10258945Sroberto#include <netdb.h> 11258945Sroberto#include <unistd.h> 12258945Sroberto#include <sys/types.h> 13258945Sroberto#include <sys/socket.h> 14258945Sroberto 15258945Sroberto#include <ntp_rfc2553.h> 16258945Sroberto#include <ntp_stdlib.h> 17258945Sroberto#include <ntp_machine.h> 18258945Sroberto#include <ntp_unixtime.h> 19258945Sroberto#include <ntp_fp.h> 20258945Sroberto#include <ntp.h> 21258945Sroberto 22258945Sroberto#include "crypto.h" 23258945Sroberto#include "log.h" 24258945Sroberto#include "sntp-opts.h" 25258945Sroberto#include "utilities.h" 26258945Sroberto 27258945Sroberto/* FIXME To be replaced by the constants in ntp.h */ 28258945Sroberto#define SERVER_UNUSEABLE -1 /* Skip server */ 29258945Sroberto#define PACKET_UNUSEABLE -2 /* Discard packet and try to get a useable packet again if not tried too often */ 30258945Sroberto#define SERVER_AUTH_FAIL -3 /* Authentication failed, act upon settings */ 31258945Sroberto#define KOD_DEMOBILIZE -4 /* KOD packet with code DENY or RSTR, stop all communication and save KOD information */ 32258945Sroberto#define KOD_RATE -5 /* KOD packet with code RATE, reduce poll intervall */ 33258945Sroberto#define BROADCAST_FAILED -6 34258945Sroberto 35280849Scy/* prototypes */ 36280849Scyint sendpkt(SOCKET rsock, sockaddr_u *dest, struct pkt *pkt, int len); 37280849Scyint recvdata(SOCKET rsock, sockaddr_u *sender, void *rdata, 38280849Scy int rdata_len); 39280849Scyint recvpkt(SOCKET rsock, struct pkt *rpkt, unsigned int rsize, 40280849Scy struct pkt *spkt); 41280849Scyint process_pkt(struct pkt *rpkt, sockaddr_u *sas, int pkt_len, 42280849Scy int mode, struct pkt *spkt, const char *func_name); 43258945Sroberto 44258945Sroberto/* Shortened peer structure. Not absolutely necessary yet */ 45258945Srobertostruct speer { 46258945Sroberto struct speer *next; 47258945Sroberto sockaddr_u srcadr; 48258945Sroberto u_char version; 49258945Sroberto u_char hmode; 50258945Sroberto u_char hpoll; 51258945Sroberto u_char minpoll; 52258945Sroberto u_char maxpoll; 53258945Sroberto u_int flags; 54258945Sroberto u_char num_events; 55258945Sroberto u_char ttl; 56258945Sroberto u_char leap; 57258945Sroberto u_char pmode; 58258945Sroberto u_char stratum; 59258945Sroberto u_char ppoll; 60258945Sroberto u_char precision; /* should be s_char */ 61258945Sroberto u_int32 refid; 62258945Sroberto l_fp reftime; 63258945Sroberto keyid_t keyid; 64258945Sroberto 65258945Sroberto#ifdef AUTOKEY 66258945Sroberto#define clear_to_zero opcode 67258945Sroberto u_int32 opcode; /* last request opcode */ 68258945Sroberto associd_t assoc; /* peer association ID */ 69258945Sroberto u_int32 crypto; /* peer status word */ 70258945Sroberto EVP_PKEY *pkey; /* public key */ 71258945Sroberto const EVP_MD *digest; /* message digest algorithm */ 72258945Sroberto char *subject; /* certificate subject name */ 73258945Sroberto char *issuer; /* certificate issuer name */ 74258945Sroberto struct cert_info *xinfo; /* issuer certificate */ 75258945Sroberto keyid_t pkeyid; /* previous key ID */ 76258945Sroberto keyid_t hcookie; /* host cookie */ 77258945Sroberto keyid_t pcookie; /* peer cookie */ 78258945Sroberto const struct pkey_info *ident_pkey; /* identity key */ 79258945Sroberto BIGNUM *iffval; /* identity challenge (IFF, GQ, MV) */ 80258945Sroberto const BIGNUM *grpkey; /* identity challenge key (GQ) */ 81258945Sroberto struct value cookval; /* receive cookie values */ 82258945Sroberto struct value recval; /* receive autokey values */ 83258945Sroberto struct exten *cmmd; /* extension pointer */ 84258945Sroberto u_long refresh; /* next refresh epoch */ 85258945Sroberto 86258945Sroberto /* 87258945Sroberto * Variables used by authenticated server 88258945Sroberto */ 89258945Sroberto keyid_t *keylist; /* session key ID list */ 90258945Sroberto int keynumber; /* current key number */ 91258945Sroberto struct value encrypt; /* send encrypt values */ 92258945Sroberto struct value sndval; /* send autokey values */ 93258945Sroberto#else /* !AUTOKEY follows */ 94258945Sroberto#define clear_to_zero status 95258945Sroberto#endif /* !AUTOKEY */ 96258945Sroberto 97258945Sroberto l_fp rec; /* receive time stamp */ 98258945Sroberto l_fp xmt; /* transmit time stamp */ 99258945Sroberto l_fp dst; /* destination timestamp */ 100258945Sroberto l_fp aorg; /* origin timestamp */ 101258945Sroberto l_fp borg; /* alternate origin timestamp */ 102258945Sroberto double offset; /* peer clock offset */ 103258945Sroberto double delay; /* peer roundtrip delay */ 104258945Sroberto}; 105258945Sroberto 106258945Sroberto 107258945Sroberto 108258945Sroberto 109258945Sroberto 110258945Sroberto#endif 111