|
1 | 1 | import struct
|
2 | 2 | from ipaddress import IPv4Address, IPv4Network, IPv6Address, IPv6Network
|
3 | 3 | from typing import Iterator, Union, Any
|
| 4 | +from .field import Field |
4 | 5 | from .field_type import FIELD_TYPE_FUNC
|
5 | 6 | from .field_type import FieldType
|
6 | 7 | from .template import DataTemplate
|
|
9 | 10 | V5_TEMPLATE_KEY = None, None, None
|
10 | 11 | V5_TEMPLATE_FMT = '>4s4s4sHHLLLLHH2sBBB3s4s'
|
11 | 12 | V5_TEMPLATE_SIZE = struct.calcsize(V5_TEMPLATE_FMT)
|
| 13 | +V5_FIELDS = [ |
| 14 | + Field(FieldType.IPV4_SRC_ADDR.value, 4), |
| 15 | + Field(FieldType.IPV4_DST_ADDR.value, 4), |
| 16 | + Field(FieldType.IPV4_NEXT_HOP.value, 4), |
| 17 | + Field(FieldType.INPUT_SNMP.value, 2), |
| 18 | + Field(FieldType.OUTPUT_SNMP.value, 2), |
| 19 | + Field(FieldType.IN_PKTS.value, 4), |
| 20 | + Field(FieldType.IN_BYTES.value, 4), |
| 21 | + Field(FieldType.FIRST_SWITCHED.value, 4), |
| 22 | + Field(FieldType.LAST_SWITCHED.value, 4), |
| 23 | + Field(FieldType.L4_SRC_PORT.value, 2), |
| 24 | + Field(FieldType.L4_DST_PORT.value, 2), |
| 25 | + Field(FieldType.PROTOCOL.value, 1), |
| 26 | + Field(FieldType.TOS.value, 1), |
| 27 | + Field(FieldType.TCP_FLAGS.value, 1), |
| 28 | +] |
12 | 29 |
|
13 | 30 | DataTemplateKey = Any # TODO v5 key should should be also tuple[str, int, int]
|
14 | 31 | flowset_templates: dict[DataTemplateKey, DataTemplate] = {
|
15 | 32 | V5_TEMPLATE_KEY: DataTemplate(
|
16 | 33 | V5_TEMPLATE_FMT,
|
17 | 34 | V5_TEMPLATE_SIZE,
|
18 |
| - [], |
19 |
| - [ |
20 |
| - FieldType.IPV4_SRC_ADDR, |
21 |
| - FieldType.IPV4_DST_ADDR, |
22 |
| - FieldType.IPV4_NEXT_HOP, |
23 |
| - FieldType.INPUT_SNMP, |
24 |
| - FieldType.OUTPUT_SNMP, |
25 |
| - FieldType.IN_PKTS, |
26 |
| - FieldType.IN_BYTES, |
27 |
| - FieldType.FIRST_SWITCHED, |
28 |
| - FieldType.LAST_SWITCHED, |
29 |
| - FieldType.L4_SRC_PORT, |
30 |
| - FieldType.L4_DST_PORT, |
31 |
| - None, # 1 byte padding |
32 |
| - FieldType.PROTOCOL, |
33 |
| - FieldType.TOS, |
34 |
| - FieldType.TCP_FLAGS, |
35 |
| - None, # 3 byte padding |
36 |
| - None, # reserved |
37 |
| - ], |
| 35 | + V5_FIELDS, |
| 36 | + [f.id for f in V5_FIELDS], |
38 | 37 | 0, # uptime not used for v5 packets
|
39 | 38 | )
|
40 | 39 | }
|
|
0 commit comments