Expand description
§rs-pfcp
A high-performance Rust implementation of the PFCP (Packet Forwarding Control Protocol) for 5G networks, providing 100% compliance with 3GPP TS 29.244 Release 18 specification.
§What is PFCP?
PFCP is the critical communication protocol between Control Plane and User Plane functions in 5G networks:
- SMF (Session Management Function) ↔ UPF (User Plane Function)
- Manages packet forwarding rules, traffic steering, and usage reporting
- Essential for 5G service orchestration, QoS enforcement, and network slicing
§Quick Start
// Create F-TEID using new builder pattern
let fteid = FteidBuilder::new()
.teid(0x12345678)
.ipv4("192.168.1.1".parse().unwrap())
.build()
.unwrap();
// Create QER using new builder pattern for QoS enforcement
let qer = CreateQerBuilder::new(QerId::new(1))
.gate_status(rs_pfcp::ie::gate_status::GateStatus::new(
rs_pfcp::ie::gate_status::GateStatusValue::Open,
rs_pfcp::ie::gate_status::GateStatusValue::Open
))
.rate_limit(1000000, 2000000) // 1Mbps up, 2Mbps down
.build()
.unwrap();
// Create session establishment request
let request = SessionEstablishmentRequestBuilder::new(session_id, sequence_number)
.node_id(Ipv4Addr::new(10, 0, 0, 1))
.fseid(0x11111111, "2001:db8::1".parse::<std::net::Ipv6Addr>().unwrap())
.create_pdrs(vec![create_pdr.to_ie()])
.create_fars(vec![create_far.to_ie()])
.create_qers(vec![create_qer.to_ie()])
.build()
.unwrap();
// Serialize to bytes for network transmission
let bytes = request.marshal();
// Parse received messages
let parsed_msg = rs_pfcp::message::parse(&bytes).unwrap();
// Convenience methods for common QER patterns
let open_qer = CreateQer::open_gate(QerId::new(2));
let closed_qer = CreateQer::closed_gate(QerId::new(3));
let rate_limited_qer = CreateQer::with_rate_limit(QerId::new(4), 5000000, 10000000);
let downlink_only_qer = CreateQer::downlink_only(QerId::new(5));
let uplink_only_qer = CreateQer::uplink_only(QerId::new(6));
// Enhanced FAR builder patterns for traffic forwarding
// Common FAR patterns with validation
let uplink_far = CreateFarBuilder::uplink_to_core(FarId::new(10));
let downlink_far = CreateFarBuilder::downlink_to_access(FarId::new(11));
let drop_far = CreateFarBuilder::drop_traffic(FarId::new(12));
let buffer_far = CreateFarBuilder::buffer_traffic(FarId::new(13), BarId::new(1));
// Advanced FAR with network instance and validation
let internet_far = CreateFar::builder(FarId::new(14))
.forward_to_network(Interface::Dn, NetworkInstance::new("internet.apn"))
.build()
.unwrap();
// Forward and duplicate pattern for lawful intercept
let intercept_far = CreateFarBuilder::forward_and_duplicate(FarId::new(15), Interface::Core)
.build()
.unwrap();§Module Organization
ie- Information Elements (IEs) as defined in 3GPP TS 29.244message- PFCP message types for session and association managementcomparison- Message comparison tools for testing, debugging, and validation
Modules§
- comparison
- PFCP message comparison functionality.
- ie
- Information Elements for PFCP messages.
- message
- PFCP messages and their components.