summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
authorKyrylo Yatsenko <hedrok@gmail.com>2025-08-27 17:49:12 +0300
committerKyrylo Yatsenko <hedrok@gmail.com>2025-09-16 13:00:56 +0300
commite992fb4ec3d65674c794bdcb961b62485fec8d50 (patch)
tree37431490c991e47d5cea14acf566c200c131f7fd /data
parentd72d15c28f2e890ded3e5d24fceac00dac1238ed (diff)
downloadvyos-1x-e992fb4ec3d65674c794bdcb961b62485fec8d50.tar.gz
vyos-1x-e992fb4ec3d65674c794bdcb961b62485fec8d50.zip
T75: migrate from pmacct to ipt_NETFLOW
* Change nft to iptables in system_flow-accounting.py as ipt_NETFLOW is iptales plugin * Remove specific and non-relevant pmacct options * Add ipt_NETFLOW options * Move 'interfaces' to 'netflow' tree * Support more flexible 'source-address' and 'source-interface' for each server instead of one source * Add migration script * Update op mode command 'show flow-accounting' * Update op mode command 'restart flow-accounting'
Diffstat (limited to 'data')
-rw-r--r--data/templates/ipt-netflow/ipt_NETFLOW.conf.j229
-rw-r--r--data/templates/pmacct/override.conf.j217
-rw-r--r--data/templates/pmacct/uacctd.conf.j257
3 files changed, 29 insertions, 74 deletions
diff --git a/data/templates/ipt-netflow/ipt_NETFLOW.conf.j2 b/data/templates/ipt-netflow/ipt_NETFLOW.conf.j2
new file mode 100644
index 000000000..116b8c973
--- /dev/null
+++ b/data/templates/ipt-netflow/ipt_NETFLOW.conf.j2
@@ -0,0 +1,29 @@
+{% if netflow.engine_id is vyos_defined %}
+options ipt_NETFLOW engine-id={{ netflow.engine_id }}
+{% endif %}
+{% if netflow.max_flows is vyos_defined %}
+options ipt_NETFLOW maxflows={{ netflow.max_flows }}
+{% endif %}
+{% if netflow.sampling_rate is vyos_defined %}
+options ipt_NETFLOW sampler=random:{{ netflow.sampling_rate }}
+{% endif %}
+{% if netflow.server is vyos_defined %}
+{% set servers_list = [] %}
+{% for server in netflow.server %}
+{% set d = netflow.server[server] %}
+{% set s = (server | bracketize_ipv6) ~ ':' ~ d['port'] %}
+{% set s = s ~ ('%' ~ d['source_interface'] if d['source_interface'] is vyos_defined else '') %}
+{% set s = s ~ ('@' ~ d['source_address'] if d['source_address'] is vyos_defined else '') %}
+{% set _ = servers_list.append(s) %}
+{% endfor %}
+options ipt_NETFLOW destination={{ servers_list | join(",") }}
+{% endif %}
+{% if netflow.version is vyos_defined %}
+options ipt_NETFLOW protocol={{ netflow.version }}
+{% endif %}
+{% if netflow.inactive_timeout is vyos_defined %}
+options ipt_NETFLOW inactive_timeout={{ netflow.inactive_timeout }}
+{% endif %}
+{% if netflow.active_timeout is vyos_defined %}
+options ipt_NETFLOW active_timeout={{ netflow.active_timeout }}
+{% endif %}
diff --git a/data/templates/pmacct/override.conf.j2 b/data/templates/pmacct/override.conf.j2
deleted file mode 100644
index 44a100bb6..000000000
--- a/data/templates/pmacct/override.conf.j2
+++ /dev/null
@@ -1,17 +0,0 @@
-{% set vrf_command = 'ip vrf exec ' ~ vrf ~ ' ' if vrf is vyos_defined else '' %}
-[Unit]
-After=
-After=vyos-router.service
-ConditionPathExists=
-ConditionPathExists=/run/pmacct/uacctd.conf
-
-[Service]
-EnvironmentFile=
-ExecStart=
-ExecStart={{ vrf_command }}/usr/sbin/uacctd -f /run/pmacct/uacctd.conf
-ExecStop=/usr/libexec/vyos/system/uacctd_stop.py $MAINPID 60
-WorkingDirectory=
-WorkingDirectory=/run/pmacct
-Restart=always
-RestartSec=10
-KillMode=mixed
diff --git a/data/templates/pmacct/uacctd.conf.j2 b/data/templates/pmacct/uacctd.conf.j2
deleted file mode 100644
index d2de80df4..000000000
--- a/data/templates/pmacct/uacctd.conf.j2
+++ /dev/null
@@ -1,57 +0,0 @@
-# Genereated from VyOS configuration
-daemonize: true
-promisc: false
-syslog: daemon
-uacctd_group: 2
-uacctd_nl_size: 2097152
-snaplen: {{ packet_length }}
-aggregate: in_iface{{ ',out_iface' if enable_egress is vyos_defined }},src_mac,dst_mac,vlan,src_host,dst_host,src_port,dst_port,proto,tos,flows
-{% set pipe_size = buffer_size | int *1024 *1024 %}
-plugin_pipe_size: {{ pipe_size }}
-{# We need an integer division (//) without any remainder or fraction #}
-plugin_buffer_size: {{ pipe_size // 1000 }}
-{% if syslog_facility is vyos_defined %}
-syslog: {{ syslog_facility }}
-{% endif %}
-{% if disable_imt is not defined %}
-imt_path: /tmp/uacctd.pipe
-imt_mem_pools_number: 169
-{% endif %}
-
-{% set plugin = [] %}
-{% if netflow.server is vyos_defined %}
-{% for server in netflow.server %}
-{% set nf_server_key = 'nf_' ~ server | dot_colon_to_dash %}
-{% set _ = plugin.append('nfprobe['~ nf_server_key ~ ']') %}
-{% endfor %}
-{% endif %}
-{% if disable_imt is not defined %}
-{% set _ = plugin.append('memory') %}
-{% endif %}
-plugins: {{ plugin | join(',') }}
-
-{% if netflow.server is vyos_defined %}
-# NetFlow servers
-{% for server, server_config in netflow.server.items() %}
-{# # prevent pmacct syntax error when using IPv6 flow collectors #}
-{% set nf_server_key = 'nf_' ~ server | dot_colon_to_dash %}
-nfprobe_receiver[{{ nf_server_key }}]: {{ server | bracketize_ipv6 }}:{{ server_config.port }}
-nfprobe_version[{{ nf_server_key }}]: {{ netflow.version }}
-{% if netflow.engine_id is vyos_defined %}
-nfprobe_engine[{{ nf_server_key }}]: {{ netflow.engine_id }}
-{% endif %}
-{% if netflow.max_flows is vyos_defined %}
-nfprobe_maxflows[{{ nf_server_key }}]: {{ netflow.max_flows }}
-{% endif %}
-{% if netflow.sampling_rate is vyos_defined %}
-sampling_rate[{{ nf_server_key }}]: {{ netflow.sampling_rate }}
-{% endif %}
-{% if netflow.source_address is vyos_defined %}
-nfprobe_source_ip[{{ nf_server_key }}]: {{ netflow.source_address | bracketize_ipv6 }}
-{% endif %}
-{% if netflow.timeout is vyos_defined %}
-nfprobe_timeouts[{{ nf_server_key }}]: expint={{ netflow.timeout.expiry_interval }}:general={{ netflow.timeout.flow_generic }}:icmp={{ netflow.timeout.icmp }}:maxlife={{ netflow.timeout.max_active_life }}:tcp.fin={{ netflow.timeout.tcp_fin }}:tcp={{ netflow.timeout.tcp_generic }}:tcp.rst={{ netflow.timeout.tcp_rst }}:udp={{ netflow.timeout.udp }}
-{% endif %}
-
-{% endfor %}
-{% endif %}