1 /*
2 * Copyright (c) 2001 Mark Fullmer and The Ohio State University
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $Id: ftrec.c,v 1.13 2003/11/30 22:56:45 maf Exp $
27 */
28
29 #include "ftconfig.h"
30 #include "ftlib.h"
31
32 #include <sys/time.h>
33 #include <sys/types.h>
34 #include <limits.h>
35 #include <unistd.h>
36 #include <stddef.h>
37 #include <stdio.h>
38 #include <stdlib.h>
39 #include <time.h>
40
41 #if HAVE_STRINGS_H
42 #include <strings.h>
43 #endif
44 #if HAVE_STRING_H
45 #include <string.h>
46 #endif
47
48 #define FT_OFFSET(A,B)\
49 o->A = offsetof(struct B, A);
50
51 void ftrec_xlate_1to5(struct fts3rec_v1 *rec_v1, struct fts3rec_v5 *rec_v5);
52 void ftrec_xlate_1to6(struct fts3rec_v1 *rec_v1, struct fts3rec_v6 *rec_v6);
53 void ftrec_xlate_1to7(struct fts3rec_v1 *rec_v1, struct fts3rec_v7 *rec_v7);
54 void ftrec_xlate_1to1005(struct fts3rec_v1 *rec_v1,
55 struct fts3rec_v1005 *rec_v1005);
56
57 void ftrec_xlate_5to1(struct fts3rec_v5 *rec_v5, struct fts3rec_v1 *rec_v1);
58 void ftrec_xlate_5to6(struct fts3rec_v5 *rec_v5, struct fts3rec_v6 *rec_v6);
59 void ftrec_xlate_5to7(struct fts3rec_v5 *rec_v5, struct fts3rec_v7 *rec_v7);
60 void ftrec_xlate_5to1005(struct fts3rec_v5 *rec_v5,
61 struct fts3rec_v1005 *rec_v1005);
62
63 void ftrec_xlate_6to1(struct fts3rec_v6 *rec_v6, struct fts3rec_v1 *rec_v1);
64 void ftrec_xlate_6to5(struct fts3rec_v6 *rec_v6, struct fts3rec_v5 *rec_v5);
65 void ftrec_xlate_6to7(struct fts3rec_v6 *rec_v6, struct fts3rec_v7 *rec_v7);
66 void ftrec_xlate_6to1005(struct fts3rec_v6 *rec_v6,
67 struct fts3rec_v1005 *rec_v1005);
68
69 void ftrec_xlate_7to1(struct fts3rec_v7 *rec_v7, struct fts3rec_v1 *rec_v1);
70 void ftrec_xlate_7to5(struct fts3rec_v7 *rec_v7, struct fts3rec_v5 *rec_v5);
71 void ftrec_xlate_7to6(struct fts3rec_v7 *rec_v7, struct fts3rec_v6 *rec_v6);
72 void ftrec_xlate_7to1005(struct fts3rec_v7 *rec_v7,
73 struct fts3rec_v1005 *rec_v1005);
74
75 void ftrec_xlate_1005to5(struct fts3rec_v1005 *rec_v1005,
76 struct fts3rec_v5 *rec_v5);
77
78 /*
79 * function ftrec_compute_mask
80 *
81 * configure ftipmask for given byte order
82 *
83 * used to precompute mask and test to avoid byte swapping
84 * in certain code paths
85 *
86 */
ftrec_compute_mask(struct ftipmask * m,uint32_t src,uint32_t dst,int byte_order)87 void ftrec_compute_mask(struct ftipmask *m, uint32_t src, uint32_t dst, int
88 byte_order)
89 {
90
91 m->src_mask = src;
92 m->dst_mask = dst;
93 m->mcast_mask = 0xf0000000;
94 m->mcast_val = 0xe0000000;
95
96 #if BYTE_ORDER == BIG_ENDIAN
97 if (byte_order == FT_HEADER_LITTLE_ENDIAN) {
98 SWAPINT32(m->src_mask);
99 SWAPINT32(m->dst_mask);
100 SWAPINT32(m->mcast_mask);
101 SWAPINT32(m->mcast_val);
102 }
103 #endif /* BYTE_ORDER == BIG_ENDIAN */
104
105 #if BYTE_ORDER == LITTLE_ENDIAN
106 if (byte_order == FT_HEADER_BIG_ENDIAN) {
107 SWAPINT32(m->src_mask);
108 SWAPINT32(m->dst_mask);
109 SWAPINT32(m->mcast_mask);
110 SWAPINT32(m->mcast_val);
111 }
112 #endif /* BYTE_ORDER == LITTLE_ENDIAN */
113
114 } /* ftrec_compute_mask */
115
116 /*
117 * function: ftrec_mask_ip
118 *
119 * AND non multicast IP addresses in a flow record with mask
120 *
121 * mask and record must be in the same byte order
122 *
123 * returns -1 on error, 0 otherwise.
124 */
ftrec_mask_ip(void * rec,struct ftver * ftv,struct ftipmask * m)125 int ftrec_mask_ip(void *rec, struct ftver *ftv, struct ftipmask *m)
126 {
127
128 int ret;
129 struct fts3rec_gen *rec_gen;
130
131 ret = -1;
132
133 switch (ftv->d_version) {
134
135 case 1:
136 case 5:
137 case 6:
138 case 7:
139 case 1005:
140 rec_gen = rec;
141 if (!((rec_gen->dstaddr & m->mcast_mask) == m->mcast_val)) {
142 rec_gen->srcaddr &= m->src_mask;
143 rec_gen->dstaddr &= m->dst_mask;
144 }
145 ret = 0;
146 break;
147
148 } /* switch */
149
150 return ret;
151
152 } /* ftrec_mask_ip */
153
154 /*
155 * function: ftrec_xlate_func
156 *
157 * return function to translate among v1, v5, v6, and v7 formats
158 *
159 */
ftrec_xlate_func(struct ftver * in_ftv,struct ftver * out_ftv)160 void *ftrec_xlate_func(struct ftver *in_ftv, struct ftver *out_ftv)
161 {
162
163 if (in_ftv->d_version == 1) {
164
165 if (out_ftv->d_version == 5)
166 return ftrec_xlate_1to5;
167 else if (out_ftv->d_version == 6)
168 return ftrec_xlate_1to6;
169 else if (out_ftv->d_version == 7)
170 return ftrec_xlate_1to7;
171 else if (out_ftv->d_version == 1)
172 return (void*)0L;
173 else if (out_ftv->d_version == 1005)
174 return ftrec_xlate_5to1005;
175
176 } else if (in_ftv->d_version == 5) {
177
178 if (out_ftv->d_version == 1)
179 return ftrec_xlate_5to1;
180 else if (out_ftv->d_version == 6)
181 return ftrec_xlate_5to6;
182 else if (out_ftv->d_version == 7)
183 return ftrec_xlate_5to7;
184 else if (out_ftv->d_version == 1005)
185 return ftrec_xlate_5to1005;
186 else if (out_ftv->d_version == 5)
187 return (void*)0L;
188
189 } else if (in_ftv->d_version == 6) {
190
191 if (out_ftv->d_version == 1)
192 return ftrec_xlate_6to1;
193 else if (out_ftv->d_version == 5)
194 return ftrec_xlate_6to5;
195 else if (out_ftv->d_version == 7)
196 return ftrec_xlate_6to7;
197 else if (out_ftv->d_version == 6)
198 return (void*)0L;
199 else if (out_ftv->d_version == 1005)
200 return ftrec_xlate_6to1005;
201
202 } else if (in_ftv->d_version == 7) {
203
204 if (out_ftv->d_version == 1)
205 return ftrec_xlate_7to1;
206 else if (out_ftv->d_version == 5)
207 return ftrec_xlate_7to5;
208 else if (out_ftv->d_version == 6)
209 return ftrec_xlate_7to6;
210 else if (out_ftv->d_version == 7)
211 return (void*)0L;
212 else if (out_ftv->d_version == 1005)
213 return ftrec_xlate_7to1005;
214
215 } else if (in_ftv->d_version == 1005) {
216
217 if (out_ftv->d_version == 5)
218 return ftrec_xlate_1005to5;
219 }
220
221 return (void*)0L;
222
223 } /* ftrec_xlate_func */
224
225 /*
226 * function: ftrec_xlate
227 *
228 * translate among v1, v5, v6, and v7 formats
229 *
230 */
ftrec_xlate(void * in_rec,struct ftver * in_ftv,void * out_rec,struct ftver * out_ftv)231 void ftrec_xlate(void *in_rec, struct ftver *in_ftv, void *out_rec,
232 struct ftver *out_ftv)
233 {
234
235 void (*func)(void *in_rec, void *out_rec);
236
237 func = ftrec_xlate_func(in_ftv, out_ftv);
238 if (!func)
239 return; /* XXX: should provide a return code */
240 func(in_rec, out_rec);
241
242 } /* ftrec_xlate */
243
ftrec_xlate_5to1(struct fts3rec_v5 * rec_v5,struct fts3rec_v1 * rec_v1)244 void ftrec_xlate_5to1(struct fts3rec_v5 *rec_v5, struct fts3rec_v1 *rec_v1)
245 {
246
247 bzero(rec_v1, sizeof (struct fts3rec_v1));
248
249 rec_v1->unix_secs = rec_v5->unix_secs;
250 rec_v1->unix_nsecs = rec_v5->unix_nsecs;
251 rec_v1->sysUpTime = rec_v5->sysUpTime;
252 rec_v1->exaddr = rec_v5->exaddr;
253 rec_v1->srcaddr = rec_v5->srcaddr;
254 rec_v1->dstaddr = rec_v5->dstaddr;
255 rec_v1->nexthop = rec_v5->nexthop;
256 rec_v1->input = rec_v5->input;
257 rec_v1->output = rec_v5->output;
258 rec_v1->dPkts = rec_v5->dPkts;
259 rec_v1->dOctets = rec_v5->dOctets;
260 rec_v1->First = rec_v5->First;
261 rec_v1->Last = rec_v5->Last;
262 rec_v1->srcport = rec_v5->srcport;
263 rec_v1->dstport = rec_v5->dstport;
264 rec_v1->prot = rec_v5->prot;
265 rec_v1->tos = rec_v5->tos;
266 rec_v1->tcp_flags = rec_v5->tcp_flags;
267
268 } /* ftrec_xlate_5to1 */
269
ftrec_xlate_5to6(struct fts3rec_v5 * rec_v5,struct fts3rec_v6 * rec_v6)270 void ftrec_xlate_5to6(struct fts3rec_v5 *rec_v5, struct fts3rec_v6 *rec_v6)
271 {
272
273 bzero(rec_v6, sizeof (struct fts3rec_v6));
274
275 rec_v6->unix_secs = rec_v5->unix_secs;
276 rec_v6->unix_nsecs = rec_v5->unix_nsecs;
277 rec_v6->sysUpTime = rec_v5->sysUpTime;
278 rec_v6->exaddr = rec_v5->exaddr;
279 rec_v6->srcaddr = rec_v5->srcaddr;
280 rec_v6->dstaddr = rec_v5->dstaddr;
281 rec_v6->nexthop = rec_v5->nexthop;
282 rec_v6->input = rec_v5->input;
283 rec_v6->output = rec_v5->output;
284 rec_v6->dPkts = rec_v5->dPkts;
285 rec_v6->dOctets = rec_v5->dOctets;
286 rec_v6->First = rec_v5->First;
287 rec_v6->Last = rec_v5->Last;
288 rec_v6->srcport = rec_v5->srcport;
289 rec_v6->dstport = rec_v5->dstport;
290 rec_v6->prot = rec_v5->prot;
291 rec_v6->tos = rec_v5->tos;
292 rec_v6->tcp_flags = rec_v5->tcp_flags;
293 rec_v6->engine_type = rec_v5->engine_type;
294 rec_v6->engine_id = rec_v5->engine_id;
295 rec_v6->src_mask = rec_v5->src_mask;
296 rec_v6->dst_mask = rec_v5->dst_mask;
297 rec_v6->src_as = rec_v5->src_as;
298 rec_v6->dst_as = rec_v5->dst_as;
299
300 } /* ftrec_xlate_5to6 */
301
ftrec_xlate_5to1005(struct fts3rec_v5 * rec_v5,struct fts3rec_v1005 * rec_v1005)302 void ftrec_xlate_5to1005(struct fts3rec_v5 *rec_v5,
303 struct fts3rec_v1005 *rec_v1005)
304 {
305
306 bzero(rec_v1005, sizeof (struct fts3rec_v1005));
307
308 rec_v1005->unix_secs = rec_v5->unix_secs;
309 rec_v1005->unix_nsecs = rec_v5->unix_nsecs;
310 rec_v1005->sysUpTime = rec_v5->sysUpTime;
311 rec_v1005->exaddr = rec_v5->exaddr;
312 rec_v1005->srcaddr = rec_v5->srcaddr;
313 rec_v1005->dstaddr = rec_v5->dstaddr;
314 rec_v1005->nexthop = rec_v5->nexthop;
315 rec_v1005->input = rec_v5->input;
316 rec_v1005->output = rec_v5->output;
317 rec_v1005->dPkts = rec_v5->dPkts;
318 rec_v1005->dOctets = rec_v5->dOctets;
319 rec_v1005->First = rec_v5->First;
320 rec_v1005->Last = rec_v5->Last;
321 rec_v1005->srcport = rec_v5->srcport;
322 rec_v1005->dstport = rec_v5->dstport;
323 rec_v1005->prot = rec_v5->prot;
324 rec_v1005->tos = rec_v5->tos;
325 rec_v1005->tcp_flags = rec_v5->tcp_flags;
326 rec_v1005->engine_type = rec_v5->engine_type;
327 rec_v1005->engine_id = rec_v5->engine_id;
328 rec_v1005->src_mask = rec_v5->src_mask;
329 rec_v1005->dst_mask = rec_v5->dst_mask;
330 rec_v1005->src_as = rec_v5->src_as;
331 rec_v1005->dst_as = rec_v5->dst_as;
332
333 } /* ftrec_xlate_5to1005 */
334
335
ftrec_xlate_5to7(struct fts3rec_v5 * rec_v5,struct fts3rec_v7 * rec_v7)336 void ftrec_xlate_5to7(struct fts3rec_v5 *rec_v5, struct fts3rec_v7 *rec_v7)
337 {
338
339 bzero(rec_v7, sizeof (struct fts3rec_v7));
340
341 rec_v7->unix_secs = rec_v5->unix_secs;
342 rec_v7->unix_nsecs = rec_v5->unix_nsecs;
343 rec_v7->sysUpTime = rec_v5->sysUpTime;
344 rec_v7->exaddr = rec_v5->exaddr;
345 rec_v7->srcaddr = rec_v5->srcaddr;
346 rec_v7->dstaddr = rec_v5->dstaddr;
347 rec_v7->nexthop = rec_v5->nexthop;
348 rec_v7->input = rec_v5->input;
349 rec_v7->output = rec_v5->output;
350 rec_v7->dPkts = rec_v5->dPkts;
351 rec_v7->dOctets = rec_v5->dOctets;
352 rec_v7->First = rec_v5->First;
353 rec_v7->Last = rec_v5->Last;
354 rec_v7->srcport = rec_v5->srcport;
355 rec_v7->dstport = rec_v5->dstport;
356 rec_v7->prot = rec_v5->prot;
357 rec_v7->tos = rec_v5->tos;
358 rec_v7->tcp_flags = rec_v5->tcp_flags;
359 rec_v7->engine_type = rec_v5->engine_type;
360 rec_v7->engine_id = rec_v5->engine_id;
361 rec_v7->src_mask = rec_v5->src_mask;
362 rec_v7->dst_mask = rec_v5->dst_mask;
363 rec_v7->src_as = rec_v5->src_as;
364 rec_v7->dst_as = rec_v5->dst_as;
365
366 } /* ftrec_xlate_5to7 */
367
368
ftrec_xlate_1to5(struct fts3rec_v1 * rec_v1,struct fts3rec_v5 * rec_v5)369 void ftrec_xlate_1to5(struct fts3rec_v1 *rec_v1, struct fts3rec_v5 *rec_v5)
370 {
371
372 bzero(rec_v5, sizeof (struct fts3rec_v5));
373
374 rec_v5->unix_secs = rec_v1->unix_secs;
375 rec_v5->unix_nsecs = rec_v1->unix_nsecs;
376 rec_v5->sysUpTime = rec_v1->sysUpTime;
377 rec_v5->exaddr = rec_v1->exaddr;
378 rec_v5->srcaddr = rec_v1->srcaddr;
379 rec_v5->dstaddr = rec_v1->dstaddr;
380 rec_v5->nexthop = rec_v1->nexthop;
381 rec_v5->input = rec_v1->input;
382 rec_v5->output = rec_v5->output;
383 rec_v5->dPkts = rec_v1->dPkts;
384 rec_v5->dOctets = rec_v1->dOctets;
385 rec_v5->First = rec_v1->First;
386 rec_v5->Last = rec_v1->Last;
387 rec_v5->srcport = rec_v1->srcport;
388 rec_v5->dstport = rec_v1->dstport;
389 rec_v5->prot = rec_v1->prot;
390 rec_v5->tos = rec_v1->tos;
391 rec_v5->tcp_flags = rec_v1->tcp_flags;
392
393 } /* ftrec_xlate_1to5 */
394
395
ftrec_xlate_1to6(struct fts3rec_v1 * rec_v1,struct fts3rec_v6 * rec_v6)396 void ftrec_xlate_1to6(struct fts3rec_v1 *rec_v1, struct fts3rec_v6 *rec_v6)
397 {
398
399 bzero(rec_v6, sizeof (struct fts3rec_v6));
400
401 rec_v6->unix_secs = rec_v1->unix_secs;
402 rec_v6->unix_nsecs = rec_v1->unix_nsecs;
403 rec_v6->sysUpTime = rec_v1->sysUpTime;
404 rec_v6->exaddr = rec_v1->exaddr;
405 rec_v6->srcaddr = rec_v1->srcaddr;
406 rec_v6->dstaddr = rec_v1->dstaddr;
407 rec_v6->nexthop = rec_v1->nexthop;
408 rec_v6->input = rec_v1->input;
409 rec_v6->output = rec_v6->output;
410 rec_v6->dPkts = rec_v1->dPkts;
411 rec_v6->dOctets = rec_v1->dOctets;
412 rec_v6->First = rec_v1->First;
413 rec_v6->Last = rec_v1->Last;
414 rec_v6->srcport = rec_v1->srcport;
415 rec_v6->dstport = rec_v1->dstport;
416 rec_v6->prot = rec_v1->prot;
417 rec_v6->tos = rec_v1->tos;
418 rec_v6->tcp_flags = rec_v1->tcp_flags;
419
420 } /* ftrec_xlate_1to6 */
421
ftrec_xlate_1to7(struct fts3rec_v1 * rec_v1,struct fts3rec_v7 * rec_v7)422 void ftrec_xlate_1to7(struct fts3rec_v1 *rec_v1, struct fts3rec_v7 *rec_v7)
423 {
424
425 bzero(rec_v7, sizeof (struct fts3rec_v7));
426
427 rec_v7->unix_secs = rec_v1->unix_secs;
428 rec_v7->unix_nsecs = rec_v1->unix_nsecs;
429 rec_v7->sysUpTime = rec_v1->sysUpTime;
430 rec_v7->exaddr = rec_v1->exaddr;
431 rec_v7->srcaddr = rec_v1->srcaddr;
432 rec_v7->dstaddr = rec_v1->dstaddr;
433 rec_v7->nexthop = rec_v1->nexthop;
434 rec_v7->input = rec_v1->input;
435 rec_v7->output = rec_v7->output;
436 rec_v7->dPkts = rec_v1->dPkts;
437 rec_v7->dOctets = rec_v1->dOctets;
438 rec_v7->First = rec_v1->First;
439 rec_v7->Last = rec_v1->Last;
440 rec_v7->srcport = rec_v1->srcport;
441 rec_v7->dstport = rec_v1->dstport;
442 rec_v7->prot = rec_v1->prot;
443 rec_v7->tos = rec_v1->tos;
444 rec_v7->tcp_flags = rec_v1->tcp_flags;
445
446 } /* ftrec_xlate_1to7 */
447
ftrec_xlate_1to1005(struct fts3rec_v1 * rec_v1,struct fts3rec_v1005 * rec_v1005)448 void ftrec_xlate_1to1005(struct fts3rec_v1 *rec_v1,
449 struct fts3rec_v1005 *rec_v1005)
450 {
451
452 bzero(rec_v1005, sizeof (struct fts3rec_v1005));
453
454 rec_v1005->unix_secs = rec_v1->unix_secs;
455 rec_v1005->unix_nsecs = rec_v1->unix_nsecs;
456 rec_v1005->sysUpTime = rec_v1->sysUpTime;
457 rec_v1005->exaddr = rec_v1->exaddr;
458 rec_v1005->srcaddr = rec_v1->srcaddr;
459 rec_v1005->dstaddr = rec_v1->dstaddr;
460 rec_v1005->nexthop = rec_v1->nexthop;
461 rec_v1005->input = rec_v1->input;
462 rec_v1005->output = rec_v1->output;
463 rec_v1005->dPkts = rec_v1->dPkts;
464 rec_v1005->dOctets = rec_v1->dOctets;
465 rec_v1005->First = rec_v1->First;
466 rec_v1005->Last = rec_v1->Last;
467 rec_v1005->srcport = rec_v1->srcport;
468 rec_v1005->dstport = rec_v1->dstport;
469 rec_v1005->prot = rec_v1->prot;
470 rec_v1005->tos = rec_v1->tos;
471 rec_v1005->tcp_flags = rec_v1->tcp_flags;
472
473 } /* ftrec_xlate_1to1005 */
474
ftrec_xlate_6to1(struct fts3rec_v6 * rec_v6,struct fts3rec_v1 * rec_v1)475 void ftrec_xlate_6to1(struct fts3rec_v6 *rec_v6, struct fts3rec_v1 *rec_v1)
476 {
477
478 bzero(rec_v1, sizeof (struct fts3rec_v1));
479
480 rec_v1->unix_secs = rec_v6->unix_secs;
481 rec_v1->unix_nsecs = rec_v6->unix_nsecs;
482 rec_v1->sysUpTime = rec_v6->sysUpTime;
483 rec_v1->exaddr = rec_v6->exaddr;
484 rec_v1->srcaddr = rec_v6->srcaddr;
485 rec_v1->dstaddr = rec_v6->dstaddr;
486 rec_v1->nexthop = rec_v6->nexthop;
487 rec_v1->input = rec_v6->input;
488 rec_v1->output = rec_v6->output;
489 rec_v1->dPkts = rec_v6->dPkts;
490 rec_v1->dOctets = rec_v6->dOctets;
491 rec_v1->First = rec_v6->First;
492 rec_v1->Last = rec_v6->Last;
493 rec_v1->srcport = rec_v6->srcport;
494 rec_v1->dstport = rec_v6->dstport;
495 rec_v1->prot = rec_v6->prot;
496 rec_v1->tos = rec_v6->tos;
497 rec_v1->tcp_flags = rec_v6->tcp_flags;
498
499 } /* ftrec_xlate_6to1 */
500
ftrec_xlate_6to5(struct fts3rec_v6 * rec_v6,struct fts3rec_v5 * rec_v5)501 void ftrec_xlate_6to5(struct fts3rec_v6 *rec_v6, struct fts3rec_v5 *rec_v5)
502 {
503
504 bzero(rec_v5, sizeof (struct fts3rec_v5));
505
506 rec_v5->unix_secs = rec_v6->unix_secs;
507 rec_v5->unix_nsecs = rec_v6->unix_nsecs;
508 rec_v5->sysUpTime = rec_v6->sysUpTime;
509 rec_v5->exaddr = rec_v6->exaddr;
510 rec_v5->srcaddr = rec_v6->srcaddr;
511 rec_v5->dstaddr = rec_v6->dstaddr;
512 rec_v5->nexthop = rec_v6->nexthop;
513 rec_v5->input = rec_v6->input;
514 rec_v5->output = rec_v6->output;
515 rec_v5->dPkts = rec_v6->dPkts;
516 rec_v5->dOctets = rec_v6->dOctets;
517 rec_v5->First = rec_v6->First;
518 rec_v5->Last = rec_v6->Last;
519 rec_v5->srcport = rec_v6->srcport;
520 rec_v5->dstport = rec_v6->dstport;
521 rec_v5->prot = rec_v6->prot;
522 rec_v5->tos = rec_v6->tos;
523 rec_v5->tcp_flags = rec_v6->tcp_flags;
524 rec_v5->engine_type = rec_v6->engine_type;
525 rec_v5->engine_id = rec_v6->engine_id;
526 rec_v5->src_mask = rec_v6->src_mask;
527 rec_v5->dst_mask = rec_v6->dst_mask;
528 rec_v5->src_as = rec_v6->src_as;
529 rec_v5->dst_as = rec_v6->dst_as;
530
531 } /* ftrec_xlate_6to5 */
532
ftrec_xlate_6to7(struct fts3rec_v6 * rec_v6,struct fts3rec_v7 * rec_v7)533 void ftrec_xlate_6to7(struct fts3rec_v6 *rec_v6, struct fts3rec_v7 *rec_v7)
534 {
535
536 bzero(rec_v7, sizeof (struct fts3rec_v7));
537
538 rec_v7->unix_secs = rec_v6->unix_secs;
539 rec_v7->unix_nsecs = rec_v6->unix_nsecs;
540 rec_v7->sysUpTime = rec_v6->sysUpTime;
541 rec_v7->exaddr = rec_v6->exaddr;
542 rec_v7->srcaddr = rec_v6->srcaddr;
543 rec_v7->dstaddr = rec_v6->dstaddr;
544 rec_v7->nexthop = rec_v6->nexthop;
545 rec_v7->input = rec_v6->input;
546 rec_v7->output = rec_v6->output;
547 rec_v7->dPkts = rec_v6->dPkts;
548 rec_v7->dOctets = rec_v6->dOctets;
549 rec_v7->First = rec_v6->First;
550 rec_v7->Last = rec_v6->Last;
551 rec_v7->srcport = rec_v6->srcport;
552 rec_v7->dstport = rec_v6->dstport;
553 rec_v7->prot = rec_v6->prot;
554 rec_v7->tos = rec_v6->tos;
555 rec_v7->tcp_flags = rec_v6->tcp_flags;
556 rec_v7->engine_type = rec_v6->engine_type;
557 rec_v7->engine_id = rec_v6->engine_id;
558 rec_v7->src_mask = rec_v6->src_mask;
559 rec_v7->dst_mask = rec_v6->dst_mask;
560 rec_v7->src_as = rec_v6->src_as;
561 rec_v7->dst_as = rec_v6->dst_as;
562
563 } /* ftrec_xlate_6to7 */
564
ftrec_xlate_6to1005(struct fts3rec_v6 * rec_v6,struct fts3rec_v1005 * rec_v1005)565 void ftrec_xlate_6to1005(struct fts3rec_v6 *rec_v6,
566 struct fts3rec_v1005 *rec_v1005)
567 {
568
569 bzero(rec_v1005, sizeof (struct fts3rec_v1005));
570
571 rec_v1005->unix_secs = rec_v6->unix_secs;
572 rec_v1005->unix_nsecs = rec_v6->unix_nsecs;
573 rec_v1005->sysUpTime = rec_v6->sysUpTime;
574 rec_v1005->exaddr = rec_v6->exaddr;
575 rec_v1005->srcaddr = rec_v6->srcaddr;
576 rec_v1005->dstaddr = rec_v6->dstaddr;
577 rec_v1005->nexthop = rec_v6->nexthop;
578 rec_v1005->input = rec_v6->input;
579 rec_v1005->output = rec_v6->output;
580 rec_v1005->dPkts = rec_v6->dPkts;
581 rec_v1005->dOctets = rec_v6->dOctets;
582 rec_v1005->First = rec_v6->First;
583 rec_v1005->Last = rec_v6->Last;
584 rec_v1005->srcport = rec_v6->srcport;
585 rec_v1005->dstport = rec_v6->dstport;
586 rec_v1005->prot = rec_v6->prot;
587 rec_v1005->tos = rec_v6->tos;
588 rec_v1005->tcp_flags = rec_v6->tcp_flags;
589 rec_v1005->engine_type = rec_v6->engine_type;
590 rec_v1005->engine_id = rec_v6->engine_id;
591 rec_v1005->src_mask = rec_v6->src_mask;
592 rec_v1005->dst_mask = rec_v6->dst_mask;
593 rec_v1005->src_as = rec_v6->src_as;
594 rec_v1005->dst_as = rec_v6->dst_as;
595
596 } /* ftrec_xlate_6to1005 */
597
ftrec_xlate_7to1(struct fts3rec_v7 * rec_v7,struct fts3rec_v1 * rec_v1)598 void ftrec_xlate_7to1(struct fts3rec_v7 *rec_v7, struct fts3rec_v1 *rec_v1)
599 {
600
601 bzero(rec_v1, sizeof (struct fts3rec_v1));
602
603 rec_v1->unix_secs = rec_v7->unix_secs;
604 rec_v1->unix_nsecs = rec_v7->unix_nsecs;
605 rec_v1->sysUpTime = rec_v7->sysUpTime;
606 rec_v1->exaddr = rec_v7->exaddr;
607 rec_v1->srcaddr = rec_v7->srcaddr;
608 rec_v1->dstaddr = rec_v7->dstaddr;
609 rec_v1->nexthop = rec_v7->nexthop;
610 rec_v1->input = rec_v7->input;
611 rec_v1->output = rec_v7->output;
612 rec_v1->dPkts = rec_v7->dPkts;
613 rec_v1->dOctets = rec_v7->dOctets;
614 rec_v1->First = rec_v7->First;
615 rec_v1->Last = rec_v7->Last;
616 rec_v1->srcport = rec_v7->srcport;
617 rec_v1->dstport = rec_v7->dstport;
618 rec_v1->prot = rec_v7->prot;
619 rec_v1->tos = rec_v7->tos;
620 rec_v1->tcp_flags = rec_v7->tcp_flags;
621
622 } /* ftrec_xlate_7to1 */
623
624
ftrec_xlate_7to5(struct fts3rec_v7 * rec_v7,struct fts3rec_v5 * rec_v5)625 void ftrec_xlate_7to5(struct fts3rec_v7 *rec_v7, struct fts3rec_v5 *rec_v5)
626 {
627
628 bzero(rec_v5, sizeof (struct fts3rec_v5));
629
630 rec_v5->unix_secs = rec_v7->unix_secs;
631 rec_v5->unix_nsecs = rec_v7->unix_nsecs;
632 rec_v5->sysUpTime = rec_v7->sysUpTime;
633 rec_v5->exaddr = rec_v7->exaddr;
634 rec_v5->srcaddr = rec_v7->srcaddr;
635 rec_v5->dstaddr = rec_v7->dstaddr;
636 rec_v5->nexthop = rec_v7->nexthop;
637 rec_v5->input = rec_v7->input;
638 rec_v5->output = rec_v7->output;
639 rec_v5->dPkts = rec_v7->dPkts;
640 rec_v5->dOctets = rec_v7->dOctets;
641 rec_v5->First = rec_v7->First;
642 rec_v5->Last = rec_v7->Last;
643 rec_v5->srcport = rec_v7->srcport;
644 rec_v5->dstport = rec_v7->dstport;
645 rec_v5->prot = rec_v7->prot;
646 rec_v5->tos = rec_v7->tos;
647 rec_v5->tcp_flags = rec_v7->tcp_flags;
648 rec_v5->engine_type = rec_v7->engine_type;
649 rec_v5->engine_id = rec_v7->engine_id;
650 rec_v5->src_mask = rec_v7->src_mask;
651 rec_v5->dst_mask = rec_v7->dst_mask;
652 rec_v5->src_as = rec_v7->src_as;
653 rec_v5->dst_as = rec_v7->dst_as;
654
655 } /* ftrec_xlate_7to5 */
656
ftrec_xlate_7to6(struct fts3rec_v7 * rec_v7,struct fts3rec_v6 * rec_v6)657 void ftrec_xlate_7to6(struct fts3rec_v7 *rec_v7, struct fts3rec_v6 *rec_v6)
658 {
659
660 bzero(rec_v6, sizeof (struct fts3rec_v6));
661
662 rec_v6->unix_secs = rec_v7->unix_secs;
663 rec_v6->unix_nsecs = rec_v7->unix_nsecs;
664 rec_v6->sysUpTime = rec_v7->sysUpTime;
665 rec_v6->exaddr = rec_v7->exaddr;
666 rec_v6->srcaddr = rec_v7->srcaddr;
667 rec_v6->dstaddr = rec_v7->dstaddr;
668 rec_v6->nexthop = rec_v7->nexthop;
669 rec_v6->input = rec_v7->input;
670 rec_v6->output = rec_v7->output;
671 rec_v6->dPkts = rec_v7->dPkts;
672 rec_v6->dOctets = rec_v7->dOctets;
673 rec_v6->First = rec_v7->First;
674 rec_v6->Last = rec_v7->Last;
675 rec_v6->srcport = rec_v7->srcport;
676 rec_v6->dstport = rec_v7->dstport;
677 rec_v6->prot = rec_v7->prot;
678 rec_v6->tos = rec_v7->tos;
679 rec_v6->tcp_flags = rec_v7->tcp_flags;
680 rec_v6->engine_type = rec_v7->engine_type;
681 rec_v6->engine_id = rec_v7->engine_id;
682 rec_v6->src_mask = rec_v7->src_mask;
683 rec_v6->dst_mask = rec_v7->dst_mask;
684 rec_v6->src_as = rec_v7->src_as;
685 rec_v6->dst_as = rec_v7->dst_as;
686
687 } /* ftrec_xlate_7to6 */
688
ftrec_xlate_7to1005(struct fts3rec_v7 * rec_v7,struct fts3rec_v1005 * rec_v1005)689 void ftrec_xlate_7to1005(struct fts3rec_v7 *rec_v7,
690 struct fts3rec_v1005 *rec_v1005)
691 {
692
693 bzero(rec_v1005, sizeof (struct fts3rec_v1005));
694
695 rec_v1005->unix_secs = rec_v7->unix_secs;
696 rec_v1005->unix_nsecs = rec_v7->unix_nsecs;
697 rec_v1005->sysUpTime = rec_v7->sysUpTime;
698 rec_v1005->exaddr = rec_v7->exaddr;
699 rec_v1005->srcaddr = rec_v7->srcaddr;
700 rec_v1005->dstaddr = rec_v7->dstaddr;
701 rec_v1005->nexthop = rec_v7->nexthop;
702 rec_v1005->input = rec_v7->input;
703 rec_v1005->output = rec_v7->output;
704 rec_v1005->dPkts = rec_v7->dPkts;
705 rec_v1005->dOctets = rec_v7->dOctets;
706 rec_v1005->First = rec_v7->First;
707 rec_v1005->Last = rec_v7->Last;
708 rec_v1005->srcport = rec_v7->srcport;
709 rec_v1005->dstport = rec_v7->dstport;
710 rec_v1005->prot = rec_v7->prot;
711 rec_v1005->tos = rec_v7->tos;
712 rec_v1005->tcp_flags = rec_v7->tcp_flags;
713 rec_v1005->engine_type = rec_v7->engine_type;
714 rec_v1005->engine_id = rec_v7->engine_id;
715 rec_v1005->src_mask = rec_v7->src_mask;
716 rec_v1005->dst_mask = rec_v7->dst_mask;
717 rec_v1005->src_as = rec_v7->src_as;
718 rec_v1005->dst_as = rec_v7->dst_as;
719
720 } /* ftrec_xlate_7to1005 */
721
ftrec_xlate_1005to5(struct fts3rec_v1005 * rec_v1005,struct fts3rec_v5 * rec_v5)722 void ftrec_xlate_1005to5(struct fts3rec_v1005 *rec_v1005,
723 struct fts3rec_v5 *rec_v5)
724 {
725 bzero(rec_v5, sizeof (struct fts3rec_v5));
726
727 rec_v5->unix_secs = rec_v1005->unix_secs;
728 rec_v5->unix_nsecs = rec_v1005->unix_nsecs;
729 rec_v5->sysUpTime = rec_v1005->sysUpTime;
730 rec_v5->exaddr = rec_v1005->exaddr;
731 rec_v5->srcaddr = rec_v1005->srcaddr;
732 rec_v5->dstaddr = rec_v1005->dstaddr;
733 rec_v5->nexthop = rec_v1005->nexthop;
734 rec_v5->input = rec_v1005->input;
735 rec_v5->output = rec_v1005->output;
736 rec_v5->dPkts = rec_v1005->dPkts;
737 rec_v5->dOctets = rec_v1005->dOctets;
738 rec_v5->First = rec_v1005->First;
739 rec_v5->Last = rec_v1005->Last;
740 rec_v5->srcport = rec_v1005->srcport;
741 rec_v5->dstport = rec_v1005->dstport;
742 rec_v5->prot = rec_v1005->prot;
743 rec_v5->tos = rec_v1005->tos;
744 rec_v5->tcp_flags = rec_v1005->tcp_flags;
745 rec_v5->engine_type = rec_v1005->engine_type;
746 rec_v5->engine_id = rec_v1005->engine_id;
747 rec_v5->src_mask = rec_v1005->src_mask;
748 rec_v5->dst_mask = rec_v1005->dst_mask;
749 rec_v5->src_as = rec_v1005->src_as;
750 rec_v5->dst_as = rec_v1005->dst_as;
751
752 } /* flow_xlate_1005to5 */
753
754 /*
755 * function fts3rec_compute_offsets
756 *
757 * populate a fts3rec_offset structure with structure offsets appropriate
758 * for the version in ftv.
759 *
760 * returns 0 for success, < 0 otherwise.
761 */
fts3rec_compute_offsets(struct fts3rec_offsets * o,struct ftver * ftv)762 int fts3rec_compute_offsets(struct fts3rec_offsets *o, struct ftver *ftv)
763 {
764 int ret;
765
766 ret = -1;
767
768 switch (ftv->d_version) {
769
770 case 1:
771 FT_OFFSET(unix_secs, fts3rec_v1)
772 FT_OFFSET(unix_nsecs, fts3rec_v1)
773 FT_OFFSET(sysUpTime, fts3rec_v1)
774 FT_OFFSET(exaddr, fts3rec_v1)
775 FT_OFFSET(srcaddr, fts3rec_v1)
776 FT_OFFSET(dstaddr, fts3rec_v1)
777 FT_OFFSET(nexthop, fts3rec_v1)
778 FT_OFFSET(input, fts3rec_v1)
779 FT_OFFSET(output, fts3rec_v1)
780 FT_OFFSET(dPkts, fts3rec_v1)
781 FT_OFFSET(dOctets, fts3rec_v1)
782 FT_OFFSET(First, fts3rec_v1)
783 FT_OFFSET(Last, fts3rec_v1)
784 FT_OFFSET(srcport, fts3rec_v1)
785 FT_OFFSET(dstport, fts3rec_v1)
786 FT_OFFSET(prot, fts3rec_v1)
787 FT_OFFSET(tos, fts3rec_v1)
788 FT_OFFSET(tcp_flags, fts3rec_v1)
789 ret = 0;
790 break;
791
792 case 5:
793 FT_OFFSET(unix_secs, fts3rec_v5)
794 FT_OFFSET(unix_nsecs, fts3rec_v5)
795 FT_OFFSET(sysUpTime, fts3rec_v5)
796 FT_OFFSET(exaddr, fts3rec_v5)
797 FT_OFFSET(srcaddr, fts3rec_v5)
798 FT_OFFSET(dstaddr, fts3rec_v5)
799 FT_OFFSET(nexthop, fts3rec_v5)
800 FT_OFFSET(input, fts3rec_v5)
801 FT_OFFSET(output, fts3rec_v5)
802 FT_OFFSET(dPkts, fts3rec_v5)
803 FT_OFFSET(dOctets, fts3rec_v5)
804 FT_OFFSET(First, fts3rec_v5)
805 FT_OFFSET(Last, fts3rec_v5)
806 FT_OFFSET(srcport, fts3rec_v5)
807 FT_OFFSET(dstport, fts3rec_v5)
808 FT_OFFSET(prot, fts3rec_v5)
809 FT_OFFSET(tos, fts3rec_v5)
810 FT_OFFSET(tcp_flags, fts3rec_v5)
811 FT_OFFSET(engine_type, fts3rec_v5)
812 FT_OFFSET(engine_id, fts3rec_v5)
813 FT_OFFSET(src_mask, fts3rec_v5)
814 FT_OFFSET(dst_mask, fts3rec_v5)
815 FT_OFFSET(src_as, fts3rec_v5)
816 FT_OFFSET(dst_as, fts3rec_v5)
817 ret = 0;
818 break;
819
820 case 6:
821 FT_OFFSET(unix_secs, fts3rec_v6)
822 FT_OFFSET(unix_nsecs, fts3rec_v6)
823 FT_OFFSET(sysUpTime, fts3rec_v6)
824 FT_OFFSET(exaddr, fts3rec_v6)
825 FT_OFFSET(srcaddr, fts3rec_v6)
826 FT_OFFSET(dstaddr, fts3rec_v6)
827 FT_OFFSET(nexthop, fts3rec_v6)
828 FT_OFFSET(input, fts3rec_v6)
829 FT_OFFSET(output, fts3rec_v6)
830 FT_OFFSET(dPkts, fts3rec_v6)
831 FT_OFFSET(dOctets, fts3rec_v6)
832 FT_OFFSET(First, fts3rec_v6)
833 FT_OFFSET(Last, fts3rec_v6)
834 FT_OFFSET(srcport, fts3rec_v6)
835 FT_OFFSET(dstport, fts3rec_v6)
836 FT_OFFSET(prot, fts3rec_v6)
837 FT_OFFSET(tos, fts3rec_v6)
838 FT_OFFSET(tcp_flags, fts3rec_v6)
839 FT_OFFSET(engine_type, fts3rec_v6)
840 FT_OFFSET(engine_id, fts3rec_v6)
841 FT_OFFSET(src_mask, fts3rec_v6)
842 FT_OFFSET(dst_mask, fts3rec_v6)
843 FT_OFFSET(src_as, fts3rec_v6)
844 FT_OFFSET(dst_as, fts3rec_v6)
845 FT_OFFSET(in_encaps, fts3rec_v6)
846 FT_OFFSET(out_encaps, fts3rec_v6)
847 FT_OFFSET(peer_nexthop, fts3rec_v6)
848 ret = 0;
849 break;
850
851 case 7:
852 FT_OFFSET(unix_secs, fts3rec_v7)
853 FT_OFFSET(unix_nsecs, fts3rec_v7)
854 FT_OFFSET(sysUpTime, fts3rec_v7)
855 FT_OFFSET(exaddr, fts3rec_v7)
856 FT_OFFSET(srcaddr, fts3rec_v7)
857 FT_OFFSET(dstaddr, fts3rec_v7)
858 FT_OFFSET(nexthop, fts3rec_v7)
859 FT_OFFSET(input, fts3rec_v7)
860 FT_OFFSET(output, fts3rec_v7)
861 FT_OFFSET(dPkts, fts3rec_v7)
862 FT_OFFSET(dOctets, fts3rec_v7)
863 FT_OFFSET(First, fts3rec_v7)
864 FT_OFFSET(Last, fts3rec_v7)
865 FT_OFFSET(srcport, fts3rec_v7)
866 FT_OFFSET(dstport, fts3rec_v7)
867 FT_OFFSET(prot, fts3rec_v7)
868 FT_OFFSET(tos, fts3rec_v7)
869 FT_OFFSET(tcp_flags, fts3rec_v7)
870 FT_OFFSET(engine_type, fts3rec_v7)
871 FT_OFFSET(engine_id, fts3rec_v7)
872 FT_OFFSET(src_mask, fts3rec_v7)
873 FT_OFFSET(dst_mask, fts3rec_v7)
874 FT_OFFSET(src_as, fts3rec_v7)
875 FT_OFFSET(dst_as, fts3rec_v7)
876 FT_OFFSET(router_sc, fts3rec_v7)
877 ret = 0;
878 break;
879
880 case 8:
881
882 switch (ftv->agg_method) {
883
884 case 1:
885 FT_OFFSET(unix_secs, fts3rec_v8_1)
886 FT_OFFSET(unix_nsecs, fts3rec_v8_1)
887 FT_OFFSET(sysUpTime, fts3rec_v8_1)
888 FT_OFFSET(exaddr, fts3rec_v8_1)
889 FT_OFFSET(dFlows, fts3rec_v8_1)
890 FT_OFFSET(dOctets, fts3rec_v8_1)
891 FT_OFFSET(dPkts, fts3rec_v8_1)
892 FT_OFFSET(First, fts3rec_v8_1)
893 FT_OFFSET(Last, fts3rec_v8_1)
894 FT_OFFSET(src_as, fts3rec_v8_1)
895 FT_OFFSET(dst_as, fts3rec_v8_1)
896 FT_OFFSET(input, fts3rec_v8_1)
897 FT_OFFSET(output, fts3rec_v8_1)
898 FT_OFFSET(engine_id, fts3rec_v8_1)
899 FT_OFFSET(engine_type, fts3rec_v8_1)
900 ret = 0;
901 break;
902
903 case 2:
904 FT_OFFSET(unix_secs, fts3rec_v8_2)
905 FT_OFFSET(unix_nsecs, fts3rec_v8_2)
906 FT_OFFSET(sysUpTime, fts3rec_v8_2)
907 FT_OFFSET(exaddr, fts3rec_v8_2)
908 FT_OFFSET(dFlows, fts3rec_v8_2)
909 FT_OFFSET(dOctets, fts3rec_v8_2)
910 FT_OFFSET(dPkts, fts3rec_v8_2)
911 FT_OFFSET(First, fts3rec_v8_2)
912 FT_OFFSET(Last, fts3rec_v8_2)
913 FT_OFFSET(prot, fts3rec_v8_2)
914 FT_OFFSET(srcport, fts3rec_v8_2)
915 FT_OFFSET(dstport, fts3rec_v8_2)
916 FT_OFFSET(engine_id, fts3rec_v8_2)
917 FT_OFFSET(engine_type, fts3rec_v8_2)
918 ret = 0;
919 break;
920
921 case 3:
922 FT_OFFSET(unix_secs, fts3rec_v8_3)
923 FT_OFFSET(unix_nsecs, fts3rec_v8_3)
924 FT_OFFSET(sysUpTime, fts3rec_v8_3)
925 FT_OFFSET(exaddr, fts3rec_v8_3)
926 FT_OFFSET(dFlows, fts3rec_v8_3)
927 FT_OFFSET(dOctets, fts3rec_v8_3)
928 FT_OFFSET(dPkts, fts3rec_v8_3)
929 FT_OFFSET(First, fts3rec_v8_3)
930 FT_OFFSET(Last, fts3rec_v8_3)
931 FT_OFFSET(srcaddr, fts3rec_v8_3)
932 FT_OFFSET(src_mask, fts3rec_v8_3)
933 FT_OFFSET(src_as, fts3rec_v8_3)
934 FT_OFFSET(input, fts3rec_v8_3)
935 FT_OFFSET(engine_id, fts3rec_v8_3)
936 FT_OFFSET(engine_type, fts3rec_v8_3)
937 ret = 0;
938 break;
939
940 case 4:
941 FT_OFFSET(unix_secs, fts3rec_v8_4)
942 FT_OFFSET(unix_nsecs, fts3rec_v8_4)
943 FT_OFFSET(sysUpTime, fts3rec_v8_4)
944 FT_OFFSET(exaddr, fts3rec_v8_4)
945 FT_OFFSET(dFlows, fts3rec_v8_4)
946 FT_OFFSET(dOctets, fts3rec_v8_4)
947 FT_OFFSET(dPkts, fts3rec_v8_4)
948 FT_OFFSET(First, fts3rec_v8_4)
949 FT_OFFSET(Last, fts3rec_v8_4)
950 FT_OFFSET(dstaddr, fts3rec_v8_4)
951 FT_OFFSET(dst_mask, fts3rec_v8_4)
952 FT_OFFSET(dst_as, fts3rec_v8_4)
953 FT_OFFSET(output, fts3rec_v8_4)
954 FT_OFFSET(engine_id, fts3rec_v8_4)
955 FT_OFFSET(engine_type, fts3rec_v8_4)
956 ret = 0;
957 break;
958
959 case 5:
960 FT_OFFSET(unix_secs, fts3rec_v8_5)
961 FT_OFFSET(unix_nsecs, fts3rec_v8_5)
962 FT_OFFSET(sysUpTime, fts3rec_v8_5)
963 FT_OFFSET(exaddr, fts3rec_v8_5)
964 FT_OFFSET(dFlows, fts3rec_v8_5)
965 FT_OFFSET(dOctets, fts3rec_v8_5)
966 FT_OFFSET(dPkts, fts3rec_v8_5)
967 FT_OFFSET(First, fts3rec_v8_5)
968 FT_OFFSET(Last, fts3rec_v8_5)
969 FT_OFFSET(srcaddr, fts3rec_v8_5)
970 FT_OFFSET(src_mask, fts3rec_v8_5)
971 FT_OFFSET(src_as, fts3rec_v8_5)
972 FT_OFFSET(dstaddr, fts3rec_v8_5)
973 FT_OFFSET(dst_mask, fts3rec_v8_5)
974 FT_OFFSET(dst_as, fts3rec_v8_5)
975 FT_OFFSET(input, fts3rec_v8_5)
976 FT_OFFSET(output, fts3rec_v8_5)
977 FT_OFFSET(engine_id, fts3rec_v8_5)
978 FT_OFFSET(engine_type, fts3rec_v8_5)
979 ret = 0;
980 break;
981
982 case 6:
983 FT_OFFSET(unix_secs, fts3rec_v8_6)
984 FT_OFFSET(unix_nsecs, fts3rec_v8_6)
985 FT_OFFSET(sysUpTime, fts3rec_v8_6)
986 FT_OFFSET(exaddr, fts3rec_v8_6)
987 FT_OFFSET(dPkts, fts3rec_v8_6)
988 FT_OFFSET(dOctets, fts3rec_v8_6)
989 FT_OFFSET(First, fts3rec_v8_6)
990 FT_OFFSET(Last, fts3rec_v8_6)
991 FT_OFFSET(dstaddr, fts3rec_v8_6)
992 FT_OFFSET(extra_pkts, fts3rec_v8_6)
993 FT_OFFSET(router_sc, fts3rec_v8_6)
994 FT_OFFSET(output, fts3rec_v8_6)
995 FT_OFFSET(tos, fts3rec_v8_6)
996 FT_OFFSET(marked_tos, fts3rec_v8_6)
997 FT_OFFSET(engine_type, fts3rec_v8_6)
998 FT_OFFSET(engine_id, fts3rec_v8_6)
999 ret = 0;
1000 break;
1001
1002 case 7:
1003 FT_OFFSET(unix_secs, fts3rec_v8_7)
1004 FT_OFFSET(unix_nsecs, fts3rec_v8_7)
1005 FT_OFFSET(sysUpTime, fts3rec_v8_7)
1006 FT_OFFSET(exaddr, fts3rec_v8_7)
1007 FT_OFFSET(dPkts, fts3rec_v8_7)
1008 FT_OFFSET(dOctets, fts3rec_v8_7)
1009 FT_OFFSET(First, fts3rec_v8_7)
1010 FT_OFFSET(Last, fts3rec_v8_7)
1011 FT_OFFSET(dstaddr, fts3rec_v8_7)
1012 FT_OFFSET(srcaddr, fts3rec_v8_7)
1013 FT_OFFSET(extra_pkts, fts3rec_v8_7)
1014 FT_OFFSET(router_sc, fts3rec_v8_7)
1015 FT_OFFSET(output, fts3rec_v8_7)
1016 FT_OFFSET(input, fts3rec_v8_7)
1017 FT_OFFSET(tos, fts3rec_v8_7)
1018 FT_OFFSET(marked_tos, fts3rec_v8_7)
1019 FT_OFFSET(engine_type, fts3rec_v8_7)
1020 FT_OFFSET(engine_id, fts3rec_v8_7)
1021 ret = 0;
1022 break;
1023
1024 case 8:
1025 FT_OFFSET(unix_secs, fts3rec_v8_8)
1026 FT_OFFSET(unix_nsecs, fts3rec_v8_8)
1027 FT_OFFSET(sysUpTime, fts3rec_v8_8)
1028 FT_OFFSET(exaddr, fts3rec_v8_8)
1029 FT_OFFSET(dPkts, fts3rec_v8_8)
1030 FT_OFFSET(dOctets, fts3rec_v8_8)
1031 FT_OFFSET(First, fts3rec_v8_8)
1032 FT_OFFSET(Last, fts3rec_v8_8)
1033 FT_OFFSET(dstaddr, fts3rec_v8_8)
1034 FT_OFFSET(srcaddr, fts3rec_v8_8)
1035 FT_OFFSET(extra_pkts, fts3rec_v8_8)
1036 FT_OFFSET(router_sc, fts3rec_v8_8)
1037 FT_OFFSET(srcport, fts3rec_v8_8)
1038 FT_OFFSET(dstport, fts3rec_v8_8)
1039 FT_OFFSET(output, fts3rec_v8_8)
1040 FT_OFFSET(input, fts3rec_v8_8)
1041 FT_OFFSET(tos, fts3rec_v8_8)
1042 FT_OFFSET(marked_tos, fts3rec_v8_8)
1043 FT_OFFSET(engine_type, fts3rec_v8_8)
1044 FT_OFFSET(engine_id, fts3rec_v8_8)
1045 FT_OFFSET(prot, fts3rec_v8_8)
1046 ret = 0;
1047 break;
1048
1049 case 9:
1050 FT_OFFSET(unix_secs, fts3rec_v8_9)
1051 FT_OFFSET(unix_nsecs, fts3rec_v8_9)
1052 FT_OFFSET(sysUpTime, fts3rec_v8_9)
1053 FT_OFFSET(exaddr, fts3rec_v8_9)
1054 FT_OFFSET(dFlows, fts3rec_v8_9)
1055 FT_OFFSET(dPkts, fts3rec_v8_9)
1056 FT_OFFSET(dOctets, fts3rec_v8_9)
1057 FT_OFFSET(First, fts3rec_v8_9)
1058 FT_OFFSET(Last, fts3rec_v8_9)
1059 FT_OFFSET(src_as, fts3rec_v8_9)
1060 FT_OFFSET(dst_as, fts3rec_v8_9)
1061 FT_OFFSET(input, fts3rec_v8_9)
1062 FT_OFFSET(output, fts3rec_v8_9)
1063 FT_OFFSET(engine_type, fts3rec_v8_9)
1064 FT_OFFSET(engine_id, fts3rec_v8_9)
1065 FT_OFFSET(tos, fts3rec_v8_9)
1066 ret = 0;
1067 break;
1068
1069 case 10:
1070 FT_OFFSET(unix_secs, fts3rec_v8_10)
1071 FT_OFFSET(unix_nsecs, fts3rec_v8_10)
1072 FT_OFFSET(sysUpTime, fts3rec_v8_10)
1073 FT_OFFSET(exaddr, fts3rec_v8_10)
1074 FT_OFFSET(dFlows, fts3rec_v8_10)
1075 FT_OFFSET(dPkts, fts3rec_v8_10)
1076 FT_OFFSET(dOctets, fts3rec_v8_10)
1077 FT_OFFSET(First, fts3rec_v8_10)
1078 FT_OFFSET(Last, fts3rec_v8_10)
1079 FT_OFFSET(srcport, fts3rec_v8_10)
1080 FT_OFFSET(dstport, fts3rec_v8_10)
1081 FT_OFFSET(input, fts3rec_v8_10)
1082 FT_OFFSET(output, fts3rec_v8_10)
1083 FT_OFFSET(engine_type, fts3rec_v8_10)
1084 FT_OFFSET(engine_id, fts3rec_v8_10)
1085 FT_OFFSET(prot, fts3rec_v8_10)
1086 FT_OFFSET(tos, fts3rec_v8_10)
1087 ret = 0;
1088 break;
1089
1090 case 11:
1091 FT_OFFSET(unix_secs, fts3rec_v8_11)
1092 FT_OFFSET(unix_nsecs, fts3rec_v8_11)
1093 FT_OFFSET(sysUpTime, fts3rec_v8_11)
1094 FT_OFFSET(exaddr, fts3rec_v8_11)
1095 FT_OFFSET(dFlows, fts3rec_v8_11)
1096 FT_OFFSET(dPkts, fts3rec_v8_11)
1097 FT_OFFSET(dOctets, fts3rec_v8_11)
1098 FT_OFFSET(First, fts3rec_v8_11)
1099 FT_OFFSET(Last, fts3rec_v8_11)
1100 FT_OFFSET(srcaddr, fts3rec_v8_11)
1101 FT_OFFSET(src_mask, fts3rec_v8_11)
1102 FT_OFFSET(tos, fts3rec_v8_11)
1103 FT_OFFSET(src_as, fts3rec_v8_11)
1104 FT_OFFSET(input, fts3rec_v8_11)
1105 FT_OFFSET(engine_type, fts3rec_v8_11)
1106 FT_OFFSET(engine_id, fts3rec_v8_11)
1107 ret = 0;
1108 break;
1109
1110 case 12:
1111 FT_OFFSET(unix_secs, fts3rec_v8_12)
1112 FT_OFFSET(unix_nsecs, fts3rec_v8_12)
1113 FT_OFFSET(sysUpTime, fts3rec_v8_12)
1114 FT_OFFSET(exaddr, fts3rec_v8_12)
1115 FT_OFFSET(dFlows, fts3rec_v8_12)
1116 FT_OFFSET(dPkts, fts3rec_v8_12)
1117 FT_OFFSET(dOctets, fts3rec_v8_12)
1118 FT_OFFSET(First, fts3rec_v8_12)
1119 FT_OFFSET(Last, fts3rec_v8_12)
1120 FT_OFFSET(dstaddr, fts3rec_v8_12)
1121 FT_OFFSET(output, fts3rec_v8_12)
1122 FT_OFFSET(dst_as, fts3rec_v8_12)
1123 FT_OFFSET(dst_mask, fts3rec_v8_12)
1124 FT_OFFSET(tos, fts3rec_v8_12)
1125 FT_OFFSET(engine_type, fts3rec_v8_12)
1126 FT_OFFSET(engine_id, fts3rec_v8_12)
1127 ret = 0;
1128 break;
1129
1130 case 13:
1131 FT_OFFSET(unix_secs, fts3rec_v8_13)
1132 FT_OFFSET(unix_nsecs, fts3rec_v8_13)
1133 FT_OFFSET(sysUpTime, fts3rec_v8_13)
1134 FT_OFFSET(exaddr, fts3rec_v8_13)
1135 FT_OFFSET(dFlows, fts3rec_v8_13)
1136 FT_OFFSET(dPkts, fts3rec_v8_13)
1137 FT_OFFSET(dOctets, fts3rec_v8_13)
1138 FT_OFFSET(First, fts3rec_v8_13)
1139 FT_OFFSET(Last, fts3rec_v8_13)
1140 FT_OFFSET(srcaddr, fts3rec_v8_13)
1141 FT_OFFSET(dstaddr, fts3rec_v8_13)
1142 FT_OFFSET(src_as, fts3rec_v8_13)
1143 FT_OFFSET(dst_as, fts3rec_v8_13)
1144 FT_OFFSET(input, fts3rec_v8_13)
1145 FT_OFFSET(output, fts3rec_v8_13)
1146 FT_OFFSET(dst_mask, fts3rec_v8_13)
1147 FT_OFFSET(src_mask, fts3rec_v8_13)
1148 FT_OFFSET(engine_type, fts3rec_v8_13)
1149 FT_OFFSET(engine_id, fts3rec_v8_13)
1150 FT_OFFSET(tos, fts3rec_v8_13)
1151 ret = 0;
1152 break;
1153
1154 case 14:
1155 FT_OFFSET(unix_secs, fts3rec_v8_14)
1156 FT_OFFSET(unix_nsecs, fts3rec_v8_14)
1157 FT_OFFSET(sysUpTime, fts3rec_v8_14)
1158 FT_OFFSET(exaddr, fts3rec_v8_14)
1159 FT_OFFSET(dFlows, fts3rec_v8_14)
1160 FT_OFFSET(dPkts, fts3rec_v8_14)
1161 FT_OFFSET(dOctets, fts3rec_v8_14)
1162 FT_OFFSET(First, fts3rec_v8_14)
1163 FT_OFFSET(Last, fts3rec_v8_14)
1164 FT_OFFSET(srcaddr, fts3rec_v8_14)
1165 FT_OFFSET(dstaddr, fts3rec_v8_14)
1166 FT_OFFSET(srcport, fts3rec_v8_14)
1167 FT_OFFSET(dstport, fts3rec_v8_14)
1168 FT_OFFSET(input, fts3rec_v8_14)
1169 FT_OFFSET(output, fts3rec_v8_14)
1170 FT_OFFSET(dst_mask, fts3rec_v8_14)
1171 FT_OFFSET(src_mask, fts3rec_v8_14)
1172 FT_OFFSET(engine_type, fts3rec_v8_14)
1173 FT_OFFSET(engine_id, fts3rec_v8_14)
1174 FT_OFFSET(tos, fts3rec_v8_14)
1175 FT_OFFSET(prot, fts3rec_v8_14)
1176 ret = 0;
1177 break;
1178
1179 }
1180 break;
1181
1182 case 1005:
1183 FT_OFFSET(unix_secs, fts3rec_v1005)
1184 FT_OFFSET(unix_nsecs, fts3rec_v1005)
1185 FT_OFFSET(sysUpTime, fts3rec_v1005)
1186 FT_OFFSET(exaddr, fts3rec_v1005)
1187 FT_OFFSET(srcaddr, fts3rec_v1005)
1188 FT_OFFSET(dstaddr, fts3rec_v1005)
1189 FT_OFFSET(nexthop, fts3rec_v1005)
1190 FT_OFFSET(input, fts3rec_v1005)
1191 FT_OFFSET(output, fts3rec_v1005)
1192 FT_OFFSET(dPkts, fts3rec_v1005)
1193 FT_OFFSET(dOctets, fts3rec_v1005)
1194 FT_OFFSET(First, fts3rec_v1005)
1195 FT_OFFSET(Last, fts3rec_v1005)
1196 FT_OFFSET(srcport, fts3rec_v1005)
1197 FT_OFFSET(dstport, fts3rec_v1005)
1198 FT_OFFSET(prot, fts3rec_v1005)
1199 FT_OFFSET(tos, fts3rec_v1005)
1200 FT_OFFSET(tcp_flags, fts3rec_v1005)
1201 FT_OFFSET(engine_type, fts3rec_v1005)
1202 FT_OFFSET(engine_id, fts3rec_v1005)
1203 FT_OFFSET(src_mask, fts3rec_v1005)
1204 FT_OFFSET(dst_mask, fts3rec_v1005)
1205 FT_OFFSET(src_as, fts3rec_v1005)
1206 FT_OFFSET(dst_as, fts3rec_v1005)
1207 FT_OFFSET(src_tag, fts3rec_v1005)
1208 FT_OFFSET(dst_tag, fts3rec_v1005)
1209 ret = 0;
1210 break;
1211
1212 } /* switch */
1213
1214 o->xfields = ftrec_xfield(ftv);
1215
1216 bcopy(ftv, &o->ftv, sizeof *ftv);
1217
1218 return ret;
1219
1220 } /* fts3rec_compute_offsets */
1221
1222