mirror of
				https://gitea.osmocom.org/cellular-infrastructure/osmo-upf.git
				synced 2025-11-04 05:53:29 +00:00 
			
		
		
		
	Compare commits
	
		
			9 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					9494bd12af | ||
| 
						 | 
					1a98d7c32b | ||
| 
						 | 
					7d2c272047 | ||
| 
						 | 
					528ca8cd78 | ||
| 
						 | 
					4ec29cf904 | ||
| 
						 | 
					a2289c0730 | ||
| 
						 | 
					d2241da833 | ||
| 
						 | 
					68c0e96a81 | ||
| 
						 | 
					b54baeff98 | 
@@ -37,6 +37,7 @@ osmo-build-dep.sh libgtpnl
 | 
			
		||||
build_from_netfilter() {
 | 
			
		||||
###  TODO: enable osmo-build-dep.sh to build from git.netfilter.org URL?
 | 
			
		||||
	project="$1"
 | 
			
		||||
	cfg="$2"
 | 
			
		||||
	set +x
 | 
			
		||||
	echo
 | 
			
		||||
	echo
 | 
			
		||||
@@ -47,19 +48,20 @@ build_from_netfilter() {
 | 
			
		||||
	if [ -d "./$project" ]; then
 | 
			
		||||
		rm -rf "./$project"
 | 
			
		||||
	fi
 | 
			
		||||
	git clone "git://git.netfilter.org/$project" "$project"
 | 
			
		||||
	git clone "https://git.netfilter.org/$project" "$project"
 | 
			
		||||
	cd "$project"
 | 
			
		||||
	autoreconf --install --force
 | 
			
		||||
	./configure \
 | 
			
		||||
		--prefix="$inst/stow/$project" \
 | 
			
		||||
		--without-cli \
 | 
			
		||||
		--disable-man-doc \
 | 
			
		||||
		--enable-python=no
 | 
			
		||||
		--enable-python=no \
 | 
			
		||||
		$cfg
 | 
			
		||||
	$MAKE $PARALLEL_MAKE install
 | 
			
		||||
	STOW_DIR="$inst/stow" stow --restow $project
 | 
			
		||||
}
 | 
			
		||||
build_from_netfilter libnftnl
 | 
			
		||||
build_from_netfilter nftables
 | 
			
		||||
build_from_netfilter nftables "--with-unitdir=$inst/stow/$project/lib/systemd/system"
 | 
			
		||||
 | 
			
		||||
# Additional configure options and depends
 | 
			
		||||
CONFIG=""
 | 
			
		||||
 
 | 
			
		||||
@@ -24,6 +24,7 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <osmocom/core/linuxlist.h>
 | 
			
		||||
#include <osmocom/core/hashtable.h>
 | 
			
		||||
 | 
			
		||||
struct osmo_pfcp_msg;
 | 
			
		||||
struct osmo_pfcp_endpoint;
 | 
			
		||||
@@ -37,6 +38,10 @@ struct up_endpoint {
 | 
			
		||||
 | 
			
		||||
	/* list of struct up_peer. */
 | 
			
		||||
	struct llist_head peers;
 | 
			
		||||
	/* hashtable of (struct up_session) with key up_seid.
 | 
			
		||||
	 * Allows quick access to sessions (and its endpoint as backpointer)
 | 
			
		||||
	 * with a given up_seid. */
 | 
			
		||||
	DECLARE_HASHTABLE(sessions_by_up_seid, 10);
 | 
			
		||||
 | 
			
		||||
	uint64_t next_up_seid_state;
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -41,6 +41,7 @@ enum up_peer_event {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct up_peer {
 | 
			
		||||
	/* item in up_endpoint->peers */
 | 
			
		||||
	struct llist_head entry;
 | 
			
		||||
 | 
			
		||||
	struct osmo_fsm_inst *fi;
 | 
			
		||||
@@ -62,8 +63,8 @@ struct up_peer {
 | 
			
		||||
	struct osmo_use_count use_count;
 | 
			
		||||
	struct osmo_use_count_entry use_count_buf[5];
 | 
			
		||||
 | 
			
		||||
	DECLARE_HASHTABLE(sessions_by_up_seid, 6);
 | 
			
		||||
	DECLARE_HASHTABLE(sessions_by_cp_seid, 6);
 | 
			
		||||
	DECLARE_HASHTABLE(sessions_by_up_seid, 10);
 | 
			
		||||
	DECLARE_HASHTABLE(sessions_by_cp_seid, 10);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct up_peer *up_peer_find_or_add(struct up_endpoint *up_ep, const struct osmo_sockaddr *remote_addr);
 | 
			
		||||
 
 | 
			
		||||
@@ -45,6 +45,9 @@ struct up_session {
 | 
			
		||||
	struct hlist_node node_by_up_seid;
 | 
			
		||||
	struct hlist_node node_by_cp_seid;
 | 
			
		||||
 | 
			
		||||
	/* item in up_endpoint->peers_by_up_seid: */
 | 
			
		||||
	struct hlist_node ep_node_by_up_seid;
 | 
			
		||||
 | 
			
		||||
	struct osmo_fsm_inst *fi;
 | 
			
		||||
	/* backpointer */
 | 
			
		||||
	struct up_peer *up_peer;
 | 
			
		||||
 
 | 
			
		||||
@@ -116,13 +116,13 @@ struct g_upf {
 | 
			
		||||
		int priority_post;
 | 
			
		||||
		uint32_t next_chain_id_state;
 | 
			
		||||
		/* hashtable of (struct upf_nft_tun)->node_by_chain_id: */
 | 
			
		||||
		DECLARE_HASHTABLE(nft_tun_by_chain_id, 10);
 | 
			
		||||
		DECLARE_HASHTABLE(nft_tun_by_chain_id, 12);
 | 
			
		||||
	} tunmap;
 | 
			
		||||
 | 
			
		||||
	struct {
 | 
			
		||||
		uint32_t next_local_teid_state;
 | 
			
		||||
		/* hashtable of (struct pdr)->node_by_local_f_teid: */
 | 
			
		||||
		DECLARE_HASHTABLE(pdrs_by_local_f_teid, 10);
 | 
			
		||||
		DECLARE_HASHTABLE(pdrs_by_local_f_teid, 12);
 | 
			
		||||
		uint16_t next_echo_seq_nr;
 | 
			
		||||
	} gtp;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -239,6 +239,7 @@ struct up_endpoint *up_endpoint_alloc(void *ctx, const struct osmo_sockaddr *loc
 | 
			
		||||
	struct up_endpoint *up_ep;
 | 
			
		||||
	up_ep = talloc_zero(ctx, struct up_endpoint);
 | 
			
		||||
	INIT_LLIST_HEAD(&up_ep->peers);
 | 
			
		||||
	hash_init(up_ep->sessions_by_up_seid);
 | 
			
		||||
 | 
			
		||||
	cfg = (struct osmo_pfcp_endpoint_cfg){
 | 
			
		||||
		.local_addr = *local_addr,
 | 
			
		||||
@@ -263,10 +264,9 @@ int up_endpoint_bind(struct up_endpoint *up_ep)
 | 
			
		||||
 | 
			
		||||
static struct up_session *up_endpoint_find_session(struct up_endpoint *ep, uint64_t up_seid)
 | 
			
		||||
{
 | 
			
		||||
		struct up_peer *peer;
 | 
			
		||||
		llist_for_each_entry(peer, &ep->peers, entry) {
 | 
			
		||||
			struct up_session *session = up_session_find_by_up_seid(peer, up_seid);
 | 
			
		||||
			if (session)
 | 
			
		||||
		struct up_session *session;
 | 
			
		||||
		hash_for_each_possible(ep->sessions_by_up_seid, session, ep_node_by_up_seid, up_seid) {
 | 
			
		||||
			if (session->up_seid == up_seid)
 | 
			
		||||
				return session;
 | 
			
		||||
		}
 | 
			
		||||
		return NULL;
 | 
			
		||||
 
 | 
			
		||||
@@ -85,7 +85,7 @@ static int up_gtp_action_enable_disable(struct up_gtp_action *a, bool enable)
 | 
			
		||||
	switch (a->kind) {
 | 
			
		||||
	case UP_GTP_U_TUNEND:
 | 
			
		||||
		if (g_upf->tunend.mockup) {
 | 
			
		||||
			LOG_UP_GTP_ACTION(a, LOGL_NOTICE, "tunend/mockup active, skipping GTP action %s\n",
 | 
			
		||||
			LOG_UP_GTP_ACTION(a, LOGL_INFO, "tunend/mockup active, skipping GTP action %s\n",
 | 
			
		||||
					  enable ? "enable" : "disable");
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
@@ -111,13 +111,13 @@ static int up_gtp_action_enable_disable(struct up_gtp_action *a, bool enable)
 | 
			
		||||
					  enable ? "enable" : "disable", rc);
 | 
			
		||||
			return rc;
 | 
			
		||||
		}
 | 
			
		||||
		LOG_UP_GTP_ACTION(a, LOGL_NOTICE, "%s tunend on dev %s\n", enable ? "Enabled" : "Disabled",
 | 
			
		||||
		LOG_UP_GTP_ACTION(a, LOGL_INFO, "%s tunend on dev %s\n", enable ? "Enabled" : "Disabled",
 | 
			
		||||
				  gtp_dev->name);
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	case UP_GTP_U_TUNMAP:
 | 
			
		||||
		if (g_upf->tunmap.mockup) {
 | 
			
		||||
			LOG_UP_GTP_ACTION(a, LOGL_NOTICE, "tunmap/mockup active, skipping nftables ruleset %s\n",
 | 
			
		||||
			LOG_UP_GTP_ACTION(a, LOGL_INFO, "tunmap/mockup active, skipping nftables ruleset %s\n",
 | 
			
		||||
					  enable ? "enable" : "disable");
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
@@ -131,7 +131,7 @@ static int up_gtp_action_enable_disable(struct up_gtp_action *a, bool enable)
 | 
			
		||||
					  enable ? "enable" : "disable", rc);
 | 
			
		||||
			return rc;
 | 
			
		||||
		}
 | 
			
		||||
		LOG_UP_GTP_ACTION(a, LOGL_NOTICE, "%s tunmap, nft chain IDs: access--%u-> <-%u--core\n",
 | 
			
		||||
		LOG_UP_GTP_ACTION(a, LOGL_INFO, "%s tunmap, nft chain IDs: access--%u-> <-%u--core\n",
 | 
			
		||||
				  enable ? "Enabled" : "Disabled",
 | 
			
		||||
				  a->tunmap.access.chain_id, a->tunmap.core.chain_id);
 | 
			
		||||
		return 0;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,196 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * (C) 2021-2022 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
 | 
			
		||||
 * All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Author: Neels Janosch Hofmeyr <nhofmeyr@sysmocom.de>
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: GPL-2.0+
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 *  it under the terms of the GNU General Public License as published by
 | 
			
		||||
 *  the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 *  (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is distributed in the hope that it will be useful,
 | 
			
		||||
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 *  GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 *  You should have received a copy of the GNU General Public License
 | 
			
		||||
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <osmocom/core/utils.h>
 | 
			
		||||
#include <osmocom/core/fsm.h>
 | 
			
		||||
 | 
			
		||||
#include <osmocom/upf/up_peer.h>
 | 
			
		||||
 | 
			
		||||
enum up_peer_fsm_state {
 | 
			
		||||
	UP_PEER_ST_NOT_ASSOCIATED,
 | 
			
		||||
	UP_PEER_ST_ASSOCIATED,
 | 
			
		||||
	UP_PEER_ST_GRACEFUL_RELEASE,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const struct value_string up_peer_fsm_event_names[] = {
 | 
			
		||||
	OSMO_VALUE_STRING(UP_PEER_EV_RX_ASSOC_SETUP_REQ),
 | 
			
		||||
	OSMO_VALUE_STRING(UP_PEER_EV_RX_ASSOC_UPD_REQ),
 | 
			
		||||
	OSMO_VALUE_STRING(UP_PEER_EV_RX_SESSION_EST_REQ),
 | 
			
		||||
	OSMO_VALUE_STRING(UP_PEER_EV_HEARTBEAT_FAILURE),
 | 
			
		||||
	{}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static struct osmo_fsm up_peer_fsm;
 | 
			
		||||
 | 
			
		||||
static const struct osmo_tdef_state_timeout up_peer_fsm_timeouts[32] = {
 | 
			
		||||
	[UP_PEER_ST_GRACEFUL_RELEASE] = { .T = -21 },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Transition to a state, using the T timer defined in up_peer_fsm_timeouts.
 | 
			
		||||
 * Assumes local variable fi exists. */
 | 
			
		||||
#define up_peer_fsm_state_chg(state) \
 | 
			
		||||
	osmo_tdef_fsm_inst_state_chg(fi, state, \
 | 
			
		||||
				     up_peer_fsm_timeouts, \
 | 
			
		||||
				     g_upf_tdefs, \
 | 
			
		||||
				     5)
 | 
			
		||||
 | 
			
		||||
struct up_peer *up_peer_alloc(struct osmo_fsm_inst *parent_fi, uint32_t parent_event_term)
 | 
			
		||||
{
 | 
			
		||||
	struct up_peer *up_peer;
 | 
			
		||||
 | 
			
		||||
	struct osmo_fsm_inst *fi = osmo_fsm_inst_alloc_child(&up_peer_fsm, parent_fi, parent_event_term);
 | 
			
		||||
	OSMO_ASSERT(fi);
 | 
			
		||||
 | 
			
		||||
	up_peer = talloc(fi, struct up_peer);
 | 
			
		||||
	OSMO_ASSERT(up_peer);
 | 
			
		||||
	fi->priv = up_peer;
 | 
			
		||||
	*up_peer = (struct up_peer){
 | 
			
		||||
		.fi = fi,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	return up_peer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int up_peer_fsm_timer_cb(struct osmo_fsm_inst *fi)
 | 
			
		||||
{
 | 
			
		||||
	//struct up_peer *up_peer = fi->priv;
 | 
			
		||||
	/* Return 1 to terminate FSM instance, 0 to keep running */
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void up_peer_not_associated_action(struct osmo_fsm_inst *fi, uint32_t event, void *data)
 | 
			
		||||
{
 | 
			
		||||
	//struct up_peer *up_peer = fi->priv;
 | 
			
		||||
 | 
			
		||||
	switch (event) {
 | 
			
		||||
 | 
			
		||||
	case UP_PEER_EV_RX_ASSOC_SETUP_REQ:
 | 
			
		||||
		// FIXME
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	default:
 | 
			
		||||
		OSMO_ASSERT(false);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void up_peer_associated_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)
 | 
			
		||||
{
 | 
			
		||||
	//struct up_peer *up_peer = fi->priv;
 | 
			
		||||
	// FIXME
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void up_peer_associated_action(struct osmo_fsm_inst *fi, uint32_t event, void *data)
 | 
			
		||||
{
 | 
			
		||||
	//struct up_peer *up_peer = fi->priv;
 | 
			
		||||
 | 
			
		||||
	switch (event) {
 | 
			
		||||
 | 
			
		||||
	case UP_PEER_EV_RX_ASSOC_UPD_REQ:
 | 
			
		||||
		// FIXME
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case UP_PEER_EV_RX_SESSION_EST_REQ:
 | 
			
		||||
		// FIXME
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case UP_PEER_EV_HEARTBEAT_FAILURE:
 | 
			
		||||
		// FIXME
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	default:
 | 
			
		||||
		OSMO_ASSERT(false);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void up_peer_graceful_release_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)
 | 
			
		||||
{
 | 
			
		||||
	//struct up_peer *up_peer = fi->priv;
 | 
			
		||||
	// FIXME
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void up_peer_graceful_release_action(struct osmo_fsm_inst *fi, uint32_t event, void *data)
 | 
			
		||||
{
 | 
			
		||||
	//struct up_peer *up_peer = fi->priv;
 | 
			
		||||
 | 
			
		||||
	switch (event) {
 | 
			
		||||
 | 
			
		||||
	case UP_PEER_EV_HEARTBEAT_FAILURE:
 | 
			
		||||
		// FIXME
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	default:
 | 
			
		||||
		OSMO_ASSERT(false);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define S(x)    (1 << (x))
 | 
			
		||||
 | 
			
		||||
static const struct osmo_fsm_state up_peer_fsm_states[] = {
 | 
			
		||||
	[UP_PEER_ST_NOT_ASSOCIATED] = {
 | 
			
		||||
		.name = "not_associated",
 | 
			
		||||
		.in_event_mask = 0
 | 
			
		||||
			| S(UP_PEER_EV_RX_ASSOC_SETUP_REQ)
 | 
			
		||||
			,
 | 
			
		||||
		.out_state_mask = 0
 | 
			
		||||
			| S(UP_PEER_ST_ASSOCIATED)
 | 
			
		||||
			,
 | 
			
		||||
		.action = up_peer_not_associated_action,
 | 
			
		||||
	},
 | 
			
		||||
	[UP_PEER_ST_ASSOCIATED] = {
 | 
			
		||||
		.name = "associated",
 | 
			
		||||
		.in_event_mask = 0
 | 
			
		||||
			| S(UP_PEER_EV_RX_ASSOC_UPD_REQ)
 | 
			
		||||
			| S(UP_PEER_EV_RX_SESSION_EST_REQ)
 | 
			
		||||
			| S(UP_PEER_EV_HEARTBEAT_FAILURE)
 | 
			
		||||
			,
 | 
			
		||||
		.out_state_mask = 0
 | 
			
		||||
			| S(UP_PEER_ST_GRACEFUL_RELEASE)
 | 
			
		||||
			,
 | 
			
		||||
		.onenter = up_peer_associated_onenter,
 | 
			
		||||
		.action = up_peer_associated_action,
 | 
			
		||||
	},
 | 
			
		||||
	[UP_PEER_ST_GRACEFUL_RELEASE] = {
 | 
			
		||||
		.name = "graceful_release",
 | 
			
		||||
		.in_event_mask = 0
 | 
			
		||||
			| S(UP_PEER_EV_HEARTBEAT_FAILURE)
 | 
			
		||||
			,
 | 
			
		||||
		.out_state_mask = 0
 | 
			
		||||
			,
 | 
			
		||||
		.onenter = up_peer_graceful_release_onenter,
 | 
			
		||||
		.action = up_peer_graceful_release_action,
 | 
			
		||||
	},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static struct osmo_fsm up_peer_fsm = {
 | 
			
		||||
	.name = "up_peer",
 | 
			
		||||
	.states = up_peer_fsm_states,
 | 
			
		||||
	.num_states = ARRAY_SIZE(up_peer_fsm_states),
 | 
			
		||||
	.log_subsys = DSESSION,
 | 
			
		||||
	.event_names = up_peer_fsm_event_names,
 | 
			
		||||
	.timer_cb = up_peer_fsm_timer_cb,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static __attribute__((constructor)) void up_peer_fsm_register(void)
 | 
			
		||||
{
 | 
			
		||||
	OSMO_ASSERT(osmo_fsm_register(&up_peer_fsm) == 0);
 | 
			
		||||
}
 | 
			
		||||
@@ -738,7 +738,7 @@ static void up_session_mod(struct up_session *session, struct osmo_pfcp_msg *m)
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	LOGPFSML(fi, LOGL_NOTICE, "Session modified: %s\n", up_session_gtp_status(session));
 | 
			
		||||
	LOGPFSML(fi, LOGL_INFO, "Session modified: %s\n", up_session_gtp_status(session));
 | 
			
		||||
	return;
 | 
			
		||||
 | 
			
		||||
nack_response:
 | 
			
		||||
@@ -789,7 +789,7 @@ static void up_session_init_action(struct osmo_fsm_inst *fi, uint32_t event, voi
 | 
			
		||||
static void up_session_established_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)
 | 
			
		||||
{
 | 
			
		||||
	struct up_session *session = fi->priv;
 | 
			
		||||
	LOGPFSML(fi, LOGL_NOTICE, "Session established: %s %s\n", up_session_to_str_c(OTC_SELECT, session),
 | 
			
		||||
	LOGPFSML(fi, LOGL_INFO, "Session established: %s %s\n", up_session_to_str_c(OTC_SELECT, session),
 | 
			
		||||
		 up_session_gtp_status(session));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -820,7 +820,7 @@ static void up_session_established_onleave(struct osmo_fsm_inst *fi, uint32_t ne
 | 
			
		||||
{
 | 
			
		||||
	struct up_session *session = fi->priv;
 | 
			
		||||
	struct up_gtp_action *a;
 | 
			
		||||
	LOGPFSML(fi, LOGL_NOTICE, "Session releasing: %s %s\n", up_session_to_str_c(OTC_SELECT, session), up_session_gtp_status(session));
 | 
			
		||||
	LOGPFSML(fi, LOGL_INFO, "Session releasing: %s %s\n", up_session_to_str_c(OTC_SELECT, session), up_session_gtp_status(session));
 | 
			
		||||
 | 
			
		||||
	/* Shut down all active GTP rules */
 | 
			
		||||
	while ((a = llist_first_entry_or_null(&session->active_gtp_actions, struct up_gtp_action, entry))) {
 | 
			
		||||
@@ -885,6 +885,7 @@ static void up_session_fsm_cleanup(struct osmo_fsm_inst *fi, enum osmo_fsm_term_
 | 
			
		||||
 | 
			
		||||
	up_session_clear_pdr_far(session);
 | 
			
		||||
 | 
			
		||||
	hash_del(&session->ep_node_by_up_seid);
 | 
			
		||||
	hash_del(&session->node_by_up_seid);
 | 
			
		||||
	hash_del(&session->node_by_cp_seid);
 | 
			
		||||
}
 | 
			
		||||
@@ -1022,6 +1023,7 @@ static struct up_session *up_session_add(struct up_peer *peer, const struct osmo
 | 
			
		||||
 | 
			
		||||
	hash_add(peer->sessions_by_up_seid, &session->node_by_up_seid, session->up_seid);
 | 
			
		||||
	hash_add(peer->sessions_by_cp_seid, &session->node_by_cp_seid, session->cp_f_seid.seid);
 | 
			
		||||
	hash_add(peer->up_endpoint->sessions_by_up_seid, &session->ep_node_by_up_seid, session->up_seid);
 | 
			
		||||
	return session;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -77,7 +77,7 @@ add element inet osmo-upf tunmap-post { 2 : jump tunmap-post-2 };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DNFT DEBUG ran nft ruleset, 847 chars: "add chain inet osmo-upf tunmap-pre-1;\nadd rule inet osmo-upf tunmap-pre-1 ip daddr set 13.14.15.16 meta mark set 1 counter accept;\nadd chain inet osmo-upf tunmap-post-1;\nadd rule inet osmo-upf tunmap-post-1 ip saddr set 1.1.1.1 udp sport set 2152 @ih,32,32..."
 | 
			
		||||
DGTP NOTICE GTP:tunmap GTP-access-r:5.6.7.8 TEID-access-r:0x100 GTP-access-l:1.1.1.1 TEID-access-l:0x2 GTP-core-r:13.14.15.16 TEID-core-r:0x101 GTP-core-l:1.1.1.1 TEID-core-l:0x1 PFCP-peer:1.2.3.4 SEID-l:0x1 PDR-access:2 PDR-core:1: Enabled tunmap, nft chain IDs: access--1-> <-2--core
 | 
			
		||||
DGTP INFO GTP:tunmap GTP-access-r:5.6.7.8 TEID-access-r:0x100 GTP-access-l:1.1.1.1 TEID-access-l:0x2 GTP-core-r:13.14.15.16 TEID-core-r:0x101 GTP-core-l:1.1.1.1 TEID-core-l:0x1 PFCP-peer:1.2.3.4 SEID-l:0x1 PDR-access:2 PDR-core:1: Enabled tunmap, nft chain IDs: access--1-> <-2--core
 | 
			
		||||
 | 
			
		||||
[test override] PFCP tx:
 | 
			
		||||
PFCPv1 SESSION_EST_RESP hdr={seq=0 SEID=0x100} ies={ 'Node ID'=v4:unsupported family 0 'Cause'=Request accepted (success) 'F-SEID'=0x1,v4:1.1.1.1 'Created PDR'={ { 'PDR ID'=1 'F-TEID'=TEID-0x1,v4:1.1.1.1 }, { 'PDR ID'=2 'F-TEID'=TEID-0x2,v4:1.1.1.1 } } }
 | 
			
		||||
@@ -87,7 +87,7 @@ osmo-upf created session 0x1
 | 
			
		||||
DREF DEBUG up_session(1-2-3-4-0x1){INIT}: - msg-tx: now used by 1 (msg-rx)
 | 
			
		||||
DREF DEBUG up_peer(1-2-3-4){ASSOCIATED}: - msg-tx: now used by 1 (msg-rx)
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x1){INIT}: State change to ESTABLISHED (no timeout)
 | 
			
		||||
DSESSION NOTICE up_session(1-2-3-4-0x1){ESTABLISHED}: Session established: peer:1.2.3.4 SEID-r:0x100 SEID-l:0x1 state:ESTABLISHED PDR-active:2/2 FAR-active:2/2 GTP-active:1
 | 
			
		||||
DSESSION INFO up_session(1-2-3-4-0x1){ESTABLISHED}: Session established: peer:1.2.3.4 SEID-r:0x100 SEID-l:0x1 state:ESTABLISHED PDR-active:2/2 FAR-active:2/2 GTP-active:1
 | 
			
		||||
DREF INFO up_session(1-2-3-4-0x1){ESTABLISHED}: - msg-rx: now used by 0 (-)
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x1){ESTABLISHED}: Received Event UP_SESSION_EV_USE_COUNT_ZERO
 | 
			
		||||
DREF INFO up_peer(1-2-3-4){ASSOCIATED}: - msg-rx: now used by 0 (-)
 | 
			
		||||
@@ -145,7 +145,7 @@ add element inet osmo-upf tunmap-post { 4 : jump tunmap-post-4 };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DNFT DEBUG ran nft ruleset, 847 chars: "add chain inet osmo-upf tunmap-pre-3;\nadd rule inet osmo-upf tunmap-pre-3 ip daddr set 13.14.15.16 meta mark set 3 counter accept;\nadd chain inet osmo-upf tunmap-post-3;\nadd rule inet osmo-upf tunmap-post-3 ip saddr set 1.1.1.1 udp sport set 2152 @ih,32,32..."
 | 
			
		||||
DGTP NOTICE GTP:tunmap GTP-access-r:5.6.7.8 TEID-access-r:0x102 GTP-access-l:1.1.1.1 TEID-access-l:0x4 GTP-core-r:13.14.15.16 TEID-core-r:0x103 GTP-core-l:1.1.1.1 TEID-core-l:0x3 PFCP-peer:1.2.3.4 SEID-l:0x2 PDR-access:2 PDR-core:1: Enabled tunmap, nft chain IDs: access--3-> <-4--core
 | 
			
		||||
DGTP INFO GTP:tunmap GTP-access-r:5.6.7.8 TEID-access-r:0x102 GTP-access-l:1.1.1.1 TEID-access-l:0x4 GTP-core-r:13.14.15.16 TEID-core-r:0x103 GTP-core-l:1.1.1.1 TEID-core-l:0x3 PFCP-peer:1.2.3.4 SEID-l:0x2 PDR-access:2 PDR-core:1: Enabled tunmap, nft chain IDs: access--3-> <-4--core
 | 
			
		||||
 | 
			
		||||
[test override] PFCP tx:
 | 
			
		||||
PFCPv1 SESSION_EST_RESP hdr={seq=0 SEID=0x101} ies={ 'Node ID'=v4:unsupported family 0 'Cause'=Request accepted (success) 'F-SEID'=0x2,v4:1.1.1.1 'Created PDR'={ { 'PDR ID'=1 'F-TEID'=TEID-0x3,v4:1.1.1.1 }, { 'PDR ID'=2 'F-TEID'=TEID-0x4,v4:1.1.1.1 } } }
 | 
			
		||||
@@ -155,7 +155,7 @@ osmo-upf created session 0x2
 | 
			
		||||
DREF DEBUG up_session(1-2-3-4-0x2){INIT}: - msg-tx: now used by 1 (msg-rx)
 | 
			
		||||
DREF DEBUG up_peer(1-2-3-4){ASSOCIATED}: - msg-tx: now used by 1 (msg-rx)
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x2){INIT}: State change to ESTABLISHED (no timeout)
 | 
			
		||||
DSESSION NOTICE up_session(1-2-3-4-0x2){ESTABLISHED}: Session established: peer:1.2.3.4 SEID-r:0x101 SEID-l:0x2 state:ESTABLISHED PDR-active:2/2 FAR-active:2/2 GTP-active:1
 | 
			
		||||
DSESSION INFO up_session(1-2-3-4-0x2){ESTABLISHED}: Session established: peer:1.2.3.4 SEID-r:0x101 SEID-l:0x2 state:ESTABLISHED PDR-active:2/2 FAR-active:2/2 GTP-active:1
 | 
			
		||||
DREF INFO up_session(1-2-3-4-0x2){ESTABLISHED}: - msg-rx: now used by 0 (-)
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x2){ESTABLISHED}: Received Event UP_SESSION_EV_USE_COUNT_ZERO
 | 
			
		||||
DREF INFO up_peer(1-2-3-4){ASSOCIATED}: - msg-rx: now used by 0 (-)
 | 
			
		||||
@@ -187,7 +187,7 @@ DREF INFO up_session(1-2-3-4-0x1){ESTABLISHED}: - msg-tx: now used by 0 (-)
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x1){ESTABLISHED}: Received Event UP_SESSION_EV_USE_COUNT_ZERO
 | 
			
		||||
DREF INFO up_peer(1-2-3-4){ASSOCIATED}: - msg-tx: now used by 0 (-)
 | 
			
		||||
DPEER DEBUG up_peer(1-2-3-4){ASSOCIATED}: Received Event UP_PEER_EV_USE_COUNT_ZERO
 | 
			
		||||
DSESSION NOTICE up_session(1-2-3-4-0x1){ESTABLISHED}: Session releasing: peer:1.2.3.4 SEID-r:0x100 SEID-l:0x1 state:ESTABLISHED PDR-active:2/2 FAR-active:2/2 GTP-active:1
 | 
			
		||||
DSESSION INFO up_session(1-2-3-4-0x1){ESTABLISHED}: Session releasing: peer:1.2.3.4 SEID-r:0x100 SEID-l:0x1 state:ESTABLISHED PDR-active:2/2 FAR-active:2/2 GTP-active:1
 | 
			
		||||
DNFT INFO Added NFT ruleset to queue: n:1 strlen:381
 | 
			
		||||
DNFT INFO Flushing NFT ruleset queue: reached max nr of rules: n:1 strlen:381 (flush count: 3 avg rules per flush: 1)
 | 
			
		||||
 | 
			
		||||
@@ -203,7 +203,7 @@ delete chain inet osmo-upf tunmap-post-2;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DNFT DEBUG ran nft ruleset, 381 chars: "delete element inet osmo-upf tunmap-pre { 1.1.1.1 . 0x2 };\ndelete element inet osmo-upf tunmap-post { 1 };\ndelete chain inet osmo-upf tunmap-pre-1;\ndelete chain inet osmo-upf tunmap-post-1;\ndelete element inet osmo-upf tunmap-pre { 1.1.1.1 . 0x1 };\ndelete ..."
 | 
			
		||||
DGTP NOTICE GTP:tunmap GTP-access-r:5.6.7.8 TEID-access-r:0x100 GTP-access-l:1.1.1.1 TEID-access-l:0x2 GTP-core-r:13.14.15.16 TEID-core-r:0x101 GTP-core-l:1.1.1.1 TEID-core-l:0x1 PFCP-peer:1.2.3.4 SEID-l:0x1 PDR-access:2 PDR-core:1: Disabled tunmap, nft chain IDs: access--1-> <-2--core
 | 
			
		||||
DGTP INFO GTP:tunmap GTP-access-r:5.6.7.8 TEID-access-r:0x100 GTP-access-l:1.1.1.1 TEID-access-l:0x2 GTP-core-r:13.14.15.16 TEID-core-r:0x101 GTP-core-l:1.1.1.1 TEID-core-l:0x1 PFCP-peer:1.2.3.4 SEID-l:0x1 PDR-access:2 PDR-core:1: Disabled tunmap, nft chain IDs: access--1-> <-2--core
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x1){ESTABLISHED}: State change to WAIT_USE_COUNT (no timeout)
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x1){WAIT_USE_COUNT}: GTP actions: 0 previously active; want active: 0
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x1){WAIT_USE_COUNT}: Terminating (cause = OSMO_FSM_TERM_REGULAR)
 | 
			
		||||
@@ -259,7 +259,7 @@ add element inet osmo-upf tunmap-post { 2 : jump tunmap-post-2 };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DNFT DEBUG ran nft ruleset, 847 chars: "add chain inet osmo-upf tunmap-pre-1;\nadd rule inet osmo-upf tunmap-pre-1 ip daddr set 13.14.15.16 meta mark set 1 counter accept;\nadd chain inet osmo-upf tunmap-post-1;\nadd rule inet osmo-upf tunmap-post-1 ip saddr set 1.1.1.1 udp sport set 2152 @ih,32,32..."
 | 
			
		||||
DGTP NOTICE GTP:tunmap GTP-access-r:5.6.7.8 TEID-access-r:0x104 GTP-access-l:1.1.1.1 TEID-access-l:0x2 GTP-core-r:13.14.15.16 TEID-core-r:0x105 GTP-core-l:1.1.1.1 TEID-core-l:0x1 PFCP-peer:1.2.3.4 SEID-l:0x1 PDR-access:2 PDR-core:1: Enabled tunmap, nft chain IDs: access--1-> <-2--core
 | 
			
		||||
DGTP INFO GTP:tunmap GTP-access-r:5.6.7.8 TEID-access-r:0x104 GTP-access-l:1.1.1.1 TEID-access-l:0x2 GTP-core-r:13.14.15.16 TEID-core-r:0x105 GTP-core-l:1.1.1.1 TEID-core-l:0x1 PFCP-peer:1.2.3.4 SEID-l:0x1 PDR-access:2 PDR-core:1: Enabled tunmap, nft chain IDs: access--1-> <-2--core
 | 
			
		||||
 | 
			
		||||
[test override] PFCP tx:
 | 
			
		||||
PFCPv1 SESSION_EST_RESP hdr={seq=0 SEID=0x102} ies={ 'Node ID'=v4:unsupported family 0 'Cause'=Request accepted (success) 'F-SEID'=0x1,v4:1.1.1.1 'Created PDR'={ { 'PDR ID'=1 'F-TEID'=TEID-0x1,v4:1.1.1.1 }, { 'PDR ID'=2 'F-TEID'=TEID-0x2,v4:1.1.1.1 } } }
 | 
			
		||||
@@ -269,7 +269,7 @@ osmo-upf created session 0x1
 | 
			
		||||
DREF DEBUG up_session(1-2-3-4-0x1){INIT}: - msg-tx: now used by 1 (msg-rx)
 | 
			
		||||
DREF DEBUG up_peer(1-2-3-4){ASSOCIATED}: - msg-tx: now used by 1 (msg-rx)
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x1){INIT}: State change to ESTABLISHED (no timeout)
 | 
			
		||||
DSESSION NOTICE up_session(1-2-3-4-0x1){ESTABLISHED}: Session established: peer:1.2.3.4 SEID-r:0x102 SEID-l:0x1 state:ESTABLISHED PDR-active:2/2 FAR-active:2/2 GTP-active:1
 | 
			
		||||
DSESSION INFO up_session(1-2-3-4-0x1){ESTABLISHED}: Session established: peer:1.2.3.4 SEID-r:0x102 SEID-l:0x1 state:ESTABLISHED PDR-active:2/2 FAR-active:2/2 GTP-active:1
 | 
			
		||||
DREF INFO up_session(1-2-3-4-0x1){ESTABLISHED}: - msg-rx: now used by 0 (-)
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x1){ESTABLISHED}: Received Event UP_SESSION_EV_USE_COUNT_ZERO
 | 
			
		||||
DREF INFO up_peer(1-2-3-4){ASSOCIATED}: - msg-rx: now used by 0 (-)
 | 
			
		||||
@@ -327,7 +327,7 @@ add element inet osmo-upf tunmap-post { 6 : jump tunmap-post-6 };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DNFT DEBUG ran nft ruleset, 847 chars: "add chain inet osmo-upf tunmap-pre-5;\nadd rule inet osmo-upf tunmap-pre-5 ip daddr set 13.14.15.16 meta mark set 5 counter accept;\nadd chain inet osmo-upf tunmap-post-5;\nadd rule inet osmo-upf tunmap-post-5 ip saddr set 1.1.1.1 udp sport set 2152 @ih,32,32..."
 | 
			
		||||
DGTP NOTICE GTP:tunmap GTP-access-r:5.6.7.8 TEID-access-r:0x106 GTP-access-l:1.1.1.1 TEID-access-l:0x6 GTP-core-r:13.14.15.16 TEID-core-r:0x107 GTP-core-l:1.1.1.1 TEID-core-l:0x5 PFCP-peer:1.2.3.4 SEID-l:0x3 PDR-access:2 PDR-core:1: Enabled tunmap, nft chain IDs: access--5-> <-6--core
 | 
			
		||||
DGTP INFO GTP:tunmap GTP-access-r:5.6.7.8 TEID-access-r:0x106 GTP-access-l:1.1.1.1 TEID-access-l:0x6 GTP-core-r:13.14.15.16 TEID-core-r:0x107 GTP-core-l:1.1.1.1 TEID-core-l:0x5 PFCP-peer:1.2.3.4 SEID-l:0x3 PDR-access:2 PDR-core:1: Enabled tunmap, nft chain IDs: access--5-> <-6--core
 | 
			
		||||
 | 
			
		||||
[test override] PFCP tx:
 | 
			
		||||
PFCPv1 SESSION_EST_RESP hdr={seq=0 SEID=0x103} ies={ 'Node ID'=v4:unsupported family 0 'Cause'=Request accepted (success) 'F-SEID'=0x3,v4:1.1.1.1 'Created PDR'={ { 'PDR ID'=1 'F-TEID'=TEID-0x5,v4:1.1.1.1 }, { 'PDR ID'=2 'F-TEID'=TEID-0x6,v4:1.1.1.1 } } }
 | 
			
		||||
@@ -337,7 +337,7 @@ osmo-upf created session 0x3
 | 
			
		||||
DREF DEBUG up_session(1-2-3-4-0x3){INIT}: - msg-tx: now used by 1 (msg-rx)
 | 
			
		||||
DREF DEBUG up_peer(1-2-3-4){ASSOCIATED}: - msg-tx: now used by 1 (msg-rx)
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x3){INIT}: State change to ESTABLISHED (no timeout)
 | 
			
		||||
DSESSION NOTICE up_session(1-2-3-4-0x3){ESTABLISHED}: Session established: peer:1.2.3.4 SEID-r:0x103 SEID-l:0x3 state:ESTABLISHED PDR-active:2/2 FAR-active:2/2 GTP-active:1
 | 
			
		||||
DSESSION INFO up_session(1-2-3-4-0x3){ESTABLISHED}: Session established: peer:1.2.3.4 SEID-r:0x103 SEID-l:0x3 state:ESTABLISHED PDR-active:2/2 FAR-active:2/2 GTP-active:1
 | 
			
		||||
DREF INFO up_session(1-2-3-4-0x3){ESTABLISHED}: - msg-rx: now used by 0 (-)
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x3){ESTABLISHED}: Received Event UP_SESSION_EV_USE_COUNT_ZERO
 | 
			
		||||
DREF INFO up_peer(1-2-3-4){ASSOCIATED}: - msg-rx: now used by 0 (-)
 | 
			
		||||
@@ -378,7 +378,7 @@ delete chain inet osmo-upf tunmap-post-6;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DNFT DEBUG ran nft ruleset, 381 chars: "delete element inet osmo-upf tunmap-pre { 1.1.1.1 . 0x6 };\ndelete element inet osmo-upf tunmap-post { 5 };\ndelete chain inet osmo-upf tunmap-pre-5;\ndelete chain inet osmo-upf tunmap-post-5;\ndelete element inet osmo-upf tunmap-pre { 1.1.1.1 . 0x5 };\ndelete ..."
 | 
			
		||||
DGTP NOTICE GTP:tunmap GTP-access-r:5.6.7.8 TEID-access-r:0x106 GTP-access-l:1.1.1.1 TEID-access-l:0x6 GTP-core-r:13.14.15.16 TEID-core-r:0x107 GTP-core-l:1.1.1.1 TEID-core-l:0x5 PFCP-peer:1.2.3.4 SEID-l:0x3 PDR-access:2 PDR-core:1: Disabled tunmap, nft chain IDs: access--5-> <-6--core
 | 
			
		||||
DGTP INFO GTP:tunmap GTP-access-r:5.6.7.8 TEID-access-r:0x106 GTP-access-l:1.1.1.1 TEID-access-l:0x6 GTP-core-r:13.14.15.16 TEID-core-r:0x107 GTP-core-l:1.1.1.1 TEID-core-l:0x5 PFCP-peer:1.2.3.4 SEID-l:0x3 PDR-access:2 PDR-core:1: Disabled tunmap, nft chain IDs: access--5-> <-6--core
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x3){ESTABLISHED}: Freeing instance
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x3){ESTABLISHED}: Deallocated
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x1){ESTABLISHED}: Terminating (cause = OSMO_FSM_TERM_PARENT)
 | 
			
		||||
@@ -401,7 +401,7 @@ delete chain inet osmo-upf tunmap-post-2;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DNFT DEBUG ran nft ruleset, 381 chars: "delete element inet osmo-upf tunmap-pre { 1.1.1.1 . 0x2 };\ndelete element inet osmo-upf tunmap-post { 1 };\ndelete chain inet osmo-upf tunmap-pre-1;\ndelete chain inet osmo-upf tunmap-post-1;\ndelete element inet osmo-upf tunmap-pre { 1.1.1.1 . 0x1 };\ndelete ..."
 | 
			
		||||
DGTP NOTICE GTP:tunmap GTP-access-r:5.6.7.8 TEID-access-r:0x104 GTP-access-l:1.1.1.1 TEID-access-l:0x2 GTP-core-r:13.14.15.16 TEID-core-r:0x105 GTP-core-l:1.1.1.1 TEID-core-l:0x1 PFCP-peer:1.2.3.4 SEID-l:0x1 PDR-access:2 PDR-core:1: Disabled tunmap, nft chain IDs: access--1-> <-2--core
 | 
			
		||||
DGTP INFO GTP:tunmap GTP-access-r:5.6.7.8 TEID-access-r:0x104 GTP-access-l:1.1.1.1 TEID-access-l:0x2 GTP-core-r:13.14.15.16 TEID-core-r:0x105 GTP-core-l:1.1.1.1 TEID-core-l:0x1 PFCP-peer:1.2.3.4 SEID-l:0x1 PDR-access:2 PDR-core:1: Disabled tunmap, nft chain IDs: access--1-> <-2--core
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x1){ESTABLISHED}: Freeing instance
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x1){ESTABLISHED}: Deallocated
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x2){ESTABLISHED}: Terminating (cause = OSMO_FSM_TERM_PARENT)
 | 
			
		||||
@@ -424,7 +424,7 @@ delete chain inet osmo-upf tunmap-post-4;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DNFT DEBUG ran nft ruleset, 381 chars: "delete element inet osmo-upf tunmap-pre { 1.1.1.1 . 0x4 };\ndelete element inet osmo-upf tunmap-post { 3 };\ndelete chain inet osmo-upf tunmap-pre-3;\ndelete chain inet osmo-upf tunmap-post-3;\ndelete element inet osmo-upf tunmap-pre { 1.1.1.1 . 0x3 };\ndelete ..."
 | 
			
		||||
DGTP NOTICE GTP:tunmap GTP-access-r:5.6.7.8 TEID-access-r:0x102 GTP-access-l:1.1.1.1 TEID-access-l:0x4 GTP-core-r:13.14.15.16 TEID-core-r:0x103 GTP-core-l:1.1.1.1 TEID-core-l:0x3 PFCP-peer:1.2.3.4 SEID-l:0x2 PDR-access:2 PDR-core:1: Disabled tunmap, nft chain IDs: access--3-> <-4--core
 | 
			
		||||
DGTP INFO GTP:tunmap GTP-access-r:5.6.7.8 TEID-access-r:0x102 GTP-access-l:1.1.1.1 TEID-access-l:0x4 GTP-core-r:13.14.15.16 TEID-core-r:0x103 GTP-core-l:1.1.1.1 TEID-core-l:0x3 PFCP-peer:1.2.3.4 SEID-l:0x2 PDR-access:2 PDR-core:1: Disabled tunmap, nft chain IDs: access--3-> <-4--core
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x2){ESTABLISHED}: Freeing instance
 | 
			
		||||
DSESSION DEBUG up_session(1-2-3-4-0x2){ESTABLISHED}: Deallocated
 | 
			
		||||
DPEER NOTICE up_peer(1-2-3-4){ASSOCIATED}: Peer removed
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user