# Capture network packets

# Copyright (c) 2021 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

config NET_CAPTURE
	bool "Network packet capture support"
	select NET_L2_VIRTUAL
	select NET_L2_VIRTUAL_MGMT
	select NET_L2_IPIP
	select NET_MGMT
	select NET_MGMT_EVENT
	select NET_CONTEXT_NET_PKT_POOL
	help
	  This option allows user to capture network packets.
	  The captured packets are sent to another host for processing.
	  User can use network packet analyzer like Wireshark to
	  process the packets.
	  The captured network packets are sent using IPIP tunnel
	  as a payload in UDP datagrams.

if NET_CAPTURE

config NET_CAPTURE_PKT_COUNT
	int "How many network packets to allocate for capture"
	default 4
	help
	  This tells how many net_pkt to allocate for capturing
	  network traffic. Each network frame sent or received
	  will allocate one net_pkt for network metadata.
	  Each net_pkt will contain a list of net_buf's that contain
	  the actual network data.

config NET_CAPTURE_BUF_COUNT
	int "How many network buffers to allocate for capture"
	default 16
	help
	  This tells how many net_buf to allocate for capturing
	  network traffic.

config NET_CAPTURE_DEVICE_COUNT
	int "Number of network capture devices"
	default 1
	help
	  Number of network capture devices. Usually one is enough but
	  if one needs to send captured data to multiple different devices,
	  then you need to increase the value.

config NET_CAPTURE_COOKED_MODE
	bool "Capture non-IP packets a.k.a cooked (SLL) mode [EXPERIMENTAL]"
	select NET_PSEUDO_IFACE
	select NET_L2_DUMMY
	select NET_L2_VIRTUAL
	select EXPERIMENTAL
	help
	  This enables application to capture packets in so called
	  Linux cooked mode (sll). Here a synthetic link layer header
	  is used instead of real network link header.

choice NET_CAPTURE_COOKED_MODE_SLL_VERSION
	prompt "SLL version to use"
	depends on NET_CAPTURE_COOKED_MODE
	default NET_CAPTURE_COOKED_MODE_SLLV1
	help
	  What SLL header version to use.

config NET_CAPTURE_COOKED_MODE_SLLV1
	bool "SLL version 1"
	depends on NET_CAPTURE_COOKED_MODE
	help
	  Use SLL version 1 (header is 16 bytes)

config NET_CAPTURE_COOKED_MODE_SLLV2
	bool "SLL version 2"
	depends on NET_CAPTURE_COOKED_MODE
	help
	  Use SLL version 2 (header is 20 bytes)

endchoice

config NET_CAPTURE_COOKED_MODE_INTERFACE_NAME
	string "Name of the cooked mode network interface"
	default "cooked"
	depends on NET_CAPTURE_COOKED_MODE
	help
	  This sets the name of the cooked mode capture network interface.

config NET_CAPTURE_COOKED_MODE_MAX_LINK_TYPES
	int "How many link types (ETH_P_*) to capture at the same time"
	default 2
	range 1 64
	depends on NET_CAPTURE_COOKED_MODE
	help
	  This defines how many ETH_P_* link type values can be captured
	  at the same time in cooked mode.

module = NET_CAPTURE
module-dep = NET_LOG
module-str = Log level for network capture API
module-help = Enables network capture API debug messages.
source "subsys/net/Kconfig.template.log_config.net"

config NET_CAPTURE_TX_DEBUG
	bool "Debug sent packets"
	depends on NET_CAPTURE_LOG_LEVEL_DBG
	help
	  Enables printing of sent network packet.
	  This can produce lot of output so it is disabled by default.

endif # NET_CAPTURE
