47
58
{ NO_REQUEST, NOAUTH, 0, 0 }
50
static void req_ack P((struct sockaddr_in *, struct interface *, struct req_pkt *, int));
51
static char * prepare_pkt P((struct sockaddr_in *, struct interface *, struct req_pkt *, u_int));
61
static void req_ack P((struct sockaddr_storage *, struct interface *, struct req_pkt *, int));
62
static char * prepare_pkt P((struct sockaddr_storage *, struct interface *, struct req_pkt *, u_int));
52
63
static char * more_pkt P((void));
53
64
static void flush_pkt P((void));
54
static void peer_list P((struct sockaddr_in *, struct interface *, struct req_pkt *));
55
static void peer_list_sum P((struct sockaddr_in *, struct interface *, struct req_pkt *));
56
static void peer_info P((struct sockaddr_in *, struct interface *, struct req_pkt *));
57
static void peer_stats P((struct sockaddr_in *, struct interface *, struct req_pkt *));
58
static void sys_info P((struct sockaddr_in *, struct interface *, struct req_pkt *));
59
static void sys_stats P((struct sockaddr_in *, struct interface *, struct req_pkt *));
60
static void mem_stats P((struct sockaddr_in *, struct interface *, struct req_pkt *));
61
static void io_stats P((struct sockaddr_in *, struct interface *, struct req_pkt *));
62
static void timer_stats P((struct sockaddr_in *, struct interface *, struct req_pkt *));
63
static void loop_info P((struct sockaddr_in *, struct interface *, struct req_pkt *));
64
static void dns_a P((struct sockaddr_in *, struct interface *, struct req_pkt *));
65
static void do_conf P((struct sockaddr_in *, struct interface *, struct req_pkt *));
66
static void do_unconf P((struct sockaddr_in *, struct interface *, struct req_pkt *));
67
static void set_sys_flag P((struct sockaddr_in *, struct interface *, struct req_pkt *));
68
static void clr_sys_flag P((struct sockaddr_in *, struct interface *, struct req_pkt *));
69
static void setclr_flags P((struct sockaddr_in *, struct interface *, struct req_pkt *, u_long));
70
static void list_restrict P((struct sockaddr_in *, struct interface *, struct req_pkt *));
71
static void do_resaddflags P((struct sockaddr_in *, struct interface *, struct req_pkt *));
72
static void do_ressubflags P((struct sockaddr_in *, struct interface *, struct req_pkt *));
73
static void do_unrestrict P((struct sockaddr_in *, struct interface *, struct req_pkt *));
74
static void do_restrict P((struct sockaddr_in *, struct interface *, struct req_pkt *, int));
75
static void mon_getlist_0 P((struct sockaddr_in *, struct interface *, struct req_pkt *));
76
static void mon_getlist_1 P((struct sockaddr_in *, struct interface *, struct req_pkt *));
77
static void reset_stats P((struct sockaddr_in *, struct interface *, struct req_pkt *));
78
static void reset_peer P((struct sockaddr_in *, struct interface *, struct req_pkt *));
79
static void do_key_reread P((struct sockaddr_in *, struct interface *, struct req_pkt *));
80
static void trust_key P((struct sockaddr_in *, struct interface *, struct req_pkt *));
81
static void untrust_key P((struct sockaddr_in *, struct interface *, struct req_pkt *));
82
static void do_trustkey P((struct sockaddr_in *, struct interface *, struct req_pkt *, u_long));
83
static void get_auth_info P((struct sockaddr_in *, struct interface *, struct req_pkt *));
65
static void peer_list P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
66
static void peer_list_sum P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
67
static void peer_info P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
68
static void peer_stats P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
69
static void sys_info P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
70
static void sys_stats P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
71
static void mem_stats P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
72
static void io_stats P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
73
static void timer_stats P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
74
static void loop_info P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
75
static void do_conf P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
76
static void do_unconf P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
77
static void set_sys_flag P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
78
static void clr_sys_flag P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
79
static void setclr_flags P((struct sockaddr_storage *, struct interface *, struct req_pkt *, u_long));
80
static void list_restrict P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
81
static void do_resaddflags P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
82
static void do_ressubflags P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
83
static void do_unrestrict P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
84
static void do_restrict P((struct sockaddr_storage *, struct interface *, struct req_pkt *, int));
85
static void mon_getlist_0 P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
86
static void mon_getlist_1 P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
87
static void reset_stats P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
88
static void reset_peer P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
89
static void do_key_reread P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
90
static void trust_key P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
91
static void untrust_key P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
92
static void do_trustkey P((struct sockaddr_storage *, struct interface *, struct req_pkt *, u_long));
93
static void get_auth_info P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
84
94
static void reset_auth_stats P((void));
85
static void req_get_traps P((struct sockaddr_in *, struct interface *, struct req_pkt *));
86
static void req_set_trap P((struct sockaddr_in *, struct interface *, struct req_pkt *));
87
static void req_clr_trap P((struct sockaddr_in *, struct interface *, struct req_pkt *));
88
static void do_setclr_trap P((struct sockaddr_in *, struct interface *, struct req_pkt *, int));
89
static void set_request_keyid P((struct sockaddr_in *, struct interface *, struct req_pkt *));
90
static void set_control_keyid P((struct sockaddr_in *, struct interface *, struct req_pkt *));
91
static void get_ctl_stats P((struct sockaddr_in *, struct interface *, struct req_pkt *));
95
static void req_get_traps P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
96
static void req_set_trap P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
97
static void req_clr_trap P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
98
static void do_setclr_trap P((struct sockaddr_storage *, struct interface *, struct req_pkt *, int));
99
static void set_request_keyid P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
100
static void set_control_keyid P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
101
static void get_ctl_stats P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
93
static void get_kernel_info P((struct sockaddr_in *, struct interface *, struct req_pkt *));
103
static void get_kernel_info P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
94
104
#endif /* KERNEL_PLL */
96
static void get_clock_info P((struct sockaddr_in *, struct interface *, struct req_pkt *));
97
static void set_clock_fudge P((struct sockaddr_in *, struct interface *, struct req_pkt *));
106
static void get_clock_info P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
107
static void set_clock_fudge P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
98
108
#endif /* REFCLOCK */
100
static void get_clkbug_info P((struct sockaddr_in *, struct interface *, struct req_pkt *));
110
static void get_clkbug_info P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
101
111
#endif /* REFCLOCK */
104
114
* ntpd request codes
106
116
static struct req_proc ntp_codes[] = {
107
{ REQ_PEER_LIST, NOAUTH, 0, peer_list },
108
{ REQ_PEER_LIST_SUM, NOAUTH, 0, peer_list_sum },
109
{ REQ_PEER_INFO, NOAUTH, sizeof(struct info_peer_list), peer_info },
110
{ REQ_PEER_STATS, NOAUTH, sizeof(struct info_peer_list), peer_stats },
111
{ REQ_SYS_INFO, NOAUTH, 0, sys_info },
112
{ REQ_SYS_STATS, NOAUTH, 0, sys_stats },
113
{ REQ_IO_STATS, NOAUTH, 0, io_stats },
114
{ REQ_MEM_STATS, NOAUTH, 0, mem_stats },
115
{ REQ_LOOP_INFO, NOAUTH, 0, loop_info },
116
{ REQ_TIMER_STATS, NOAUTH, 0, timer_stats },
117
{ REQ_HOSTNAME_ASSOCID, AUTH, sizeof(struct info_dns_assoc), dns_a },
118
{ REQ_CONFIG, AUTH, sizeof(struct conf_peer), do_conf },
119
{ REQ_UNCONFIG, AUTH, sizeof(struct conf_unpeer), do_unconf },
120
{ REQ_SET_SYS_FLAG, AUTH, sizeof(struct conf_sys_flags), set_sys_flag },
121
{ REQ_CLR_SYS_FLAG, AUTH, sizeof(struct conf_sys_flags), clr_sys_flag },
122
{ REQ_GET_RESTRICT, NOAUTH, 0, list_restrict },
123
{ REQ_RESADDFLAGS, AUTH, sizeof(struct conf_restrict), do_resaddflags },
124
{ REQ_RESSUBFLAGS, AUTH, sizeof(struct conf_restrict), do_ressubflags },
125
{ REQ_UNRESTRICT, AUTH, sizeof(struct conf_restrict), do_unrestrict },
126
{ REQ_MON_GETLIST, NOAUTH, 0, mon_getlist_0 },
127
{ REQ_MON_GETLIST_1, NOAUTH, 0, mon_getlist_1 },
128
{ REQ_RESET_STATS, AUTH, sizeof(struct reset_flags), reset_stats },
129
{ REQ_RESET_PEER, AUTH, sizeof(struct conf_unpeer), reset_peer },
130
{ REQ_REREAD_KEYS, AUTH, 0, do_key_reread },
131
{ REQ_TRUSTKEY, AUTH, sizeof(u_long), trust_key },
132
{ REQ_UNTRUSTKEY, AUTH, sizeof(u_long), untrust_key },
133
{ REQ_AUTHINFO, NOAUTH, 0, get_auth_info },
134
{ REQ_TRAPS, NOAUTH, 0, req_get_traps },
135
{ REQ_ADD_TRAP, AUTH, sizeof(struct conf_trap), req_set_trap },
136
{ REQ_CLR_TRAP, AUTH, sizeof(struct conf_trap), req_clr_trap },
137
{ REQ_REQUEST_KEY, AUTH, sizeof(u_long), set_request_keyid },
138
{ REQ_CONTROL_KEY, AUTH, sizeof(u_long), set_control_keyid },
139
{ REQ_GET_CTLSTATS, NOAUTH, 0, get_ctl_stats },
117
{ REQ_PEER_LIST, NOAUTH, 0, 0, peer_list },
118
{ REQ_PEER_LIST_SUM, NOAUTH, 0, 0, peer_list_sum },
119
{ REQ_PEER_INFO, NOAUTH, v4sizeof(struct info_peer_list),
120
sizeof(struct info_peer_list), peer_info},
121
{ REQ_PEER_STATS, NOAUTH, v4sizeof(struct info_peer_list),
122
sizeof(struct info_peer_list), peer_stats},
123
{ REQ_SYS_INFO, NOAUTH, 0, 0, sys_info },
124
{ REQ_SYS_STATS, NOAUTH, 0, 0, sys_stats },
125
{ REQ_IO_STATS, NOAUTH, 0, 0, io_stats },
126
{ REQ_MEM_STATS, NOAUTH, 0, 0, mem_stats },
127
{ REQ_LOOP_INFO, NOAUTH, 0, 0, loop_info },
128
{ REQ_TIMER_STATS, NOAUTH, 0, 0, timer_stats },
129
{ REQ_CONFIG, AUTH, v4sizeof(struct conf_peer),
130
sizeof(struct conf_peer), do_conf },
131
{ REQ_UNCONFIG, AUTH, v4sizeof(struct conf_unpeer),
132
sizeof(struct conf_unpeer), do_unconf },
133
{ REQ_SET_SYS_FLAG, AUTH, sizeof(struct conf_sys_flags),
134
sizeof(struct conf_sys_flags), set_sys_flag },
135
{ REQ_CLR_SYS_FLAG, AUTH, sizeof(struct conf_sys_flags),
136
sizeof(struct conf_sys_flags), clr_sys_flag },
137
{ REQ_GET_RESTRICT, NOAUTH, 0, 0, list_restrict },
138
{ REQ_RESADDFLAGS, AUTH, v4sizeof(struct conf_restrict),
139
sizeof(struct conf_restrict), do_resaddflags },
140
{ REQ_RESSUBFLAGS, AUTH, v4sizeof(struct conf_restrict),
141
sizeof(struct conf_restrict), do_ressubflags },
142
{ REQ_UNRESTRICT, AUTH, v4sizeof(struct conf_restrict),
143
sizeof(struct conf_restrict), do_unrestrict },
144
{ REQ_MON_GETLIST, NOAUTH, 0, 0, mon_getlist_0 },
145
{ REQ_MON_GETLIST_1, NOAUTH, 0, 0, mon_getlist_1 },
146
{ REQ_RESET_STATS, AUTH, sizeof(struct reset_flags), 0, reset_stats },
147
{ REQ_RESET_PEER, AUTH, v4sizeof(struct conf_unpeer),
148
sizeof(struct conf_unpeer), reset_peer },
149
{ REQ_REREAD_KEYS, AUTH, 0, 0, do_key_reread },
150
{ REQ_TRUSTKEY, AUTH, sizeof(u_long), sizeof(u_long), trust_key },
151
{ REQ_UNTRUSTKEY, AUTH, sizeof(u_long), sizeof(u_long), untrust_key },
152
{ REQ_AUTHINFO, NOAUTH, 0, 0, get_auth_info },
153
{ REQ_TRAPS, NOAUTH, 0, 0, req_get_traps },
154
{ REQ_ADD_TRAP, AUTH, v4sizeof(struct conf_trap),
155
sizeof(struct conf_trap), req_set_trap },
156
{ REQ_CLR_TRAP, AUTH, v4sizeof(struct conf_trap),
157
sizeof(struct conf_trap), req_clr_trap },
158
{ REQ_REQUEST_KEY, AUTH, sizeof(u_long), sizeof(u_long),
160
{ REQ_CONTROL_KEY, AUTH, sizeof(u_long), sizeof(u_long),
162
{ REQ_GET_CTLSTATS, NOAUTH, 0, 0, get_ctl_stats },
140
163
#ifdef KERNEL_PLL
141
{ REQ_GET_KERNEL, NOAUTH, 0, get_kernel_info },
164
{ REQ_GET_KERNEL, NOAUTH, 0, 0, get_kernel_info },
144
{ REQ_GET_CLOCKINFO, NOAUTH, sizeof(u_int32), get_clock_info },
145
{ REQ_SET_CLKFUDGE, AUTH, sizeof(struct conf_fudge), set_clock_fudge },
146
{ REQ_GET_CLKBUGINFO, NOAUTH, sizeof(u_int32), get_clkbug_info },
167
{ REQ_GET_CLOCKINFO, NOAUTH, sizeof(u_int32), sizeof(u_int32),
169
{ REQ_SET_CLKFUDGE, AUTH, sizeof(struct conf_fudge),
170
sizeof(struct conf_fudge), set_clock_fudge },
171
{ REQ_GET_CLKBUGINFO, NOAUTH, sizeof(u_int32), sizeof(u_int32),
148
{ NO_REQUEST, NOAUTH, 0, 0 }
174
{ NO_REQUEST, NOAUTH, 0, 0, 0 }