pespin submitted this change.
Rename osmo-pfcp-tool to osmo-upf-load-gen
Change-Id: Ie36379b5dcf4ab86276dfda9e25410fe41db1d93
---
M configure.ac
M debian/upf-benchmark.install
M include/osmocom/Makefile.am
R include/osmocom/upfloadgen/Makefile.am
R include/osmocom/upfloadgen/checksum.h
R include/osmocom/upfloadgen/gtp_flood.h
R include/osmocom/upfloadgen/pfcp_tool.h
R include/osmocom/upfloadgen/range.h
M src/Makefile.am
M src/osmo-udp-responder/udp_responder.c
R src/osmo-upf-load-gen/Makefile.am
R src/osmo-upf-load-gen/checksum.c
R src/osmo-upf-load-gen/gtp_flood.c
R src/osmo-upf-load-gen/main.c
R src/osmo-upf-load-gen/pfcp_tool.c
R src/osmo-upf-load-gen/pfcp_tool_vty.c
R src/osmo-upf-load-gen/range.c
M testsuites/gtplab-sysmo2017/overview_only_tunend.dot
M testsuites/gtplab-sysmo2017/overview_only_tunmap.dot
M testsuites/gtplab-sysmo2017/overview_tunmap_and_tunend.dot
M testsuites/gtplab-sysmo2017/tunend/ran/0.gtp_flood.vty
R testsuites/gtplab-sysmo2017/tunend/ran/osmo-upf-load-gen.cfg
M testsuites/gtplab-sysmo2017/tunend/ran/run.sh
M testsuites/gtplab-sysmo2017/tunmap/ran/0.gtp_flood.vty
R testsuites/gtplab-sysmo2017/tunmap/ran/osmo-upf-load-gen.cfg
M testsuites/gtplab-sysmo2017/tunmap/ran/run.sh
26 files changed, 44 insertions(+), 44 deletions(-)
diff --git a/configure.ac b/configure.ac
index 61a8d35..03cfe40 100644
--- a/configure.ac
+++ b/configure.ac
@@ -161,9 +161,9 @@
AC_OUTPUT(
include/Makefile
include/osmocom/Makefile
- include/osmocom/pfcptool/Makefile
+ include/osmocom/upfloadgen/Makefile
src/Makefile
- src/osmo-pfcp-tool/Makefile
+ src/osmo-upf-load-gen/Makefile
src/osmo-udp-responder/Makefile
src/osmo-udp-simpleflood/Makefile
doc/Makefile
diff --git a/debian/upf-benchmark.install b/debian/upf-benchmark.install
index 6653611..c358399 100644
--- a/debian/upf-benchmark.install
+++ b/debian/upf-benchmark.install
@@ -1 +1 @@
-usr/bin/osmo-pfcp-tool
+usr/bin/osmo-upf-load-gen
diff --git a/include/osmocom/Makefile.am b/include/osmocom/Makefile.am
index 1e3c7ce..23fcf5b 100644
--- a/include/osmocom/Makefile.am
+++ b/include/osmocom/Makefile.am
@@ -1,3 +1,3 @@
SUBDIRS = \
- pfcptool \
+ upfloadgen \
$(NULL)
diff --git a/include/osmocom/pfcptool/Makefile.am b/include/osmocom/upfloadgen/Makefile.am
similarity index 100%
rename from include/osmocom/pfcptool/Makefile.am
rename to include/osmocom/upfloadgen/Makefile.am
diff --git a/include/osmocom/pfcptool/checksum.h b/include/osmocom/upfloadgen/checksum.h
similarity index 100%
rename from include/osmocom/pfcptool/checksum.h
rename to include/osmocom/upfloadgen/checksum.h
diff --git a/include/osmocom/pfcptool/gtp_flood.h b/include/osmocom/upfloadgen/gtp_flood.h
similarity index 100%
rename from include/osmocom/pfcptool/gtp_flood.h
rename to include/osmocom/upfloadgen/gtp_flood.h
diff --git a/include/osmocom/pfcptool/pfcp_tool.h b/include/osmocom/upfloadgen/pfcp_tool.h
similarity index 97%
rename from include/osmocom/pfcptool/pfcp_tool.h
rename to include/osmocom/upfloadgen/pfcp_tool.h
index 699fd87..2c50490 100644
--- a/include/osmocom/pfcptool/pfcp_tool.h
+++ b/include/osmocom/upfloadgen/pfcp_tool.h
@@ -1,4 +1,4 @@
-/* Global definitions for osmo-pfcp-tool */
+/* Global definitions for osmo-upf-load-gen */
/*
* (C) 2021-2022 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
* All Rights Reserved.
@@ -33,8 +33,8 @@
#include <osmocom/pfcp/pfcp_msg.h>
-#include <osmocom/pfcptool/range.h>
-#include <osmocom/pfcptool/gtp_flood.h>
+#include <osmocom/upfloadgen/range.h>
+#include <osmocom/upfloadgen/gtp_flood.h>
struct osmo_tdef;
struct ctrl_handle;
diff --git a/include/osmocom/pfcptool/range.h b/include/osmocom/upfloadgen/range.h
similarity index 100%
rename from include/osmocom/pfcptool/range.h
rename to include/osmocom/upfloadgen/range.h
diff --git a/src/Makefile.am b/src/Makefile.am
index 0005c41..cbb86dc 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,5 +1,5 @@
SUBDIRS = \
- osmo-pfcp-tool \
+ osmo-upf-load-gen \
osmo-udp-responder \
osmo-udp-simpleflood \
$(NULL)
diff --git a/src/osmo-udp-responder/udp_responder.c b/src/osmo-udp-responder/udp_responder.c
index 5ffe707..b93a09f 100644
--- a/src/osmo-udp-responder/udp_responder.c
+++ b/src/osmo-udp-responder/udp_responder.c
@@ -47,7 +47,7 @@
#include <osmocom/core/socket.h>
#include <osmocom/core/sockaddr_str.h>
-#include <osmocom/pfcptool/gtp_flood.h>
+#include <osmocom/upfloadgen/gtp_flood.h>
static volatile bool started;
static struct timespec ts_start;
diff --git a/src/osmo-pfcp-tool/Makefile.am b/src/osmo-upf-load-gen/Makefile.am
similarity index 88%
rename from src/osmo-pfcp-tool/Makefile.am
rename to src/osmo-upf-load-gen/Makefile.am
index ea16f72..1400fa1 100644
--- a/src/osmo-pfcp-tool/Makefile.am
+++ b/src/osmo-upf-load-gen/Makefile.am
@@ -25,13 +25,13 @@
$(NULL)
bin_PROGRAMS = \
- osmo-pfcp-tool \
+ osmo-upf-load-gen \
$(NULL)
-osmo_pfcp_tool_SOURCES = \
+osmo_upf_load_gen_SOURCES = \
checksum.c \
gtp_flood.c \
- osmo_pfcp_tool_main.c \
+ main.c \
pfcp_tool.c \
pfcp_tool_vty.c \
range.c \
diff --git a/src/osmo-pfcp-tool/checksum.c b/src/osmo-upf-load-gen/checksum.c
similarity index 98%
rename from src/osmo-pfcp-tool/checksum.c
rename to src/osmo-upf-load-gen/checksum.c
index c6abe27..f182fe2 100644
--- a/src/osmo-pfcp-tool/checksum.c
+++ b/src/osmo-upf-load-gen/checksum.c
@@ -39,7 +39,7 @@
#include <sys/endian.h>
#endif
-#include <osmocom/pfcptool/checksum.h>
+#include <osmocom/upfloadgen/checksum.h>
#include <arpa/inet.h>
static inline unsigned short from32to16(unsigned int x)
diff --git a/src/osmo-pfcp-tool/gtp_flood.c b/src/osmo-upf-load-gen/gtp_flood.c
similarity index 98%
rename from src/osmo-pfcp-tool/gtp_flood.c
rename to src/osmo-upf-load-gen/gtp_flood.c
index 69cbf4b..cb4fdf8 100644
--- a/src/osmo-pfcp-tool/gtp_flood.c
+++ b/src/osmo-upf-load-gen/gtp_flood.c
@@ -30,7 +30,7 @@
#endif
#include "config.h"
-#include <osmocom/pfcptool/gtp_flood.h>
+#include <osmocom/upfloadgen/gtp_flood.h>
#include <osmocom/core/logging.h>
#define HAVE_URING 1
@@ -47,8 +47,8 @@
#include <osmocom/core/linuxlist.h>
#include <osmocom/core/talloc.h>
#include <osmocom/vty/cpu_sched_vty.h>
-#include <osmocom/pfcptool/pfcp_tool.h>
-#include <osmocom/pfcptool/checksum.h>
+#include <osmocom/upfloadgen/pfcp_tool.h>
+#include <osmocom/upfloadgen/checksum.h>
#define PKT_BUF_SIZE 1452
@@ -263,7 +263,7 @@
/* write some payload */
struct osmo_strbuf sb = { .buf = (void *)cur, .len = udp_payload_len };
- OSMO_STRBUF_PRINTF(sb, "osmo-pfcp-tool gtp flood, emitted from %s to %s teid 0x%08x flow %u\n",
+ OSMO_STRBUF_PRINTF(sb, "osmo-upf-load-gen gtp flood, emitted from %s to %s teid 0x%08x flow %u\n",
osmo_sockaddr_to_str_c(OTC_SELECT, &flow->cfg.gtp_local->osa),
osmo_sockaddr_to_str_c(OTC_SELECT, &flow->cfg.gtp_remote),
flow->cfg.gtp_remote_teid,
diff --git a/src/osmo-pfcp-tool/osmo_pfcp_tool_main.c b/src/osmo-upf-load-gen/main.c
similarity index 95%
rename from src/osmo-pfcp-tool/osmo_pfcp_tool_main.c
rename to src/osmo-upf-load-gen/main.c
index d61c951..040abca 100644
--- a/src/osmo-pfcp-tool/osmo_pfcp_tool_main.c
+++ b/src/osmo-upf-load-gen/main.c
@@ -45,8 +45,8 @@
#include <osmocom/pfcp/pfcp_endpoint.h>
-#include <osmocom/pfcptool/pfcp_tool.h>
-#include <osmocom/pfcptool/gtp_flood.h>
+#include <osmocom/upfloadgen/pfcp_tool.h>
+#include <osmocom/upfloadgen/gtp_flood.h>
#include <getopt.h>
@@ -68,13 +68,13 @@
enum vty_ref_gen_mode vty_ref_gen_mode;
const char *command_file;
} pfcp_tool_cmdline_config = {
- .config_file = "osmo-pfcp-tool.cfg",
+ .config_file = "osmo-upf-load-gen.cfg",
.vty_ref_gen_mode = VTY_REF_GEN_MODE_DEFAULT,
};
static void print_usage()
{
- printf("Usage: osmo-pfcp-tool [command-file.vty]\n telnet localhost %d\n", OSMO_VTY_PORT_PFCP_TOOL);
+ printf("Usage: osmo-upf-load-gen [command-file.vty]\n telnet localhost %d\n", OSMO_VTY_PORT_PFCP_TOOL);
}
static void print_help()
@@ -210,11 +210,11 @@
}
static struct vty_app_info pfcp_tool_vty_app_info = {
- .name = "osmo-pfcp-tool",
+ .name = "osmo-upf-load-gen",
.version = PACKAGE_VERSION,
.copyright =
- "OsmoPFCPTool - Osmocom Packet Forwarding Control Protocol tool for testing\r\n"
- "Copyright (C) 2021-2022 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>\r\n"
+ "OsmoUPFLoadGen - Osmocom UPF PFCP / GTPv1U traffic generator\r\n"
+ "Copyright (C) 2021-2024 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>\r\n"
"License AGPLv3+: GNU AGPL version 3 or later <http://gnu.org/licenses/agpl-3.0.html>\r\n"
"This is free software: you are free to change and redistribute it.\r\n"
"There is NO WARRANTY, to the extent permitted by law.\r\n",
@@ -259,7 +259,7 @@
osmo_fsm_set_dealloc_ctx(OTC_SELECT);
- tall_pfcp_tool_ctx = talloc_named_const(NULL, 1, "osmo-pfcp-tool");
+ tall_pfcp_tool_ctx = talloc_named_const(NULL, 1, "osmo-upf-load-gen");
pfcp_tool_vty_app_info.tall_ctx = tall_pfcp_tool_ctx;
msgb_talloc_ctx_init(tall_pfcp_tool_ctx, 0);
diff --git a/src/osmo-pfcp-tool/pfcp_tool.c b/src/osmo-upf-load-gen/pfcp_tool.c
similarity index 97%
rename from src/osmo-pfcp-tool/pfcp_tool.c
rename to src/osmo-upf-load-gen/pfcp_tool.c
index 6ba8d27..ba4ce6b 100644
--- a/src/osmo-pfcp-tool/pfcp_tool.c
+++ b/src/osmo-upf-load-gen/pfcp_tool.c
@@ -29,8 +29,8 @@
#include <osmocom/pfcp/pfcp_endpoint.h>
-#include <osmocom/pfcptool/pfcp_tool.h>
-#include <osmocom/pfcptool/gtp_flood.h>
+#include <osmocom/upfloadgen/pfcp_tool.h>
+#include <osmocom/upfloadgen/gtp_flood.h>
struct g_pfcp_tool *g_pfcp_tool = NULL;
@@ -333,8 +333,8 @@
}
/* The 'local' and 'remote' naming clashes here. struct pfcp_tool_gtp_tun names its items from the UPF's point
- * of view: so the GTP port of osmo-pfcp-tool is 'remote'.
- * Here we are setting up a port to emit GTP from osmo-pfcp-tool, the same port is called 'gtp_local'.
+ * of view: so the GTP port of osmo-upf-load-gen is 'remote'.
+ * Here we are setting up a port to emit GTP from osmo-upf-load-gen, the same port is called 'gtp_local'.
*/
cfg.gtp_local = pfcp_tool_have_local_udp_port_by_str(&tun_access->remote.addr, 2152);
if (!cfg.gtp_local) {
@@ -345,7 +345,7 @@
/* The 'local' and 'remote' naming clashes here. struct pfcp_tool_gtp_tun names its items from the UPF's point
* of view: so the GTP port of UPF is 'local'.
* Here we are reading the GTP port that the UPF has opened to receive GTP traffic; the same port is called
- * 'gtp_remote' in cfg, which is remote from osmo-pfcp-tool's point of view.
+ * 'gtp_remote' in cfg, which is remote from osmo-upf-load-gen's point of view.
*/
if (osmo_sockaddr_str_to_osa(&tun_access->local.addr, &cfg.gtp_remote)) {
LOGP(DLGLOBAL, LOGL_ERROR, "Cannot set up GTP flow for session, failed to identify UPF's GTP port\n");
diff --git a/src/osmo-pfcp-tool/pfcp_tool_vty.c b/src/osmo-upf-load-gen/pfcp_tool_vty.c
similarity index 99%
rename from src/osmo-pfcp-tool/pfcp_tool_vty.c
rename to src/osmo-upf-load-gen/pfcp_tool_vty.c
index 6348850..b153072 100644
--- a/src/osmo-pfcp-tool/pfcp_tool_vty.c
+++ b/src/osmo-upf-load-gen/pfcp_tool_vty.c
@@ -1,4 +1,4 @@
-/* osmo-pfcp-tool interface to quagga VTY */
+/* osmo-upf-load-gen interface to quagga VTY */
/*
* (C) 2021-2022 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
* All Rights Reserved.
@@ -34,7 +34,7 @@
#include <osmocom/vty/vty.h>
#include <osmocom/vty/command.h>
-#include <osmocom/pfcptool/pfcp_tool.h>
+#include <osmocom/upfloadgen/pfcp_tool.h>
DEFUN(c_local_addr, c_local_addr_cmd,
"local-addr IP_ADDR",
@@ -1257,7 +1257,7 @@
te = &session->tunend;
/* Access: set remote GTP address from UPF's point of view.
- * A local GTP port from osmo-pfcp-tool's point of view. */
+ * A local GTP port from osmo-upf-load-gen's point of view. */
dst = &te->access.remote;
rc = set_access_ran_tunend(dst);
if (rc != CMD_SUCCESS)
@@ -1344,7 +1344,7 @@
tm = &session->tunmap;
/* Access: set remote GTP address from UPF's point of view.
- * A local GTP port from osmo-pfcp-tool's point of view. */
+ * A local GTP port from osmo-upf-load-gen's point of view. */
dst = &tm->access.remote;
rc = set_access_ran_tunend(dst);
if (rc != CMD_SUCCESS)
diff --git a/src/osmo-pfcp-tool/range.c b/src/osmo-upf-load-gen/range.c
similarity index 98%
rename from src/osmo-pfcp-tool/range.c
rename to src/osmo-upf-load-gen/range.c
index 5d30bd6..74a508f 100644
--- a/src/osmo-pfcp-tool/range.c
+++ b/src/osmo-upf-load-gen/range.c
@@ -24,7 +24,7 @@
#include <osmocom/core/socket.h>
#include <osmocom/core/utils.h>
-#include <osmocom/pfcptool/range.h>
+#include <osmocom/upfloadgen/range.h>
void range_val_set_int(struct range_val *rv, uint32_t val)
{
diff --git a/testsuites/gtplab-sysmo2017/overview_only_tunend.dot b/testsuites/gtplab-sysmo2017/overview_only_tunend.dot
index 067f091..ddd91b6 100644
--- a/testsuites/gtplab-sysmo2017/overview_only_tunend.dot
+++ b/testsuites/gtplab-sysmo2017/overview_only_tunend.dot
@@ -7,7 +7,7 @@
label="gtplab0";
rankdir=TB;
gtplab0_172_31 [label="172.16.31.1/24"];
- tool [label="osmo-pfcp-tool",shape=box3d];
+ tool [label="osmo-upf-load-gen",shape=box3d];
}
subgraph cluster_gtplab1 {
label="gtplab1";
diff --git a/testsuites/gtplab-sysmo2017/overview_only_tunmap.dot b/testsuites/gtplab-sysmo2017/overview_only_tunmap.dot
index 96d5dcf..e108b2e 100644
--- a/testsuites/gtplab-sysmo2017/overview_only_tunmap.dot
+++ b/testsuites/gtplab-sysmo2017/overview_only_tunmap.dot
@@ -7,7 +7,7 @@
label="gtplab0";
rankdir=TB;
gtplab0_172_31 [label="172.16.31.1/24"];
- tool [label="osmo-pfcp-tool",shape=box3d];
+ tool [label="osmo-upf-load-gen",shape=box3d];
insert_teid [label="insert return TEID\nin UDP payload",shape=note];
}
subgraph cluster_gtplab1 {
diff --git a/testsuites/gtplab-sysmo2017/overview_tunmap_and_tunend.dot b/testsuites/gtplab-sysmo2017/overview_tunmap_and_tunend.dot
index 6d82dd9..f7f4224 100644
--- a/testsuites/gtplab-sysmo2017/overview_tunmap_and_tunend.dot
+++ b/testsuites/gtplab-sysmo2017/overview_tunmap_and_tunend.dot
@@ -8,7 +8,7 @@
rankdir=TB;
gtplab0_10 [label="10.9.25.20/24"];
gtplab0_172_31 [label="172.16.31.1/24"];
- tool [label="osmo-pfcp-tool",shape=box3d];
+ tool [label="osmo-upf-load-gen",shape=box3d];
}
subgraph cluster_gtplab1 {
label="gtplab1";
diff --git a/testsuites/gtplab-sysmo2017/tunend/ran/0.gtp_flood.vty b/testsuites/gtplab-sysmo2017/tunend/ran/0.gtp_flood.vty
index 9d197ab..c816a12 100644
--- a/testsuites/gtplab-sysmo2017/tunend/ran/0.gtp_flood.vty
+++ b/testsuites/gtplab-sysmo2017/tunend/ran/0.gtp_flood.vty
@@ -1,7 +1,7 @@
# Establish N PFCP sessions for tunend, and emit massive GTP traffic to the UPF
# to each established tunnel.
#
-# osmo-pfcp-tool UPF "internet host"
+# osmo-upf-load-gen UPF "internet host"
# |GTP-ep -------GTP-----> GTP-ep|UE-IP-addr -------IP------> arbitrary-IP|
# |10.0.1.1 10.0.2.1|192.168.10.23 123.234.42.23|
# |10.0.1.2
@@ -128,7 +128,7 @@
date
# All GTP is flowing.
-# osmo-pfcp-tool will keep this up for as long as there still are active GTP flows,
+# osmo-upf-load-gen will keep this up for as long as there still are active GTP flows,
# or until receiving a signal interrupt (ctrl-C).
# give some time to gather counters before the tunnel is removed
diff --git a/testsuites/gtplab-sysmo2017/tunend/ran/osmo-pfcp-tool.cfg b/testsuites/gtplab-sysmo2017/tunend/ran/osmo-upf-load-gen.cfg
similarity index 100%
rename from testsuites/gtplab-sysmo2017/tunend/ran/osmo-pfcp-tool.cfg
rename to testsuites/gtplab-sysmo2017/tunend/ran/osmo-upf-load-gen.cfg
diff --git a/testsuites/gtplab-sysmo2017/tunend/ran/run.sh b/testsuites/gtplab-sysmo2017/tunend/ran/run.sh
index cfd313c..a7b19a7 100755
--- a/testsuites/gtplab-sysmo2017/tunend/ran/run.sh
+++ b/testsuites/gtplab-sysmo2017/tunend/ran/run.sh
@@ -2,4 +2,4 @@
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
-osmo-pfcp-tool -c "$SCRIPT_DIR/osmo-pfcp-tool.cfg" "$SCRIPT_DIR/0.gtp_flood.vty"
\ No newline at end of file
+osmo-upf-load-gen -c "$SCRIPT_DIR/osmo-upf-load-gen.cfg" "$SCRIPT_DIR/0.gtp_flood.vty"
\ No newline at end of file
diff --git a/testsuites/gtplab-sysmo2017/tunmap/ran/0.gtp_flood.vty b/testsuites/gtplab-sysmo2017/tunmap/ran/0.gtp_flood.vty
index 611065c..0fe7b42 100644
--- a/testsuites/gtplab-sysmo2017/tunmap/ran/0.gtp_flood.vty
+++ b/testsuites/gtplab-sysmo2017/tunmap/ran/0.gtp_flood.vty
@@ -1,7 +1,7 @@
# Establish N PFCP sessions for tunmap, and emit massive GTP traffic to the UPF
# to each established tunnel.
#
-# osmo-pfcp-tool UPF "core"
+# osmo-upf-load-gen UPF "core"
# |GTP-ep -------GTP-----> GTP-ep|GTP-ep ----------IP------> GTP-ep
# |10.0.1.1 10.0.2.1|10.0.3.1 10.0.3.2
# |10.0.1.2
@@ -148,7 +148,7 @@
date
# All GTP is flowing.
-# osmo-pfcp-tool will keep this up for as long as there still are active GTP flows,
+# osmo-upf-load-gen will keep this up for as long as there still are active GTP flows,
# or until receiving a signal interrupt (ctrl-C).
# give some time to gather counters before the tunnel is removed
diff --git a/testsuites/gtplab-sysmo2017/tunmap/ran/osmo-pfcp-tool.cfg b/testsuites/gtplab-sysmo2017/tunmap/ran/osmo-upf-load-gen.cfg
similarity index 100%
rename from testsuites/gtplab-sysmo2017/tunmap/ran/osmo-pfcp-tool.cfg
rename to testsuites/gtplab-sysmo2017/tunmap/ran/osmo-upf-load-gen.cfg
diff --git a/testsuites/gtplab-sysmo2017/tunmap/ran/run.sh b/testsuites/gtplab-sysmo2017/tunmap/ran/run.sh
index 277bb4a..fb65c2b 100755
--- a/testsuites/gtplab-sysmo2017/tunmap/ran/run.sh
+++ b/testsuites/gtplab-sysmo2017/tunmap/ran/run.sh
@@ -2,4 +2,4 @@
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
-osmo-pfcp-tool -c "$SCRIPT_DIR/osmo-pfcp-tool.cfg" "$SCRIPT_DIR/0.gtp_flood.vty"
+osmo-upf-load-gen -c "$SCRIPT_DIR/osmo-upf-load-gen.cfg" "$SCRIPT_DIR/0.gtp_flood.vty"
To view, visit change 38354. To unsubscribe, or for help writing mail filters, visit settings.