From 6b458fa06072dddd26ec71ceed9b07d6061268e5 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Fri, 17 Jun 2022 17:34:53 +0200 Subject: add generic PFCP CP peer implementation Will be used by osmo-hnbgw, our first PFCP Control Plane entity. The implementation is generic enough that it can be re-used by other CP entities. Related: SYS#5895 Change-Id: If8c5f69f596ea6ba8bd1723f4dc57b91d3799795 --- include/osmocom/pfcp/pfcp_cp_peer.h | 63 +++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 include/osmocom/pfcp/pfcp_cp_peer.h (limited to 'include/osmocom/pfcp/pfcp_cp_peer.h') diff --git a/include/osmocom/pfcp/pfcp_cp_peer.h b/include/osmocom/pfcp/pfcp_cp_peer.h new file mode 100644 index 0000000..8c6e448 --- /dev/null +++ b/include/osmocom/pfcp/pfcp_cp_peer.h @@ -0,0 +1,63 @@ +/* + * (C) 2021-2022 by sysmocom - s.f.m.c. GmbH + * All Rights Reserved. + * + * Author: Neels Janosch Hofmeyr + * + * 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 . + * + */ + +#pragma once + +#include +#include + +#include +#include +#include + +struct osmo_fsm_inst; +struct osmo_pfcp_endpoint; +struct osmo_pfcp_cp_peer; + +typedef void (*osmo_pfcp_cp_peer_assoc_cb)(struct osmo_pfcp_cp_peer *cp_peer, bool associated); + +struct osmo_pfcp_cp_peer { + struct osmo_fsm_inst *fi; + struct osmo_pfcp_endpoint *ep; + struct osmo_sockaddr remote_addr; + uint64_t next_seid_state; + + /* If non-NULL, called whenever the peer completes a PFCP Association, and when it loses association. + * Argument associated == true means the peer has just associated; + * associated == false means the association has been lost. */ + osmo_pfcp_cp_peer_assoc_cb assoc_cb; + /* Application private data for assoc_cb, in case ep->priv does not suffice. */ + void *priv; + + struct osmo_use_count use_count; + struct osmo_use_count_entry use_count_buf[128]; +}; + +struct osmo_pfcp_cp_peer *osmo_pfcp_cp_peer_alloc(void *ctx, + struct osmo_pfcp_endpoint *ep, + const struct osmo_sockaddr *remote_addr); +int osmo_pfcp_cp_peer_associate(struct osmo_pfcp_cp_peer *cp_peer); +bool osmo_pfcp_cp_peer_is_associated(const struct osmo_pfcp_cp_peer *cp_peer); +struct osmo_pfcp_msg *osmo_pfcp_cp_peer_new_msg_tx(struct osmo_pfcp_cp_peer *cp_peer, + enum osmo_pfcp_message_type msg_type); +void osmo_pfcp_cp_peer_set_msg_ctx(struct osmo_pfcp_cp_peer *cp_peer, struct osmo_pfcp_msg *m); -- cgit v1.2.3