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

دليل ترجمة عنوان الشبكة العالمية (NAT)

نظرة عامة

ترجمة عنوان الشبكة العالمية (GT NAT) هي ميزة تسمح لـ OmniSS7 بالاستجابة بعناوين GT عالمية مختلفة بناءً على بادئة GT للجهة المتصلة أو بادئة GT للجهة المتصلة بها أو مزيج من كلاهما. هذه الميزة ضرورية عند العمل مع عدة عناوين عالمية وتحتاج إلى ضمان أن تستخدم الاستجابات GT الصحيح بناءً على الشبكة أو النظير الذي يتصل و/أو أي GT تم الاتصال به.

ما الجديد (GT NAT المحسن)

تم تحسين ميزة GT NAT بقدرات جديدة قوية:

الميزات الجديدة

  1. مطابقة بادئة الجهة المتصلة: يمكن الآن للقواعد المطابقة على called_prefix بالإضافة إلى calling_prefix
  2. المطابقة المجمعة: يمكن للقواعد المطابقة على كلا ال��ادئين المتصلين والمستقبلين في نفس الوقت
  3. أولوية قائمة على الوزن: تستخدم القواعد الآن حقل weight (أقل = أولوية أعلى) بدلاً من مجرد طول البادئة
  4. مطابقة مرنة: يمكنك الآن إنشاء قواعد مع:
    • بادئة متصلة فقط
    • بادئة متصلة بها فقط
    • كلا البادئين المتصلين والمستقبلين
    • لا شيء (قاعدة بديلة/عامة)

تنسيق القاعدة الجديدة

الحقول المطلوبة:

  • weight: أولوية عددية (أقل = أولوية أعلى)
  • response_gt: GT للاستجابة به

الحقول الاختيارية (يوصى بوجود واحد على الأقل للمطابقة المحددة):

  • calling_prefix: المطابقة على بادئة GT للجهة المتصلة
  • called_prefix: المطابقة على بادئة GT للجهة المتصلة بها

مثال:

gt_nat_rules: [
# قاعدة محددة مع كلا البادئين - أعلى أولوية
%{calling_prefix: "8772", called_prefix: "555", weight: 1, response_gt: "111111"},

# قواعد محددة - أولوية متوسطة
%{calling_prefix: "8772", weight: 10, response_gt: "222222"},
%{called_prefix: "555", weight: 10, response_gt: "333333"},

# بديل عام - أقل أولوية
%{weight: 100, response_gt: "999999"}
]

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

التشغيل عبر شبكات متعددة

عندما يكون لديك عدة شبكات نظيرة وكل منها يتوقع استجابات من GT محدد:

  • الشبكة A تتصل بـ GT الخاص بك 111111 وتتوقع استجابات من 111111
  • الشبكة B تتصل بـ GT الخاص بك 222222 وتتوقع استجابات من 222222

بدون GT NAT، ستحتاج إلى مثيلات منفصلة أو توجيه معقد. مع GT NAT، يمكن لمثيل واحد من OmniSS7 التعامل مع هذا بذكاء.

سيناريوهات التجوال

عند العمل كـ HLR أو SMSc مع اتفاقيات تجوال:

  • مشتركو الشبكة المنزلية يستخدمون GT 555000
  • الشريك المتجول 1 يستخدم GT 555001
  • الشريك المتجول 2 يستخدم GT 555002

يضمن GT NAT أن يتلقى كل شريك استجابات من GT الصحيح الذي تم تكوينه للتوجيه إليه.

الاختبار والترحيل

أثناء ترحيل الشبكات أو الاختبار:

  • ترحيل حركة المرور تدريجياً من GT القديم إلى GT الجديد
  • الحفاظ على كلا GTs خلال فترة الانتقال
  • توجيه الاستجابات بناءً على GT الذي استخدمه المتصل

كيف يعمل

تدفق ترجمة العنوان

  1. طلب وارد: يتلقى OmniSS7 رسالة SCCP مع:

    • GT الجهة المتصلة: 55512341112 (GT الخاص بك)
    • GT الجهة المتصلة بها: 877234567 (GT الخاص بهم)
  2. بحث GT NAT: يتحقق النظام من GT المتصل 877234567 مقابل قواعد البادئة المكونة

  3. مطابقة البادئة: يجد أطول بادئة مطابقة (على سبيل المثال، 8772 تطابق 877234567)

  4. اختيار GT للاستجابة: يستخدم response_gt من القاعدة المطابقة (على سبيل المثال، 55512341112)

  5. إرسال الاستجابة: تستخدم استجابة SCCP:

    • GT الجهة المتصلة: 877234567 (معكوس - GT الخاص بهم)
    • GT الجهة المتصلة بها: 55512341112 (GT المعاد توجيهه)

أنواع الاستجابة المتأثرة

يطبق GT NAT على عدة طبقات من كومة SS7:

طبقة SCCP (جميع الاست��ابات)

  • عناوين GT للجهة المتصلة/المتصل بها في جميع رسائل الاستجابة
  • تأكيدات ISD (InsertSubscriberData)
  • استجابات UpdateLocation
  • استجابات الأخطاء

طبقة MAP (محددة بالعملية)

  • استجابات SRI-for-SM: networkNode-Number (عنوان GT لـ SMSc)
  • UpdateLocation: hlr-Number في الاستجابات
  • InsertSubscriberData: GT HLR في رسائل ISD

التكوين

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

أضف إلى config/runtime.exs:

config :omniss7,
# تفعيل GT NAT
gt_nat_enabled: true,

# تعريف قواعد GT NAT
gt_nat_rules: [
# القاعدة 1: المكالمات من البادئة "8772" تحصل على استجابة من "55512341112"
%{calling_prefix: "8772", response_gt: "55512341112"},

# القاعدة 2: المكالمات من البادئة "8773" تحصل على استجابة من "55512341111"
%{calling_prefix: "8773", response_gt: "55512341111"},

# القاعدة الافتراضية (بادئة فارغة تطابق كل شيء)
%{calling_prefix: "", response_gt: "55512311555"}
]

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

للحصول على مرجع تكوين كامل، راجع معلما�� GT NAT في مرجع التكوين.

المعلمةالنوعمطلوبالوصف
gt_nat_enabledBooleanنعمتفعيل/تعطيل ميزة GT NAT
gt_nat_rulesقائمة من الخرائطنعم (إذا تم التفعيل)قائمة بقواعد مطابقة البادئة

تنسيق القاعدة

كل قاعدة هي خريطة تحتوي على المفاتيح التالية:

%{
calling_prefix: "8772", # (اختياري) بادئة للمطابقة مع GT المتصل
called_prefix: "555", # (اختياري) بادئة للمطابقة مع GT المتصل به
weight: 10, # (مطلوب) قيمة الأولوية (أقل = أولوية أعلى)
response_gt: "55512341112" # (مطلوب) GT للاستخدام في الاستجابات
}

حقول القاعدة:

  • calling_prefix (اختياري): بادئة سلسلة للمطابقة مع GT المتصل الوارد

    • تتم المطابقة بواسطة String.starts_with?/2
    • السلسلة الفارغة "" أو nil تعمل كبديل (تطابق أي GT متصل)
    • يمكن حذفها لمطابقة أي GT متصل
  • called_prefix (اختياري): بادئة سلسلة للمطابقة مع GT المتصل به الوارد

    • تتم المطابقة بواسطة String.starts_with?/2
    • السلسلة الفارغة "" أو nil تعمل كبديل (تطابق أي GT متصل به)
    • يمكن حذفها لمطابقة أي GT متصل به
  • weight (مطلوب): قيمة أولوية عددية

    • وزن أقل = أولوية أعلى (يتم معالجتها أولاً)
    • يجب أن تكون >= 0
    • تستخدم كمعيار فرز أساسي لقواعد المطابقة
  • response_gt (مطلوب): عنوان GT العالمي للاستخدام في الاستجابات

    • يجب أن تكون سلسلة رقم E.164 صالحة
    • يجب أن تتطابق مع أحد GTs المكونة لديك

يجب تحديد واحد على الأقل من calling_prefix أو called_prefix للمطابقة المحددة. يمكن حذف كلاهما لقاعدة بديلة/عامة.

منطق مطابقة القاعدة

يتم تقييم القواعد بواسطة الوزن أولاً (تصاعدي)، ثم بواسطة خصوصية البادئة المجمعة:

خوارزمية المطابقة:

  1. تصفية القواعد حيث تتطابق جميع البادئات المحددة
    • إذا تم تعيين calling_prefix، يجب أن تتطابق مع GT المتصل
    • إذا تم تعيين called_prefix، يجب أن تتطابق مع GT المتصل به
    • إذا تم تعيين كلاهما، يجب أن تتطابق كلاهما
    • إذا لم يتم تعيين أي منهما، تعمل القاعدة كبديل
  2. فرز القواعد المطابقة بواسطة:
    • أساسي: الوزن (تصاعدي - القيم الأقل أولاً)
    • ثانوي: طول البادئة المجمعة (تنازلي - الأطول = الأكثر تحديدًا)
  3. إرجاع أول قاعدة مطابقة

أمثلة:

# أمثلة القواعد
gt_nat_rules: [
# الوزن 1: أعلى أولوية - تطابق كلا البادئين
%{calling_prefix: "8772", called_prefix: "555", weight: 1, response_gt: "111111"},

# الوزن 10: أولوية متوسطة - قواعد محددة
%{calling_prefix: "8772", weight: 10, response_gt: "222222"}, # المتصل فقط
%{called_prefix: "555", weight: 10, response_gt: "333333"}, # المتصل به فقط

# الوزن 100: أقل أولوية - بديل عام
%{weight: 100, response_gt: "444444"} # تطابق كل شيء
]

# أمثلة المطابقة:
# المتصل: "877234567"، المتصل به: "555123" -> "111111" (الوزن 1، كلاهما يتطابق)
# المتصل: "877234567"، المتصل به: "999999" -> "222222" (الوزن 10، المتصل فقط)
# المتصل: "999999999"، المتصل به: "555123" -> "333333" (الوزن 10، المتصل به فقط)
# المتصل: "999999999"، المتصل به: "888888" -> "444444" (الوزن 100، بديل)

أمثلة

المثال 1: شريكان في الشبكة

السيناريو: أنت تدير SMSc مع شريكين في الشبكة. كل منهما يتوقع استجابات من GT مختلف.

config :omniss7,
gt_nat_enabled: true,

# GT الافتراضي لـ SMSc (يستخدم عندما يكون GT NAT معطلاً أو لا تطابق قاعدة)
smsc_service_center_gt_address: "5551000",

# قواعد GT NAT للشركاء
gt_nat_rules: [
# الشريك A (بادئة 4412) يتوقع استجابات من GT 5551001
%{calling_prefix: "4412", weight: 10, response_gt: "5551001"},

# الشريك B (بادئة 4413) يتوقع استجابات من GT 5551002
%{calling_prefix: "4413", weight: 10, response_gt: "5551002"},

# الافتراضي: استخدام GT القياسي لـ SMSc (بديل عام)
%{weight: 100, response_gt: "5551000"}
]

تدفق الحركة:

طلب وارد SRI-for-SM من 44121234567:
GT المتصل به: 5551001 (GT الخاص بك الذي يستخدمه الشريك A)
GT المتصل: 44121234567 (GT الخاص بالشريك A)

بحث GT NAT:
"44121234567" تطابق بادئة "4412"
GT للاستجابة المحددة: "5551001"

استجابة SRI-for-SM إلى 44121234567:
GT المتصل: 44121234567 (معكوس)
GT المتصل: 5551001 (معاد توجيهه)
networkNode-Number: 5551001 (في استجابة MAP)

المثال 2: HLR مع GTs إقليمية

السيناريو: HLR وطني مع GTs مختلفة لكل منطقة.

config :omniss7,
gt_nat_enabled: true,
hlr_service_center_gt_address: "555000", # GT الافتراضي لـ HLR

gt_nat_rules: [
# VLRs في المنطقة الشمالية (بادئة 5551)
%{calling_prefix: "5551", weight: 10, response_gt: "555100"},

# VLRs في المنطقة الجنوبية (بادئة 5552)
%{calling_prefix: "5552", weight: 10, response_gt: "555200"},

# VLRs في المنطقة الغربية (بادئة 5553)
%{calling_prefix: "5553", weight: 10, response_gt: "555300"},

# الافتراضي للمناطق الأخرى (بديل عام)
%{weight: 100, response_gt: "555000"}
]

المثال 3: سيناريو الترحيل

السيناريو: الترحيل من GT القديم إلى GT الجديد تدريجياً.

config :omniss7,
gt_nat_enabled: true,
hlr_service_center_gt_address: "123456789", # GT القديم (افتراضي)

gt_nat_rules: [
# الشبكات المهاجرة (قامت بتحديث تكويناتها بالفعل)
%{calling_prefix: "555", weight: 10, response_gt: "987654321"}, # GT الجديد
%{calling_prefix: "666", weight: 10, response_gt: "987654321"}, # GT الجديد

# الجميع لا يزال يستخدم GT القديم (بديل عام)
%{weight: 100, response_gt: "123456789"} # GT القديم
]

المثال 4: مطابقة بادئة الجهة المتصلة (جديد)

السيناريو: لديك عدة GTs لخدمات مختلفة، وتريد الاستجابة بـ GT الصحيح بناءً على GT الذي تم الاتصال به.

config :omniss7,
gt_nat_enabled: true,

gt_nat_rules: [
# عندما يتصلون بـ GT الرسائل القصيرة الخاص بك (5551xxx)، استجب بتلك GT
%{called_prefix: "5551", weight: 10, response_gt: "555100"},

# عندما يتصلون بـ GT الصوت الخاص بك (5552xxx)، استجب بتلك GT
%{called_prefix: "5552", weight: 10, response_gt: "555200"},

# عندما يتصلون بـ GT البيانات الخاص بك (5553xxx)، استجب بتلك GT
%{called_prefix: "5553", weight: 10, response_gt: "555300"},

# بديل عام
%{weight: 100, response_gt: "555000"}
]

تدفق الحركة:

طلب وارد إلى GT المتصل به: 555100 (GT الرسائل القصيرة الخاص بك)
GT المتصل: 441234567 (أي متصل)

بحث GT NAT:
GT المتصل به "555100" تطابق بادئة "5551"
GT للاستجابة المحددة: "555100"

تستخدم الاستجابة GT المتصل: 555100 (تطابق ما اتصلوا به)

المثال 5: المطابقة المجمعة للبادئات المتصلة والمستقبلين (متقدم)

السيناريو: يتصل شركاء مختلفون بـ GTs مختلفة، وتريد تحكمًا دقيقًا.

config :omniss7,
gt_nat_enabled: true,

gt_nat_rules: [
# الشريك A يتصل بـ GT الرسائل القصيرة الخاصة بك - أعلى أولوية (الوزن 1)
%{calling_prefix: "4412", called_prefix: "5551", weight: 1, response_gt: "555101"},

# الشريك B يتصل بـ GT الرسائل القصيرة الخاصة بك - أعلى أولوية (الوزن 1)
%{calling_prefix: "4413", called_prefix: "5551", weight: 1, response_gt: "555102"},

# أي شخص يتصل بـ GT الرسائل القصيرة الخاصة بك - أولوية متوسطة (الوزن 10)
%{called_prefix: "5551", weight: 10, response_gt: "555100"},

# الشريك A يتصل بأي GT - أولوية متوسطة (الوزن 10)
%{calling_prefix: "4412", weight: 10, response_gt: "555200"},

# بديل عام - أولوية منخفضة (الوزن 100)
%{weight: 100, response_gt: "555000"}
]

أمثلة المطابقة:

# الشريك A يتصل بـ GT الرسائل القصيرة
المتصل: "441234567"، المتصل به: "555100"
→ تطابق القاعدة ذات الوزن 1 (كلا البادئين) → "555101"

# الشريك A يتصل بـ GT الصوت
المتصل: "441234567"، المتصل به: "555200"
→ تطابق القاعدة ذات الوزن 10 (المتصل فقط) → "555200"

# متصل غير معروف يتصل بـ GT الرسائل القصيرة
المتصل: "999999999"، المتصل به: "555100"
→ تطابق القاعدة ذات الوزن 10 (المتصل به فقط) → "555100"

# متصل غير معروف يتصل بـ GT الصوت
المتصل: "999999999"، المتصل به: "555200"
→ تطابق القاعدة ذات الوزن 100 (بديل) → "555000"

أوضاع التشغيل

يعمل GT NAT عبر جميع أوضاع التشغيل لـ OmniSS7:

وضع HLR

يؤثر GT NAT على:

  • استجابات UpdateLocation (GT HLR في الاستجابة)
  • رسائل InsertSubscriberData (GT HLR كجهة متصلة)
  • استجابات SendAuthenticationInfo
  • استجابات Cancel Location

لمزيد من المعلومات حول عمليات HLR، راجع دليل تكوين HLR.

التكوين:

config :omniss7,
hlr_mode_enabled: true,
hlr_service_center_gt_address: "5551234567", # GT الافتراضي لـ HLR

gt_nat_enabled: true,
gt_nat_rules: [
%{calling_prefix: "331", weight: 10, response_gt: "5551234568"}, # فرنسا
%{calling_prefix: "44", weight: 10, response_gt: "5551234569"}, # المملكة المتحدة
%{weight: 100, response_gt: "5551234567"} # بديل عام
]

وضع SMSc

يؤثر GT NAT على:

  • استجابات SRI-for-SM (networkNode-Number الحقل) - انظر تفاصيل SRI-for-SM
  • تأكيدات MT-ForwardSM

لمزيد من المعلومات حول عمليات SMSc، راجع دليل تكوين SMSc.

التكوين:

config :omniss7,
smsc_mode_enabled: true,
smsc_service_center_gt_address: "5559999", # GT الافتراضي لـ SMSc

gt_nat_enabled: true,
gt_nat_rules: [
%{calling_prefix: "1", weight: 10, response_gt: "5559991"}, # أمريكا الشمالية
%{calling_prefix: "44", weight: 10, response_gt: "5559992"}, # المملكة المتحدة
%{calling_prefix: "86", weight: 10, response_gt: "5559993"}, # الصين
%{weight: 100, response_gt: "5559999"} # بديل عام
]

وضع بوابة CAMEL

يؤثر GT NAT على:

  • جميع استجابات مستوى SCCP (GT gsmSCF كجهة متصلة)
  • استجابات عمليات CAMEL/CAP (InitialDP، EventReportBCSM، إلخ.)
  • تأكيدات RequestReportBCSMEvent
  • استجابات ApplyCharging
  • استجابات Continue

التكوين:

config :omniss7,
camelgw_mode_enabled: true,
camel_gsmscf_gt_address: "55512341112", # GT الافتراضي لـ gsmSCF

gt_nat_enabled: true,
gt_nat_rules: [
%{calling_prefix: "555", weight: 10, response_gt: "55512341111"}, # الشبكة A
%{calling_prefix: "666", weight: 10, response_gt: "55512311555"}, # الشبكة B
%{weight: 100, response_gt: "55512341112"} # بديل عام
]

حالة الاستخدام: عند العمل كـ gsmSCF (وظيفة التحكم في الخدمة) لعدة شبكات، قد يتوقع كل gsmSSF استجابات من GT gsmSCF محدد. يضمن GT NAT استخدام GT الصحيح بناءً على أي gsmSSF يتصل.

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

تفعيل سجلات GT NAT

يتضمن GT NAT تسجيلًا تلقائيًا لجميع الترجمات:

# في السجلات، سترى:
[info] GT NAT [استجابة SRI-for-SM]: GT المتصل 877234567 -> GT الاستجابة 55512341112
[info] GT NAT [UpdateLocation ISD]: GT المتصل 331234567 -> GT الاستجابة 55512341111
[info] GT NAT [استجابة MAP BEGIN]: GT المتصل 441234567 -> GT الاستجابة 55512311555

يظهر حقل السياق المكان الذي تم فيه تطبيق NAT:

  • "استجابة SRI-for-SM" - في معالج SRI-for-SM
  • "UpdateLocation ISD" - في رسائل InsertSubscriberData
  • "UpdateLocation END" - في استجابة UpdateLocation END
  • "استجابة MAP BEGIN" - استجابات MAP BEGIN العامة
  • "ISD ACK" - تأكيد ISD
  • "استجابة خطأ HLR" - استجابة خطأ من HLR
  • "استجابة CAMEL" - استجابات عمليات CAMEL/CAP (gsmSCF)

التحقق

يتحقق النظام من تكوين GT NAT عند بدء التشغيل:

# تحقق من تكوين GT NAT
iex> GtNat.validate_config()
{:ok, [
%{calling_prefix: "8772", weight: 10, response_gt: "55512341112"},
%{calling_prefix: "8773", weight: 10, response_gt: "55512341111"}
]}

# تحقق مما إذا كان مفعلًا
iex> GtNat.enabled?()
true

# احصل على جميع القواعد
iex> GtNat.get_rules()
[
%{calling_prefix: "8772", weight: 10, response_gt: "55512341112"},
%{calling_prefix: "8773", weight: 10, response_gt: "55512341111"}
]

اختبار GT NAT

اختبر منطق GT NAT برمجيًا:

# اختبار الترجمة مع GT المتصل فقط (called_gt هو nil)
iex> GtNat.translate_response_gt("877234567", nil, "default_gt")
"55512341112"

# اختبار الترجمة مع كل من GT المتصل وGT المتصل به
iex> GtNat.translate_response_gt("877234567", "555123", "default_gt")
"55512341112"

# اختبار مع السجلات (GT المتصل به هو nil)
iex> GtNat.translate_response_gt_with_logging("877234567", nil, "default_gt", "test")
# السجلات: GT NAT [test]: GT المتصل 877234567 -> GT الاستجابة 55512341112
"55512341112"

# اختبار مع السجلات (كلا GTs)
iex> GtNat.translate_response_gt_with_logging("877234567", "555123", "default_gt", "test")
# السجلات: GT NAT [test]: GT المتصل 877234567، GT المتصل به 555123 -> GT الاستجابة 55512341112
"55512341112"

# اختبار عدم المطابقة (يعود إلى الافتراضي)
iex> GtNat.translate_response_gt("999999999", "888888", "default_gt")
"default_gt"

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

المشكلة: GT NAT لا يعمل

التحقق 1: هل هو مفعل؟

iex> Application.get_env(:omniss7, :gt_nat_enabled)
true # يجب أن يكون true

التحقق 2: هل تم تكوين القواعد؟

iex> Application.get_env(:omniss7, :gt_nat_rules)
[%{calling_prefix: "8772", response_gt: "55512341112"}, ...] # يجب أن تعيد قائمة

التحقق 3: تحقق من السجلات ابحث عن "GT NAT" في السجلات لمعرفة ما إذا كانت الترجمات تحدث.

المشكلة: GT خاطئ في الاستج��بات

الأعراض: تستخدم الاستجابات عنوان GT غير المتوقع

السبب: قد تكون مطابقة بادئة القاعدة واسعة جدًا أو أن القاعدة الافتراضية تلتقط الحركة

الحل: مراجعة أوزان القواعد والبادئات:

# سيء: بديل مع وزن منخفض (يلتقط كل شيء أولاً)
gt_nat_rules: [
%{weight: 1, response_gt: "111111"}, # هذا يطابق كل شيء أولاً!
%{calling_prefix: "8772", weight: 10, response_gt: "222222"} # لا تصل أبدًا
]

# جيد: قواعد محددة مع وزن أقل، بديل مع وزن أعلى
gt_nat_rules: [
%{calling_prefix: "8772", weight: 10, response_gt: "222222"}, # محدد، وزن منخفض
%{weight: 100, response_gt: "111111"} # بديل، وزن عالي (بديل)
]

المشكلة: لم يتم تطبيق GT NAT على نوع رسالة محدد

الأعراض: تستخدم بعض الاستجابات GT المعاد توجيهه، والبعض الآخر لا

التغطية الحالية:

  • ✅ GT المتصل SCCP (جميع الاستجابات)
  • ✅ استجابات SRI-for-SM (networkNode-Number)
  • ✅ رسائل UpdateLocation ISD (GT HLR)
  • ✅ استجابات UpdateLocation END
  • ✅ تأكيدات ISD
  • ✅ استجابات MAP BEGIN

إذا لم يكن نوع رسالة محدد يستخدم GT NAT، فقد لا يتم تنفيذه بعد. تحقق من الشيفرة المصدرية أو اتصل بالدعم.

اعتبارات الأداء

أداء البحث

يستخدم GT NAT مطابقة بادئة بسيطة مع تعقيد O(n) حيث n هو عدد القواعد.

نصائح الأداء:

  • احتفظ بعدد القواعد أقل من 100 لأفضل أداء
  • استخدم بادئات محددة لتقليل عدد القواعد
  • يجب أن تكون القاعدة الافتراضية (بادئة فارغة) في النهاية

اختبار الأداء (نظام نموذجي):

  • 10 قواعد: < 1µs لكل بحث
  • 50 قاعدة: < 5µs لكل بحث
  • 100 قاعدة: < 10µs لكل بحث

استخدام الذاكرة

تتطلب كل قاعدة حوالي 100 بايت من الذاكرة:

  • 10 قواعد ≈ 1 KB
  • 100 قاعدة ≈ 10 KB

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

1. دائمًا تضمين قاعدة بديلة عامة

gt_nat_rules: [
%{calling_prefix: "8772", weight: 10, response_gt: "111111"},
%{calling_prefix: "8773", weight: 10, response_gt: "222222"},
%{weight: 100, response_gt: "default_gt"} # دائمًا يجب أن يكون لديك بديل بوزن عالي
]

2. استخدم بادئات وأوزان ذات معنى

# جيد: بادئات واضحة ومحددة مع أوزان مناسبة
%{calling_prefix: "331", weight: 10, response_gt: "..."} # فرنسا
%{calling_prefix: "44", weight: 10, response_gt: "..."} # المملكة المتحدة

# سيء: بادئات واسعة جدًا أو أوزان مربكة
%{calling_prefix: "3", weight: 5, response_gt: "..."} # العديد من البلدان
%{calling_prefix: "331", weight: 100, response_gt: "..."} # الوزن يجب أن يكون أقل للقواعد المحددة

3. وثق قواعدك

gt_nat_rules: [
# الشريك XYZ - شبكة المملكة المتحدة (نطاق GT: 4412xxxxxxx)
# الوزن 10: أولوية الشريك القياسية
%{calling_prefix: "4412", weight: 10, response_gt: "5551001"},

# الشريك ABC - شبكة فرنسا (نطاق GT: 33123xxxxxx)
# الوزن 10: أولوية الشريك القياسية
%{calling_prefix: "33123", weight: 10, response_gt: "5551002"}
]

4. اختبر قبل النشر

# اختبر في iex قبل النشر
iex> GtNat.translate_response_gt("44121234567", nil, "default")
"5551001" # النتيجة المتوقعة

# اختبار مع GT المتصل به
iex> GtNat.translate_response_gt("44121234567", "555123", "default")
"5551001" # النتيجة المتوقعة

5. راقب السجلات

قم بتمكين تسجيل مستوى INFO لرؤية جميع ترجمات GT NAT في الإنتاج.

التكامل مع ميزات أخرى

وضع STP

يعمل GT NAT بشكل مستقل عن توجيه STP. تقوم STP بتوجيه بناءً على رموز النقاط وعناوين GT الوجهة، بينما يتعامل GT NAT مع عناوين الاستجابة.

لمزيد من المعلومات حول توجيه STP، راجع دليل تكوين STP.

تكامل CAMEL

GT NAT مكامل تمامًا مع عمليات CAMEL/CAP:

طبقة SCCP:

  • GT الجهة المتصلة في جميع استجابات CAMEL
  • يتم تطبيقه تلقائيًا بناءً على GT gsmSSF الوارد

التكوين:

  • camel_gsmscf_gt_address - GT الافتراضي لـ gsmSCF (اختياري)
  • إذا لم يتم تكوينه، يستخدم GT الجهة المتصلة من الطلب الوارد
  • تتجاوز قواعد GT NAT الافتراضي بناءً على بادئة الجهة ��لمتصلة

مثال:

# عندما يتصل gsmSSF 555123456 بـ gsmSCF الخاص بك
# الوارد: المتصل به=55512341112، المتصل=555123456
# بحث GT NAT: "555" -> GT الاستجابة="55512341111"
# الاستجابة: المتصل به=555123456، المتصل=55512341111

توازن الحمل

يمكن دمج GT NAT مع توازن الحمل M3UA لإدارة حركة المرور المتقدمة.

دليل الترحيل

تفعيل GT NAT على النظام الحالي

  1. تحضير التكوين

    # أضف إلى runtime.exs (احتفظ به معطل في البداية)
    config :omniss7,
    gt_nat_enabled: false, # ابدأ معطلاً
    gt_nat_rules: [
    # قواعدك هنا مع الأوزان
    %{calling_prefix: "877", weight: 10, response_gt: "111111"},
    %{weight: 100, response_gt: "999999"} # بديل عام
    ]
  2. اختبار التكوين

    # تحقق من تجميع التكوين
    mix compile

    # اختبار في iex
    iex -S mix
    iex> GtNat.validate_config()
  3. تفعيل في البيئة التجريبية

    gt_nat_enabled: true  # تغيير إلى true
  4. راقب السجلات

    tail -f log/omniss7.log | grep "GT NAT"
  5. نشر في الإنتاج

    • نشر خلال نافذة الصيانة
    • راقب الساعات الـ 24 الأولى عن كثب
    • يجب أن يكون لديك خطة للعودة (تعيين gt_nat_enabled: false)

الدعم

للمشاكل أو الأسئلة:

  • تحقق من السجلات للحصول على رسائل "GT NAT"
  • تحقق من التكوين باستخدام GtNat.validate_config()
  • راجع قسم استكشاف الأخطاء وإصلاحها في هذا الدليل
  • اتصل بدعم OmniSS7 مع مقتطفات السجلات