Deleted Added
full compact
setkey.c (121155) setkey.c (122108)
1/* $FreeBSD: head/sbin/setkey/setkey.c 121155 2003-10-17 11:43:44Z ume $ */
2/* $KAME: setkey.c,v 1.18 2001/05/08 04:36:39 itojun Exp $ */
1/* $FreeBSD: head/sbin/setkey/setkey.c 122108 2003-11-05 09:47:54Z ume $ */
2/* $KAME: setkey.c,v 1.28 2003/06/27 07:15:45 itojun Exp $ */
3
4/*
5 * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:

--- 42 unchanged lines hidden (view full) ---

53
54#include "libpfkey.h"
55
56void usage __P((void));
57int main __P((int, char **));
58int get_supported __P((void));
59void sendkeyshort __P((u_int));
60void promisc __P((void));
3
4/*
5 * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:

--- 42 unchanged lines hidden (view full) ---

53
54#include "libpfkey.h"
55
56void usage __P((void));
57int main __P((int, char **));
58int get_supported __P((void));
59void sendkeyshort __P((u_int));
60void promisc __P((void));
61int sendkeymsg __P((void));
61int sendkeymsg __P((char *, size_t));
62int postproc __P((struct sadb_msg *, int));
63const char *numstr __P((int));
64void shortdump_hdr __P((void));
65void shortdump __P((struct sadb_msg *));
66static void printdate __P((void));
67static int32_t gmt2local __P((time_t));
68
69#define MODE_SCRIPT 1
70#define MODE_CMDDUMP 2
71#define MODE_CMDFLUSH 3
72#define MODE_PROMISC 4
73
74int so;
75
76int f_forever = 0;
77int f_all = 0;
62int postproc __P((struct sadb_msg *, int));
63const char *numstr __P((int));
64void shortdump_hdr __P((void));
65void shortdump __P((struct sadb_msg *));
66static void printdate __P((void));
67static int32_t gmt2local __P((time_t));
68
69#define MODE_SCRIPT 1
70#define MODE_CMDDUMP 2
71#define MODE_CMDFLUSH 3
72#define MODE_PROMISC 4
73
74int so;
75
76int f_forever = 0;
77int f_all = 0;
78int f_debug = 0;
79int f_verbose = 0;
80int f_mode = 0;
81int f_cmddump = 0;
82int f_policy = 0;
83int f_hexdump = 0;
84int f_tflag = 0;
78int f_verbose = 0;
79int f_mode = 0;
80int f_cmddump = 0;
81int f_policy = 0;
82int f_hexdump = 0;
83int f_tflag = 0;
85char *pname;
86
87u_char m_buf[BUFSIZ];
88u_int m_len;
89
90static time_t thiszone;
91
92extern int lineno;
93
94extern int parse __P((FILE **));
95
96void
97usage()
98{
84static time_t thiszone;
85
86extern int lineno;
87
88extern int parse __P((FILE **));
89
90void
91usage()
92{
99 printf("usage:\t%s [-dv] -c\n", pname);
100 printf("\t%s [-dv] -f (file)\n", pname);
101 printf("\t%s [-Padlv] -D\n", pname);
102 printf("\t%s [-Pdv] -F\n", pname);
103 printf("\t%s [-h] -x\n", pname);
104 pfkey_close(so);
93
94 printf("usage: setkey [-v] -c\n");
95 printf(" setkey [-v] -f filename\n");
96 printf(" setkey [-Palv] -D\n");
97 printf(" setkey [-Pv] -F\n");
98 printf(" setkey [-h] -x\n");
105 exit(1);
106}
107
108int
109main(ac, av)
110 int ac;
111 char **av;
112{
113 FILE *fp = stdin;
114 int c;
115
99 exit(1);
100}
101
102int
103main(ac, av)
104 int ac;
105 char **av;
106{
107 FILE *fp = stdin;
108 int c;
109
116 pname = *av;
117
118 if (ac == 1) {
119 usage();
120 /* NOTREACHED */
121 }
122
123 thiszone = gmt2local(0);
124
125 while ((c = getopt(ac, av, "acdf:hlvxDFP")) != -1) {

--- 26 unchanged lines hidden (view full) ---

152 break;
153 case 'x':
154 f_mode = MODE_PROMISC;
155 f_tflag++;
156 break;
157 case 'P':
158 f_policy = 1;
159 break;
110 if (ac == 1) {
111 usage();
112 /* NOTREACHED */
113 }
114
115 thiszone = gmt2local(0);
116
117 while ((c = getopt(ac, av, "acdf:hlvxDFP")) != -1) {

--- 26 unchanged lines hidden (view full) ---

144 break;
145 case 'x':
146 f_mode = MODE_PROMISC;
147 f_tflag++;
148 break;
149 case 'P':
150 f_policy = 1;
151 break;
160 case 'd':
161 f_debug = 1;
162 break;
163 case 'v':
164 f_verbose = 1;
165 break;
166 default:
167 usage();
168 /*NOTREACHED*/
169 }
170 }
171
152 case 'v':
153 f_verbose = 1;
154 break;
155 default:
156 usage();
157 /*NOTREACHED*/
158 }
159 }
160
161 so = pfkey_open();
162 if (so < 0) {
163 perror("pfkey_open");
164 exit(1);
165 }
166
172 switch (f_mode) {
173 case MODE_CMDDUMP:
174 sendkeyshort(f_policy ? SADB_X_SPDDUMP: SADB_DUMP);
175 break;
176 case MODE_CMDFLUSH:
177 sendkeyshort(f_policy ? SADB_X_SPDFLUSH: SADB_FLUSH);
167 switch (f_mode) {
168 case MODE_CMDDUMP:
169 sendkeyshort(f_policy ? SADB_X_SPDDUMP: SADB_DUMP);
170 break;
171 case MODE_CMDFLUSH:
172 sendkeyshort(f_policy ? SADB_X_SPDFLUSH: SADB_FLUSH);
178 pfkey_close(so);
179 break;
180 case MODE_SCRIPT:
181 if (get_supported() < 0) {
182 errx(-1, "%s", ipsec_strerror());
183 /*NOTREACHED*/
184 }
185 if (parse(&fp))
186 exit (1);

--- 7 unchanged lines hidden (view full) ---

194 }
195
196 exit(0);
197}
198
199int
200get_supported()
201{
173 break;
174 case MODE_SCRIPT:
175 if (get_supported() < 0) {
176 errx(-1, "%s", ipsec_strerror());
177 /*NOTREACHED*/
178 }
179 if (parse(&fp))
180 exit (1);

--- 7 unchanged lines hidden (view full) ---

188 }
189
190 exit(0);
191}
192
193int
194get_supported()
195{
202 int so;
203
196
204 if ((so = pfkey_open()) < 0) {
205 perror("pfkey_open");
206 return -1;
207 }
208
209 /* debug mode ? */
210 if (f_debug)
211 return 0;
212
213 if (pfkey_send_register(so, SADB_SATYPE_UNSPEC) < 0)
214 return -1;
215
216 if (pfkey_recv_register(so) < 0)
217 return -1;
218
219 return 0;
220}
221
222void
223sendkeyshort(type)
224 u_int type;
225{
197 if (pfkey_send_register(so, SADB_SATYPE_UNSPEC) < 0)
198 return -1;
199
200 if (pfkey_recv_register(so) < 0)
201 return -1;
202
203 return 0;
204}
205
206void
207sendkeyshort(type)
208 u_int type;
209{
226 struct sadb_msg *m_msg = (struct sadb_msg *)m_buf;
210 struct sadb_msg msg;
227
211
228 m_len = sizeof(struct sadb_msg);
212 msg.sadb_msg_version = PF_KEY_V2;
213 msg.sadb_msg_type = type;
214 msg.sadb_msg_errno = 0;
215 msg.sadb_msg_satype = SADB_SATYPE_UNSPEC;
216 msg.sadb_msg_len = PFKEY_UNIT64(sizeof(msg));
217 msg.sadb_msg_reserved = 0;
218 msg.sadb_msg_seq = 0;
219 msg.sadb_msg_pid = getpid();
229
220
230 m_msg->sadb_msg_version = PF_KEY_V2;
231 m_msg->sadb_msg_type = type;
232 m_msg->sadb_msg_errno = 0;
233 m_msg->sadb_msg_satype = SADB_SATYPE_UNSPEC;
234 m_msg->sadb_msg_len = PFKEY_UNIT64(m_len);
235 m_msg->sadb_msg_reserved = 0;
236 m_msg->sadb_msg_seq = 0;
237 m_msg->sadb_msg_pid = getpid();
221 sendkeymsg((char *)&msg, sizeof(msg));
238
222
239 sendkeymsg();
240
241 return;
242}
243
244void
245promisc()
246{
223 return;
224}
225
226void
227promisc()
228{
247 struct sadb_msg *m_msg = (struct sadb_msg *)m_buf;
229 struct sadb_msg msg;
248 u_char rbuf[1024 * 32]; /* XXX: Enough ? Should I do MSG_PEEK ? */
230 u_char rbuf[1024 * 32]; /* XXX: Enough ? Should I do MSG_PEEK ? */
249 int so, l;
231 ssize_t l;
250
232
251 m_len = sizeof(struct sadb_msg);
233 msg.sadb_msg_version = PF_KEY_V2;
234 msg.sadb_msg_type = SADB_X_PROMISC;
235 msg.sadb_msg_errno = 0;
236 msg.sadb_msg_satype = 1;
237 msg.sadb_msg_len = PFKEY_UNIT64(sizeof(msg));
238 msg.sadb_msg_reserved = 0;
239 msg.sadb_msg_seq = 0;
240 msg.sadb_msg_pid = getpid();
252
241
253 m_msg->sadb_msg_version = PF_KEY_V2;
254 m_msg->sadb_msg_type = SADB_X_PROMISC;
255 m_msg->sadb_msg_errno = 0;
256 m_msg->sadb_msg_satype = 1;
257 m_msg->sadb_msg_len = PFKEY_UNIT64(m_len);
258 m_msg->sadb_msg_reserved = 0;
259 m_msg->sadb_msg_seq = 0;
260 m_msg->sadb_msg_pid = getpid();
261
262 if ((so = socket(PF_KEY, SOCK_RAW, PF_KEY_V2)) < 0) {
263 err(1, "socket(PF_KEY)");
264 /*NOTREACHED*/
265 }
266
267 if ((l = send(so, m_buf, m_len, 0)) < 0) {
242 if ((l = send(so, &msg, sizeof(msg), 0)) < 0) {
268 err(1, "send");
269 /*NOTREACHED*/
270 }
271
272 while (1) {
273 struct sadb_msg *base;
274
275 if ((l = recv(so, rbuf, sizeof(*base), MSG_PEEK)) < 0) {

--- 20 unchanged lines hidden (view full) ---

296 if (i % 16 == 15)
297 printf("\n");
298 }
299 if (l % 16)
300 printf("\n");
301 }
302 /* adjust base pointer for promisc mode */
303 if (base->sadb_msg_type == SADB_X_PROMISC) {
243 err(1, "send");
244 /*NOTREACHED*/
245 }
246
247 while (1) {
248 struct sadb_msg *base;
249
250 if ((l = recv(so, rbuf, sizeof(*base), MSG_PEEK)) < 0) {

--- 20 unchanged lines hidden (view full) ---

271 if (i % 16 == 15)
272 printf("\n");
273 }
274 if (l % 16)
275 printf("\n");
276 }
277 /* adjust base pointer for promisc mode */
278 if (base->sadb_msg_type == SADB_X_PROMISC) {
304 if (sizeof(*base) < l)
279 if ((ssize_t)sizeof(*base) < l)
305 base++;
306 else
307 base = NULL;
308 }
309 if (base) {
310 kdebug_sadb(base);
311 printf("\n");
312 fflush(stdout);
313 }
314 }
315}
316
317int
280 base++;
281 else
282 base = NULL;
283 }
284 if (base) {
285 kdebug_sadb(base);
286 printf("\n");
287 fflush(stdout);
288 }
289 }
290}
291
292int
318sendkeymsg()
293sendkeymsg(buf, len)
294 char *buf;
295 size_t len;
319{
296{
320 int so;
321
322 u_char rbuf[1024 * 32]; /* XXX: Enough ? Should I do MSG_PEEK ? */
297 u_char rbuf[1024 * 32]; /* XXX: Enough ? Should I do MSG_PEEK ? */
323 int l;
298 ssize_t l;
324 struct sadb_msg *msg;
325
299 struct sadb_msg *msg;
300
326 if ((so = pfkey_open()) < 0) {
327 perror("pfkey_open");
328 return -1;
329 }
330
331 {
332 struct timeval tv;
333 tv.tv_sec = 1;
334 tv.tv_usec = 0;
335 if (setsockopt(so, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) < 0) {
336 perror("setsockopt");
337 goto end;
338 }
339 }
340
341 if (f_forever)
342 shortdump_hdr();
343again:
344 if (f_verbose) {
301 {
302 struct timeval tv;
303 tv.tv_sec = 1;
304 tv.tv_usec = 0;
305 if (setsockopt(so, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) < 0) {
306 perror("setsockopt");
307 goto end;
308 }
309 }
310
311 if (f_forever)
312 shortdump_hdr();
313again:
314 if (f_verbose) {
345 kdebug_sadb((struct sadb_msg *)m_buf);
315 kdebug_sadb((struct sadb_msg *)buf);
346 printf("\n");
347 }
316 printf("\n");
317 }
318 if (f_hexdump) {
319 int i;
320 for (i = 0; i < len; i++) {
321 if (i % 16 == 0)
322 printf("%08x: ", i);
323 printf("%02x ", buf[i] & 0xff);
324 if (i % 16 == 15)
325 printf("\n");
326 }
327 if (len % 16)
328 printf("\n");
329 }
348
330
349 if ((l = send(so, m_buf, m_len, 0)) < 0) {
331 if ((l = send(so, buf, len, 0)) < 0) {
350 perror("send");
351 goto end;
352 }
353
354 msg = (struct sadb_msg *)rbuf;
355 do {
356 if ((l = recv(so, rbuf, sizeof(rbuf), 0)) < 0) {
357 perror("recv");

--- 15 unchanged lines hidden (view full) ---

373
374 if (f_forever) {
375 fflush(stdout);
376 sleep(1);
377 goto again;
378 }
379
380end:
332 perror("send");
333 goto end;
334 }
335
336 msg = (struct sadb_msg *)rbuf;
337 do {
338 if ((l = recv(so, rbuf, sizeof(rbuf), 0)) < 0) {
339 perror("recv");

--- 15 unchanged lines hidden (view full) ---

355
356 if (f_forever) {
357 fflush(stdout);
358 sleep(1);
359 goto again;
360 }
361
362end:
381 pfkey_close(so);
382 return(0);
383}
384
385int
386postproc(msg, len)
387 struct sadb_msg *msg;
388 int len;
389{

--- 262 unchanged lines hidden ---
363 return(0);
364}
365
366int
367postproc(msg, len)
368 struct sadb_msg *msg;
369 int len;
370{

--- 262 unchanged lines hidden ---