دليل عمليات OmniSMF
نظرة عامة
تقوم OmniSMF بتنفيذ وظيفة إدارة الجلسات (SMF) من النواة 5G، المسؤولة عن دورة حياة جلسات PDU بالكامل. إنها تربط واجهة N4 (PFCP) نحو UPF، وواجهة N7 نحو PCF، وواجهات N10/N11 نحو UDM و AMF على التوالي.
يتم إدارة كل جلسة PDU بواسطة SessionWorker GenServer مخصص تحت SessionSupervisor DynamicSupervisor (معمارية عملية لكل جلسة). جميع حالة الجلسة (تدفقات QoS، سياق PFCP، IP UE، حالة اتصال UP) مملوكة لعملية العامل. لا تؤثر انهيارات الجلسات الأخرى على جلسة واحدة. يتم إجراء ��ميع مكالمات SBI الصادرة عبر HTTP عادي باستخدام URIs ثابتة تم تكوينها عند بدء التشغيل؛ اكتشاف ديناميكي قائم على NRF غير نشط في الإصدار الحالي.
المعمارية
دور 3GPP ومراجع المواصفات
| المواصفة | الصلة |
|---|---|
| TS 23.501 | بنية النظام — دور SMF، مفهوم جلسة PDU |
| TS 23.502 | الإجراءات — إنشاء جلسة PDU (4.3.2)، التعديل (4.3.3)، الإنهاء (4.3.4) |
| TS 29.502 | واجهة Nsmf_PDUSession API (HTTP/2 SBI) |
| TS 29.244 | واجهة N4 — بروتوكول PFCP بين SMF و UPF |
| TS 29.503 | Nudm_SubscriberDataManagement و Nudm_UEContextManagement |
| TS 29.512 | Npcf_SMPolicyControl — ارتباط سياسة SM نحو PCF |
| TS 29.518 | Namf_Communication — N1N2MessageTransfer نحو AMF |
نقاط نهاية SBI
تُخدم جميع نقاط النهاية تحت عنوان URL الأساسي {sbi_scheme}://{sbi_addr}:{sbi_port}.
| الطريقة | المسار | الخدمة | الوصف | المواصفة |
|---|---|---|---|---|
| POST | /nsmf-pdusession/v1/sm-contexts | Nsmf_PDUSession | إنشاء سياق SM (إنشاء جلسة PDU) | TS 29.502 6.1.6.2.2 |
| POST | /nsmf-pdusession/v1/sm-contexts/{smContextRef}/modify | Nsmf_PDUSession | تحديث سياق SM (معلومات N2، تغيير حالة UP، تسليم، علامة الإنهاء) | TS 29.502 6.1.6.4.2 |
| POST | /nsmf-pdusession/v1/sm-contexts/{smContextRef}/release | Nsmf_PDUSession | إنهاء سياق SM (إنهاء الجلسة) | TS 29.502 6.1.6.5.2 |
ملخص الطلب / الاستجابة
إنشاء سياق SM — الحقول المطلوبة في الطلب: supi, sNssai, servingNetwork, dnn, smContextStatusUri, pduSessionId. يرجع 201 Created مع Location: /nsmf-pdusession/v1/sm-contexts/{ref}.
تحديث سياق SM — يتم الإرسال بناءً على أول مفتاح معترف به في الجسم:
| مفتاح الجسم | السيناريو |
|---|---|
n2SmInfo + n2SmInfoType | معلومات N2 SM من gNB (PDU_RES_SETUP_RSP / PDU_RES_REL_RSP) |
upCnxState: DEACTIVATED | إنهاء AN / دخول UE في وضع الخمول |
upCnxState: ACTIVATING | طلب خدمة — يرجع N2 PDU_RES_SETUP_REQ |
release: true | إنهاء بدأه AMF |
servingNfId | تغيير مثيل AMF أثناء التنقل |
إنهاء سياق SM — قد يتضمن الجسم ueLocation لتسجيل الموقع النهائي. يرجع 204 No Content.
مرجع التكوين
يتم قراءة التكوين من مفتاح بيئة التطبيق :omnismf. آلية النشر القياسية هي config/runtime.exs أو متغيرات البيئة الخاصة بنظام التشغيل المربوطة عند بدء التشغيل.
config :omnismf,
sbi_scheme: "http",
sbi_addr: "127.0.0.4",
sbi_port: 7777,
nrf_uri: "http://127.0.0.10:7777",
udm_uri: "http://127.0.0.12:7777",
pcf_uri: "http://127.0.0.13:7777",
amf_uri: "http://127.0.0.5:7777",
upf_addr: "127.0.0.7",
upf_pfcp_port: 8805,
mcc: "999",
mnc: "70",
heartbeat_interval: 10_000,
pfcp_addr: "127.0.0.4",
ue_ip_pool: "10.45.0.0/16",
dns: ["8.8.8.8", "8.8.4.4"],
dns6: ["2001:4860:4860::8888"],
mtu: 1400
جدول المعلمات
| المعلمة | النوع | الافتراضي | الوصف |
|---|---|---|---|
sbi_scheme | سلسلة | "http" | مخطط HTTP لفتحة الاستماع SBI (http أو https) |
sbi_addr | سلسلة | "127.0.0.4" | عنوان IP الذي يرتبط به خادم HTTP SBI |
sbi_port | عدد صحيح | 7777 | منفذ TCP الذي يستمع عليه خادم HTTP SBI |
nrf_uri | سلسلة | "http://127.0.0.10:7777" | URI الأساسي لـ NRF. يستخدم فقط لتسجيل NF وطلبات نبضات القلب (اكتشاف قائم على NRF غير نشط) |
udm_uri | سلسلة | "http://127.0.0.12:7777" | URI الأساسي لـ UDM. يستخدم لمكالمات Nudm-SDM (sm-data) و Nudm-UECM (smf-registrations) |
pcf_uri | سلسلة | "http://127.0.0.13:7777" | URI الأساسي لـ PCF. يستخدم لمكالمات Npcf-SMPolicyControl (sm-policies) |
amf_uri | سلسلة | "http://127.0.0.5:7777" | URI الأساسي لـ AMF. يستخدم لمكالمات N1N2MessageTransfer (namf-comm). يتم تجاوزها لكل جلسة بواسطة مضيف smContextStatusUri إذا كان موجودًا |
upf_addr | سلسلة | "127.0.0.7" | عنوان IP لنقطة نهاية PFCP لـ UPF (واجهة N4) |
upf_pfcp_port | عدد صحيح | 8805 | منفذ UDP لنقطة نهاية PFCP لـ UPF. منفذ PFCP القياسي وفقًا لـ TS 29.244 |
mcc | سلسلة | "999" | رمز الدولة المتنقلة لشبكة PLMN المقدمة |
mnc | سلسلة | "70" | رمز الشبكة المتنقلة لشبكة PLMN المقدمة |
heartbeat_interval | عدد صحيح (مللي ثانية) | 10000 | الفاصل الزمني بالمللي ثانية بين طلبات نبضات القلب NRF. يستخدم أيضًا لاشتقاق عتبة وقت URR (heartbeat_interval / 1000 * 6 ثواني) |
dns | قائمة من السلاسل | ["8.8.8.8", "8.8.4.4"] | عناوين خادم DNS IPv4 التي يتم تسليمها إلى UE في قبول إنشاء جلسة PDU |
dns6 | قائمة من السلاسل | ["2001:4860:4860::8888"] | عناوين خادم DNS IPv6 التي يتم تسليمها إلى UE في قبول إنشاء جلسة PDU |
pfcp_addr | سلسلة | "127.0.0.4" | عنوان IP المصدر لرسائل PFCP (N4) المرسلة إلى UPF. يجب أن يكون قابلاً للتوجيه من UPF |
ue_ip_pool | سلسلة | "10.45.0.0/16" | شبكة CIDR التي يتم تخصيص عناوين IPv4 الخاصة بـ UE منها. يتم إدارتها بواسطة UeIpPool GenServer مع إزالة التكرار والإفراج عند الإنهاء |
mtu | عدد صحيح | 1400 | قيمة MTU المعلنة لـ UE لجلسة PDU |
الإجراءات الرئيسية
إنشاء جلسة PDU (TS 23.502 القسم 4.3.2)
إنهاء جلسة PDU (TS 23.502 القسم 4.3.4)
UE في وضع الخمول / طلب الخدمة (حالة اتصال UP)
هيكل جلسة PFCP N4
تؤدي كل جلسة PDU إلى تثبيت عناصر PFCP التالية على UPF:
| IE | ID | الاتجاه | الغرض |
|---|---|---|---|
| PDR (الرفع) | 1 | الوصول -> النواة | مطابقة حركة مرور GTP-U من gNB على UPF N3 F-TEID |
| PDR (الخفض) | 2 | النواة -> الوصول | مطابقة حركة المرور من N6 بواسطة عنوان IP لـ UE |
| FAR (الرفع) | 1 | النواة | إعادة توجيه إلى N6 (بدون رأس خارجي) |
| FAR (الخفض) | 2 | الوصول | في البداية BUFFER؛ يتم تحديثها إلى GTP-U FORWARD بعد PDU_RES_SETUP_RSP |
| QER | 1 | كلاهما | فرض AMBR للجلسة (MBR للرفع والخفض) |
| URR | 1 | كلاهما | تقرير الاستخدام القائم على الوقت (العتبة = heartbeat_interval * 6 ثواني) |
مقاييس Prometheus
مقاييس SBI / جلسة PDU
| المقياس | النوع | العلامات | الوصف |
|---|---|---|---|
omni_smf.pdu_session.create.count | عداد | result | عمليات إنشاء جلسة PDU |
omni_smf.pdu_session.modify.count | عداد | result | عمليات تعديل جلسة PDU |
omni_smf.pdu_session.release.count | عداد | result | عمليات إنهاء جلسة PDU |
omni_smf.pdu_session_creates.total | عداد | result, dnn | إجمالي إنشاءات جلسة PDU حسب DNN |
omni_smf.pdu_session_releases.total | عداد | result | إجمالي إنهاءات جلسة PDU |
omni_smf.active_pdu_sessions.count | مقياس | dnn | عدد جلسات PDU النشطة حسب DNN |
omni_smf.session.duration_seconds | توزيع | -- | مدة جلسة PDU بالثواني (دلاء: 1، 5، 15، 30، 60، 300، 900، 3600، 86400) |
مقاييس PFCP / UPF
| المقياس | النوع | العلامات | الوصف |
|---|---|---|---|
omni_smf.pfcp_sessions.total | عداد | operation | إجمالي عمليات جلسة PFCP |
omni_smf.upf.health | مقياس | -- | صحة ارتباط PFCP لـ UPF (1=موجود، 0=غير موجود) |
مقاييس NRF
| المقياس | النوع | العلامات | الوصف |
|---|---|---|---|
omni_smf.nrf.registration.status | مقياس | nf_type | حالة تسجيل NRF (1=مسجل، 0=غير مسجل) |
مقاييس BEAM VM
| المقياس | النوع | الوصف |
|---|---|---|
beam.memory.total | مقياس | إجمالي ذاكرة BEAM بالبايت |
beam.memory.processes | مقياس | الذاكرة المستخدمة بواسطة عمليات Erlang |
beam.memory.processes_used | مقياس | الذاكرة المستخدمة فعليًا بواسطة العمليات |
beam.memory.system | مقياس | ذاكرة النظام |
beam.memory.atom | مقياس | إجمالي ذاكرة الذرات |
beam.memory.atom_used | مقياس | الذاكرة المستخدمة من الذرات |
beam.memory.binary | مقياس | ذاكرة ثنائية |
beam.memory.code | مقياس | ذاكرة الشيف��ة |
beam.memory.ets | مقياس | ذاكرة جدول ETS |
beam.processes.count | مقياس | عدد عمليات Erlang |
beam.ports.count | مقياس | عدد منافذ Erlang |
beam.atom.count | مقياس | عدد الذرات |
beam.vm.uptime | مقياس | وقت تشغيل VM بالثواني |
القيود المعروفة
تم تحديد الفجوات التالية خلال تدقيق تشغيلي. تتوافق معرفات المرجع مع تتبع داخلي.
| المعرف | المنطقة | الوصف |
|---|---|---|
| SMF-H5 | تقارير N4 | لا تتم معالجة رسائل طلب تقرير الجلسة المستلمة من UPF. يتم تجاهل تقارير الاستخدام من مشغلات URR بصمت. |
| SMF-H7 | NAS | لم يتم فك تشفير حاوية N1 SM في SmContextCreateData. لم يتم فحص محتوى طلب إنشاء جلسة PDU (قدرة 5GSM، خيارات تكوين البروتوكول الموسعة) أو إعادة توجيهه. |
| SMF-M1 | تسليم | معالجة حالة التسليم جزئية. لا يتم دعم التسليم القائم على Xn وتبديلات مسارات N2 بين AMF بالكامل؛ يتعامل مسار تحديث servingNfId مع تغيير AMF ولكن لم يتم تنفيذ الإجراء الكامل للتسليم (TS 23.502 4.9). |
| SMF-M3 | IP UE | يتم تخصيص عناوين IPv4 لـ UE بشكل عشوائي من 10.45.0.0/16 عند كل إنشاء جلسة. لا توجد إدارة لمجموعة العناوين، ولا كشف عن التداخل، ولا تفويض مسبق IPv6. |
| SMF-M4 | الإشعارات | لا يتم إرسال إشعارات حالة سياق SM إلى URI رد الاتصال AMF (smContextStatusUri). لا يتم إبلاغ AMF بالتغييرات في الحالة التي بدأها SMF (مثل الإنهاء الذي يحفزه الشبكة). |
| SMF-M5 | اكتشاف NRF | يوجد وحدة تسجيل NRF ويسجل SMF مع NRF. ومع ذلك، تستخدم جميع مكالمات SBI الصادرة (إلى UDM، PCF، AMF) URIs ثابتة من التكوين. لا يتم إجراء اكتشاف قائم على NRF. |
| SMF-M7 | تقارير PFCP | لا يتم إرسال SessionReportResponse إلى UPF استجابةً لطلبات تقرير الجلسة. |
| SMF-L1 | استرجاع سياق SM | لا توجد نقطة نهاية GET /nsmf-pdusession/v1/sm-contexts/{ref}. لا يتم دعم استرجاع سياق SM من قبل المستهلكين الخارجيين. |
| SMF-L3 | تعديل QoS | لا يتم دعم تعديل تدفق QoS بعد إنشاء الجلسة. لا يمكن تحفيز إضافة أو تعديل أو حذف تدفقات QoS (TS 23.502 4.3.3) بعد الإنشاء. |
استكشاف الأخطاء وإصلاحها
فشل إنشاء جلسة PDU مع 404 DNN_DENIED
أعاد UDM بيانات اشتراك إدارة الجلسة التي لا تتضمن DNN المطلوبة. تحقق من أن بيانات المشترك الخاصة بـ SUPI تحتوي على إدخال dnnConfigurations يتطابق مع DNN المطلوبة (غير حساسة لحالة الأحرف). تحقق من سجل SMF للخط فشل إنشاء سياق SM: dnn_not_found.
فشل إنشاء جلسة PDU مع 503 NF_DISCOVERY_FAILURE
لم يتمكن SMF من الوصول إلى UDM عند udm_uri. تحقق من الاتصال من مضيف SMF إلى udm_uri المكون. تحقق من قواعد جدار الحماية وأن منفذ SBI لـ UDM قابل للوصول. سيظهر سجل SMF [SBI->UDM] GET sm-data failed مع السبب الأساسي.
تم رفض إنشاء جلسة PFCP
أعاد UPF سببًا غير "تم قبول الطلب" في استجابة إنشاء جلسة PFCP. الأسباب الشائعة:
upf_addrأوupf_pfcp_portغير صحيحة — تحقق باستخدامss -ulnp | grep 8805على مضيف UPF.- لا يدعم UPF عناصر PDR/FAR المرسلة بواسطة SMF — تحقق من سجلات قدرة UPF.
- لم يتم إنشاء نبض PFCP (الارتباط) — يجب على SMF إكمال إعداد ارتباط PFCP قبل إرسال طلبات الجلسة. تحقق من السجلات للحصول على رسائل
[PFCP] Associationعند بدء التشغيل.
سيحتوي سجل SMF على [PFCP] تم رفض إنشاء الجلسة: <cause> أو [PFCP] فشل إنشاء الجلسة: <reason>.
فشل N1N2MessageTransfer إلى AMF
بعد أن يرجع SMF 201 إلى AMF لإنشاء السياق، فإنه يرسل N1N2MessageTransfer بشكل غير متزامن. إذا فشل هذا الاتصال، يتم إنشاء جلسة PDU في SMF و UPF ولكن لن يتلقى UE قبول الإنشاء. يسجل SMF [SBI->AMF] فشل نقل N1N2. تعتبر هذه الفشل حاليًا غير قاتل من منظور SMF — لا يتم محاولة إعادة المحاولة. للتعافي، قم بإنهاء سياق SM وحاول إنشاء جلسة PDU مرة أخرى.
لم يتلق UE عنوان IP
يتم تخصيص IP في وقت إنشاء جلسة PFCP باستخدام اختيار عشوائي من 10.45.0.0/16. إذا أعاد UPF عنوان IP مختلف في PDR الذي تم إنشاؤه (تخصيص عنوان UPF)، سيستخدم SMF F-TEID الذي أعاده UPF ولكنه سيظل يسجل IP الذي تم إنشاؤه عشوائيًا. تأكد من أن UPF مكون لقبول عناوين IP الخاصة بـ UE المحددة بواسطة SMF أو تخصيصها وإعادتها عبر PDR الذي تم إنشاؤه. انظر القيد SMF-M3.
ارتفاع عدد الجلسات / نمو الذاكرة
يتم تخزين سياقات الجلسة في وكيل داخل العملية. تتم إزالتها فقط عند release_sm_context صريح. إذا تم تفويت إنهاءات AMF أو التي بدأها UE (على سبيل المثال، بسبب إعادة تشغيل AMF)، ستتراكم السياقات اليتيمة. راقب باستخدام نقطة نهاية API الداخلية /statistics. لا يوجد حاليًا مهلة للجلسة أو جمع قمامة.
تزامن السجلات
يتم تمييز كل سطر سجل من مسار الجلسة بـ [{supi}:{pdu_session_id}]. قم بتصفية حسب SUPI لتتبع دورة حياة جلسة المشترك من البداية إلى النهاية. يتم تمييز خطوط سجل مسار PFCP بـ [PFCP] وتكون مكالمات عميل SBI مميزة بـ [SBI->UDM]، [SBI->PCF]، أو [SBI->AMF].