Free 5GC 代码解析(二)upf_init.c

本文档详细解析了Free 5GC中UPF(User Plane Function)的初始化过程,涉及配置文件路径设置、信号处理、库函数初始化、线程创建、定时器和事件队列管理、数据接收线程、GTPv1和PFCP接口的初始化等关键步骤。通过这些初始化操作,UPF得以启动并准备处理数据包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include “upf_init.h”

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
#include <sys/socket.h>

#include “utlt_lib.h”
#include “utlt_debug.h”
#include “utlt_buff.h”
#include “utlt_thread.h”
#include “utlt_timer.h”
#include “utlt_network.h”
#include “upf_context.h”
#include “upf_config.h”
#include “up/up_path.h”
#include “n4/n4_pfcp_path.h”
#include “pfcp_xact.h”

#include “updk/env.h”
#include “updk/init.h”

static Status SignalRegister(void *data);

static Status ConfigHandle(void *data);

static Status EpollInit(void *data);
static Status EpollTerm(void *data);

static Status EventQueueInit(void *data);
static Status EventQueueTerm(void *data);

static Status PacketRecvThreadInit(void *data);
static Status PacketRecvThreadTerm(void *data);

static Status Gtpv1Init(void *data);
static Status Gtpv1Term(void *data);

static Status PfcpInit(void *data);
static Status PfcpTerm(void *data);

void PacketReceiverThread(ThreadID id, void *data);

/*************
静态全局变量 默认的配置文件路径
***************/

static char configFilePath[MAX_FILE_PATH_STRLEN] = “./config/upfcfg.yaml”;

/*************
upf_init.h中定义的upf初始化和结束操作结构体
分别包括:
缓冲区分配BufblkPoolInit
线程初始化ThreadInit
定时器初始化TimerPoolInit
socket初始化SockPoolInit
UPF上下文初始化UpfContextInit
UPF处理的信号初始化SignalRegister
UPF配置文件路径初始化ConfigHandle
epoll初始化EpollInit
(是一种I/O事件通知机制,是linux 内核实现IO多路复用的一个实现。
IO多路复用是指,在一个操作里同时监听多个输入输出源,在其中一个或多个输入输出源可用的时候返回,然后对其的进行读写操作。)
UPF事件队列初始化EventQueueInit
UPF数据接收线程初始化PacketRecvThreadInit
UPF运行环境初始化Gtpv1Init
UPF N4接口 PFCP初始化PfcpInit
UPF路由配置初始化UpRouteInit
UPF缓冲区server初始化BufferServerInit
***************/
UpfOps UpfOpsList[] = {
{
.name = “Library - Bufblk Pool”,
.init = BufblkPoolInit,
.initData = NULL,
.term = BufblkPoolFinal,
.termData = NULL,
},

{
    .name = "Library - Thread",
    .init = ThreadInit,
    .initData = NULL,
    .term = ThreadFinal,
    .termData = NULL,
},
{
    .name = "Library - Timer Pool",
    .init = TimerPoolInit,
    .initData = NULL,
    .term = TimerFinal,
    .termData = NULL,
},
{
    .name = "Library - Socket Pool",
    .init = SockPoolInit,
    .initData = NULL,
    .term = SockPoolFinal,
    .termData = NULL,
},
{
    .name = "UPF - Context",
    .init = UpfContextInit,
    .initData = NULL,
    .term = UpfContextTerminate,
    .termData = NULL,
},
{
    .name = "UPF - Signal Registration",
    .init = SignalRegister,
    .initData = NULL,
    .term = NULL,
    .termData = NULL,
},
{
    .name = "UPF - Config Handle",
    .init = ConfigHandle,
    .initData = &configFilePath,
    .ter
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值