Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BGP daemon does not check last keepalive > hold time #634

Open
floatingstatic opened this issue Aug 16, 2022 · 3 comments
Open

BGP daemon does not check last keepalive > hold time #634

floatingstatic opened this issue Aug 16, 2022 · 3 comments

Comments

@floatingstatic
Copy link
Contributor

floatingstatic commented Aug 16, 2022

Description
I have a scenario where the passive BGP speaker in pmacct (sfacctd) sometimes doesn't receive a BGP notification or TCP reset to signal that a neighbor has gone away. This is due the host running the non-pmacctd bgp daemon being taken offline in a very ungraceful way. When this happens it seems that sfacctd considered the BGP session established for a very long time which appears to be the product of linux default tcp timers (net.ipv4.tcp_keepalive_time = 7200 in the upstream docker container for sfacctd). While I can mess around with the tcp stack settings to try to step around this it seems this should be something the BGP daemon in pmacct handles.

To reproduce this I built a small docker-compose environment that has two containers, pmacct/sfacctd:latest and gobgpd.
sfacctd runs on ip 10.200.0.10
gobgp runs on 10.200.0.20

The sfacctd config looks like:

!
daemonize: false
sfacctd_port: 6343
!
bgp_daemon: true
bgp_daemon_max_peers: 4
bgp_daemon_as: 65534
bgp_daemon_port: 179
bgp_agent_map: /etc/pmacct/bgp.map

The gobgp config looks like:

[global.config]
  as = 65534
  router-id = "10.200.0.20"
  port = 179

[[peer-groups]]
  [peer-groups.config]
    peer-group-name = "telemetry"
    peer-as = 65534
    local-as = 65534
    [peer-groups.transport.config]
        local-address = "10.200.0.20"
        remote-port = 179
    [[peer-groups.afi-safis]]
      [peer-groups.afi-safis.config]
        afi-safi-name = "ipv4-unicast"
    [[peer-groups.afi-safis]]
      [peer-groups.afi-safis.config]
        afi-safi-name = "ipv6-unicast"

[[neighbors]]
  [neighbors.config]
    neighbor-address = "10.200.0.10"
    peer-group = "telemetry"

I spin up both containers and let them form an MP-BGP session (no routes are actually exchanged). Once established to reproduce this behavior I null route 10.200.0.10/32 on the gobgp container. We see something like this:

nco-4618-sfacctd-keepalive-sfacctd-1  | INFO ( default/core/BGP ): maximum BGP peers allowed: 4
nco-4618-sfacctd-keepalive-sfacctd-1  | INFO ( default/core/BGP ): waiting for BGP data on :::179
nco-4618-sfacctd-keepalive-sfacctd-1  | INFO ( default/core ): waiting for sFlow data on :::6343
nco-4618-sfacctd-keepalive-sfacctd-1  | OK ( default_memory/memory ): waiting for data on: '/tmp/collect.pipe'
nco-4618-sfacctd-keepalive-sfacctd-1  | INFO ( default/core/BGP ): [10.200.0.20] BGP peers usage: 1/4
nco-4618-sfacctd-keepalive-sfacctd-1  | INFO ( default/core/BGP ): [10.200.0.20] Capability: MultiProtocol [1] AFI [1] SAFI [1]
nco-4618-sfacctd-keepalive-sfacctd-1  | INFO ( default/core/BGP ): [10.200.0.20] Capability: MultiProtocol [1] AFI [2] SAFI [1]
nco-4618-sfacctd-keepalive-sfacctd-1  | INFO ( default/core/BGP ): [10.200.0.20] Capability: 4-bytes AS [41] ASN [65534]
nco-4618-sfacctd-keepalive-sfacctd-1  | INFO ( default/core/BGP ): [10.200.0.20] BGP_OPEN: Local AS: 65534 Remote AS: 65534 HoldTime: 90
nco-4618-sfacctd-keepalive-gobgp-1    | time="2022-08-16T16:12:26Z" level=info msg="Peer Up" Key=10.200.0.10 State=BGP_FSM_OPENCONFIRM Topic=Peer
nco-4618-sfacctd-keepalive-gobgp-1    | time="2022-08-16T16:14:26Z" level=warning msg="hold timer expired" Key=10.200.0.10 State=BGP_FSM_ESTABLISHED Topic=Peer
nco-4618-sfacctd-keepalive-gobgp-1    | time="2022-08-16T16:14:26Z" level=warning msg="sent notification" Code=4 Data="[]" Key=10.200.0.10 State=BGP_FSM_ESTABLISHED Subcode=0 Topic=Peer
nco-4618-sfacctd-keepalive-gobgp-1    | time="2022-08-16T16:14:26Z" level=info msg="Peer Down" Key=10.200.0.10 Reason=hold-timer-expired State=BGP_FSM_ESTABLISHED Topic=Peer

gobgp successfully detects that the neighbor is down after the 90 second hold time expires but sfacctd logs nothing. The local linux stack on the sfacctd container shows the following and stays this way for hours:

root@sfacctd:/# netstat -an | grep 10.200.0.20
tcp6       0      0 10.200.0.10:179         10.200.0.20:48777       ESTABLISHED

From sfacctd's perspective the neighbor is "stuck" this way for a long time. The kicker is in my production environment I use tmp_bgp_lookup_compare_ports (not used in the experiment above) which means that we only compare router id so a new connection attempt coming in after my remote BGP speaker reboots is rejected by sfacctd because it thinks there is an existing BGP session from that router id.

Would it be possible to add some sort of background thread to check keepalive vs hold time for neighbors? Something similar to

if ((now - peers[peers_check_idx].last_keepalive) > peers[peers_check_idx].ht) {
but as a background thread?

Version

root@sfacctd:/# sfacctd -V
sFlow Accounting Daemon, sfacctd 1.7.7-git [20211107-0 (ef37a415)]

Arguments:
 '--enable-mysql' '--enable-pgsql' '--enable-sqlite3' '--enable-kafka' '--enable-geoipv2' '--enable-jansson' '--enable-rabbitmq' '--enable-nflog' '--enable-ndpi' '--enable-zmq' '--enable-avro' '--enable-serdes' '--enable-redis' '--enable-gnutls' 'AVRO_CFLAGS=-I/usr/local/avro/include' 'AVRO_LIBS=-L/usr/local/avro/lib -lavro' '--enable-l2' '--enable-traffic-bins' '--enable-bgp-bins' '--enable-bmp-bins' '--enable-st-bins'

Libs:
cdada 0.3.5
libpcap version 1.8.1
MariaDB 10.3.31
PostgreSQL 110013
sqlite3 3.27.2
rabbimq-c 0.11.0
rdkafka 1.8.2
jansson 2.14
MaxmindDB 1.6.0
ZeroMQ 4.3.2
Redis 1.0.3
GnuTLS 3.6.7
avro-c
serdes
nDPI 3.4.0
netfilter_log

Plugins:
memory
print
nfprobe
sfprobe
tee
mysql
postgresql
sqlite
amqp
kafka

System:
Linux 5.10.104-linuxkit #1 SMP Thu Mar 17 17:08:06 UTC 2022 x86_64

Compiler:
gcc 8.3.0

Appreciation
Please consider starring this project to boost our reach on github!

👍🏼 DONE!

@floatingstatic
Copy link
Contributor Author

Just a small note, as a workaround this seems to work to get the underlying linux tcp stack to close the socket "stuck" in the ESTABLISHED state in a more reasonable time (< 2 mins)

sysctl -w net.ipv4.tcp_keepalive_time=60
sysctl -w net.ipv4.tcp_keepalive_intvl=10
sysctl -w net.ipv4.tcp_keepalive_probes=2

The pmacct/sfacctd bgp daemon is notified that the socket has closed and correctly logs this, otherwise with default timers we are looking at about 2 hours and 10 minutes before the socket is closed.
While the above may be a workaround it also affects other things (kafka backends, etc.). I feel it would be better to solve this in the BGP speaker.

@paololucente
Copy link
Member

Hi Jeremiah ( @floatingstatic ),

Thanks for raising this & I total see the point. As you correctly hinted the current approach was to rely on the underlying system in order to detect the issue. But, as you say, it is much more correct to handle this within the BGP speaker -- and it does not look like a huge amount of work.

I'll do two things: 1) complement docs with your workaround and 2) mark this issue as enhancement and put this item on my todo list.

Paolo

@floatingstatic
Copy link
Contributor Author

Thanks @paololucente . We are using the workaround for now. I appreciate the update!

manegron added a commit to redBorder/pmacct that referenced this issue Nov 8, 2023
* * Extended mpls_label_stack primitive to print and SQL plugins.

* fix, mistake config of bmp and bgp mixed up

* * Updated docs

* * Updated docs.

* * fix, net_aggr.c: review of 4dd723b to address Issue pmacct#577.

* * Extending newly introduced mpls_label_stack primitive to pmacctd

* BGP slots fixes, and extra logging (temp)

* irrelevant logging

* this logging is not needed anymore

* * Updated docs

* * Updated docs.

* * fix, net_aggr.c: review of 4dd723b to address Issue pmacct#577.

* update in config parsing and doc

* * Extending newly introduced mpls_label_stack primitive to sfacctd

* * Updated docs.

* * fix, ndpi_util.c: make it compile against nDPI 4.0-stable. Related to Issue pmacct#581

* * CI: clamped nDPI to 4.0-stable

* * CI: clamped nDPI to 4.0-stable (2)

* * CI: clamped nDPI to 4.0-stable (3)

* * Updated docs.

* switching labels_cycle to label_stack ...

* * fix, ndpi_util.c: improved nDPI headers inclusion.

* * fix, IMT plugin: misc fixes to nDPI classification output. To address Issue pmacct#581.

* * fix, pmacctd: SEGV when ICMP/ICMPv6 traffic was processed and 'flows' primitive was enabled. To address Issue pmacct#586

* * fix, pmacctd: sampling_rate primitive value not reported correctly when 'sampling_rate' config directive is specified. To address Issue pmacct#585.

* * fix, pmacctd: packets and bytes not reported correctly when 'sampling_rate' config directive is specified. To address Issue pmacct#585.

* * fix, nfacctd: improve NetFlow v9 Options parsing

* add documentation about peering with FRR for BGP info

* * nDPI: preps to compile against 4.2-stable

* * nDPI: ending support for nDPI 3.x

* * Updated docs.

* * libcdada dependency: bumped to 0.4.0

* * nfacctd: refurbishing NetFlow v9/IPFIX template handling (7)

* * CI: clamped nDPI to 4.2-stable

* * fix, nfacctd: skipping padding when handling templates to avoid cosmetic warning log messages.

* * fix, pmtelemtryd: changed SIGCHLD handler to prevent zombification of last dump writer.

* * tee plugin: honoring the [sf|nf]acctd_nonroot config directive. Related to Issue pmacct#589

* * Updated docs. Related to Issue pmacct#589

* * pre_tag_map: added is_nsel true/false support. To address Issue pmacct#582.

* * Updated docs.

* * fix, pmtelemtryd: changed SIGCHLD handler to prevent zombification of last dump writer (2)

* * fix, pmbgpd, pmbmpd: changed SIGCHLD handler to prevent zombification of last dump writer

* * fix, BGP daemon: hotfix for occasional 100% CPU spikes noticed upon performing BGP lookups

* * fix, BGP daemon: improved per-AF handling of ADD-PATH capability.

* * kafka_common.[ch]: replaced obsoleted rd_kafka_conf_set_dr_cb() with rd_kafka_conf_set_dr_msg_cb()

* * pre_tag_map: is_nel key developed a-la is_nsel. true/false to test presence of natEvent NetFlow v9/IPFIX field.

* * Updated docs.

* * BGP, BMP daemons: resolved memory leak when encoding log messaging (logmsg) in Avro format w/ Schema Registry support.

* * kafka_common.[ch]: a new p_kafka_produce_data_and_free() is invoked by write_and_free_json_kafka() to optimize memory allocations and releases.

* * Adding support for NetFlow v9/IPFIX firewallEvent 223 IE (1)

* * Adding support for NetFlow v9/IPFIX firewallEvent 233 IE (2)

* * Minor review to PR pmacct#563

* * Minor review to PR pmacct#569

* * fix, pkt_handlers.c: aligned vxlan, mpls_label_bottom and mpls_stack_depth handling to other primitives

* * Removed unneded alias definition

* * maps_index: handling the case of a catch-all entry.

* * When re-opening the log infrastructure (logfile, syslog), print daemon header again.

* * util.[ch]: vlen_prims_get() now to return length (for binary variable-length primitives)

* * Changed mpls_label_stack primitive from fixed-length to variable-length.

* * fix, build system: check libnuma when compiling MySQL only if Linux. To address Issue pmacct#594

* * fix, plugin_common.c: handled the case of last MPLS label in mpls_label_stack_to_str()

* * Changed mpls_label_stack primitive from fixed-length to variable-length (2)

* * Changed mpls_label_stack primitive from fixed-length to variable-length (3)

* * Removed support for 'mpls_stck_depth' primitive.

* * Updated docs.

* * pretag.h: moved fwd_status from 32 bits to expected 8 bits only.

* * fix, redis_common.c: avoid double printing out of port. Setting default port if missing.

* * fix, redis_common.c: making database 0 valid again.

* * fix, plugin_common.c: improved handling malformed set_label values when pre_tag_label_encode_as_map is enabled. Minor review to PR pmacct#543

* * fix, print, SQL plugins: issue warning if complex data type is selected but output format does not support it. Minor review to pmacct#543 pmacct#550 pmacct#569

* * Updated docs

* build: fix git safe directory errors

As a result of patches introduced in `git` to protect against
the defects CVE-2022-24765, CVE-2022-24767, pipelines started to
fail due to the new `git` versions being rolled out, with the error
`Error: fatal: unsafe repository`.

This commit fixes this by setting the appropriate exceptions for
the repository itself and for the git submodules

* * pmtelemetryd: added support for socket SO_BINDTODEVICE (ie. VRF) and IPV6_V6ONLY options.

* * Updated docs.

* * fix, IMT plugin: 'class' queries not working after switch to nDPI. To address Issue pmacct#596 (1)

* * fix, IMT plugin: 'class' queries not working after switch to nDPI. To address Issue pmacct#596 (2)

* * fix, IMT plugin: 'class' queries not working after switch to nDPI. To address Issue pmacct#596 (3)

* * cleanup: removed legacy regexp code and packet classification struct

* * cleanup: removed further legacy packet classification structs

* * New protos_file feature to limit accounting of IP protocols to those of interest (1)

* * New protos_file feature to limit accounting of IP protocols to those of interest (2)

* * New protos_file feature to limit accounting of IP protocols to those of interest (3)

* * Updated docs.

* * fix, BMP daemon: wrong tag_map correlation for internal-generated "delete" log messages (1)

* * fix, BMP daemon: wrong tag_map correlation for internal-generated "delete" log messages (2)

* * plugin_common.[ch]: moved ports aggregation funcs.

* * plugin_common.h: normalized compiler preprocessor directives.

* * New protos_file feature to limit accounting of IP protocols to those of interest (4)

* * New protos_file feature to limit accounting of IP protocols to those of interest (5)

* * Updated docs.

* * ports_file: added definition for the reset value a-la protos_file.

* * fix, nfacctd: if IE 90 (MPLS VPN RD) is present in NetFlow v9/IPFIX, make it available for BGP/BMP correlation.

* * Introducing tos_encode_as_dscp feature (1)

* * Introducing tos_encode_as_dscp feature (2)

* * Updated docs.

* Update FLOW_AUGMENTATION_PROCESS_DESCRIPTION.md

Make it clearer that the peer_src_ip is the netflow exporter IP.

* * fix, pmacctd: improved pcap_interfaces_map validation and error reporting.

* * fix, nfacctd: allow variable-length primitives as part of otpl structures

* * Introducing tos_file feature (1)

* * Introducing tos_file feature (2)

* * Updated docs.

* * Updated docs.

* addressed signedness error

* addressed compiler warn (assignment used as truth value)

* * Minor review of PR pmacct#607

* * Updated docs.

* * Minor review of PR pmacct#607 (2)

* * pmtelemetryd: extending recently introduced time slots dump feature to this daemon

* * Minor review of PR pmacct#607 (3)

* * Updated docs.

* * Introducing a more efficient framework to handle dynamic names (files, Kafka topics, writer IDs, etc.) (1)

* * Introducing a more efficient framework to handle dynamic names (files, Kafka topics, writer IDs, etc.) (2)

* * Introducing a more efficient framework to handle dynamic names (files, Kafka topics, writer IDs, etc.) (3)

* * Introducing a more efficient framework to handle dynamic names (files, Kafka topics, writer IDs, etc.) (4)

* * Introducing a more efficient framework to handle dynamic names (files, Kafka topics, writer IDs, etc.) (5)

* * fix, nfacctd: handling case of Explicit Null label for mpls_label_stack primitive.

* * Introducing a more efficient framework to handle dynamic names (files, Kafka topics, writer IDs, etc.) (6)

* * fix, nfacctd: corrected parsing of Information Element 351 (layer2SegmentId)

* * Updated docs.

* * Introducing writer_id_string to allow to customize the writer_id field value sent onto message brokers (1)

* * fix, pretag.c: allow to allocate maps greater than 2GB in size.

* * Introducing a more efficient framework to handle dynamic names (files, Kafka topics, writer IDs, etc.) (7)

* * fix, pre_tag_map: optimized internal structure yelding memory saving

* * BMP daemon: improved heuristics to conciliate BGP Open / BGP Update 4-bytes ASN reality

* * fix, pre_tag_map: improved time to resolve JEQs to labels when loading a map

* * Introducing writer_id_string to allow to customize the writer_id field value sent onto message brokers (2)

* * Updated docs.

* * Updated docs.

* * Introducing writer_id_string to allow to customize the writer_id field value sent onto message brokers (3)

* * pmtelemetryd: aligned code to unyte-udp-notif 0.6.0

* * CI: clamped UDP-Notif library to v0.6.0

* * pmtelemetryd: aligned code to unyte-udp-notif 0.6.0 (2)

* * pmtelemetryd: aligned code to unyte-udp-notif 0.6.1

* * CI: clamped UDP-Notif library to v0.6.1

* * pre_tag_map: passing pointer to the index to index handler functions in order to perform more advanced operations

* * pre_tag_map: introducing indexing support for masked IP addresses (1)

* * pre_tag_map: introducing indexing support for masked IP addresses (2)

* * pre_tag_map: introducing indexing support for masked IP addresses (3)

* * pre_tag_map: introducing indexing support for masked IP addresses (4)

* * Updated docs.

* * fix, tee_plugin.c: imprecise length checks when selectively replicating NetFlow v9/IPFIX templates. To address Issue pmacct#611 .

* * fix, nfacctd.c: nfacctd_templates_receiver feature unlocked for non-live data collection scenarios.

* * pre_tag_map: introducing indexing support for masked IP addresses (5)

* * pre_tag_map: introducing indexing support for masked IP addresses (6)

* * pre_tag_map: introducing indexing support for masked IP addresses (7)

* * pre_tag_map: introducing indexing support for masked IP addresses (8)

* * pmtelemetryd: allow "telemetry_data" to be sent as a json string without being parsed for cisco_v1

* * pre_tag_map: introducing indexing support for masked IP addresses (9)

* Don't set the AS Path for receiving packets in flows

* * Updated docs.

* ci: add docker-compose smoke test

Add a small smoke test using docker-compose to make sure all
containers are successfully starting.

Signed-off-by: Marc Sune <marcdevel@gmail.com>

* ci|docker: fix docker multi-stage build

Two problems are addressed with this commit:

* After bumping libndpi to 4.2, default installation path is
  no longer /usr/local, hence the library is not copied from the
  build container to the final base container. Fixed by forcing
  autotools and cmake pkgs to use /usr/local
* In the final base container libjson-c andlibnetfilter-log1 were
  missing. Added to the final base container.

Signed-off-by: Marc Sune <marcdevel@gmail.com>

* * build system: require nDPI >= 4.0

* * Updated docs.

* * fix, sfprobe plugin: improved setting of default values. Related to Issue pmacct#615

* * fix, sfacctd, sfprobe plugin: reconciliating sFlow struct & headers.

* * Adding tunnel_tcp_flags primitive (1)

* * fix, network.h: aligned size of tcp_flags field to effective usage.

* * Adding tunnel_tcp_flags primitive (2)

* * Adding tunnel_tcp_flags primitive (3)

* * Adding tunnel_tcp_flags primitive (4)

* * Adding tunnel_tcp_flags primitive (5)

* * Adding tunnel_tcp_flags primitive (6)

* plugin_cmn_avro: change the logic to generate schema names

- use topic plus record name as the schema name
- use underscore as separator within the record name
- stop to add a "-value" suffix

* * fix, plugin_common.c: IP protocol / ToS / DSCP value zero made valid in load_protos()

* * Updated docs.

* * Updated docs.

* external_libs: cleanup Makefile.am (.PHONY)

Use .PHONY as best practices for non-code targets. This avoids
unnecessary prefixing of the Makefile targets, and some minutes of
scratching heads when adding new external deps.

Signed-off-by: Marc Sune <marcdevel@gmail.com>

* * Updated docs.

* * fix, sql_common.h: removed unused classifier tentatives field.

* * BGP daemon: exposing End-of-RIB (1)

* * BGP daemon: exposing End-of-RIB (2)

* Add vlan in/out support for sflow

* update check_i call to pm_avro_check

* * BGP daemon: exposing End-of-RIB (3)

* * BGP daemon: exposing End-of-RIB (4)

* * Updated docs

* * Updated docs.

* * fix, sfacctd: adding basic support for 802.1AD

* * fix, sfacctd: adding basic support for 802.1AD (2)

* * fix, sfacctd: adding basic support for 802.1AD (3)

* * pmacctd: adding basic support for QinQ and 802.1AD

* log: avoid to cut off log messages in a logfile

When log messages are longer than our message buffer the message
gets cut off. As the trailing newline also gets cut off the
message will be concatenated with the following message which
makes the log hard to read. Avoid to cut off the messages by not
using an intermediate buffer.

* log: avoid to cut off log messages in the syslog

Avoid to cut off log messages for the syslog as it's done for
logfiles with the previous commit.

* * Updated docs.

* kafka: move schema registration from writer to plugin process

The schema structure is defined by the program configuration
and does not change during runtime. Registering the same schema
information on every start of a writer process does not give any
advantage and creates a high load on the schema registry.
To reduce the load on the registry the schema registration is
moved to the plugin process and done only once at program start.

* kafka: exit gracefully when the schema registration fails

As we are going to register the schema information
only at program start now failing to do so is fatal.

* CONFIG-KEYS: add in_vlan/out_vlan

* * Preps to merge PR pmacct#629

* * pmacct#629 follow-up: reconciliating logic to mux 'in_vlan' / 'vlan'

* * pmacct#629 review: extending new logic to plugins

* * pmacct#629 review: extending new logic to MongoDB plugin

* * pmacct#629 review: extending new logic to SQL plugins

* * Updated docs.

* * Updated docs.

* * Updated docs. Related to pmacct#634

* * Improve reporting unsupported primitives by traffic accounting daemons (1)

* * Improve reporting unsupported primitives by traffic accounting daemons (2)

* * fix, pmacct-defines.h: ACCT_FWPLANE_MAX renamed ACCT_FWDPLANE_MAX

* * Optimized export_proto_version storage

* * Optimized sampling_direction storage

* Do not set partition to RD_KAFKA_PARTITION_UA if static kafka_partition was configured

* * fix, pre_tag_map: improved maps_index logging

* * fix, pre_tag_map: explicitely init index serializer key with same length of index hash entry

* * pre_tag_map: introducing indexing support for masked IP addresses (10)

* * fix, pre_tag_map: resolved string overflow in pretag_append_label()

* * Updated docs.

* * fix, util.c: optimized and improved runtime evaluation part of pre_tag_label_filter feature.

* * fix, pre_tag_map: if using indexing (maps_index) and 'ip' key is not specified, avoid v4/v6 recirculation.

* * Updated docs.

* * Updated docs.

* * fix, pre_tag_label_encode_as_map: do not exit but cut string if key/value are longer than maximum allowed string.

* * fix, pre_tag_label_encode_as_map: do not exit but cut string if key/value are longer than maximum allowed string (2)

* * fix, pre_tag_map: allow ',' chars in set_label. Especially useful when pre_tag_label_encode_as_map is set to true.

* * fix, pre_tag_label_encode_as_map: light syntax validation introduced.

* * Updated docs.

* * fix, plugin_cmn_avro.c: added missing handler for tunnel_dst_port

* * Updated docs.

* * Updated docs.

* * Improve reporting unsupported primitives by traffic accounting daemons (3)

* * fix, tee plugin: missing variable definition if BSD definition is on

* * Updated docs.

* * Updated docs.

* * fix, SQL plugins: structs in plugin_common.h now properly included. To address Issue pmacct#649

* * Updated docs.

* version 1.7.8 rhel9

---------

Signed-off-by: Marc Sune <marcdevel@gmail.com>
Co-authored-by: Paolo Lucente <pl+github@pmacct.net>
Co-authored-by: Raphaël P. Barazzutti <raphael@barazzutti.net>
Co-authored-by: Salvatore Cuzzilla <salvatore@cuzzilla.org>
Co-authored-by: Martin Pels <mpels@ripe.net>
Co-authored-by: Marc Sune <marcdevel@gmail.com>
Co-authored-by: Rich Compton <rich.compton@charter.com>
Co-authored-by: Ahmed Elhassany <a.hassany@gmail.com>
Co-authored-by: Marcel Menzel <mail@mcl.gg>
Co-authored-by: Uwe Storbeck <uwe.storbeck@swisscom.com>
Co-authored-by: jwestfall <jwestfall@surrealistic.net>
Co-authored-by: David Vanhoucke <dvanhoucke@redborder.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants