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