aboutsummaryrefslogtreecommitdiffstats
path: root/include/osmocom/pfcp/pfcp_cp_peer.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/osmocom/pfcp/pfcp_cp_peer.h')
-rw-r--r--include/osmocom/pfcp/pfcp_cp_peer.h63
1 files changed, 63 insertions, 0 deletions
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 <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/>.
+ *
+ */
+
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#include <osmocom/core/socket.h>
+#include <osmocom/core/use_count.h>
+#include <osmocom/pfcp/pfcp_proto.h>
+
+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);