[sflow + dropmon] added the ENABLE_SFLOW_DROPMON build flag. Added patches for sflow repo. (#10370)

* [sflow + dropmon] added INCLUDE_SFLOW_DROPMON flag, added patches for hsflowd
*Added a capability of monitoring dropped packets for the sFlow daemon in order to improve network - monitoring, diagnostic, and troubleshooting. The drop monitor service allows the sFlow daemon to export another type of sample - dropped packets as Discard samples alongside Counter samples and Packet Flow samples.

Signed-off-by: Vadym Hlushko <vadymh@nvidia.com>
This commit is contained in:
Vadym Hlushko 2022-06-21 03:07:02 +03:00 committed by Ying Xie
parent a4da090e5a
commit 12ed51d85f
7 changed files with 246 additions and 1 deletions

View File

@ -131,6 +131,9 @@ INCLUDE_ICCPD = n
# INCLUDE_SFLOW - build docker-sflow for sFlow support
INCLUDE_SFLOW = y
# ENABLE_SFLOW_DROPMON - support of drop packets monitoring feature for sFlow deamon
ENABLE_SFLOW_DROPMON = n
# INCLUDE_MGMT_FRAMEWORK - build docker-sonic-mgmt-framework for CLI and REST server support
INCLUDE_MGMT_FRAMEWORK = y

View File

@ -1,7 +1,9 @@
# host-sflow package
HSFLOWD_VERSION = 2.0.34
HSFLOWD_VERSION = 2.0.35
HSFLOWD_SUBVERSION = 1
export ENABLE_SFLOW_DROPMON
export HSFLOWD_VERSION HSFLOWD_SUBVERSION
HSFLOWD = hsflowd_$(HSFLOWD_VERSION)-$(HSFLOWD_SUBVERSION)_$(CONFIGURED_ARCH).deb

View File

@ -328,6 +328,7 @@ $(info "INCLUDE_SYSTEM_TELEMETRY" : "$(INCLUDE_SYSTEM_TELEMETRY)")
$(info "ENABLE_HOST_SERVICE_ON_START" : "$(ENABLE_HOST_SERVICE_ON_START)")
$(info "INCLUDE_RESTAPI" : "$(INCLUDE_RESTAPI)")
$(info "INCLUDE_SFLOW" : "$(INCLUDE_SFLOW)")
$(info "ENABLE_SFLOW_DROPMON" : "$(ENABLE_SFLOW_DROPMON)")
$(info "INCLUDE_NAT" : "$(INCLUDE_NAT)")
$(info "INCLUDE_DHCP_RELAY" : "$(INCLUDE_DHCP_RELAY)")
$(info "INCLUDE_P4RT" : "$(INCLUDE_P4RT)")

View File

@ -16,6 +16,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% :
stg init
stg import -s ../patch/series
if [[ $(ENABLE_SFLOW_DROPMON) == y ]]; then
stg repair
stg import -s ../patch/dropmon/series
fi
mkdir -p debian
cp -r DEBIAN_build/* debian
chmod u+x debian/rules

View File

@ -0,0 +1,172 @@
From 6ad3a8ef0339041a800a41dac96370c11b72d814 Mon Sep 17 00:00:00 2001
From: Vadym Hlushko <vadymh@nvidia.com>
Date: Fri, 4 Feb 2022 15:11:48 +0000
Subject: [PATCH] [dropmon] workaround - created local copy of <linux/net_dropmon.h>
TDB: this patch will be removed when we update docker-sflow to bullseye kernel.
Signed-off-by: Vadym Hlushko <vadymh@nvidia.com>
---
src/Linux/mod_dropmon.c | 2 +-
src/Linux/my_dropmon.h | 132 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 133 insertions(+), 1 deletion(-)
create mode 100644 src/Linux/my_dropmon.h
diff --git a/src/Linux/mod_dropmon.c b/src/Linux/mod_dropmon.c
index 6b8ec6d..a37b157 100644
--- a/src/Linux/mod_dropmon.c
+++ b/src/Linux/mod_dropmon.c
@@ -7,12 +7,12 @@ extern "C" {
#endif
#include "hsflowd.h"
+#include "my_dropmon.h"
#include <asm/types.h>
#include <sys/socket.h>
#include <linux/types.h>
#include <linux/netlink.h>
#include <linux/genetlink.h>
-#include <linux/net_dropmon.h>
#include <net/if.h>
#include <fnmatch.h>
diff --git a/src/Linux/my_dropmon.h b/src/Linux/my_dropmon.h
new file mode 100644
index 0000000..66048cc
--- /dev/null
+++ b/src/Linux/my_dropmon.h
@@ -0,0 +1,132 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+#ifndef __NET_DROPMON_H
+#define __NET_DROPMON_H
+
+#include <linux/types.h>
+#include <linux/netlink.h>
+
+struct net_dm_drop_point {
+ __u8 pc[8];
+ __u32 count;
+};
+
+#define is_drop_point_hw(x) do {\
+ int ____i, ____j;\
+ for (____i = 0; ____i < 8; i ____i++)\
+ ____j |= x[____i];\
+ ____j;\
+} while (0)
+
+#define NET_DM_CFG_VERSION 0
+#define NET_DM_CFG_ALERT_COUNT 1
+#define NET_DM_CFG_ALERT_DELAY 2
+#define NET_DM_CFG_MAX 3
+
+struct net_dm_config_entry {
+ __u32 type;
+ __u64 data __attribute__((aligned(8)));
+};
+
+struct net_dm_config_msg {
+ __u32 entries;
+ struct net_dm_config_entry options[0];
+};
+
+struct net_dm_alert_msg {
+ __u32 entries;
+ struct net_dm_drop_point points[0];
+};
+
+struct net_dm_user_msg {
+ union {
+ struct net_dm_config_msg user;
+ struct net_dm_alert_msg alert;
+ } u;
+};
+
+
+/* These are the netlink message types for this protocol */
+
+enum {
+ NET_DM_CMD_UNSPEC = 0,
+ NET_DM_CMD_ALERT,
+ NET_DM_CMD_CONFIG,
+ NET_DM_CMD_START,
+ NET_DM_CMD_STOP,
+ NET_DM_CMD_PACKET_ALERT,
+ NET_DM_CMD_CONFIG_GET,
+ NET_DM_CMD_CONFIG_NEW,
+ NET_DM_CMD_STATS_GET,
+ NET_DM_CMD_STATS_NEW,
+ _NET_DM_CMD_MAX,
+};
+
+#define NET_DM_CMD_MAX (_NET_DM_CMD_MAX - 1)
+
+/*
+ * Our group identifiers
+ */
+#define NET_DM_GRP_ALERT 1
+
+enum net_dm_attr {
+ NET_DM_ATTR_UNSPEC,
+
+ NET_DM_ATTR_ALERT_MODE, /* u8 */
+ NET_DM_ATTR_PC, /* u64 */
+ NET_DM_ATTR_SYMBOL, /* string */
+ NET_DM_ATTR_IN_PORT, /* nested */
+ NET_DM_ATTR_TIMESTAMP, /* u64 */
+ NET_DM_ATTR_PROTO, /* u16 */
+ NET_DM_ATTR_PAYLOAD, /* binary */
+ NET_DM_ATTR_PAD,
+ NET_DM_ATTR_TRUNC_LEN, /* u32 */
+ NET_DM_ATTR_ORIG_LEN, /* u32 */
+ NET_DM_ATTR_QUEUE_LEN, /* u32 */
+ NET_DM_ATTR_STATS, /* nested */
+ NET_DM_ATTR_HW_STATS, /* nested */
+ NET_DM_ATTR_ORIGIN, /* u16 */
+ NET_DM_ATTR_HW_TRAP_GROUP_NAME, /* string */
+ NET_DM_ATTR_HW_TRAP_NAME, /* string */
+ NET_DM_ATTR_HW_ENTRIES, /* nested */
+ NET_DM_ATTR_HW_ENTRY, /* nested */
+ NET_DM_ATTR_HW_TRAP_COUNT, /* u32 */
+ NET_DM_ATTR_SW_DROPS, /* flag */
+ NET_DM_ATTR_HW_DROPS, /* flag */
+ NET_DM_ATTR_FLOW_ACTION_COOKIE, /* binary */
+
+ __NET_DM_ATTR_MAX,
+ NET_DM_ATTR_MAX = __NET_DM_ATTR_MAX - 1
+};
+
+/**
+ * enum net_dm_alert_mode - Alert mode.
+ * @NET_DM_ALERT_MODE_SUMMARY: A summary of recent drops is sent to user space.
+ * @NET_DM_ALERT_MODE_PACKET: Each dropped packet is sent to user space along
+ * with metadata.
+ */
+enum net_dm_alert_mode {
+ NET_DM_ALERT_MODE_SUMMARY,
+ NET_DM_ALERT_MODE_PACKET,
+};
+
+enum {
+ NET_DM_ATTR_PORT_NETDEV_IFINDEX, /* u32 */
+ NET_DM_ATTR_PORT_NETDEV_NAME, /* string */
+
+ __NET_DM_ATTR_PORT_MAX,
+ NET_DM_ATTR_PORT_MAX = __NET_DM_ATTR_PORT_MAX - 1
+};
+
+enum {
+ NET_DM_ATTR_STATS_DROPPED, /* u64 */
+
+ __NET_DM_ATTR_STATS_MAX,
+ NET_DM_ATTR_STATS_MAX = __NET_DM_ATTR_STATS_MAX - 1
+};
+
+enum net_dm_origin {
+ NET_DM_ORIGIN_SW,
+ NET_DM_ORIGIN_HW,
+};
+
+#endif
--
2.17.1

View File

@ -0,0 +1,60 @@
From 4bdd892662c08a396066ba6a1c55eac3f8aa0a5f Mon Sep 17 00:00:00 2001
From: Vadym Hlushko <vadymh@nvidia.com>
Date: Tue, 25 Jan 2022 12:59:40 +0000
Subject: [PATCH] [sflow] enabled drop monitor support for SONiC
Signed-off-by: Vadym Hlushko <vadymh@nvidia.com>
---
src/Linux/Makefile | 2 +-
src/Linux/hsflowd.c | 8 ++++++++
src/Linux/scripts/hsflowd.conf.sonic | 2 ++
3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/src/Linux/Makefile b/src/Linux/Makefile
index 8128cf2..cf538e7 100644
--- a/src/Linux/Makefile
+++ b/src/Linux/Makefile
@@ -34,7 +34,7 @@ FEATURES_DENT= DENT PSAMPLE SYSTEMD DROPMON
FEATURES_EOS= EAPI
FEATURES_OS10= OS10 DBUS SYSTEMD
FEATURES_OPX= OPX DBUS SYSTEMD
-FEATURES_SONIC= SONIC PSAMPLE DOCKER
+FEATURES_SONIC= SONIC PSAMPLE DOCKER DROPMON
FEATURES_XEN= XEN OVS
FEATURES_HOST= NFLOG PCAP TCP DOCKER KVM OVS DBUS SYSTEMD
diff --git a/src/Linux/hsflowd.c b/src/Linux/hsflowd.c
index 5d94e79..25031d1 100644
--- a/src/Linux/hsflowd.c
+++ b/src/Linux/hsflowd.c
@@ -1877,6 +1877,14 @@ extern "C" {
sp->psample.ingress = YES;
sp->psample.egress = NO;
sp->psample.group = 1;
+ // drop-monitor support
+ myLog(LOG_INFO, "drop-monitor support for SONiC");
+ sp->dropmon.dropmon = YES;
+ sp->dropmon.group = 1;
+ sp->dropmon.start = NO;
+ sp->dropmon.limit = 1000;
+ sp->dropmon.sw = NO;
+ sp->dropmon.hw = YES;
#endif /* HSP_LOAD_SONIC */
#ifdef HSP_LOAD_XEN
diff --git a/src/Linux/scripts/hsflowd.conf.sonic b/src/Linux/scripts/hsflowd.conf.sonic
index e675730..fb52a54 100644
--- a/src/Linux/scripts/hsflowd.conf.sonic
+++ b/src/Linux/scripts/hsflowd.conf.sonic
@@ -4,6 +4,8 @@
sflow {
# sonic {} loaded automatically
# psample {} loaded automatically
+ # packet drop monitoring:
+ dropmon { group=1 start=on limit=1000 sw=off hw=on }
# ====== detect new interfaces ======
refreshAdaptors=60
# ====== Agent IP selection ======
--
2.17.1

View File

@ -0,0 +1,2 @@
0001-dropmon-workaround-created-local-copy-of-linux-net_dropmon.patch
0001-sflow-enabled-drop-monitor-support-for-SONiC.patch