1/* $NetBSD: networking.h,v 1.9 2020/05/25 20:47:32 christos Exp $ */ 2 3#ifndef NETWORKING_H 4#define NETWORKING_H 5 6#include <arpa/inet.h> 7#include <netinet/in.h> 8 9#include <strings.h> 10#include <errno.h> 11#include <config.h> 12#include <netdb.h> 13#include <unistd.h> 14#include <sys/types.h> 15#include <sys/socket.h> 16 17#include <ntp_rfc2553.h> 18#include <ntp_stdlib.h> 19#include <ntp_machine.h> 20#include <ntp_unixtime.h> 21#include <ntp_fp.h> 22#include <ntp.h> 23 24#include "crypto.h" 25#include "log.h" 26#include "sntp-opts.h" 27#include "utilities.h" 28 29/* FIXME To be replaced by the constants in ntp.h */ 30#define SERVER_UNUSEABLE -1 /* Skip server */ 31#define PACKET_UNUSEABLE -2 /* Discard packet and try to get a useable packet again if not tried too often */ 32#define SERVER_AUTH_FAIL -3 /* Authentication failed, act upon settings */ 33#define KOD_DEMOBILIZE -4 /* KOD packet with code DENY or RSTR, stop all communication and save KOD information */ 34#define KOD_RATE -5 /* KOD packet with code RATE, reduce poll intervall */ 35#define BROADCAST_FAILED -6 36 37/* prototypes */ 38int sendpkt(SOCKET rsock, sockaddr_u *dest, struct pkt *pkt, int len); 39int recvdata(SOCKET rsock, sockaddr_u *sender, void *rdata, 40 int rdata_len); 41int recvpkt(SOCKET rsock, struct pkt *rpkt, unsigned int rsize, 42 struct pkt *spkt); 43int process_pkt(struct pkt *rpkt, sockaddr_u *sas, int pkt_len, 44 int mode, struct pkt *spkt, const char *func_name); 45 46/* Shortened peer structure. Not absolutely necessary yet */ 47struct speer { 48 struct speer *next; 49 sockaddr_u srcadr; 50 u_char version; 51 u_char hmode; 52 u_char hpoll; 53 u_char minpoll; 54 u_char maxpoll; 55 u_int flags; 56 u_char num_events; 57 u_char ttl; 58 u_char leap; 59 u_char pmode; 60 u_char stratum; 61 u_char ppoll; 62 u_char precision; /* should be s_char */ 63 u_int32 refid; 64 l_fp reftime; 65 keyid_t keyid; 66 67#ifdef AUTOKEY 68#define clear_to_zero opcode 69 u_int32 opcode; /* last request opcode */ 70 associd_t assoc; /* peer association ID */ 71 u_int32 crypto; /* peer status word */ 72 EVP_PKEY *pkey; /* public key */ 73 const EVP_MD *digest; /* message digest algorithm */ 74 char *subject; /* certificate subject name */ 75 char *issuer; /* certificate issuer name */ 76 struct cert_info *xinfo; /* issuer certificate */ 77 keyid_t pkeyid; /* previous key ID */ 78 keyid_t hcookie; /* host cookie */ 79 keyid_t pcookie; /* peer cookie */ 80 const struct pkey_info *ident_pkey; /* identity key */ 81 BIGNUM *iffval; /* identity challenge (IFF, GQ, MV) */ 82 const BIGNUM *grpkey; /* identity challenge key (GQ) */ 83 struct value cookval; /* receive cookie values */ 84 struct value recval; /* receive autokey values */ 85 struct exten *cmmd; /* extension pointer */ 86 u_long refresh; /* next refresh epoch */ 87 88 /* 89 * Variables used by authenticated server 90 */ 91 keyid_t *keylist; /* session key ID list */ 92 int keynumber; /* current key number */ 93 struct value encrypt; /* send encrypt values */ 94 struct value sndval; /* send autokey values */ 95#else /* !AUTOKEY follows */ 96#define clear_to_zero status 97#endif /* !AUTOKEY */ 98 99 l_fp rec; /* receive time stamp */ 100 l_fp xmt; /* transmit time stamp */ 101 l_fp dst; /* destination timestamp */ 102 l_fp aorg; /* origin timestamp */ 103 l_fp borg; /* alternate origin timestamp */ 104 double offset; /* peer clock offset */ 105 double delay; /* peer roundtrip delay */ 106}; 107 108 109 110 111 112#endif 113