انتقل إلى المحتوى الرئيسي

دليل عمليات DRA

جدول المحتويات

  1. توجيه القطر القياسي
  2. تكوين DRA الأساسي
  3. جداول المرجع
  4. وحدة التوجيه المتقدمة
  5. وحدة التحويل المتقدمة
  6. معالجة القواعد
  7. وحدة القياسات الموسعة
  8. استكشاف الأخطاء وإصلاحها

نظرة عامة على بنية DRA


توجيه القطر القياسي

بدون وحدات التوجيه المتقدم أو التحويل المتقدم�� يقوم DRA بتنفيذ توجيه القطر القياسي بناءً على بروتوكول القطر الأساسي (RFC 6733):

توجيه الطلبات

يقوم DRA بتوجيه رسائل الطلب باستخدام آلية قائمة على الأولويات كما هو محدد في RFC 6733 القسم 6.1:

  1. AVP المضيف الوجهة (293) - إذا كان موجودًا، يقوم DRA بالتوجيه مباشرة إلى القرين المحدد

    • هذه هي آلية التوجيه ذات الأولوية الأعلى
    • إذا لم يكن القرين متصلًا، يفشل التوجيه
    • يوفر تحكمًا صريحًا في التوجيه على مستوى المضيف
  2. AVP المجال الوجهة (283) - إذا كان AVP المضيف الوجهة غائبًا، يتم التوجيه بناءً على المجال

    • يختار DRA قرينًا متصلًا يعلن عن دعمه للمجال المستهدف
    • يتم تطبيق موازنة الحمل عندما تتطابق عدة أقران مع المجال
    • يسمح التوجيه القائم على المجال بالمرونة عبر مضيفين متعددين
  3. معرف التطبيق - يتم تصفية الأقران حسب التطبيقات المدعومة من القطر

    • يتم اعتبار الأقران التي تعلن عن دعمها لمعرف التطبيق للرسالة فقط
    • بناءً على ��بادل القدرات (CER/CEA) أثناء إنشاء اتصال القرين
    • انظر معرفات التطبيقات الشائعة 3GPP للرجوع إليها

توجيه الإجابات

تستخدم حزم الإجابة آلية توجيه مختلفة تمامًا عن الطلبات:

  • التوجيه القائم على الجلسة: تتبع حزم الإجابة دائمًا المسار العكسي للطلب
  • الحفاظ على معرف من طرف إلى طرف: يبقى معرف من طرف إلى طرف دون تغيير عبر جميع القفزات
  • التوجيه من طرف إلى طرف: يستخدم DRA معرف من طرف إلى طرف للحفاظ على حالة التوجيه (يتغير في كل قفزة)
  • لا تقييم للقواعد: لا يقوم DRA بتقييم قواعد التوجيه أو محتويات AVP للإجابات
  • الارتباط القائم على الحالة: تتبع الجداول الداخلية للتوجيه أي قرين أرسل كل طلب

لماذا لا يتم توجيه الإجابات بواسطة الوحدات المتقدمة:

  • توجيه الإجابات حتمي ويجب أن يعود إلى القرين الأصلي
  • يتطلب بروتوكول القطر أن تتبع الإجابات المسار الذي تم إنشاؤه للطلب
  • يتم اتخاذ قرارات التوجيه للإجابات بناءً على سياق الطلب الأصلي، وليس محتوى الإجابة
  • يضمن ذلك إدارة الجلسات بشكل صحيح ويمنع حلقات التوجيه

انظر RFC 6733 القسم 6.2 للحصول على تفاصيل توجيه رسائل الإجابة.

اختيار القرين

عندما تتطابق عدة أقران مع معايير التوجيه، تحدد peer_selection_algorithm المختارة:

  • :عشوائي - يختار عشوائيًا من الأقران المتاحة (افتراضي)
  • :فشل - يختار دائمًا أول قرين في القائمة (قائم على الأولوية)
  • يجب أن تكون الأقران في حالة متصلة ليتم اختيارها
  • يتم استبعاد الأقران غير المتصلة أو المعطلة تلقائيًا

قيود التوجيه القياسي

  • لا توجد قواعد توجيه مخصصة بناءً على قيم AVP (مثل أنماط IMSI)
  • لا توجد ترجمة للمجال أو تعديل لـ AVP
  • لا يمكن التوجيه بناءً على القرين الأصلي
  • تحكم محدود في توزيع الحركة

تقوم وحدات التوجيه المتقدم والتحويل المتقدم بتمديد هذا السلوك القياسي مع قدرات التوجيه القائم على القواعد وتلاعب الحزم.


تكوين DRA الأساسي

يتطلب DRA تكوينًا أساسيًا يحدد هويته وإعدادات الشبكة واتصالات الأقران. يؤسس هذا التكوين الأساس ��جميع عمليات التوجيه.

هيكل التكوين

%{
host: "dra01.example.com",
realm: "example.com",
listen_ip: "192.168.1.10",
listen_port: 3868,
service_name: :example_dra,
product_name: "OmniDRA",
vendor_id: 10415,
request_timeout: 5000,
peer_selection_algorithm: :random,
allow_undefined_peers_to_connect: false,
log_unauthorized_peer_connection_attempts: true,
peers: [
# تكوينات الأقران...
]
}

معلمات هوية DRA

المعلمةالنوعالوصف
hostسلسلةهوية DRA القطرية (اسم المجال المؤهل بالكامل)
realmسلسلةمجال DRA القطري
product_nameسلسلةاسم المنتج المعلن عنه في رسائل CER/CEA
vendor_idعدد صحيحمعرف البائع كما هو محدد في RFC 6733 القسم 5.3.3 (10415 = 3GPP)

إعدادات الشبكة

المعلمةالنوعالوصف
listen_ipسلسلةعنوان IP الذي يستمع عليه DRA للاتصالات الواردة
listen_portعدد صحيحمنفذ TCP/SCTP لاتصالات القطر (القياسي: 3868)
service_nameذرةمعرف الخدمة الداخلية في إيرلانغ
request_timeoutعدد صحيحمهلة بالمللي ثانية لزوج الطلب/الإجابة (الافتراضي: 5000)

إعدادات اختيار القرين

المعلمةالنوعالوصف
peer_selection_algorithmذرةخوارزمية موازنة الحمل: :random (اختيار عشوائي) أو :failover (أولوية أول قرين)
allow_undefined_peers_to_connectمنطقيالسماح بالاتصالات من الأقران غير الموجودين في التكوين (الافتراضي: false)
log_unauthorized_peer_connection_attemptsمنطقيتسجيل محاولات الاتصال من الأقران غير المصرح بها

تكوين القرين

يحدد كل قرين في قائمة peers اتصالًا قطريًا:

%{
host: "mme01.operator.com",
realm: "operator.com",
ip: "192.168.1.20",
port: 3868,
transport: :diameter_tcp,
tls: false,
initiate_connection: false
}

معلمات القرين

المعلمةالنوعالوصف
hostسلسلةهوية القرين القطرية (FQDN) - يجب أن تتطابق تمامًا للتوجيه
realmسلسلةمجال القرين القطري
ipسلسلةعنوان IP للقرين من أجل الاتصال
portعدد صحيحمنفذ القطر للقرين (عادة 3868)
transportذرةبروتوكول النقل: :diameter_tcp أو :diameter_sctp
tlsمنطقيتمكين تشفير TLS (إذا كانت true، عادةً ما يستخدم المنفذ 3869)
initiate_connectionمنطقيtrue: يتصل DRA بالقرين، false: ينتظر DRA اتصال القرين

أوضاع الاتصال

بدء الاتصال (initiate_connection: true)

  • يعمل DRA كعميل قطر
  • يبدأ DRA اتصال TCP/SCTP بالقرين
  • يستخدم للاتصال بـ HSS أو PCRF أو أنظمة خلفية أخرى
  • سيعيد DRA محاولة الاتصالات إذا كان القرين غير متاح

قبول الاتصال (initiate_connection: false)

  • يعمل DRA كخادم قطر
  • ينتظر DRA اتصال القرين
  • يستخدم لاتصالات MME وSGSN وP-GW
  • ��جب أن يكون القرين في التكوين أو allow_undefined_peers_to_connect: true

مثال على التكوين

%{
host: "dra01.mvno.example.com",
realm: "mvno.example.com",
listen_ip: "10.100.1.10",
listen_port: 3868,
service_name: :mvno_dra,
product_name: "OmniDRA",
vendor_id: 10415,
request_timeout: 5000,
peer_selection_algorithm: :random,
allow_undefined_peers_to_connect: false,
log_unauthorized_peer_connection_attempts: true,
peers: [
# MME - ينتظر حتى يتصل MME
%{
host: "mme01.operator.example.com",
realm: "operator.example.com",
ip: "10.100.2.15",
port: 3868,
transport: :diameter_sctp,
tls: false,
initiate_connection: false
},
# HSS - DRA يبدأ الاتصال
%{
host: "hss01.mvno.example.com",
realm: "mvno.example.com",
ip: "10.100.3.141",
port: 3868,
transport: :diameter_tcp,
tls: false,
initiate_connection: true
},
# PCRF مع TLS - DRA يبدأ اتصال آمن
%{
host: "pcrf01.mvno.example.com",
realm: "mvno.example.com",
ip: "10.100.3.22",
port: 3869,
transport: :diameter_tcp,
tls: true,
initiate_connection: true
}
]
}

ملاحظات هامة

  • مطابقة اسم المضيف: يجب أن تتطابق أسماء مضيفي الأقران في قواعد التوجيه المتقدم تمامًا مع قيمة host المكونة هنا (حساسة لحالة الأحرف)
  • تبادل القدرات: عند الاتصال، يتبادل الأقران التطبيقات المدعومة عبر رسائل CER/CEA
  • دعم التطبيق: يعلن DRA عن جميع التطبيقات المدعومة من 3GPP (انظر معرفات التطبيقات الشائعة 3GPP)
  • معرف البائع 10415: قيمة قياسية لتطبيقات 3GPP
  • مهلة الطلب: تؤثر على TTL القياسات الموسعة (مهلة + 5 ثوانٍ)
  • اختيار القرين: عندما تتطابق عدة أقران مع معايير التوجيه، تحدد peer_selection_algorithm أي منها يتم اختياره

اعتبارات الأمان

  • تعيين allow_undefined_peers_to_connect: false في الإنتاج
  • تمكين log_unauthorized_peer_connection_attempts: true لمراقبة الأمان
  • التأكد من أن قواعد جدار الحماية تتطابق مع إعدادات listen_ip وlisten_port
  • التحقق من شهادات الأقران عند استخدام TLS

جداول المرجع

معرفات التطبيقات الشائعة 3GPP

معرف التطبيقالواجهةالوصف
16777251S6a/S6dمصادقة MME/SGSN وبيانات الاشتراك إلى HSS
16777252S13/S13'تحقق من هوية المعدات MME إلى EIR
16777238Gxالتحكم في السياسة والفوترة من PCEF إلى PCRF
16777267S9سياسة التجوال من PCRF المنزل إلى PCRF الزائر
16777272Syربط جلسة PCRF إلى OCS
16777216Cxتسجيل IMS من I-CSCF/S-CSCF إلى HSS
16777217Shبيانات مستخدم IMS من AS إلى HSS
16777236SLgخدمات الموقع من MME/SGSN إلى GMLC
16777291SLhمعلومات المشترك الموقع من GMLC إلى HSS
16777302S6mMTC-IWF إلى HSS/HLR للأجهزة M2M
16777308S6cتوجيه SMS من SMS-SC/IP-SM-GW إلى HSS
16777343S6tأحداث المراقبة من SCEF إلى HSS
16777334Rxتفويض الوسائط من AF إلى PCRF

أكواد AVP الشائعة

الرمزاسم AVPالنوعالاستخدام
1اسم المستخدمUTF8Stringمعرف المشترك (IMSI في 3GPP)
264المضيف الأصليDiameterIdentityاسم مضيف القرين الأصلي
268رمز النتيجةUnsigned32رمز النتيجة القياسي
283المجال الوجهةDiameterIdentityالمجال المستهدف
293المضيف الوجهةDiameterIdentityالمضيف المستهدف (اختياري)
296المجال الأصليDiameterIdentityالمجال المصدر
297نتيجة تجريبيةGroupedرمز نتيجة محدد من البائع

أكواد الأوامر الشائعة

أكواد الأوامر هي جزء من رأس رسالة القطر، وليست AVPs:

الرمزاسم الأمرالوصف
257CER/CEAطلب/إجابة تبادل القدرات
258RAR/RAAطلب/إجابة إعادة المصادقة
274ASR/ASAطلب/إجابة إنهاء الجلسة
275STR/STAطلب/إجابة إنهاء الجلسة
280DWR/DWAطلب/إجابة مراقبة الجهاز
282DPR/DPAطلب/إجابة فصل القرين
316ULR/ULAطلب/إجابة تحديث الموقع (S6a)
317CLR/CLAطلب/إجابة إلغاء الموقع (S6a)
318AIR/AIAطلب/إجابة معلومات المصادقة (S6a)
321PUR/PUAطلب/إجابة تطهير UE (S6a)

وحدة التوجيه المتقدمة

توفر وحدة التوجيه المتقدمة قدرات توجيه رسائل مرنة قائمة على القواعد مع دعم لظروف مطابقة معقدة.

مهم: تقوم هذه الوحدة بتقييم حزم طلب القطر الواردة فقط (وليس حزم الإجابة). تتبع حزم الإجابة مسار الجلسة المحدد مرة أخرى إلى القرين الأصلي - انظر توجيه الإجابة للحصول على التفاصيل.

التكوين

قم بتمكين الوحدة وحدد قواعد التوجيه في تكوينك:

dra_module_advanced_routing:
enabled: True
rules:
- rule_name: <rule_identifier>
match: <match_scope>
filters: [<filter_list>]
route:
peers: [<peer_list>]

المعلمات

المعلمةالوصف
enabledتعيين إلى True لتفعيل الوحدة
rule_nameمعرف فريد لقواعد التوجيه
matchكيفية دمج الفلاتر: :all (منطق AND - ��جب أن تتطابق جميع الفلاتر)، :any (منطق OR - يجب أن تتطابق على الأقل فلتر واحد)، :none (منطق NOR - لا يمكن أن تتطابق أي فلاتر)
filtersقائمة من شروط الفلترة (انظر الفلاتر المتاحة)
route.peersقائمة بأسماء مضيفي الأقران المستهدفة (يجب أن تكون أقران القطر المعرفة مسبقًا في تكوين DRA الخاص بك)، أو استخدم الوجهة الخاصة :destination_host للتوجيه بناءً على AVP المضيف الوجهة (293)

مهم: يجب أن تكون الأقران المحددة في route.peers:

  • معرفة في تكوين قرين القطر الخاص بـ DRA
  • اسم المضيف بالضبط كما هو مكون (حساسة لحالة الأحرف)
  • متصلة حاليًا لكي ينجح التوجيه (يتم تخطي الأقران غير المتصلة)

الفلاتر المتاحة

الفلاتر القياسية

متاحة في كل من التوجيه المتقدم والتحويل المتقدم:

  • :application_id - مطابقة معرف ��طبيق القطر (انظر مرجع معرف التطبيق)

    • قيمة واحدة: {:application_id, 16777251} (S6a/S6d)
    • قيم متعددة: {:application_id, [16777251, 16777252]} (S6a أو S6b)
  • :command_code - مطابقة رمز أمر القطر

    • قيمة واحدة: {:command_code, 318} (طلب AIR)
    • قيم متعددة: {:command_code, [317, 318]} (ULR أو AIR)
  • :avp - مطابقة قيمة AVP (انظر مرجع رمز AVP)

    • مطابقة دقيقة: {:avp, {296, "epc.mnc001.mcc001.3gppnetwork.org"}}
    • مطابقة Regex: {:avp, {1, ~r"999001.*"}}
    • أنماط متعددة: {:avp, {1, ["505057001313606", ~r"999001.*", ~r"505057.*"]}}
    • أي قيمة (تحقق من الوجود): {:avp, {264, :any}}

فلتر خاص بالتوجيه

متاح فقط في التوجيه المتقدم:

  • :via_peer - مطابقة القرين الذي تم استلام الطلب منه
    • قرين واحد: {:via_peer, "omnitouch-lab-dra01.epc.mnc001.mcc001.3gppnetwork.org"}
    • أقران متعددة: {:via_peer, ["omnitouch-lab-dra01.epc.mnc001.mcc001.3gppnetwork.org", "omnitouch-lab-dra02.epc.mnc001.mcc001.3gppnetwork.org"]}
    • أي قرين: {:via_peer, :any}

فلاتر خاصة بالتحويل

متاحة فقط في التحويل المتقدم:

  • :to_peer - مطابقة على القرين الوجهة المحدد مسبقًا (حزم الطلب فقط)

    • قرين واحد: {:to_peer, "dra01.omnitouch.com.au"}
    • أقران متعددة: {:to_peer, ["dra01.omnitouch.com.au", "dra02.omnitouch.com.au"]}
  • :from_peer - مطابقة القرين الذي أرسل الإجابة (حزم الإجابة فقط)

    • قرين واحد: {:from_peer, "hss-01.example.com"}
    • أقران متعددة: {:from_peer, ["hss-01.example.com", "hss-02.example.com"]}
  • :packet_type - مطابقة اتجاه الحزمة

    • طلب: {:packet_type, :request}
    • إجابة: {:packet_type, :answer}

ملاحظات هامة حول الفلاتر

  • فلاتر AVP: موصى بها فقط لـ AVPs البسيطة (اسم المستخدم، المضيف الأصلي، المجال الوجهة، إلخ.)

    • AVPs المجمعة غير مدعومة ولن تتطابق
    • القيم الثنائية المعقدة غير مدعومة
    • استخدم التنسيق: {:avp, {code, value}}
  • عوامل القائمة: مدعومة لجميع قيم الفلتر باستثناء :packet_type

    • عند استخدام قائمة، يتم تطبيق منطق OR داخل القائمة
    • مثال: {:command_code, [317, 318]} تتطابق مع رمز الأمر 317 أو 318
  • القيم الخاصة:

    • :any - تتطابق مع أي قيمة (يتحقق من وجود AVP)
    • مثال: {:avp, {264, :any}} تتطابق إذا كان AVP المضيف الأصلي موجودًا بأي قيمة

أمثلة على التوجيه

المثال 1: توجيه عبر القرين

توجيه الرسائل بناءً على أي DRA وصلت منها:

dra_module_advanced_routing:
enabled: True
rules:
- rule_name: temporary_until_cutover_s6a_via_to_local_hss
match: ":all"
filters:
- '{:application_id, 16777251}'
- '{:via_peer, ["omnitouch-lab-dra01.epc.mnc001.mcc001.3gppnetwork.org", "omnitouch-lab-dra02.epc.mnc001.mcc001.3gppnetwork.org"]}'
- '{:avp, {296, "epc.mnc001.mcc001.3gppnetwork.org"}}'
route:
peers: [omnitouch-lab-hss01.epc.mnc001.mcc001.3gppnetwork.org, omnitouch-lab-hss02.epc.mnc001.mcc001.3gppnetwork.org]

كيف يعمل: يوجه حركة S6a التي تصل عبر أقران DRA محددة إلى عقد HSS المحلية.

المثال 2: التجوال الوارد مع مطابقة الأنماط

توجيه حركة التجوال بناءً على أنماط IMSI:

dra_module_advanced_routing:
enabled: True
rules:
- rule_name: inbound_s6a_roaming_to_dcc
match: ":all"
filters:
- '{:application_id, 16777251}'
- '{:avp, {296, "epc.mnc001.mcc001.3gppnetwork.org"}}'
- '{:avp, {1, ["505571234567", ~r"999001.*"]}}'
route:
peers: [dra01.omnitouch.com.au, dra02.omnitouch.com.au]

كيف يعمل: يوجه رسائل S6a من المجال الأصلي المحدد مع أنماط IMSI المتطابقة إلى أقران DRA المعينة.

المثال 3: توجيه ديناميكي باستخدام :destination_host

توجيه إلى قيمة AVP المضيف الوجهة في الرسالة:

dra_module_advanced_routing:
enabled: True
rules:
- rule_name: route_to_specified_destination_host
match: ":all"
filters:
- '{:avp, {1, [~r"90199.*"]}}' # مطابقة نمط IMSI
route: :destination_host

كيف يعمل:

  • عندما تتطابق الفلاتر، يتم التوجيه إلى القرين المحدد في AVP المضيف الوجهة (293)
  • إذا كان AVP المضيف الوجهة مفقودًا، يعتبر المطابقة فاشلة وتعود إلى التوجيه العادي
  • مفيد لتوجيه الشرف عندما يحدد المرسل الوجهة الدقيقة

وحدة التحويل المتقدمة

تمكن وحدة التحويل المتقدمة من التعديل الديناميكي لقيم AVP في رسائل القطر بناءً على معايير المطابقة. انظر معالجة القواعد للحصول على تفاصيل حول كيفية تقييم القواعد.

التكوين

قم بتمكين الوحدة وحدد قواعد التحويل:

dra_module_advanced_transform:
enabled: True
rules:
- rule_name: <rule_identifier>
match: <match_scope>
filters: [<filter_list>]
transform:
action: <transform_action>
avps: [<avp_modifications>]

المعلمات

المعلمةالوصف
enabledتعيين إلى True لتفعيل الوحدة
rule_nameمعرف فريد لقواعد التحويل
matchكيفية دمج الفلاتر: :all (منطق AND)، :any (منطق OR)، :none (منطق NOR) - انظر منطق الفلتر
filtersقائمة من شروط الفلترة (انظر الفلاتر المتاحة)
transform.actionنوع التحويل (:edit، :remove، أو :overwrite)
transform.avpsقائمة من تعديلات AVP التي سيتم تطبيقها (انظر مرجع رمز AVP)

إجراءات التحويل

حزم الطلبات (طلبات القطر)

  • :edit - تعديل قيم AVP الموجودة
    • يعدل فقط AVPs التي توجد في الرسالة
    • إذا لم يكن AVP موجودًا، فلا يتم إجراء أي تغيير
  • :remove - إزالة AVPs من الرسالة
  • :overwrite - استبدال هياكل AVP بالكامل
    • يتطلب معلمة dictionary تحدد قاموس القطر (مثل :diameter_gen_3gpp_s6a)

حزم الإجابة (إجابات القطر)

  • :remove - إزالة AVPs من الرسالة
  • :overwrite - استبدال هياكل AVP بالكامل
    • يتطلب معلمة dictionary

مهم: إذا لم تتطابق أي قواعد، يتم تمرير الحزمة عبر الشفافية دون أي تحويلات.

بناء جملة تعديل AVP

تعديل قياسي:

  • {:avp, {<code>, <new_value>}} - تعيين AVP إلى قيمة جديدة

إزالة AVPs:

  • {:avp, {<code>, :any}} - إزالة AVP حسب المعرف (تزيل بغض النظر عن القيمة الحالية)
  • ملاحظة: إزالة بناءً على avp_id مدعومة؛ إزالة بناءً على محتويات AVP غير مدعومة

استبدال باستخدام القاموس:

transform: %{
action: :overwrite,
dictionary: :diameter_gen_3gpp_s6a,
avps: [{:avp, {:"s6a_Supported-Features", {:"s6a_Supported-Features", 10415, 1, 3221225470, []}}}]
}

أمثلة على التحويل

المثال 1: إعادة كتابة المجال الوجهة بناءً على القرين

إعادة كتابة المجال الوجهة بناءً على المكان الذي يتم توجيه الرسالة إليه:

dra_module_advanced_transform:
enabled: True
rules:
- rule_name: rewrite_s6a_destination_realm_for_Operator_X
match: ":all"
filters:
- '{:to_peer, ["dra01.omnitouch.com.au", "dra02.omnitouch.com.au"]}'
- '{:avp, {296, "epc.mnc001.mcc001.3gppnetwork.org"}}'
- '{:avp, {1, [~r"9999999.*"]}}'
transform:
action: ":edit"
avps:
- '{:avp, {283, "epc.mnc999.mcc999.3gppnetwork.org"}}'

كيف يعمل: عندما يتم توجيه طلبات S6a إلى أقران DRA محددة وتطابق نمط IMSI، يعيد كتابة المجال الوجهة لشبكة المشغل X.

المثال 2: توجيه متعدد الناقلين مع التحويلات

dra_module_advanced_transform:
enabled: True
rules:
- rule_name: rewrite_s6a_destination_realm_for_roaming_partner_ausie
match: ":all"
filters:
- '{:to_peer, ["dra01.omnitouch.com.au", "dra02.omnitouch.com.au"]}'
- '{:avp, {296, "epc.mnc057.mcc505.3gppnetwork.org"}}'
- '{:avp, {1, [~r"50557.*"]}}'
transform:
action: ":edit"
avps:
- '{:avp, {283, "epc.mnc030.mcc310.3gppnetwork.org"}}'

كيف يعمل: يوجه نطاقات مشتركي IMSI المختلفة إلى المجالات الشبكية المناسبة بناءً على أنماط IMSI. تفوز أول قاعدة مطابقة (انظر ترتيب التنفيذ).

المثال 3: إعادة كتابة المجال لـ MVNO

dra_module_advanced_transform:
enabled: True
rules:
- rule_name: rewrite_s6a_destination_realm_for_single_sub
match: ":all"
filters:
- '{:to_peer, ["dra01.omnitouch.com.au", "dra02.omnitouch.com.au"]}'
- '{:avp, {296, "epc.mnc001.mcc001.3gppnetwork.org"}}'
- '{:avp, {1, ["505057000003606"]}}' # مطابقة IMSI دقيقة
transform:
action: ":edit"
avps:
- '{:avp, {283, "epc.mnc001.mcc001.3gppnetwork.org"}}'

كيف يعمل: يقوم بتحويل المجال الوجهة لمشترك MVNO محدد إلى شبكة النواة المستضافة الخاصة بهم.

المثال 4: تحويل خاص بالطلبات مع فلتر نوع الحزمة

تحويل حزم الطلب فقط (وليس الإجابات):

dra_module_advanced_transform:
enabled: True
rules:
- rule_name: Tutorial_Rule_AIR
match: ":all"
filters:
- '{:application_id, 16777251}'
- '{:command_code, 318}'
- '{:packet_type, :request}'
- '{:avp, {1, "999999000000001"}}'
- '{:avp, {264, :any}}' # يجب أن يوجد المضيف الأصلي بأي قيمة
transform:
action: ":edit"
avps:
- '{:avp, {1, "999999000000002"}}'

كيف يعمل:

  • يتطابق فقط مع حزم S6a AIR الطلبات (وليس حزم الإجابة)
  • يتحقق من أن اسم المستخدم (AVP 1) يساوي "999999000000001"
  • يتحقق من أن المضيف ا��أصلي (AVP 264) موجود بأي قيمة
  • يعيد كتابة اسم المستخدم إلى "999999000000002"
  • إذا لم يكن AVP موجودًا، فلا يتم إجراء أي تغيير

المثال 5: إزالة AVP

إزالة AVP محدد من الرسائل:

dra_module_advanced_transform:
enabled: True
rules:
- rule_name: remove_user_name_avp
match: ":all"
filters:
- '{:application_id, 16777251}'
transform:
action: ":remove"
avps:
- '{:avp, {1, :any}}' # إزالة اسم المستخدم بغض النظر عن القيمة

كيف يعمل: يزيل AVP اسم المستخدم (الرمز 1) من جميع رسائل S6a، بغض النظر عن قيمته الحالية.

المثال 6: استبدال AVP مجمعة في حزم الإجابة

تعديل AVPs مجمعة معقدة في حزم الإجابة باستخدام إجراء :overwrite مع دعم القاموس:

dra_module_advanced_transform:
enabled: True
rules:
- rule_name: add_sos_apn_to_ula
match: ":all"
filters:
- '{:application_id, 16777251}' # S6a/S6d
- '{:command_code, 316}' # ULA (إجابة تحديث الموقع)
- '{:packet_type, :answer}' # حزم الإجابة فقط
- '{:avp, {296, "epc.mnc001.mcc001.3gppnetwork.org"}}' # المجال الأصلي
transform:
action: ":overwrite"
dictionary: ":diameter_gen_3gpp_s6a"
avps:
- '{:avp, {:"s6a_APN-Configuration-Profile",
{:"s6a_APN-Configuration-Profile", 1, 0, [
{:"s6a_APN-Configuration", 1, 0, "internet", [],
[{:"s6a_EPS-Subscribed-QoS-Profile", 9,
{:"s6a_Allocation-Retention-Priority", 1, [0], [0], []}, []}],
[1], [], [], [1], ["0800"],
[{:s6a_AMBR, 4200000000, 4200000000, [], [], []}],
[], [], [], [], [], [], [], [], [], [], [], [], [], [], []},
{:"s6a_APN-Configuration", 2, 0, "ims", [],
[{:"s6a_EPS-Subscribed-QoS-Profile", 5,
{:"s6a_Allocation-Retention-Priority", 1, [0], [1], []}, []}],
[0], [], [], [1], ["0800"],
[{:s6a_AMBR, 4200000000, 4200000000, [], [], []}],
[], [], [], [], [], [], [], [], [], [], [], [], [], [], []},
{:"s6a_APN-Configuration", 3, 0, "sos", [],
[{:"s6a_EPS-Subscribed-QoS-Profile", 5,
{:"s6a_Allocation-Retention-Priority", 1, [0], [1], []}, []}],
[1], [], [], [1], ["0800"],
[{:s6a_AMBR, 4200000000, 4200000000, [], [], []}],
[], [], [], [], [], [], [], [], [], [], [], [], [], [], []}
], []}
}}'

كيف يعمل:

  • يتطابق مع حزم S6a إجابة تحديث الموقع (ULA) من مجال أصلي محدد
  • يستخدم إجراء :overwrite لاستبدال AVP المجمعة بالكامل
  • يتطلب معلمة dictionary لترميز هياكل AVP المجمعة المعقدة بشكل صحيح
  • يضيف ثلاث تكوينات APN: "internet" (السياق 1)، "ims" (السياق 2)، و"sos" (السياق 3)
  • يتضمن كل APN ملفات تعريف QoS، وحدود النطاق الترددي (AMBR)، وإعدادات نوع PDN
  • يضمن التحويل توفير APN خدمات الطوارئ (SOS) لجميع المشتركين من هذا المجال

متى تستخدم :overwrite مع القاموس:

  • تعديل AVPs مجمعة مع هياكل متداخلة (مثل APN-Configuration-Profile)
  • إضافة أو إعادة هيكلة بيانات الاشتراك المعقدة 3GPP
  • عندما لا يمكن لإجراء :edit التعامل مع تعقيد AVP
  • يجب أن يتطابق القاموس مع تطبيق القطر (:diameter_gen_3gpp_s6a لـ S6a، إلخ.)

ملاحظات هامة:

  • :overwrite يستبدل AVP بالكامل، وليس فقط الحقول الفردية
  • يجب أن تتطابق هيكل AVP مع تعريف القاموس تمامًا
  • الهيكل غير الصحيح سيؤدي إلى فشل الترميز وسقوط الحزم
  • هذه ميزة متقدمة - تحقق بدقة في بيئة الاختبار أولاً

حالات الاستخدام

  • دعم MVNO: توجيه حركة مشغل افتراضي إلى الشبكات الأساسية المستضافة
  • ترحيل الشبكة: إعادة توجيه المشتركين تدريجيًا إلى بنية تحتية جديدة
  • ترجمة المجال: تحويل بين أنظمة التسمية المختلفة لشركاء التجوال
  • تعدد المستأجرين: عزل مجموعات المشتركين حسب المجال
  • توجيه الناقل: توجيه الحركة إلى الشبكات الصحيحة بناءً على نطاقات IMSI

معالجة القواعد

تنطبق على كل من وحدات التوجيه المتقدم والتحويل المتقدم.

ترتيب التنفيذ

  1. يتم تقييم القواعد بالترتيب من الأعلى إلى الأسفل كما هو محدد في التكوين
  2. يتم تقييم الفلاتر داخل القاعدة بناءً على معلمة match (:all أو :any أو :none)
  3. تفوز أول قاعدة مطابقة - لا يتم تقييم القواعد اللاحقة
  4. إذا لم تتطابق أي قواعد، يتم استخدام سلوك التوجيه/التمرير الافتراضي

منطق الفلتر

تحدد معلمة match كيفية دمج الفلاتر:

match: :all (منطق AND)

يجب أن تتطابق جميع الفلاتر لكي تنجح القاعدة.

مثال: مع 3 فلاتر، يجب أن تكون filter1 AND filter2 AND filter3 جميعها صحيحة.

match: :any (منطق OR)

يجب أن تتطابق على الأقل فلتر واحد لكي تنجح القاعدة.

مثال: مع 3 فلاتر، يجب أن تكون filter1 OR filter2 OR filter3 (أي واحدة تمر).

match: :none (منطق NOR)

لا يمكن أن تتطابق أي فلاتر لكي تنجح القاعدة (مطابقة عكسية).

مثال: مع 3 فلاتر، NOT filter1 AND NOT filter2 AND NOT filter3 (يجب أن تفشل جميعها).


ملاحظات إضافية:

عند استخدام عوامل القائمة داخل قيمة فلتر (مثل {:avp, {1, ["value1", "value2"]}})، تستخدم القيم منطق OR (يمكن أن تتطابق أي منها).

أنماط التعبير العادي

استخدم بناء جملة ~r"pattern" لمطابقة regex:

  • ~r"999001.*" - تتطابق مع IMSI التي تبدأ بـ 999001
  • ~r"^310[0-9]{3}.*" - تتطابق مع IMSI التي تحتوي على أنماط MNC محددة
  • ~r".*test$" - تتطابق مع القيم التي تنتهي بـ "test"

أفضل الممارسات

  1. التحديد: ترتيب القواعد من الأكثر تحديدًا إلى الأكثر عمومية
  2. الأداء: وضع المطابقات الأكثر شيوعًا أولاً لتقليل الحمل المعالج
  3. الاختبار: تحقق من أنماط regex قبل النشر
  4. التوثيق: استخدم قيم rule_name الوصفية لزيادة وضوح العمليات
  5. المراقبة: تتبع معدلات مطابقة القواعد للتحقق من السلوك المتوقع

وحدة القياسات الموسعة

توفر وحدة القياسات الموسعة قدرات متقدمة في القياس والتحليلات لتحليل أنماط حركة القطر بما يتجاوز القياسات القياسية.

التكوين

قم بتمكين الوحدة وتكوين أنواع القياسات المحددة:

module_extended_metrics:
enabled: true
attach_attempt_reporting_enabled: true

المعلمات

المعلمةالوصف
enabledتعيين إل�� true لتفعيل وحدة القياسات الموسعة
attach_attempt_reporting_enabledتمكين تتبع وتقرير محاولات الاتصال LTE (S6a AIR/AIA)

القياسات المتاحة

تتبع محاولات الاتصال

يتتبع محاولات الاتصال لمشتركي LTE من خلال مراقبة أزواج رسائل طلب معلومات المصادقة (AIR) والإجابة (AIA):

القياس: attach_attempt_count

الحقول:

  • imsi - IMSI المشترك (من AVP اسم المستخدم - انظر أكواد AVP)

العلامات:

  • origin_host - القرين الذي نشأ منه طلب الاتصال
  • result_code - رمز النتيجة من استجابة HSS

كيف يعمل:

  1. عند استلام AIR (رمز الأمر 318، تطبيق S6a 16777251 - انظر معرفات التطبيقات)، تستخرج الوحدة:
    • معرف من طرف إلى طرف للربط بين الطلب والاستجابة
    • IMSI (AVP اسم المستخدم الرمز 1)
    • المضيف الأصلي (AVP الرمز 264)
  2. يتم تخزين بيانات الطلب في ETS مع TTL
  3. عند استلام AIA المطابقة، تقوم الوحدة:
    • بربط باستخدام معرف من طرف إلى طرف
    • استخراج رمز النتيجة (AVP 268 أو AVP رمز النتيجة التجريبية 297)
    • إصدار القياس مع IMSI، المضيف الأصلي، ورمز النتيجة

حالات الاستخدام

  • تحليل معدل نجاح الاتصال - تتبع محاولات الاتصال الناجحة مقابل الفاشلة حسب رمز النتيجة
  • استكشاف الأخطاء على مستوى IMSI - تحديد المشتركين الذين يواجهون فشل الاتصال
  • مراقبة أداء الشبكة - مراقبة أنماط محاولات الاتصال حسب الأصل (MME/SGSN)
  • تحليلات التجوال - تحليل معدلات نجاح الاتصال للتجوال الوارد

التكامل

يتم تصدير القياسات الموسعة عبر تكامل InfluxDB:

DRA.Metrics.InfluxDB.write(%{
measurement: "attach_attempt_count",
fields: %{imsi: "505057000000001"},
tags: %{origin_host: "mme-01.example.com", result_code: 2001}
})

رموز النتيجة هي رموز قطر قياسية:

  • 2001 - النجاح (DIAMETER_SUCCESS)
  • 5001 - فشل المصادقة (DIAMETER_AUTHENTICATION_REJECTED)
  • 5004 - AVP غير مدعوم من Diameter
  • انظر RFC 6733 للحصول على قائمة كاملة برموز النتيجة

ملاحظات هامة

  • تتبع قياسات محاولات الاتصال تتبع أزواج S6a AIR/AIA فقط (معرف التطبيق 16777251، رمز الأمر 318)
  • تنتهي صلاحية بيانات الطلب بناءً على مهلة الطلب المكونة + 5 ثوانٍ
  • معالجة القياس غير متزامنة (عملية منفصلة) لتجنب حجب تدفق الرسائل
  • تعمل الوحدة بشكل مستقل عن وحدات التوجيه والتحويل

استكشاف الأخطاء وإصلاحها

القاعدة لا تتطابق

توجيه غير متوقع

  • راجع ترتيب القواعد - تفوز أول مطابقة
  • تحقق من صحة أسماء الأقران وقابليتها للوصول
  • تحقق من وجود قواعد متعارضة مع فلاتر متداخلة
  • تأكد من سلوك توجيه القطر القياسي عندما لا تتطابق أي قواعد

التحويل غير مطبق

  • تأكد من أن أكواد AVP صحيحة لحالتك (انظر مرجع أكواد AVP)
  • بالنسبة لإجراء :edit: تحقق من وجود AVP في الرسالة (لن ينشئ التعديل AVPs جديدة)
  • تحقق من أن الفلاتر تتطابق مع تدفق الرسالة المقصود
  • تحقق من فلتر نوع الحزمة إذا تم استخدامه (:request مقابل :answer)
  • تأكد من أن الإجراء مدعوم لنوع الحزمة (:edit يعمل فقط على الطلبات - انظر إجراءات التحويل)
  • راجع معالجة القواعد لترتيب التنفيذ