From 97ceccb783e1faa562b40e3accf05adf56ddb1f9 Mon Sep 17 00:00:00 2001 From: simonzhangsz Date: Mon, 23 Sep 2024 11:27:15 +0800 Subject: [PATCH 01/17] add: mibs for cintel HLR test --- sshsvc/mibs/CINTEL-HLR-MIB.my | 7567 ++++++++++++++++++++++++++++++ sshsvc/mibs/CINTEL-HLR-MIB.smidb | Bin 0 -> 214132 bytes sshsvc/mibs/CINTEL-MIB.my | 656 +++ sshsvc/mibs/CINTEL-MIB.smidb | Bin 0 -> 29052 bytes 4 files changed, 8223 insertions(+) create mode 100644 sshsvc/mibs/CINTEL-HLR-MIB.my create mode 100644 sshsvc/mibs/CINTEL-HLR-MIB.smidb create mode 100644 sshsvc/mibs/CINTEL-MIB.my create mode 100644 sshsvc/mibs/CINTEL-MIB.smidb diff --git a/sshsvc/mibs/CINTEL-HLR-MIB.my b/sshsvc/mibs/CINTEL-HLR-MIB.my new file mode 100644 index 00000000..7fcb47e9 --- /dev/null +++ b/sshsvc/mibs/CINTEL-HLR-MIB.my @@ -0,0 +1,7567 @@ +-- +-- CINTEL-SS-HLR-MIB.my +-- MIB generated by MG-SOFT Visual MIB Builder Version 7.0 Build 209 +-- Monday, September 13, 2010 at 17:22:53 +-- + + CINTEL-HLR-MIB DEFINITIONS ::= BEGIN + + IMPORTS + cintelSS, RowStatus + FROM CINTEL-MIB + Opaque, OBJECT-TYPE, MODULE-IDENTITY + FROM SNMPv2-SMI; + + + -- 1.3.6.1.4.1.1379.2.3.3.3 + hlr MODULE-IDENTITY + LAST-UPDATED "201706291606Z" -- June 29, 2007 at 16:06 GMT + ORGANIZATION + "CINTEL" + CONTACT-INFO + "cintel + support@cintel.com.cn" + DESCRIPTION + "Description." + REVISION "201706051219Z" -- June 05, 2007 at 12:19 GMT + DESCRIPTION + "This is the first release version of the HLR MIB" + ::= { application 3 } + + + +-- +-- Type definitions +-- + + AvailStateChoices ::= INTEGER + { + inTest(0), + failed(1), + powerOff(2), + offLine(3), + onLine(4), + dependency(5), + degraded(6), + notInstalled(7) + } + + +-- +-- Node definitions +-- + +-- Node definitions +-- +-- The MIB module for ctcn. +-- 1.3.6.1.4.1.1379.1.3 + -- 1.3.6.1.4.1.1379.2.3 + ctcn OBJECT IDENTIFIER ::= { cintelSS 3 } + + +-- 1.3.6.1.4.1.1379.1.3.3 + -- 1.3.6.1.4.1.1379.2.3.3 + application OBJECT IDENTIFIER ::= { ctcn 3 } + + +-- 1.3.6.1.4.1.1379.1.3.3.2.2 + -- 1.3.6.1.4.1.1379.2.3.3.3.1 + management OBJECT IDENTIFIER ::= { hlr 1 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.1.1 + instance OBJECT IDENTIFIER ::= { management 1 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.1.1 + instName OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..4)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:instName + Remark:Instance Name" + ::= { instance 1 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.1.2 + instStatus OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..16)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:instStatus + Remark:System status: Normal, Abnormal" + ::= { instance 2 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.1.3 + instDesc OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..64)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:instDesc + Remark:Instance Description" + ::= { instance 3 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.1.4 + instLocation OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..12)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:instLocation + Remark: Instance location" + ::= { instance 4 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.1.5 + instContact OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..32)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:instContact + Remark:Instance contact." + ::= { instance 5 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.1.7 + instOpTime OBJECT-TYPE + SYNTAX TimeStamp + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Name:instOpTime + The value of instOpTime at the time of the most recent + change in state." + ::= { instance 7 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.1.9 + instService OBJECT-TYPE + SYNTAX INTEGER + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:instService + The instance service event state, 0: Normal, 1: Link Down, 2: Link Up, 3: Authentication Failure." + ::= { instance 9 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2 + parameter OBJECT IDENTIFIER ::= { hlr 2 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2 + system OBJECT IDENTIFIER ::= { parameter 1 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.1 + cC OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..4)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:CC + Remark:Country Code" + ::= { system 1 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.2 + nDC OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..6)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:NDC + Remark:National Destination Code" + ::= { system 2 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.3 + startSN OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..12)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:SN Start + Remark:The beginning of the VLR SN range." + ::= { system 3 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.4 + endSN OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..12)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:SN End + Remark:The end of the VLR SN range." + ::= { system 4 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.5 + maxLicenses OBJECT-TYPE + SYNTAX INTEGER + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Name:Max License + Remark:(Read Only) The maximum subscriber capacity of HLR determined by License Control." + ::= { system 5 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.6 + usedLicenses OBJECT-TYPE + SYNTAX INTEGER + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Name:Used License + Remark:(Read Only) The number of registered HLR subscribers." + ::= { system 6 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.7 + provisionedSubs OBJECT-TYPE + SYNTAX INTEGER + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Name:Provisioned Users + Remark:(Read Only) The number of service enabled HLR subscribers." + ::= { system 7 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.8 + registeredSubs OBJECT-TYPE + SYNTAX INTEGER + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Name:Registered Users + Remark:(Read Only) The number of registered (both service enabled and disabled) HLR subscribers." + ::= { system 8 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.9 + roamingSubs OBJECT-TYPE + SYNTAX INTEGER + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Name:Roaming Users + Remark:(Read Only) The number of provisioned HLR subscribers currently roaming to VPLMNs." + ::= { system 9 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.10 + softwareVersion OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..16)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Name:Software Version + Remark:(Read Only) Version of HLR software." + ::= { system 10 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.11 + dataVersion OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..16)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Name:Data Version + Remark:(Read Only) Version of HLR subscriber data structure." + ::= { system 11 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.12 + cDRFlag OBJECT-TYPE + SYNTAX INTEGER + { + off(0), + on(1) + } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:CDR Flag + Remark:Enable or disable CDR generation of HLR." + ::= { system 12 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.13 + reloadState OBJECT-TYPE + SYNTAX INTEGER + { + idle(0), + reload(1) + } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:Reload State + Remark:Select reload to load backup HLR subscriber data from HLR server hard disk." + ::= { system 13 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.14 + saveParamCommand OBJECT-TYPE + SYNTAX INTEGER { saveParameter(1) } + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Remark:Save the HLR parameters residing in memory to harddisk." + ::= { system 14 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.15 + saveDataCommand OBJECT-TYPE + SYNTAX INTEGER { saveData(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Remark:Save the HLR subscriber data to both HLR
harddisk and EMS database." + ::= { system 15 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.16 + saveUSSDParamCommand OBJECT-TYPE + SYNTAX INTEGER { saveUSSDParam(1) } + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Remark:Save the USSD parameters residing
in memory to harddisk." + ::= { system 16 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.17 + resetUSSDParamCommand OBJECT-TYPE + SYNTAX INTEGER { resetUSSDParam(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Remark:Reload and activate all USSD
parameters to default values." + ::= { system 17 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.18 + importSubs OBJECT-TYPE + SYNTAX Opaque (SIZE (7)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Hidden Flag:Yes + OPAQUE DECODE RULE: + [unit]Command[u]00.0-00.7[u]select + [v]0[opt]Idle + [v]1[opt]Sending Command + [v]2[opt]In Processing + [v]3[opt]Succeeded + [v]4[opt]Failed + [unit]Total Numbers[u]01.0-03.7[u]input + [v]toDec-high-0 + [unit]Success Numbers[u]04.0-06.7[u]input + [v]toDec-high-0" + ::= { system 18 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2 + vPLMN OBJECT IDENTIFIER ::= { parameter 2 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.1 + vPLMNTable OBJECT-TYPE + SYNTAX SEQUENCE OF VPLMNEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Description." + ::= { vPLMN 1 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.1.1 + vPLMNEntry OBJECT-TYPE + SYNTAX VPLMNEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Description." + INDEX { vplmnIndex } + ::= { vPLMNTable 1 } + + + VPLMNEntry ::= + SEQUENCE { + vplmnIndex + INTEGER, + vplmnCC + OCTET STRING, + vplmnNDC + OCTET STRING, + vplmnStartSN + OCTET STRING, + vplmnEndSN + OCTET STRING, + vplmnRowStatus + RowStatus + } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.1.1.1 + vplmnIndex OBJECT-TYPE + SYNTAX INTEGER (0..255) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:Index + Remark:VPLMN index number ranges from 0 to 255." + ::= { vPLMNEntry 1 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.1.1.2 + vplmnCC OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..4)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:CC + Remark:The Country Code of the VPLMN." + ::= { vPLMNEntry 2 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.1.1.3 + vplmnNDC OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..6)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:NDC + Remark:The National Destination Code of the VPLMN." + ::= { vPLMNEntry 3 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.1.1.4 + vplmnStartSN OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..12)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:SN Start + Remark:The beginning of the VLR range in the VPLMN." + ::= { vPLMNEntry 4 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.1.1.5 + vplmnEndSN OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..12)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:SN End + Remark:The end of the VLR range in the VPLMN." + ::= { vPLMNEntry 5 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.1.1.6 + vplmnRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes" + ::= { vPLMNEntry 6 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.3 + cSRRList OBJECT IDENTIFIER ::= { parameter 3 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.3.1 + cSRR0 OBJECT-TYPE + SYNTAX Opaque (SIZE (32)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "OPAQUE DECODE RULE: + [unit]VPLMN0[u]00.0-00.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN1[u]00.1-00.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN2[u]00.2-00.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN3[u]00.3-00.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN4[u]00.4-00.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN5[u]00.5-00.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN6[u]00.6-00.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN7[u]00.7-00.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN8[u]01.0-01.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN9[u]01.1-01.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN10[u]01.2-01.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN11[u]01.3-01.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN12[u]01.4-01.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN13[u]01.5-01.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN14[u]01.6-01.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN15[u]01.7-01.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN16[u]02.0-02.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN17[u]02.1-02.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN18[u]02.2-02.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN19[u]02.3-02.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN20[u]02.4-02.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN21[u]02.5-02.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN22[u]02.6-02.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN23[u]02.7-02.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN24[u]03.0-03.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN25[u]03.1-03.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN26[u]03.2-03.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN27[u]03.3-03.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN28[u]03.4-03.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN29[u]03.5-03.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN30[u]03.6-03.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN31[u]03.7-03.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN32[u]04.0-04.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN33[u]04.1-04.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN34[u]04.2-04.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN35[u]04.3-04.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN36[u]04.4-04.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN37[u]04.5-04.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN38[u]04.6-04.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN39[u]04.7-04.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN40[u]05.0-05.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN41[u]05.1-05.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN42[u]05.2-05.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN43[u]05.3-05.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN44[u]05.4-05.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN45[u]05.5-05.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN46[u]05.6-05.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN47[u]05.7-05.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN48[u]06.0-06.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN49[u]06.1-06.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN50[u]06.2-06.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN51[u]06.3-06.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN52[u]06.4-06.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN53[u]06.5-06.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN54[u]06.6-06.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN55[u]06.7-06.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN56[u]07.0-07.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN57[u]07.1-07.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN58[u]07.2-07.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN59[u]07.3-07.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN60[u]07.4-07.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN61[u]07.5-07.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN62[u]07.6-07.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN63[u]07.7-07.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN64[u]08.0-08.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN65[u]08.1-08.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN66[u]08.2-08.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN67[u]08.3-08.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN68[u]08.4-08.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN69[u]08.5-08.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN70[u]08.6-08.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN71[u]08.7-08.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN72[u]09.0-09.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN73[u]09.1-09.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN74[u]09.2-09.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN75[u]09.3-09.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN76[u]09.4-09.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN77[u]09.5-09.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN78[u]09.6-09.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN79[u]09.7-09.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN80[u]10.0-10.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN81[u]10.1-10.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN82[u]10.2-10.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN83[u]10.3-10.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN84[u]10.4-10.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN85[u]10.5-10.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN86[u]10.6-10.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN87[u]10.7-10.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN88[u]11.0-11.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN89[u]11.1-11.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN90[u]11.2-11.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN91[u]11.3-11.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN92[u]11.4-11.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN93[u]11.5-11.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN94[u]11.6-11.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN95[u]11.7-11.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN96[u]12.0-12.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN97[u]12.1-12.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN98[u]12.2-12.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN99[u]12.3-12.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN100[u]12.4-12.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN101[u]12.5-12.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN102[u]12.6-12.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN103[u]12.7-12.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN104[u]13.0-13.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN105[u]13.1-13.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN106[u]13.2-13.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN107[u]13.3-13.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN108[u]13.4-13.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN109[u]13.5-13.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN110[u]13.6-13.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN111[u]13.7-13.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN112[u]14.0-14.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN113[u]14.1-14.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN114[u]14.2-14.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN115[u]14.3-14.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN116[u]14.4-14.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN117[u]14.5-14.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN118[u]14.6-14.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN119[u]14.7-14.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN120[u]15.0-15.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN121[u]15.1-15.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN122[u]15.2-15.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN123[u]15.3-15.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN124[u]15.4-15.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN125[u]15.5-15.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN126[u]15.6-15.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN127[u]15.7-15.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN128[u]16.0-16.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN129[u]16.1-16.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN130[u]16.2-16.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN131[u]16.3-16.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN132[u]16.4-16.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN133[u]16.5-16.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN134[u]16.6-16.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN135[u]16.7-16.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN136[u]17.0-17.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN137[u]17.1-17.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN138[u]17.2-17.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN139[u]17.3-17.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN140[u]17.4-17.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN141[u]17.5-17.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN142[u]17.6-17.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN143[u]17.7-17.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN144[u]18.0-18.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN145[u]18.1-18.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN146[u]18.2-18.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN147[u]18.3-18.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN148[u]18.4-18.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN149[u]18.5-18.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN150[u]18.6-18.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN151[u]18.7-18.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN152[u]19.0-19.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN153[u]19.1-19.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN154[u]19.2-19.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN155[u]19.3-19.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN156[u]19.4-19.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN157[u]19.5-19.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN158[u]19.6-19.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN159[u]19.7-19.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN160[u]20.0-20.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN161[u]20.1-20.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN162[u]20.2-20.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN163[u]20.3-20.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN164[u]20.4-20.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN165[u]20.5-20.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN166[u]20.6-20.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN167[u]20.7-20.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN168[u]21.0-21.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN169[u]21.1-21.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN170[u]21.2-21.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN171[u]21.3-21.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN172[u]21.4-21.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN173[u]21.5-21.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN174[u]21.6-21.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN175[u]21.7-21.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN176[u]22.0-22.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN177[u]22.1-22.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN178[u]22.2-22.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN179[u]22.3-22.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN180[u]22.4-22.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN181[u]22.5-22.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN182[u]22.6-22.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN183[u]22.7-22.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN184[u]23.0-23.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN185[u]23.1-23.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN186[u]23.2-23.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN187[u]23.3-23.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN188[u]23.4-23.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN189[u]23.5-23.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN190[u]23.6-23.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN191[u]23.7-23.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN192[u]24.0-24.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN193[u]24.1-24.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN194[u]24.2-24.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN195[u]24.3-24.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN196[u]24.4-24.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN197[u]24.5-24.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN198[u]24.6-24.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN199[u]24.7-24.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN200[u]25.0-25.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN201[u]25.1-25.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN202[u]25.2-25.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN203[u]25.3-25.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN204[u]25.4-25.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN205[u]25.5-25.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN206[u]25.6-25.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN207[u]25.7-25.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN208[u]26.0-26.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN209[u]26.1-26.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN210[u]26.2-26.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN211[u]26.3-26.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN212[u]26.4-26.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN213[u]26.5-26.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN214[u]26.6-26.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN215[u]26.7-26.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN216[u]27.0-27.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN217[u]27.1-27.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN218[u]27.2-27.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN219[u]27.3-27.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN220[u]27.4-27.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN221[u]27.5-27.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN222[u]27.6-27.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN223[u]27.7-27.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN224[u]28.0-28.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN225[u]28.1-28.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN226[u]28.2-28.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN227[u]28.3-28.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN228[u]28.4-28.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN229[u]28.5-28.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN230[u]28.6-28.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN231[u]28.7-28.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN232[u]29.0-29.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN233[u]29.1-29.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN234[u]29.2-29.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN235[u]29.3-29.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN236[u]29.4-29.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN237[u]29.5-29.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN238[u]29.6-29.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN239[u]29.7-29.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN240[u]30.0-30.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN241[u]30.1-30.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN242[u]30.2-30.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN243[u]30.3-30.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN244[u]30.4-30.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN245[u]30.5-30.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN246[u]30.6-30.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN247[u]30.7-30.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN248[u]31.0-31.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN249[u]31.1-31.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN250[u]31.2-31.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN251[u]31.3-31.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN252[u]31.4-31.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN253[u]31.5-31.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN254[u]31.6-31.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN255[u]31.7-31.7[u]select + [v]0[opt]N + [v]1[opt]Y + [remark]
Define CSRR 0(country specific roaming restriction) lists to confine the roaming range of a subscriber.
The CSRR list defines the roaming restriction for 256 VPLMN ranges.
" + ::= { cSRRList 1 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.3.2 + cSRR1 OBJECT-TYPE + SYNTAX Opaque (SIZE (32)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "OPAQUE DECODE RULE: + [unit]VPLMN0[u]00.0-00.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN1[u]00.1-00.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN2[u]00.2-00.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN3[u]00.3-00.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN4[u]00.4-00.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN5[u]00.5-00.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN6[u]00.6-00.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN7[u]00.7-00.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN8[u]01.0-01.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN9[u]01.1-01.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN10[u]01.2-01.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN11[u]01.3-01.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN12[u]01.4-01.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN13[u]01.5-01.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN14[u]01.6-01.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN15[u]01.7-01.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN16[u]02.0-02.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN17[u]02.1-02.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN18[u]02.2-02.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN19[u]02.3-02.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN20[u]02.4-02.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN21[u]02.5-02.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN22[u]02.6-02.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN23[u]02.7-02.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN24[u]03.0-03.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN25[u]03.1-03.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN26[u]03.2-03.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN27[u]03.3-03.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN28[u]03.4-03.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN29[u]03.5-03.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN30[u]03.6-03.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN31[u]03.7-03.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN32[u]04.0-04.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN33[u]04.1-04.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN34[u]04.2-04.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN35[u]04.3-04.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN36[u]04.4-04.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN37[u]04.5-04.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN38[u]04.6-04.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN39[u]04.7-04.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN40[u]05.0-05.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN41[u]05.1-05.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN42[u]05.2-05.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN43[u]05.3-05.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN44[u]05.4-05.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN45[u]05.5-05.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN46[u]05.6-05.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN47[u]05.7-05.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN48[u]06.0-06.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN49[u]06.1-06.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN50[u]06.2-06.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN51[u]06.3-06.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN52[u]06.4-06.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN53[u]06.5-06.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN54[u]06.6-06.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN55[u]06.7-06.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN56[u]07.0-07.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN57[u]07.1-07.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN58[u]07.2-07.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN59[u]07.3-07.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN60[u]07.4-07.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN61[u]07.5-07.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN62[u]07.6-07.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN63[u]07.7-07.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN64[u]08.0-08.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN65[u]08.1-08.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN66[u]08.2-08.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN67[u]08.3-08.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN68[u]08.4-08.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN69[u]08.5-08.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN70[u]08.6-08.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN71[u]08.7-08.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN72[u]09.0-09.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN73[u]09.1-09.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN74[u]09.2-09.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN75[u]09.3-09.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN76[u]09.4-09.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN77[u]09.5-09.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN78[u]09.6-09.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN79[u]09.7-09.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN80[u]10.0-10.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN81[u]10.1-10.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN82[u]10.2-10.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN83[u]10.3-10.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN84[u]10.4-10.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN85[u]10.5-10.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN86[u]10.6-10.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN87[u]10.7-10.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN88[u]11.0-11.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN89[u]11.1-11.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN90[u]11.2-11.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN91[u]11.3-11.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN92[u]11.4-11.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN93[u]11.5-11.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN94[u]11.6-11.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN95[u]11.7-11.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN96[u]12.0-12.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN97[u]12.1-12.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN98[u]12.2-12.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN99[u]12.3-12.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN100[u]12.4-12.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN101[u]12.5-12.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN102[u]12.6-12.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN103[u]12.7-12.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN104[u]13.0-13.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN105[u]13.1-13.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN106[u]13.2-13.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN107[u]13.3-13.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN108[u]13.4-13.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN109[u]13.5-13.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN110[u]13.6-13.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN111[u]13.7-13.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN112[u]14.0-14.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN113[u]14.1-14.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN114[u]14.2-14.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN115[u]14.3-14.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN116[u]14.4-14.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN117[u]14.5-14.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN118[u]14.6-14.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN119[u]14.7-14.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN120[u]15.0-15.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN121[u]15.1-15.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN122[u]15.2-15.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN123[u]15.3-15.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN124[u]15.4-15.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN125[u]15.5-15.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN126[u]15.6-15.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN127[u]15.7-15.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN128[u]16.0-16.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN129[u]16.1-16.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN130[u]16.2-16.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN131[u]16.3-16.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN132[u]16.4-16.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN133[u]16.5-16.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN134[u]16.6-16.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN135[u]16.7-16.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN136[u]17.0-17.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN137[u]17.1-17.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN138[u]17.2-17.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN139[u]17.3-17.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN140[u]17.4-17.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN141[u]17.5-17.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN142[u]17.6-17.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN143[u]17.7-17.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN144[u]18.0-18.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN145[u]18.1-18.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN146[u]18.2-18.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN147[u]18.3-18.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN148[u]18.4-18.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN149[u]18.5-18.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN150[u]18.6-18.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN151[u]18.7-18.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN152[u]19.0-19.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN153[u]19.1-19.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN154[u]19.2-19.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN155[u]19.3-19.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN156[u]19.4-19.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN157[u]19.5-19.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN158[u]19.6-19.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN159[u]19.7-19.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN160[u]20.0-20.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN161[u]20.1-20.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN162[u]20.2-20.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN163[u]20.3-20.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN164[u]20.4-20.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN165[u]20.5-20.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN166[u]20.6-20.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN167[u]20.7-20.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN168[u]21.0-21.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN169[u]21.1-21.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN170[u]21.2-21.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN171[u]21.3-21.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN172[u]21.4-21.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN173[u]21.5-21.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN174[u]21.6-21.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN175[u]21.7-21.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN176[u]22.0-22.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN177[u]22.1-22.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN178[u]22.2-22.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN179[u]22.3-22.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN180[u]22.4-22.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN181[u]22.5-22.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN182[u]22.6-22.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN183[u]22.7-22.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN184[u]23.0-23.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN185[u]23.1-23.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN186[u]23.2-23.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN187[u]23.3-23.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN188[u]23.4-23.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN189[u]23.5-23.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN190[u]23.6-23.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN191[u]23.7-23.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN192[u]24.0-24.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN193[u]24.1-24.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN194[u]24.2-24.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN195[u]24.3-24.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN196[u]24.4-24.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN197[u]24.5-24.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN198[u]24.6-24.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN199[u]24.7-24.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN200[u]25.0-25.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN201[u]25.1-25.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN202[u]25.2-25.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN203[u]25.3-25.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN204[u]25.4-25.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN205[u]25.5-25.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN206[u]25.6-25.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN207[u]25.7-25.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN208[u]26.0-26.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN209[u]26.1-26.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN210[u]26.2-26.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN211[u]26.3-26.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN212[u]26.4-26.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN213[u]26.5-26.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN214[u]26.6-26.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN215[u]26.7-26.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN216[u]27.0-27.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN217[u]27.1-27.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN218[u]27.2-27.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN219[u]27.3-27.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN220[u]27.4-27.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN221[u]27.5-27.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN222[u]27.6-27.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN223[u]27.7-27.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN224[u]28.0-28.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN225[u]28.1-28.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN226[u]28.2-28.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN227[u]28.3-28.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN228[u]28.4-28.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN229[u]28.5-28.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN230[u]28.6-28.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN231[u]28.7-28.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN232[u]29.0-29.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN233[u]29.1-29.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN234[u]29.2-29.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN235[u]29.3-29.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN236[u]29.4-29.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN237[u]29.5-29.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN238[u]29.6-29.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN239[u]29.7-29.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN240[u]30.0-30.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN241[u]30.1-30.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN242[u]30.2-30.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN243[u]30.3-30.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN244[u]30.4-30.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN245[u]30.5-30.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN246[u]30.6-30.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN247[u]30.7-30.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN248[u]31.0-31.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN249[u]31.1-31.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN250[u]31.2-31.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN251[u]31.3-31.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN252[u]31.4-31.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN253[u]31.5-31.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN254[u]31.6-31.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN255[u]31.7-31.7[u]select + [v]0[opt]N + [v]1[opt]Y + [remark]
Define CSRR 1(country specific roaming restriction) lists to confine the roaming range of a subscriber.
The CSRR list defines the roaming restriction for 256 VPLMN ranges.
" + ::= { cSRRList 2 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.3.3 + cSRR2 OBJECT-TYPE + SYNTAX Opaque (SIZE (32)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "OPAQUE DECODE RULE: + [unit]VPLMN0[u]00.0-00.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN1[u]00.1-00.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN2[u]00.2-00.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN3[u]00.3-00.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN4[u]00.4-00.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN5[u]00.5-00.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN6[u]00.6-00.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN7[u]00.7-00.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN8[u]01.0-01.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN9[u]01.1-01.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN10[u]01.2-01.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN11[u]01.3-01.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN12[u]01.4-01.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN13[u]01.5-01.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN14[u]01.6-01.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN15[u]01.7-01.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN16[u]02.0-02.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN17[u]02.1-02.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN18[u]02.2-02.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN19[u]02.3-02.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN20[u]02.4-02.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN21[u]02.5-02.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN22[u]02.6-02.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN23[u]02.7-02.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN24[u]03.0-03.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN25[u]03.1-03.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN26[u]03.2-03.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN27[u]03.3-03.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN28[u]03.4-03.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN29[u]03.5-03.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN30[u]03.6-03.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN31[u]03.7-03.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN32[u]04.0-04.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN33[u]04.1-04.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN34[u]04.2-04.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN35[u]04.3-04.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN36[u]04.4-04.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN37[u]04.5-04.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN38[u]04.6-04.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN39[u]04.7-04.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN40[u]05.0-05.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN41[u]05.1-05.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN42[u]05.2-05.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN43[u]05.3-05.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN44[u]05.4-05.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN45[u]05.5-05.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN46[u]05.6-05.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN47[u]05.7-05.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN48[u]06.0-06.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN49[u]06.1-06.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN50[u]06.2-06.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN51[u]06.3-06.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN52[u]06.4-06.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN53[u]06.5-06.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN54[u]06.6-06.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN55[u]06.7-06.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN56[u]07.0-07.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN57[u]07.1-07.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN58[u]07.2-07.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN59[u]07.3-07.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN60[u]07.4-07.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN61[u]07.5-07.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN62[u]07.6-07.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN63[u]07.7-07.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN64[u]08.0-08.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN65[u]08.1-08.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN66[u]08.2-08.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN67[u]08.3-08.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN68[u]08.4-08.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN69[u]08.5-08.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN70[u]08.6-08.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN71[u]08.7-08.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN72[u]09.0-09.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN73[u]09.1-09.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN74[u]09.2-09.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN75[u]09.3-09.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN76[u]09.4-09.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN77[u]09.5-09.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN78[u]09.6-09.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN79[u]09.7-09.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN80[u]10.0-10.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN81[u]10.1-10.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN82[u]10.2-10.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN83[u]10.3-10.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN84[u]10.4-10.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN85[u]10.5-10.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN86[u]10.6-10.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN87[u]10.7-10.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN88[u]11.0-11.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN89[u]11.1-11.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN90[u]11.2-11.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN91[u]11.3-11.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN92[u]11.4-11.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN93[u]11.5-11.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN94[u]11.6-11.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN95[u]11.7-11.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN96[u]12.0-12.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN97[u]12.1-12.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN98[u]12.2-12.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN99[u]12.3-12.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN100[u]12.4-12.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN101[u]12.5-12.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN102[u]12.6-12.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN103[u]12.7-12.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN104[u]13.0-13.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN105[u]13.1-13.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN106[u]13.2-13.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN107[u]13.3-13.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN108[u]13.4-13.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN109[u]13.5-13.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN110[u]13.6-13.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN111[u]13.7-13.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN112[u]14.0-14.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN113[u]14.1-14.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN114[u]14.2-14.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN115[u]14.3-14.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN116[u]14.4-14.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN117[u]14.5-14.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN118[u]14.6-14.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN119[u]14.7-14.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN120[u]15.0-15.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN121[u]15.1-15.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN122[u]15.2-15.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN123[u]15.3-15.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN124[u]15.4-15.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN125[u]15.5-15.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN126[u]15.6-15.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN127[u]15.7-15.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN128[u]16.0-16.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN129[u]16.1-16.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN130[u]16.2-16.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN131[u]16.3-16.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN132[u]16.4-16.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN133[u]16.5-16.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN134[u]16.6-16.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN135[u]16.7-16.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN136[u]17.0-17.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN137[u]17.1-17.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN138[u]17.2-17.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN139[u]17.3-17.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN140[u]17.4-17.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN141[u]17.5-17.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN142[u]17.6-17.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN143[u]17.7-17.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN144[u]18.0-18.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN145[u]18.1-18.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN146[u]18.2-18.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN147[u]18.3-18.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN148[u]18.4-18.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN149[u]18.5-18.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN150[u]18.6-18.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN151[u]18.7-18.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN152[u]19.0-19.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN153[u]19.1-19.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN154[u]19.2-19.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN155[u]19.3-19.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN156[u]19.4-19.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN157[u]19.5-19.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN158[u]19.6-19.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN159[u]19.7-19.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN160[u]20.0-20.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN161[u]20.1-20.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN162[u]20.2-20.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN163[u]20.3-20.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN164[u]20.4-20.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN165[u]20.5-20.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN166[u]20.6-20.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN167[u]20.7-20.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN168[u]21.0-21.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN169[u]21.1-21.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN170[u]21.2-21.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN171[u]21.3-21.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN172[u]21.4-21.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN173[u]21.5-21.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN174[u]21.6-21.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN175[u]21.7-21.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN176[u]22.0-22.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN177[u]22.1-22.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN178[u]22.2-22.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN179[u]22.3-22.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN180[u]22.4-22.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN181[u]22.5-22.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN182[u]22.6-22.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN183[u]22.7-22.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN184[u]23.0-23.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN185[u]23.1-23.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN186[u]23.2-23.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN187[u]23.3-23.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN188[u]23.4-23.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN189[u]23.5-23.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN190[u]23.6-23.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN191[u]23.7-23.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN192[u]24.0-24.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN193[u]24.1-24.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN194[u]24.2-24.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN195[u]24.3-24.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN196[u]24.4-24.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN197[u]24.5-24.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN198[u]24.6-24.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN199[u]24.7-24.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN200[u]25.0-25.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN201[u]25.1-25.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN202[u]25.2-25.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN203[u]25.3-25.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN204[u]25.4-25.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN205[u]25.5-25.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN206[u]25.6-25.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN207[u]25.7-25.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN208[u]26.0-26.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN209[u]26.1-26.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN210[u]26.2-26.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN211[u]26.3-26.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN212[u]26.4-26.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN213[u]26.5-26.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN214[u]26.6-26.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN215[u]26.7-26.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN216[u]27.0-27.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN217[u]27.1-27.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN218[u]27.2-27.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN219[u]27.3-27.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN220[u]27.4-27.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN221[u]27.5-27.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN222[u]27.6-27.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN223[u]27.7-27.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN224[u]28.0-28.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN225[u]28.1-28.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN226[u]28.2-28.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN227[u]28.3-28.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN228[u]28.4-28.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN229[u]28.5-28.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN230[u]28.6-28.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN231[u]28.7-28.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN232[u]29.0-29.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN233[u]29.1-29.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN234[u]29.2-29.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN235[u]29.3-29.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN236[u]29.4-29.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN237[u]29.5-29.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN238[u]29.6-29.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN239[u]29.7-29.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN240[u]30.0-30.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN241[u]30.1-30.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN242[u]30.2-30.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN243[u]30.3-30.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN244[u]30.4-30.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN245[u]30.5-30.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN246[u]30.6-30.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN247[u]30.7-30.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN248[u]31.0-31.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN249[u]31.1-31.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN250[u]31.2-31.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN251[u]31.3-31.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN252[u]31.4-31.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN253[u]31.5-31.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN254[u]31.6-31.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN255[u]31.7-31.7[u]select + [v]0[opt]N + [v]1[opt]Y + [remark]
Define CSRR 2(country specific roaming restriction) lists to confine the roaming range of a subscriber.
The CSRR list defines the roaming restriction for 256 VPLMN ranges.
" + ::= { cSRRList 3 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.3.4 + cSRR3 OBJECT-TYPE + SYNTAX Opaque (SIZE (32)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "OPAQUE DECODE RULE: + [unit]VPLMN0[u]00.0-00.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN1[u]00.1-00.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN2[u]00.2-00.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN3[u]00.3-00.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN4[u]00.4-00.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN5[u]00.5-00.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN6[u]00.6-00.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN7[u]00.7-00.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN8[u]01.0-01.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN9[u]01.1-01.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN10[u]01.2-01.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN11[u]01.3-01.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN12[u]01.4-01.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN13[u]01.5-01.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN14[u]01.6-01.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN15[u]01.7-01.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN16[u]02.0-02.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN17[u]02.1-02.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN18[u]02.2-02.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN19[u]02.3-02.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN20[u]02.4-02.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN21[u]02.5-02.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN22[u]02.6-02.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN23[u]02.7-02.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN24[u]03.0-03.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN25[u]03.1-03.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN26[u]03.2-03.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN27[u]03.3-03.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN28[u]03.4-03.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN29[u]03.5-03.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN30[u]03.6-03.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN31[u]03.7-03.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN32[u]04.0-04.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN33[u]04.1-04.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN34[u]04.2-04.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN35[u]04.3-04.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN36[u]04.4-04.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN37[u]04.5-04.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN38[u]04.6-04.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN39[u]04.7-04.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN40[u]05.0-05.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN41[u]05.1-05.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN42[u]05.2-05.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN43[u]05.3-05.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN44[u]05.4-05.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN45[u]05.5-05.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN46[u]05.6-05.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN47[u]05.7-05.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN48[u]06.0-06.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN49[u]06.1-06.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN50[u]06.2-06.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN51[u]06.3-06.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN52[u]06.4-06.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN53[u]06.5-06.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN54[u]06.6-06.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN55[u]06.7-06.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN56[u]07.0-07.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN57[u]07.1-07.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN58[u]07.2-07.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN59[u]07.3-07.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN60[u]07.4-07.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN61[u]07.5-07.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN62[u]07.6-07.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN63[u]07.7-07.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN64[u]08.0-08.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN65[u]08.1-08.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN66[u]08.2-08.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN67[u]08.3-08.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN68[u]08.4-08.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN69[u]08.5-08.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN70[u]08.6-08.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN71[u]08.7-08.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN72[u]09.0-09.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN73[u]09.1-09.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN74[u]09.2-09.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN75[u]09.3-09.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN76[u]09.4-09.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN77[u]09.5-09.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN78[u]09.6-09.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN79[u]09.7-09.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN80[u]10.0-10.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN81[u]10.1-10.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN82[u]10.2-10.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN83[u]10.3-10.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN84[u]10.4-10.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN85[u]10.5-10.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN86[u]10.6-10.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN87[u]10.7-10.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN88[u]11.0-11.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN89[u]11.1-11.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN90[u]11.2-11.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN91[u]11.3-11.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN92[u]11.4-11.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN93[u]11.5-11.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN94[u]11.6-11.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN95[u]11.7-11.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN96[u]12.0-12.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN97[u]12.1-12.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN98[u]12.2-12.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN99[u]12.3-12.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN100[u]12.4-12.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN101[u]12.5-12.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN102[u]12.6-12.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN103[u]12.7-12.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN104[u]13.0-13.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN105[u]13.1-13.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN106[u]13.2-13.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN107[u]13.3-13.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN108[u]13.4-13.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN109[u]13.5-13.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN110[u]13.6-13.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN111[u]13.7-13.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN112[u]14.0-14.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN113[u]14.1-14.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN114[u]14.2-14.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN115[u]14.3-14.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN116[u]14.4-14.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN117[u]14.5-14.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN118[u]14.6-14.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN119[u]14.7-14.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN120[u]15.0-15.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN121[u]15.1-15.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN122[u]15.2-15.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN123[u]15.3-15.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN124[u]15.4-15.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN125[u]15.5-15.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN126[u]15.6-15.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN127[u]15.7-15.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN128[u]16.0-16.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN129[u]16.1-16.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN130[u]16.2-16.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN131[u]16.3-16.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN132[u]16.4-16.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN133[u]16.5-16.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN134[u]16.6-16.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN135[u]16.7-16.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN136[u]17.0-17.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN137[u]17.1-17.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN138[u]17.2-17.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN139[u]17.3-17.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN140[u]17.4-17.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN141[u]17.5-17.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN142[u]17.6-17.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN143[u]17.7-17.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN144[u]18.0-18.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN145[u]18.1-18.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN146[u]18.2-18.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN147[u]18.3-18.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN148[u]18.4-18.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN149[u]18.5-18.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN150[u]18.6-18.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN151[u]18.7-18.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN152[u]19.0-19.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN153[u]19.1-19.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN154[u]19.2-19.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN155[u]19.3-19.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN156[u]19.4-19.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN157[u]19.5-19.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN158[u]19.6-19.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN159[u]19.7-19.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN160[u]20.0-20.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN161[u]20.1-20.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN162[u]20.2-20.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN163[u]20.3-20.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN164[u]20.4-20.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN165[u]20.5-20.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN166[u]20.6-20.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN167[u]20.7-20.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN168[u]21.0-21.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN169[u]21.1-21.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN170[u]21.2-21.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN171[u]21.3-21.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN172[u]21.4-21.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN173[u]21.5-21.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN174[u]21.6-21.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN175[u]21.7-21.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN176[u]22.0-22.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN177[u]22.1-22.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN178[u]22.2-22.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN179[u]22.3-22.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN180[u]22.4-22.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN181[u]22.5-22.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN182[u]22.6-22.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN183[u]22.7-22.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN184[u]23.0-23.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN185[u]23.1-23.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN186[u]23.2-23.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN187[u]23.3-23.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN188[u]23.4-23.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN189[u]23.5-23.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN190[u]23.6-23.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN191[u]23.7-23.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN192[u]24.0-24.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN193[u]24.1-24.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN194[u]24.2-24.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN195[u]24.3-24.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN196[u]24.4-24.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN197[u]24.5-24.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN198[u]24.6-24.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN199[u]24.7-24.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN200[u]25.0-25.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN201[u]25.1-25.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN202[u]25.2-25.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN203[u]25.3-25.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN204[u]25.4-25.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN205[u]25.5-25.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN206[u]25.6-25.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN207[u]25.7-25.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN208[u]26.0-26.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN209[u]26.1-26.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN210[u]26.2-26.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN211[u]26.3-26.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN212[u]26.4-26.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN213[u]26.5-26.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN214[u]26.6-26.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN215[u]26.7-26.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN216[u]27.0-27.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN217[u]27.1-27.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN218[u]27.2-27.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN219[u]27.3-27.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN220[u]27.4-27.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN221[u]27.5-27.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN222[u]27.6-27.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN223[u]27.7-27.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN224[u]28.0-28.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN225[u]28.1-28.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN226[u]28.2-28.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN227[u]28.3-28.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN228[u]28.4-28.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN229[u]28.5-28.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN230[u]28.6-28.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN231[u]28.7-28.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN232[u]29.0-29.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN233[u]29.1-29.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN234[u]29.2-29.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN235[u]29.3-29.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN236[u]29.4-29.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN237[u]29.5-29.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN238[u]29.6-29.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN239[u]29.7-29.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN240[u]30.0-30.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN241[u]30.1-30.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN242[u]30.2-30.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN243[u]30.3-30.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN244[u]30.4-30.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN245[u]30.5-30.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN246[u]30.6-30.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN247[u]30.7-30.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN248[u]31.0-31.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN249[u]31.1-31.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN250[u]31.2-31.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN251[u]31.3-31.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN252[u]31.4-31.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN253[u]31.5-31.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN254[u]31.6-31.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN255[u]31.7-31.7[u]select + [v]0[opt]N + [v]1[opt]Y + [remark]
Define CSRR 3(country specific roaming restriction) lists to confine the roaming range of a subscriber.
The CSRR list defines the roaming restriction for 256 VPLMN ranges.
" + ::= { cSRRList 4 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.3.5 + cSRR4 OBJECT-TYPE + SYNTAX Opaque (SIZE (32)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "OPAQUE DECODE RULE: + [unit]VPLMN0[u]00.0-00.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN1[u]00.1-00.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN2[u]00.2-00.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN3[u]00.3-00.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN4[u]00.4-00.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN5[u]00.5-00.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN6[u]00.6-00.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN7[u]00.7-00.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN8[u]01.0-01.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN9[u]01.1-01.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN10[u]01.2-01.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN11[u]01.3-01.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN12[u]01.4-01.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN13[u]01.5-01.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN14[u]01.6-01.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN15[u]01.7-01.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN16[u]02.0-02.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN17[u]02.1-02.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN18[u]02.2-02.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN19[u]02.3-02.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN20[u]02.4-02.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN21[u]02.5-02.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN22[u]02.6-02.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN23[u]02.7-02.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN24[u]03.0-03.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN25[u]03.1-03.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN26[u]03.2-03.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN27[u]03.3-03.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN28[u]03.4-03.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN29[u]03.5-03.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN30[u]03.6-03.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN31[u]03.7-03.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN32[u]04.0-04.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN33[u]04.1-04.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN34[u]04.2-04.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN35[u]04.3-04.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN36[u]04.4-04.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN37[u]04.5-04.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN38[u]04.6-04.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN39[u]04.7-04.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN40[u]05.0-05.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN41[u]05.1-05.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN42[u]05.2-05.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN43[u]05.3-05.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN44[u]05.4-05.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN45[u]05.5-05.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN46[u]05.6-05.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN47[u]05.7-05.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN48[u]06.0-06.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN49[u]06.1-06.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN50[u]06.2-06.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN51[u]06.3-06.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN52[u]06.4-06.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN53[u]06.5-06.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN54[u]06.6-06.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN55[u]06.7-06.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN56[u]07.0-07.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN57[u]07.1-07.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN58[u]07.2-07.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN59[u]07.3-07.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN60[u]07.4-07.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN61[u]07.5-07.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN62[u]07.6-07.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN63[u]07.7-07.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN64[u]08.0-08.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN65[u]08.1-08.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN66[u]08.2-08.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN67[u]08.3-08.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN68[u]08.4-08.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN69[u]08.5-08.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN70[u]08.6-08.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN71[u]08.7-08.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN72[u]09.0-09.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN73[u]09.1-09.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN74[u]09.2-09.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN75[u]09.3-09.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN76[u]09.4-09.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN77[u]09.5-09.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN78[u]09.6-09.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN79[u]09.7-09.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN80[u]10.0-10.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN81[u]10.1-10.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN82[u]10.2-10.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN83[u]10.3-10.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN84[u]10.4-10.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN85[u]10.5-10.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN86[u]10.6-10.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN87[u]10.7-10.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN88[u]11.0-11.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN89[u]11.1-11.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN90[u]11.2-11.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN91[u]11.3-11.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN92[u]11.4-11.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN93[u]11.5-11.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN94[u]11.6-11.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN95[u]11.7-11.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN96[u]12.0-12.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN97[u]12.1-12.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN98[u]12.2-12.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN99[u]12.3-12.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN100[u]12.4-12.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN101[u]12.5-12.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN102[u]12.6-12.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN103[u]12.7-12.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN104[u]13.0-13.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN105[u]13.1-13.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN106[u]13.2-13.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN107[u]13.3-13.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN108[u]13.4-13.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN109[u]13.5-13.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN110[u]13.6-13.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN111[u]13.7-13.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN112[u]14.0-14.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN113[u]14.1-14.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN114[u]14.2-14.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN115[u]14.3-14.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN116[u]14.4-14.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN117[u]14.5-14.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN118[u]14.6-14.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN119[u]14.7-14.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN120[u]15.0-15.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN121[u]15.1-15.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN122[u]15.2-15.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN123[u]15.3-15.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN124[u]15.4-15.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN125[u]15.5-15.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN126[u]15.6-15.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN127[u]15.7-15.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN128[u]16.0-16.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN129[u]16.1-16.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN130[u]16.2-16.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN131[u]16.3-16.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN132[u]16.4-16.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN133[u]16.5-16.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN134[u]16.6-16.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN135[u]16.7-16.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN136[u]17.0-17.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN137[u]17.1-17.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN138[u]17.2-17.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN139[u]17.3-17.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN140[u]17.4-17.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN141[u]17.5-17.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN142[u]17.6-17.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN143[u]17.7-17.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN144[u]18.0-18.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN145[u]18.1-18.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN146[u]18.2-18.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN147[u]18.3-18.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN148[u]18.4-18.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN149[u]18.5-18.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN150[u]18.6-18.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN151[u]18.7-18.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN152[u]19.0-19.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN153[u]19.1-19.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN154[u]19.2-19.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN155[u]19.3-19.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN156[u]19.4-19.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN157[u]19.5-19.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN158[u]19.6-19.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN159[u]19.7-19.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN160[u]20.0-20.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN161[u]20.1-20.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN162[u]20.2-20.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN163[u]20.3-20.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN164[u]20.4-20.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN165[u]20.5-20.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN166[u]20.6-20.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN167[u]20.7-20.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN168[u]21.0-21.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN169[u]21.1-21.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN170[u]21.2-21.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN171[u]21.3-21.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN172[u]21.4-21.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN173[u]21.5-21.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN174[u]21.6-21.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN175[u]21.7-21.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN176[u]22.0-22.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN177[u]22.1-22.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN178[u]22.2-22.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN179[u]22.3-22.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN180[u]22.4-22.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN181[u]22.5-22.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN182[u]22.6-22.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN183[u]22.7-22.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN184[u]23.0-23.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN185[u]23.1-23.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN186[u]23.2-23.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN187[u]23.3-23.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN188[u]23.4-23.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN189[u]23.5-23.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN190[u]23.6-23.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN191[u]23.7-23.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN192[u]24.0-24.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN193[u]24.1-24.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN194[u]24.2-24.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN195[u]24.3-24.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN196[u]24.4-24.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN197[u]24.5-24.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN198[u]24.6-24.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN199[u]24.7-24.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN200[u]25.0-25.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN201[u]25.1-25.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN202[u]25.2-25.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN203[u]25.3-25.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN204[u]25.4-25.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN205[u]25.5-25.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN206[u]25.6-25.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN207[u]25.7-25.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN208[u]26.0-26.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN209[u]26.1-26.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN210[u]26.2-26.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN211[u]26.3-26.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN212[u]26.4-26.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN213[u]26.5-26.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN214[u]26.6-26.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN215[u]26.7-26.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN216[u]27.0-27.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN217[u]27.1-27.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN218[u]27.2-27.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN219[u]27.3-27.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN220[u]27.4-27.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN221[u]27.5-27.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN222[u]27.6-27.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN223[u]27.7-27.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN224[u]28.0-28.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN225[u]28.1-28.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN226[u]28.2-28.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN227[u]28.3-28.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN228[u]28.4-28.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN229[u]28.5-28.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN230[u]28.6-28.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN231[u]28.7-28.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN232[u]29.0-29.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN233[u]29.1-29.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN234[u]29.2-29.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN235[u]29.3-29.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN236[u]29.4-29.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN237[u]29.5-29.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN238[u]29.6-29.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN239[u]29.7-29.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN240[u]30.0-30.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN241[u]30.1-30.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN242[u]30.2-30.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN243[u]30.3-30.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN244[u]30.4-30.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN245[u]30.5-30.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN246[u]30.6-30.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN247[u]30.7-30.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN248[u]31.0-31.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN249[u]31.1-31.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN250[u]31.2-31.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN251[u]31.3-31.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN252[u]31.4-31.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN253[u]31.5-31.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN254[u]31.6-31.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN255[u]31.7-31.7[u]select + [v]0[opt]N + [v]1[opt]Y + [remark]
Define CSRR 4(country specific roaming restriction) lists to confine the roaming range of a subscriber.
The CSRR list defines the roaming restriction for 256 VPLMN ranges.
" + ::= { cSRRList 5 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.3.6 + cSRR5 OBJECT-TYPE + SYNTAX Opaque (SIZE (32)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "OPAQUE DECODE RULE: + [unit]VPLMN0[u]00.0-00.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN1[u]00.1-00.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN2[u]00.2-00.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN3[u]00.3-00.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN4[u]00.4-00.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN5[u]00.5-00.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN6[u]00.6-00.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN7[u]00.7-00.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN8[u]01.0-01.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN9[u]01.1-01.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN10[u]01.2-01.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN11[u]01.3-01.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN12[u]01.4-01.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN13[u]01.5-01.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN14[u]01.6-01.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN15[u]01.7-01.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN16[u]02.0-02.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN17[u]02.1-02.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN18[u]02.2-02.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN19[u]02.3-02.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN20[u]02.4-02.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN21[u]02.5-02.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN22[u]02.6-02.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN23[u]02.7-02.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN24[u]03.0-03.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN25[u]03.1-03.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN26[u]03.2-03.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN27[u]03.3-03.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN28[u]03.4-03.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN29[u]03.5-03.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN30[u]03.6-03.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN31[u]03.7-03.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN32[u]04.0-04.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN33[u]04.1-04.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN34[u]04.2-04.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN35[u]04.3-04.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN36[u]04.4-04.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN37[u]04.5-04.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN38[u]04.6-04.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN39[u]04.7-04.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN40[u]05.0-05.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN41[u]05.1-05.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN42[u]05.2-05.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN43[u]05.3-05.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN44[u]05.4-05.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN45[u]05.5-05.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN46[u]05.6-05.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN47[u]05.7-05.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN48[u]06.0-06.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN49[u]06.1-06.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN50[u]06.2-06.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN51[u]06.3-06.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN52[u]06.4-06.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN53[u]06.5-06.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN54[u]06.6-06.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN55[u]06.7-06.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN56[u]07.0-07.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN57[u]07.1-07.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN58[u]07.2-07.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN59[u]07.3-07.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN60[u]07.4-07.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN61[u]07.5-07.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN62[u]07.6-07.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN63[u]07.7-07.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN64[u]08.0-08.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN65[u]08.1-08.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN66[u]08.2-08.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN67[u]08.3-08.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN68[u]08.4-08.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN69[u]08.5-08.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN70[u]08.6-08.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN71[u]08.7-08.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN72[u]09.0-09.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN73[u]09.1-09.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN74[u]09.2-09.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN75[u]09.3-09.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN76[u]09.4-09.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN77[u]09.5-09.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN78[u]09.6-09.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN79[u]09.7-09.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN80[u]10.0-10.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN81[u]10.1-10.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN82[u]10.2-10.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN83[u]10.3-10.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN84[u]10.4-10.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN85[u]10.5-10.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN86[u]10.6-10.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN87[u]10.7-10.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN88[u]11.0-11.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN89[u]11.1-11.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN90[u]11.2-11.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN91[u]11.3-11.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN92[u]11.4-11.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN93[u]11.5-11.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN94[u]11.6-11.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN95[u]11.7-11.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN96[u]12.0-12.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN97[u]12.1-12.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN98[u]12.2-12.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN99[u]12.3-12.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN100[u]12.4-12.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN101[u]12.5-12.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN102[u]12.6-12.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN103[u]12.7-12.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN104[u]13.0-13.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN105[u]13.1-13.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN106[u]13.2-13.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN107[u]13.3-13.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN108[u]13.4-13.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN109[u]13.5-13.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN110[u]13.6-13.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN111[u]13.7-13.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN112[u]14.0-14.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN113[u]14.1-14.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN114[u]14.2-14.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN115[u]14.3-14.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN116[u]14.4-14.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN117[u]14.5-14.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN118[u]14.6-14.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN119[u]14.7-14.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN120[u]15.0-15.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN121[u]15.1-15.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN122[u]15.2-15.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN123[u]15.3-15.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN124[u]15.4-15.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN125[u]15.5-15.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN126[u]15.6-15.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN127[u]15.7-15.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN128[u]16.0-16.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN129[u]16.1-16.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN130[u]16.2-16.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN131[u]16.3-16.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN132[u]16.4-16.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN133[u]16.5-16.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN134[u]16.6-16.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN135[u]16.7-16.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN136[u]17.0-17.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN137[u]17.1-17.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN138[u]17.2-17.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN139[u]17.3-17.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN140[u]17.4-17.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN141[u]17.5-17.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN142[u]17.6-17.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN143[u]17.7-17.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN144[u]18.0-18.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN145[u]18.1-18.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN146[u]18.2-18.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN147[u]18.3-18.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN148[u]18.4-18.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN149[u]18.5-18.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN150[u]18.6-18.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN151[u]18.7-18.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN152[u]19.0-19.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN153[u]19.1-19.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN154[u]19.2-19.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN155[u]19.3-19.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN156[u]19.4-19.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN157[u]19.5-19.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN158[u]19.6-19.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN159[u]19.7-19.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN160[u]20.0-20.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN161[u]20.1-20.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN162[u]20.2-20.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN163[u]20.3-20.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN164[u]20.4-20.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN165[u]20.5-20.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN166[u]20.6-20.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN167[u]20.7-20.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN168[u]21.0-21.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN169[u]21.1-21.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN170[u]21.2-21.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN171[u]21.3-21.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN172[u]21.4-21.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN173[u]21.5-21.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN174[u]21.6-21.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN175[u]21.7-21.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN176[u]22.0-22.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN177[u]22.1-22.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN178[u]22.2-22.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN179[u]22.3-22.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN180[u]22.4-22.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN181[u]22.5-22.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN182[u]22.6-22.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN183[u]22.7-22.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN184[u]23.0-23.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN185[u]23.1-23.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN186[u]23.2-23.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN187[u]23.3-23.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN188[u]23.4-23.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN189[u]23.5-23.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN190[u]23.6-23.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN191[u]23.7-23.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN192[u]24.0-24.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN193[u]24.1-24.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN194[u]24.2-24.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN195[u]24.3-24.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN196[u]24.4-24.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN197[u]24.5-24.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN198[u]24.6-24.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN199[u]24.7-24.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN200[u]25.0-25.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN201[u]25.1-25.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN202[u]25.2-25.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN203[u]25.3-25.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN204[u]25.4-25.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN205[u]25.5-25.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN206[u]25.6-25.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN207[u]25.7-25.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN208[u]26.0-26.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN209[u]26.1-26.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN210[u]26.2-26.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN211[u]26.3-26.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN212[u]26.4-26.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN213[u]26.5-26.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN214[u]26.6-26.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN215[u]26.7-26.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN216[u]27.0-27.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN217[u]27.1-27.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN218[u]27.2-27.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN219[u]27.3-27.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN220[u]27.4-27.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN221[u]27.5-27.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN222[u]27.6-27.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN223[u]27.7-27.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN224[u]28.0-28.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN225[u]28.1-28.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN226[u]28.2-28.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN227[u]28.3-28.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN228[u]28.4-28.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN229[u]28.5-28.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN230[u]28.6-28.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN231[u]28.7-28.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN232[u]29.0-29.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN233[u]29.1-29.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN234[u]29.2-29.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN235[u]29.3-29.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN236[u]29.4-29.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN237[u]29.5-29.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN238[u]29.6-29.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN239[u]29.7-29.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN240[u]30.0-30.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN241[u]30.1-30.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN242[u]30.2-30.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN243[u]30.3-30.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN244[u]30.4-30.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN245[u]30.5-30.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN246[u]30.6-30.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN247[u]30.7-30.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN248[u]31.0-31.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN249[u]31.1-31.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN250[u]31.2-31.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN251[u]31.3-31.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN252[u]31.4-31.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN253[u]31.5-31.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN254[u]31.6-31.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN255[u]31.7-31.7[u]select + [v]0[opt]N + [v]1[opt]Y + [remark]
Define CSRR 5(country specific roaming restriction) lists to confine the roaming range of a subscriber.
The CSRR list defines the roaming restriction for 256 VPLMN ranges.
" + ::= { cSRRList 6 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.3.7 + cSRR6 OBJECT-TYPE + SYNTAX Opaque (SIZE (32)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "OPAQUE DECODE RULE: + [unit]VPLMN0[u]00.0-00.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN1[u]00.1-00.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN2[u]00.2-00.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN3[u]00.3-00.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN4[u]00.4-00.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN5[u]00.5-00.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN6[u]00.6-00.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN7[u]00.7-00.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN8[u]01.0-01.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN9[u]01.1-01.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN10[u]01.2-01.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN11[u]01.3-01.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN12[u]01.4-01.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN13[u]01.5-01.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN14[u]01.6-01.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN15[u]01.7-01.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN16[u]02.0-02.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN17[u]02.1-02.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN18[u]02.2-02.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN19[u]02.3-02.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN20[u]02.4-02.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN21[u]02.5-02.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN22[u]02.6-02.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN23[u]02.7-02.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN24[u]03.0-03.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN25[u]03.1-03.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN26[u]03.2-03.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN27[u]03.3-03.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN28[u]03.4-03.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN29[u]03.5-03.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN30[u]03.6-03.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN31[u]03.7-03.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN32[u]04.0-04.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN33[u]04.1-04.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN34[u]04.2-04.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN35[u]04.3-04.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN36[u]04.4-04.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN37[u]04.5-04.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN38[u]04.6-04.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN39[u]04.7-04.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN40[u]05.0-05.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN41[u]05.1-05.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN42[u]05.2-05.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN43[u]05.3-05.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN44[u]05.4-05.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN45[u]05.5-05.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN46[u]05.6-05.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN47[u]05.7-05.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN48[u]06.0-06.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN49[u]06.1-06.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN50[u]06.2-06.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN51[u]06.3-06.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN52[u]06.4-06.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN53[u]06.5-06.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN54[u]06.6-06.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN55[u]06.7-06.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN56[u]07.0-07.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN57[u]07.1-07.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN58[u]07.2-07.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN59[u]07.3-07.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN60[u]07.4-07.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN61[u]07.5-07.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN62[u]07.6-07.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN63[u]07.7-07.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN64[u]08.0-08.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN65[u]08.1-08.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN66[u]08.2-08.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN67[u]08.3-08.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN68[u]08.4-08.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN69[u]08.5-08.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN70[u]08.6-08.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN71[u]08.7-08.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN72[u]09.0-09.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN73[u]09.1-09.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN74[u]09.2-09.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN75[u]09.3-09.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN76[u]09.4-09.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN77[u]09.5-09.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN78[u]09.6-09.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN79[u]09.7-09.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN80[u]10.0-10.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN81[u]10.1-10.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN82[u]10.2-10.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN83[u]10.3-10.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN84[u]10.4-10.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN85[u]10.5-10.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN86[u]10.6-10.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN87[u]10.7-10.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN88[u]11.0-11.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN89[u]11.1-11.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN90[u]11.2-11.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN91[u]11.3-11.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN92[u]11.4-11.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN93[u]11.5-11.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN94[u]11.6-11.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN95[u]11.7-11.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN96[u]12.0-12.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN97[u]12.1-12.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN98[u]12.2-12.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN99[u]12.3-12.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN100[u]12.4-12.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN101[u]12.5-12.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN102[u]12.6-12.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN103[u]12.7-12.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN104[u]13.0-13.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN105[u]13.1-13.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN106[u]13.2-13.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN107[u]13.3-13.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN108[u]13.4-13.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN109[u]13.5-13.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN110[u]13.6-13.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN111[u]13.7-13.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN112[u]14.0-14.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN113[u]14.1-14.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN114[u]14.2-14.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN115[u]14.3-14.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN116[u]14.4-14.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN117[u]14.5-14.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN118[u]14.6-14.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN119[u]14.7-14.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN120[u]15.0-15.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN121[u]15.1-15.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN122[u]15.2-15.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN123[u]15.3-15.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN124[u]15.4-15.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN125[u]15.5-15.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN126[u]15.6-15.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN127[u]15.7-15.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN128[u]16.0-16.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN129[u]16.1-16.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN130[u]16.2-16.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN131[u]16.3-16.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN132[u]16.4-16.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN133[u]16.5-16.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN134[u]16.6-16.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN135[u]16.7-16.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN136[u]17.0-17.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN137[u]17.1-17.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN138[u]17.2-17.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN139[u]17.3-17.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN140[u]17.4-17.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN141[u]17.5-17.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN142[u]17.6-17.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN143[u]17.7-17.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN144[u]18.0-18.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN145[u]18.1-18.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN146[u]18.2-18.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN147[u]18.3-18.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN148[u]18.4-18.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN149[u]18.5-18.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN150[u]18.6-18.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN151[u]18.7-18.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN152[u]19.0-19.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN153[u]19.1-19.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN154[u]19.2-19.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN155[u]19.3-19.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN156[u]19.4-19.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN157[u]19.5-19.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN158[u]19.6-19.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN159[u]19.7-19.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN160[u]20.0-20.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN161[u]20.1-20.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN162[u]20.2-20.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN163[u]20.3-20.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN164[u]20.4-20.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN165[u]20.5-20.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN166[u]20.6-20.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN167[u]20.7-20.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN168[u]21.0-21.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN169[u]21.1-21.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN170[u]21.2-21.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN171[u]21.3-21.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN172[u]21.4-21.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN173[u]21.5-21.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN174[u]21.6-21.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN175[u]21.7-21.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN176[u]22.0-22.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN177[u]22.1-22.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN178[u]22.2-22.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN179[u]22.3-22.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN180[u]22.4-22.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN181[u]22.5-22.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN182[u]22.6-22.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN183[u]22.7-22.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN184[u]23.0-23.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN185[u]23.1-23.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN186[u]23.2-23.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN187[u]23.3-23.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN188[u]23.4-23.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN189[u]23.5-23.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN190[u]23.6-23.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN191[u]23.7-23.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN192[u]24.0-24.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN193[u]24.1-24.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN194[u]24.2-24.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN195[u]24.3-24.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN196[u]24.4-24.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN197[u]24.5-24.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN198[u]24.6-24.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN199[u]24.7-24.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN200[u]25.0-25.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN201[u]25.1-25.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN202[u]25.2-25.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN203[u]25.3-25.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN204[u]25.4-25.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN205[u]25.5-25.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN206[u]25.6-25.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN207[u]25.7-25.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN208[u]26.0-26.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN209[u]26.1-26.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN210[u]26.2-26.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN211[u]26.3-26.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN212[u]26.4-26.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN213[u]26.5-26.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN214[u]26.6-26.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN215[u]26.7-26.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN216[u]27.0-27.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN217[u]27.1-27.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN218[u]27.2-27.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN219[u]27.3-27.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN220[u]27.4-27.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN221[u]27.5-27.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN222[u]27.6-27.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN223[u]27.7-27.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN224[u]28.0-28.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN225[u]28.1-28.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN226[u]28.2-28.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN227[u]28.3-28.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN228[u]28.4-28.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN229[u]28.5-28.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN230[u]28.6-28.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN231[u]28.7-28.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN232[u]29.0-29.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN233[u]29.1-29.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN234[u]29.2-29.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN235[u]29.3-29.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN236[u]29.4-29.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN237[u]29.5-29.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN238[u]29.6-29.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN239[u]29.7-29.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN240[u]30.0-30.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN241[u]30.1-30.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN242[u]30.2-30.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN243[u]30.3-30.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN244[u]30.4-30.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN245[u]30.5-30.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN246[u]30.6-30.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN247[u]30.7-30.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN248[u]31.0-31.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN249[u]31.1-31.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN250[u]31.2-31.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN251[u]31.3-31.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN252[u]31.4-31.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN253[u]31.5-31.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN254[u]31.6-31.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN255[u]31.7-31.7[u]select + [v]0[opt]N + [v]1[opt]Y + [remark]
Define CSRR 6(country specific roaming restriction) lists to confine the roaming range of a subscriber.
The CSRR list defines the roaming restriction for 256 VPLMN ranges.
" + ::= { cSRRList 7 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.3.8 + cSRR7 OBJECT-TYPE + SYNTAX Opaque (SIZE (32)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "OPAQUE DECODE RULE: + [unit]VPLMN0[u]00.0-00.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN1[u]00.1-00.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN2[u]00.2-00.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN3[u]00.3-00.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN4[u]00.4-00.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN5[u]00.5-00.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN6[u]00.6-00.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN7[u]00.7-00.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN8[u]01.0-01.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN9[u]01.1-01.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN10[u]01.2-01.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN11[u]01.3-01.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN12[u]01.4-01.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN13[u]01.5-01.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN14[u]01.6-01.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN15[u]01.7-01.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN16[u]02.0-02.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN17[u]02.1-02.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN18[u]02.2-02.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN19[u]02.3-02.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN20[u]02.4-02.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN21[u]02.5-02.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN22[u]02.6-02.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN23[u]02.7-02.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN24[u]03.0-03.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN25[u]03.1-03.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN26[u]03.2-03.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN27[u]03.3-03.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN28[u]03.4-03.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN29[u]03.5-03.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN30[u]03.6-03.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN31[u]03.7-03.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN32[u]04.0-04.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN33[u]04.1-04.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN34[u]04.2-04.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN35[u]04.3-04.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN36[u]04.4-04.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN37[u]04.5-04.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN38[u]04.6-04.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN39[u]04.7-04.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN40[u]05.0-05.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN41[u]05.1-05.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN42[u]05.2-05.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN43[u]05.3-05.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN44[u]05.4-05.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN45[u]05.5-05.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN46[u]05.6-05.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN47[u]05.7-05.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN48[u]06.0-06.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN49[u]06.1-06.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN50[u]06.2-06.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN51[u]06.3-06.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN52[u]06.4-06.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN53[u]06.5-06.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN54[u]06.6-06.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN55[u]06.7-06.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN56[u]07.0-07.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN57[u]07.1-07.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN58[u]07.2-07.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN59[u]07.3-07.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN60[u]07.4-07.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN61[u]07.5-07.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN62[u]07.6-07.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN63[u]07.7-07.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN64[u]08.0-08.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN65[u]08.1-08.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN66[u]08.2-08.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN67[u]08.3-08.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN68[u]08.4-08.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN69[u]08.5-08.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN70[u]08.6-08.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN71[u]08.7-08.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN72[u]09.0-09.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN73[u]09.1-09.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN74[u]09.2-09.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN75[u]09.3-09.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN76[u]09.4-09.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN77[u]09.5-09.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN78[u]09.6-09.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN79[u]09.7-09.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN80[u]10.0-10.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN81[u]10.1-10.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN82[u]10.2-10.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN83[u]10.3-10.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN84[u]10.4-10.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN85[u]10.5-10.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN86[u]10.6-10.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN87[u]10.7-10.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN88[u]11.0-11.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN89[u]11.1-11.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN90[u]11.2-11.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN91[u]11.3-11.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN92[u]11.4-11.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN93[u]11.5-11.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN94[u]11.6-11.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN95[u]11.7-11.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN96[u]12.0-12.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN97[u]12.1-12.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN98[u]12.2-12.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN99[u]12.3-12.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN100[u]12.4-12.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN101[u]12.5-12.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN102[u]12.6-12.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN103[u]12.7-12.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN104[u]13.0-13.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN105[u]13.1-13.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN106[u]13.2-13.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN107[u]13.3-13.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN108[u]13.4-13.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN109[u]13.5-13.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN110[u]13.6-13.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN111[u]13.7-13.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN112[u]14.0-14.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN113[u]14.1-14.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN114[u]14.2-14.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN115[u]14.3-14.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN116[u]14.4-14.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN117[u]14.5-14.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN118[u]14.6-14.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN119[u]14.7-14.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN120[u]15.0-15.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN121[u]15.1-15.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN122[u]15.2-15.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN123[u]15.3-15.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN124[u]15.4-15.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN125[u]15.5-15.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN126[u]15.6-15.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN127[u]15.7-15.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN128[u]16.0-16.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN129[u]16.1-16.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN130[u]16.2-16.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN131[u]16.3-16.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN132[u]16.4-16.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN133[u]16.5-16.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN134[u]16.6-16.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN135[u]16.7-16.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN136[u]17.0-17.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN137[u]17.1-17.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN138[u]17.2-17.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN139[u]17.3-17.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN140[u]17.4-17.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN141[u]17.5-17.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN142[u]17.6-17.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN143[u]17.7-17.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN144[u]18.0-18.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN145[u]18.1-18.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN146[u]18.2-18.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN147[u]18.3-18.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN148[u]18.4-18.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN149[u]18.5-18.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN150[u]18.6-18.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN151[u]18.7-18.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN152[u]19.0-19.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN153[u]19.1-19.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN154[u]19.2-19.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN155[u]19.3-19.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN156[u]19.4-19.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN157[u]19.5-19.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN158[u]19.6-19.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN159[u]19.7-19.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN160[u]20.0-20.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN161[u]20.1-20.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN162[u]20.2-20.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN163[u]20.3-20.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN164[u]20.4-20.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN165[u]20.5-20.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN166[u]20.6-20.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN167[u]20.7-20.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN168[u]21.0-21.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN169[u]21.1-21.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN170[u]21.2-21.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN171[u]21.3-21.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN172[u]21.4-21.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN173[u]21.5-21.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN174[u]21.6-21.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN175[u]21.7-21.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN176[u]22.0-22.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN177[u]22.1-22.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN178[u]22.2-22.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN179[u]22.3-22.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN180[u]22.4-22.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN181[u]22.5-22.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN182[u]22.6-22.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN183[u]22.7-22.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN184[u]23.0-23.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN185[u]23.1-23.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN186[u]23.2-23.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN187[u]23.3-23.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN188[u]23.4-23.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN189[u]23.5-23.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN190[u]23.6-23.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN191[u]23.7-23.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN192[u]24.0-24.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN193[u]24.1-24.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN194[u]24.2-24.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN195[u]24.3-24.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN196[u]24.4-24.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN197[u]24.5-24.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN198[u]24.6-24.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN199[u]24.7-24.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN200[u]25.0-25.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN201[u]25.1-25.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN202[u]25.2-25.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN203[u]25.3-25.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN204[u]25.4-25.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN205[u]25.5-25.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN206[u]25.6-25.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN207[u]25.7-25.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN208[u]26.0-26.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN209[u]26.1-26.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN210[u]26.2-26.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN211[u]26.3-26.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN212[u]26.4-26.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN213[u]26.5-26.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN214[u]26.6-26.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN215[u]26.7-26.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN216[u]27.0-27.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN217[u]27.1-27.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN218[u]27.2-27.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN219[u]27.3-27.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN220[u]27.4-27.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN221[u]27.5-27.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN222[u]27.6-27.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN223[u]27.7-27.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN224[u]28.0-28.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN225[u]28.1-28.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN226[u]28.2-28.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN227[u]28.3-28.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN228[u]28.4-28.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN229[u]28.5-28.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN230[u]28.6-28.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN231[u]28.7-28.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN232[u]29.0-29.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN233[u]29.1-29.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN234[u]29.2-29.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN235[u]29.3-29.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN236[u]29.4-29.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN237[u]29.5-29.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN238[u]29.6-29.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN239[u]29.7-29.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN240[u]30.0-30.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN241[u]30.1-30.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN242[u]30.2-30.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN243[u]30.3-30.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN244[u]30.4-30.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN245[u]30.5-30.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN246[u]30.6-30.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN247[u]30.7-30.7[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN248[u]31.0-31.0[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN249[u]31.1-31.1[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN250[u]31.2-31.2[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN251[u]31.3-31.3[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN252[u]31.4-31.4[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN253[u]31.5-31.5[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN254[u]31.6-31.6[u]select + [v]0[opt]N + [v]1[opt]Y + [unit]VPLMN255[u]31.7-31.7[u]select + [v]0[opt]N + [v]1[opt]Y + [remark]
Define CSRR 7(country specific roaming restriction) lists to confine the roaming range of a subscriber.
The CSRR list defines the roaming restriction for 256 VPLMN ranges.
" + ::= { cSRRList 8 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.4 + rSZIList OBJECT IDENTIFIER ::= { parameter 4 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.4.1 + rSZITable OBJECT-TYPE + SYNTAX SEQUENCE OF RSZIEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Description." + ::= { rSZIList 1 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.4.1.1 + rSZIEntry OBJECT-TYPE + SYNTAX RSZIEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Description." + INDEX { rsziIndex } + ::= { rSZITable 1 } + + + RSZIEntry ::= + SEQUENCE { + rsziIndex + INTEGER, + rsziCC + OCTET STRING, + rsziNDC + OCTET STRING, + rsziZoneCode + INTEGER, + rsziRowStatus + RowStatus + } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.4.1.1.1 + rsziIndex OBJECT-TYPE + SYNTAX INTEGER (0..255) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:Index + Remark:RSZI (Regional Subscription Zone Identity) index number ranges from 0 to 255." + ::= { rSZIEntry 1 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.4.1.1.2 + rsziCC OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..4)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:CC + Remark:The Country Code of the regional subscription zone." + ::= { rSZIEntry 2 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.4.1.1.3 + rsziNDC OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..6)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:NDC + Remark:The National Destination Code of the regional subscription zone." + ::= { rSZIEntry 3 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.4.1.1.4 + rsziZoneCode OBJECT-TYPE + SYNTAX INTEGER (0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:Zone Code + Remark:The regional subscription zone code." + ::= { rSZIEntry 4 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.4.1.1.5 + rsziRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes" + ::= { rSZIEntry 5 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.5 + faxGSMBC OBJECT IDENTIFIER ::= { parameter 5 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.5.1 + faxGSMBCTable OBJECT-TYPE + SYNTAX SEQUENCE OF FaxGSMBCEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Description." + ::= { faxGSMBC 1 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.5.1.1 + faxGSMBCEntry OBJECT-TYPE + SYNTAX FaxGSMBCEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Description." + INDEX { fgIndex } + ::= { faxGSMBCTable 1 } + + + FaxGSMBCEntry ::= + SEQUENCE { + fgIndex + INTEGER, + fgBearerCapability + OCTET STRING, + fgRowStatus + RowStatus + } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.5.1.1.1 + fgIndex OBJECT-TYPE + SYNTAX INTEGER (0..15) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:Index + Remark:Index number of this Fax GSM Bearer Capability entry." + ::= { faxGSMBCEntry 1 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.5.1.1.2 + fgBearerCapability OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..14)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:Bearer Capability + Remark:Define the GSM Bearer Capability for fax service.
- Default = A3B88120156380" + ::= { faxGSMBCEntry 2 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.5.1.1.3 + fgRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes" + ::= { faxGSMBCEntry 3 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.6 + dataGSMBC OBJECT IDENTIFIER ::= { parameter 6 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.6.1 + dataGSMBCTable OBJECT-TYPE + SYNTAX SEQUENCE OF DataGSMBCEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Description." + ::= { dataGSMBC 1 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.6.1.1 + dataGSMBCEntry OBJECT-TYPE + SYNTAX DataGSMBCEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Description." + INDEX { dgIndex } + ::= { dataGSMBCTable 1 } + + + DataGSMBCEntry ::= + SEQUENCE { + dgIndex + INTEGER, + dgBearerCapability + OCTET STRING, + dgRowStatus + RowStatus + } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.6.1.1.1 + dgIndex OBJECT-TYPE + SYNTAX INTEGER (0..15) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:Index + Remark:Index number of this Data GSM Bearer Capability entry." + ::= { dataGSMBCEntry 1 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.6.1.1.2 + dgBearerCapability OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..14)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:Bearer Capability + Remark:Define the GSM Bearer Capability for data service.
- Default = A28881211563A8" + ::= { dataGSMBCEntry 2 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.6.1.1.3 + dgRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes" + ::= { dataGSMBCEntry 3 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.8 + uSSD OBJECT IDENTIFIER ::= { parameter 8 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.8.1 + uSSDFormatString OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..64)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:USSD Format + Remark:The access code of USSD service. Start with 2-3 digits of '*' or '#' . End with '#'. Separate sections by '*'.
Contents can be added:

- C/c = Service Code
- R/r = Router Indicator
- B = Blank
- S = Supplement Info

For example: **C3B*S#" + ::= { uSSD 1 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.8.2 + uGCsiServiceCode0 OBJECT-TYPE + SYNTAX INTEGER (0..9999) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:UG-CSI Service Code 0 + Remark:Service code for UG-CSI (USSD General - CAMEL Subscription Information). Prepaid subscriber dials service code to apply different prepaid services.
For example: Service Code = 111, prepaid user dials **1215111*# to enquire account info." + ::= { uSSD 2 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.8.3 + uGCsiGSMSCFAddr0 OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..18)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:UG-CSI SCF Address 0 + Remark:SCP address for UG-CSI (USSD General - CAMEL Subscription Information). The E.164 number of the SCP-MAP.
- Format = 91+CC+NDC+SN" + ::= { uSSD 3 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.8.4 + uGCsiServiceCode1 OBJECT-TYPE + SYNTAX INTEGER (0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:UG-CSI Service Code 1 + Remark:Service code for UG-CSI (USSD General - CAMEL Subscription Information). Prepaid subscriber dials service code to apply different prepaid services." + ::= { uSSD 4 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.8.5 + uGCsiGSMSCFAddr1 OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..18)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:UG-CSI SCF Address 1 + Remark:SCP address for UG-CSI (USSD General - CAMEL Subscription Information). The E.164 number of the SCP-MAP.
- Format = 91+CC+NDC+SN" + ::= { uSSD 5 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.8.6 + uGCsiServiceCode2 OBJECT-TYPE + SYNTAX INTEGER (0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:UG-CSI Service Code 2 + Remark:Service code for UG-CSI (USSD General - CAMEL Subscription Information). Prepaid subscriber dials service code to apply different prepaid services." + ::= { uSSD 6 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.8.7 + uGCsiGSMSCFAddr2 OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..18)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:UG-CSI SCF Address 2 + Remark:SCP address for UG-CSI (USSD General - CAMEL Subscription Information). The E.164 number of the SCP-MAP.
- Format = 91+CC+NDC+SN" + ::= { uSSD 7 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.8.8 + uGCsiServiceCode3 OBJECT-TYPE + SYNTAX INTEGER (0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:UG-CSI Service Code 3 + Remark:Service code for UG-CSI (USSD General - CAMEL Subscription Information). Prepaid subscriber dials service code to apply different prepaid services." + ::= { uSSD 8 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.8.9 + uGCsiGSMSCFAddr3 OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..18)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Name:UG-CSI SCF Address 3 + Remark:SCP address for UG-CSI (USSD General - CAMEL Subscription Information). The E.164 number of the SCP-MAP.
- Format = 91+CC+NDC+SN" + ::= { uSSD 9 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.20 + ussdEAE OBJECT IDENTIFIER ::= { parameter 10 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.20.1 + ussdEAETable OBJECT-TYPE + SYNTAX SEQUENCE OF UssdEAEEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Name:USSD EAE" + ::= { ussdEAE 1 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.20.1.1 + ussdEAEEntry OBJECT-TYPE + SYNTAX UssdEAEEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "level:1 Name:USSD EAE" + INDEX { ueIndex } + ::= { ussdEAETable 1 } + + + UssdEAEEntry ::= + SEQUENCE { + ueIndex + INTEGER, + ueServiceCode + INTEGER, + ueServiceNum + OCTET STRING, + ueRowStatus + RowStatus + } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.20.1.1.1 + ueIndex OBJECT-TYPE + SYNTAX INTEGER (0..127) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:Index + Remark:USSD EAE (Extended Application Entity) index number ranges from 0 to 127." + ::= { ussdEAEEntry 1 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.20.1.1.2 + ueServiceCode OBJECT-TYPE + SYNTAX INTEGER (0..9999) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:Service Code + Remark:Subscriber dials service code to access different USSD services." + ::= { ussdEAEEntry 2 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.20.1.1.3 + ueServiceNum OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..9)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:Service Number + Remark:Enter the identical Service Number as that set in SMPP configuration to connect with the third party USSD server." + ::= { ussdEAEEntry 3 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.20.1.1.4 + ueRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes" + ::= { ussdEAEEntry 4 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.21 + epsAPN OBJECT IDENTIFIER ::= { parameter 11 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.21.1 + epsAPNTable OBJECT-TYPE + SYNTAX SEQUENCE OF EpsAPNEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Name:EPS APN" + ::= { epsAPN 1 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.21.1.1 + epsAPNEntry OBJECT-TYPE + SYNTAX EpsAPNEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "level:1 Name:EPS APN" + INDEX { apnIndex } + ::= { epsAPNTable 1 } + + + EpsAPNEntry ::= + SEQUENCE { + apnIndex + INTEGER, + apnContextId + INTEGER, + apnPDNType + INTEGER, + apnQOSClassId + INTEGER, + apnVPLMNAllowed + INTEGER, + apnVisitedNetworkId + OCTET STRING, + apnPDNGWAllocationType + INTEGER, + apnPDNGWIdentity + OCTET STRING, + apnAMBRUL + INTEGER, + apnAMBRDL + INTEGER, + apnChargingCharacteristics + OCTET STRING, + apnServiceSelection + OCTET STRING, + apnOIReplacement + OCTET STRING, + apnRowStatus + RowStatus + } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.21.1.1.1 + apnIndex OBJECT-TYPE + SYNTAX INTEGER (0..15) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:Index" + ::= { epsAPNEntry 1 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.21.1.1.2 + apnContextId OBJECT-TYPE + SYNTAX INTEGER (0..127) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:Context Id" + ::= { epsAPNEntry 2 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.21.1.1.3 + apnPDNType OBJECT-TYPE + SYNTAX INTEGER + { + IPv4(0), + IPv6(1), + IPv4v6(2), + IPv4orIPv6(3) + } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:PDN Type" + DEFVAL { IPv4 } + ::= { epsAPNEntry 3 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.21.1.1.4 + apnQOSClassId OBJECT-TYPE + SYNTAX INTEGER (0..16) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:Qos Class Id" + ::= { epsAPNEntry 4 } + -- 1.3.6.1.4.1.1379.2.3.3.3.2.21.1.1.5 + apnVPLMNAllowed OBJECT-TYPE + SYNTAX INTEGER + { + NOTALLOWED(0), + ALLOWED(1) + } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter" + DEFVAL { ALLOWED } + ::= { epsAPNEntry 5 } + -- 1.3.6.1.4.1.1379.2.3.3.3.2.21.1.1.6 + apnVisitedNetworkId OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..128)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter" + ::= { epsAPNEntry 6 } + + apnPDNGWAllocationType OBJECT-TYPE + SYNTAX INTEGER + { + STATIC(0), + DYNAMIC(1) + } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter" + DEFVAL { DYNAMIC } + ::= { epsAPNEntry 7 } + + apnPDNGWIdentity OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..32)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter" + ::= { epsAPNEntry 8 } + + apnAMBRUL OBJECT-TYPE + SYNTAX INTEGER (0..2147483647) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:AMBR UL" + ::= { epsAPNEntry 9 } + + apnAMBRDL OBJECT-TYPE + SYNTAX INTEGER (0..2147483647) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:AMBR DL" + ::= { epsAPNEntry 10 } + + apnChargingCharacteristics OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..32)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter" + ::= { epsAPNEntry 11 } + + apnServiceSelection OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..32)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:Service Selection" + ::= { epsAPNEntry 12 } + + apnOIReplacement OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..128)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter" + ::= { epsAPNEntry 13 } + + apnRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes" + ::= { epsAPNEntry 14 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.22 + epsQOS OBJECT IDENTIFIER ::= { parameter 12 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.22.1 + epsQOSTable OBJECT-TYPE + SYNTAX SEQUENCE OF EpsQOSEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Name:EPS QOS" + ::= { epsQOS 1 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.22.1.1 + epsQOSEntry OBJECT-TYPE + SYNTAX EpsQOSEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "level:1 Name:EPS QOS" + INDEX { qosIndex } + ::= { epsQOSTable 1 } + + + EpsQOSEntry ::= + SEQUENCE { + qosIndex + INTEGER, + qosQosClassId + INTEGER, + qosPriorityLevel + INTEGER, + qosPreEmptionCapability + INTEGER, + qosPreEmptionVulnerability + INTEGER, + qosRowStatus + RowStatus + } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.22.1.1.1 + qosIndex OBJECT-TYPE + SYNTAX INTEGER (0..15) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:Index" + ::= { epsQOSEntry 1 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.21.1.1.2 + qosQosClassId OBJECT-TYPE + SYNTAX INTEGER (0..32) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:Qos Class Id" + ::= { epsQOSEntry 2 } + + qosPriorityLevel OBJECT-TYPE + SYNTAX INTEGER (0..32) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:Priority Level" + ::= { epsQOSEntry 3 } + + qosPreEmptionCapability OBJECT-TYPE + SYNTAX INTEGER + { + Disable(0), + Enable(1) + } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:PreEmptionCapability" + DEFVAL { Disable } + ::= { epsQOSEntry 4 } + + qosPreEmptionVulnerability OBJECT-TYPE + SYNTAX INTEGER + { + Disable(0), + Enable(1) + } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:PreEmptionVulnerability" + DEFVAL { Disable } + ::= { epsQOSEntry 5 } + + qosRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes" + ::= { epsQOSEntry 6 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.23 + epsTPL OBJECT IDENTIFIER ::= { parameter 13 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.23.1 + epsTPLTable OBJECT-TYPE + SYNTAX SEQUENCE OF EpsTPLEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Name:EPS TPL" + ::= { epsTPL 1 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.23.1.1 + epsTPLEntry OBJECT-TYPE + SYNTAX EpsTPLEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "level:1 Name:EPS TPL" + INDEX { tplIndex } + ::= { epsTPLTable 1 } + + + EpsTPLEntry ::= + SEQUENCE { + tplIndex + INTEGER, + tplName + OCTET STRING, + tplUeAmbrUL + INTEGER, + tplUeAmbrDL + INTEGER, + tplUeApnOiReplacement + OCTET STRING, + tplRfsp + INTEGER, + tplRauTauTimer + INTEGER, + tplChargingCharacteristic + OCTET STRING, + tplRowStatus + RowStatus + } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.23.1.1.1 + tplIndex OBJECT-TYPE + SYNTAX INTEGER (0..15) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:Index" + ::= { epsTPLEntry 1 } + + -- 1.3.6.1.4.1.1379.2.3.3.3.2.23.1.1.2 + tplName OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..32)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:Template name" + ::= { epsTPLEntry 2 } + + tplUeAmbrUL OBJECT-TYPE + SYNTAX INTEGER (0..2147483647) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:UE AMBR UL" + ::= { epsTPLEntry 3 } + + tplUeAmbrDL OBJECT-TYPE + SYNTAX INTEGER (0..2147483647) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes Name:UE AMBR DL" + ::= { epsTPLEntry 4 } + + tplUeApnOiReplacement OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..128)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Description." + ::= { epsTPLEntry 5 } + + tplRfsp OBJECT-TYPE + SYNTAX INTEGER (0..127) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Description." + ::= { epsTPLEntry 6 } + + tplRauTauTimer OBJECT-TYPE + SYNTAX INTEGER (0..255) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Description." + ::= { epsTPLEntry 7 } + + tplChargingCharacteristic OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..128)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Description." + ::= { epsTPLEntry 8 } + + tplRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key Parameter:Yes" + ::= { epsTPLEntry 9 } + + + -- 1.3.6.1.4.1.1379.2.3.3.3.3 + hlrtraps OBJECT IDENTIFIER ::= { hlr 3 } + + -- Severity Object Definition + severity OBJECT-TYPE + SYNTAX INTEGER { + critical(1), + major(2), + minor(3), + warning(4), + event(5) + } + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The severity level of the trap." + ::= { hlr 4 } + + linkDown NOTIFICATION-TYPE + OBJECTS { severity } + STATUS current + DESCRIPTION + "A trap indicating that a link is down." + ::= { hlrtraps 1 } + + linkUp NOTIFICATION-TYPE + OBJECTS { severity } + STATUS current + DESCRIPTION + "A trap indicating that a link is up." + ::= { hlrtraps 2 } + + authenticationFailure NOTIFICATION-TYPE + OBJECTS { severity } + STATUS current + DESCRIPTION + "A trap indicating an authentication failure." + ::= { hlrtraps 3 } + +END +-- +-- CINTEL-HLR-MIB.my +-- diff --git a/sshsvc/mibs/CINTEL-HLR-MIB.smidb b/sshsvc/mibs/CINTEL-HLR-MIB.smidb new file mode 100644 index 0000000000000000000000000000000000000000..411ce61acb5e793186ab93a5ffdd57f906d661b6 GIT binary patch literal 214132 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 literal 0 HcmV?d00001 diff --git a/sshsvc/mibs/CINTEL-MIB.my b/sshsvc/mibs/CINTEL-MIB.my new file mode 100644 index 00000000..378eedd3 --- /dev/null +++ b/sshsvc/mibs/CINTEL-MIB.my @@ -0,0 +1,656 @@ +-- +-- CINTEL-MIB.my +-- MIB generated by MG-SOFT Visual MIB Builder Version 7.0 Build 209 +-- Friday, December 16, 2011 at 15:52:13 +-- + + CINTEL-MIB DEFINITIONS ::= BEGIN + + IMPORTS + enterprises, TimeTicks, MODULE-IDENTITY + FROM SNMPv2-SMI + TEXTUAL-CONVENTION + FROM SNMPv2-TC; + + + -- 1.3.6.1.4.1.1379.2 + cintelSS MODULE-IDENTITY + LAST-UPDATED "201706041222Z" -- June 04, 2017 at 12:22 GMT + ORGANIZATION + "CINTEL" + CONTACT-INFO + "cintel + support@cintel.com.cn" + DESCRIPTION + "The MIB module for cintel's Softswitch products." + REVISION "201706041223Z" -- June 04, 2017 at 12:23 GMT + DESCRIPTION + "This is the first release version of the MIB" + ::= { cintelNS 2 } + + + +-- +-- Type definitions +-- + + AdminStateChoices ::= INTEGER + { + locked(0), + unlocked(1), + shutDown(2) + } + + OperStateChoices ::= INTEGER + { + disable(0), + enable(1) + } + + AvailStateChoices ::= INTEGER + { + inTest(0), + failed(1), + powerOff(2), + offLine(3), + onLine(4), + dependency(5), + degraded(6), + notInstalled(7) + } + + +-- +-- Textual conventions +-- + +-- TEXTUAL-CONVENTION MACRO ::= +-- BEGIN +-- TYPE NOTATION ::= +-- DisplayPart +-- "STATUS" Status +-- "DESCRIPTION" Text +-- ReferPart +-- "SYNTAX" Syntax +-- +-- VALUE NOTATION ::= +-- value(VALUE Syntax) +-- +-- DisplayPart ::= +-- "DISPLAY-HINT" Text +-- | empty +-- +-- Status ::= +-- "current" +-- | "deprecated" +-- | "obsolete" +-- +-- ReferPart ::= +-- "REFERENCE" Text +-- | empty +-- +-- -- -- uses the NVT ASCII character set +-- Text ::= """" string """" +-- +-- Syntax ::= +-- type(ObjectSyntax) +-- | "BITS" "{" Kibbles "}" +-- Kibbles ::= +-- Kibble +-- | Kibbles "," Kibble +-- Kibble ::= +-- identifier "(" nonNegativeNumber ")" +-- END + DisplayString8 ::= TEXTUAL-CONVENTION + DISPLAY-HINT + "8a" + STATUS current + DESCRIPTION + "Represents textual information taken from the NVT ASCII + character set, as defined in pages 4, 10-11 of RFC 854. + + To summarize RFC 854, the NVT ASCII repertoire specifies: + + - the use of character codes 0-127 (decimal) + + - the graphics characters (32-126) are interpreted as + US ASCII + + - NUL, LF, CR, BEL, BS, HT, VT and FF have the special + meanings specified in RFC 854 + + - the other 25 codes have no standard interpretation + + - the sequence 'CR LF' means newline + + - the sequence 'CR NUL' means carriage-return + + - an 'LF' not preceded by a 'CR' means moving to the + same column on the next line. + + - the sequence 'CR x' for any x other than LF or NUL is + illegal. (Note that this also means that a string may + end with either 'CR LF' or 'CR NUL', but not with CR.) + + Any object defined using this syntax may not exceed 255 + characters in length." + SYNTAX OCTET STRING (SIZE (0..8)) + + DisplayString16 ::= TEXTUAL-CONVENTION + DISPLAY-HINT + "16a" + STATUS current + DESCRIPTION + "A version of DisplayString that contains only 16 characters most." + SYNTAX OCTET STRING (SIZE (0..16)) + + DisplayString32 ::= TEXTUAL-CONVENTION + DISPLAY-HINT + "32a" + STATUS current + DESCRIPTION + "A version of DisplayString that contains only 32 characters most." + SYNTAX OCTET STRING (SIZE (0..32)) + + DisplayString64 ::= TEXTUAL-CONVENTION + DISPLAY-HINT + "64a" + STATUS current + DESCRIPTION + "A version of DisplayString that contains only 64 characters most." + SYNTAX OCTET STRING (SIZE (0..64)) + + DisplayString ::= TEXTUAL-CONVENTION + DISPLAY-HINT + "255a" + STATUS current + DESCRIPTION + "A version of DisplayString that contains only 255 characters most." + SYNTAX OCTET STRING (SIZE (0..255)) + + RowStatus ::= TEXTUAL-CONVENTION + STATUS current + DESCRIPTION + "The RowStatus textual convention is used to manage the + creation and deletion of conceptual rows, and is used as the + value of the SYNTAX clause for the status column of a + conceptual row (as described in Section 7.7.1 of [2].) + + The status column has six defined values: + + - `active', which indicates that the conceptual row is + available for use by the managed device; + + - `notInService', which indicates that the conceptual + row exists in the agent, but is unavailable for use by + the managed device (see NOTE below); + + - `notReady', which indicates that the conceptual row + exists in the agent, but is missing information + necessary in order to be available for use by the + managed device; + + - `createAndGo', which is supplied by a management + station wishing to create a new instance of a + conceptual row and to have its status automatically set + to active, making it available for use by the managed + device; + + - `createAndWait', which is supplied by a management + station wishing to create a new instance of a + conceptual row (but not make it available for use by + the managed device); and, + + - `destroy', which is supplied by a management station + wishing to delete all of the instances associated with + an existing conceptual row. + + Whereas five of the six values (all except `notReady') may + be specified in a management protocol set operation, only + three values will be returned in response to a management + protocol retrieval operation: `notReady', `notInService' or + `active'. That is, when queried, an existing conceptual row + has only three states: it is either available for use by + the managed device (the status column has value `active'); + it is not available for use by the managed device, though + the agent has sufficient information to make it so (the + status column has value `notInService'); or, it is not + available for use by the managed device, and an attempt to + make it so would fail because the agent has insufficient + information (the state column has value `notReady'). + + NOTE WELL + + This textual convention may be used for a MIB table, + irrespective of whether the values of that table's + conceptual rows are able to be modified while it is + active, or whether its conceptual rows must be taken + out of service in order to be modified. That is, it is + the responsibility of the DESCRIPTION clause of the + status column to specify whether the status column must + not be `active' in order for the value of some other + column of the same conceptual row to be modified. If + such a specification is made, affected columns may be + changed by an SNMP set PDU if the RowStatus would not + be equal to `active' either immediately before or after + processing the PDU. In other words, if the PDU also + contained a varbind that would change the RowStatus + value, the column in question may be changed if the + RowStatus was not equal to `active' as the PDU was + received, or if the varbind sets the status to a value + other than 'active'. + + + Also note that whenever any elements of a row exist, the + RowStatus column must also exist. + + To summarize the effect of having a conceptual row with a + status column having a SYNTAX clause value of RowStatus, + consider the following state diagram: + + + STATE + +--------------+-----------+-------------+------------- + | A | B | C | D + | |status col.|status column| + |status column | is | is |status column + ACTION |does not exist| notReady | notInService| is active + --------------+--------------+-----------+-------------+------------- + set status |noError ->D|inconsist- |inconsistent-|inconsistent- + column to | or | entValue| Value| Value + createAndGo |inconsistent- | | | + | Value| | | + --------------+--------------+-----------+-------------+------------- + set status |noError see 1|inconsist- |inconsistent-|inconsistent- + column to | or | entValue| Value| Value + createAndWait |wrongValue | | | + --------------+--------------+-----------+-------------+------------- + set status |inconsistent- |inconsist- |noError |noError + column to | Value| entValue| | + active | | | | + | | or | | + | | | | + | |see 2 ->D| ->D| ->D + --------------+--------------+-----------+-------------+------------- + set status |inconsistent- |inconsist- |noError |noError ->C + column to | Value| entValue| | + notInService | | | | + | | or | | or + | | | | + | |see 3 ->C| ->C|wrongValue + --------------+--------------+-----------+-------------+------------- + set status |noError |noError |noError |noError + column to | | | | + destroy | ->A| ->A| ->A| ->A + --------------+--------------+-----------+-------------+------------- + set any other |see 4 |noError |noError |see 5 + column to some| | | | + value | | see 1| ->C| ->D + --------------+--------------+-----------+-------------+------------- + + (1) goto B or C, depending on information available to the + agent. + + (2) if other variable bindings included in the same PDU, + provide values for all columns which are missing but + required, then return noError and goto D. + + (3) if other variable bindings included in the same PDU, + provide values for all columns which are missing but + required, then return noError and goto C. + + (4) at the discretion of the agent, the return value may be + either: + + inconsistentName: because the agent does not choose to + create such an instance when the corresponding + RowStatus instance does not exist, or + + inconsistentValue: if the supplied value is + inconsistent with the state of some other MIB object's + value, or + + noError: because the agent chooses to create the + instance. + + If noError is returned, then the instance of the status + column must also be created, and the new state is B or C, + depending on the information available to the agent. If + inconsistentName or inconsistentValue is returned, the row + remains in state A. + + (5) depending on the MIB definition for the column/table, + either noError or inconsistentValue may be returned. + + NOTE: Other processing of the set request may result in a + response other than noError being returned, e.g., + wrongValue, noCreation, etc. + + + Conceptual Row Creation + + There are four potential interactions when creating a + conceptual row: selecting an instance-identifier which is + not in use; creating the conceptual row; initializing any + objects for which the agent does not supply a default; and, + making the conceptual row available for use by the managed + device. + + Interaction 1: Selecting an Instance-Identifier + + The algorithm used to select an instance-identifier varies + for each conceptual row. In some cases, the instance- + identifier is semantically significant, e.g., the + destination address of a route, and a management station + selects the instance-identifier according to the semantics. + + In other cases, the instance-identifier is used solely to + distinguish conceptual rows, and a management station + without specific knowledge of the conceptual row might + examine the instances present in order to determine an + unused instance-identifier. (This approach may be used, but + it is often highly sub-optimal; however, it is also a + questionable practice for a naive management station to + attempt conceptual row creation.) + + Alternately, the MIB module which defines the conceptual row + might provide one or more objects which provide assistance + in determining an unused instance-identifier. For example, + if the conceptual row is indexed by an integer-value, then + an object having an integer-valued SYNTAX clause might be + defined for such a purpose, allowing a management station to + issue a management protocol retrieval operation. In order + to avoid unnecessary collisions between competing management + stations, `adjacent' retrievals of this object should be + different. + + Finally, the management station could select a pseudo-random + number to use as the index. In the event that this index + was already in use and an inconsistentValue was returned in + response to the management protocol set operation, the + management station should simply select a new pseudo-random + number and retry the operation. + + A MIB designer should choose between the two latter + algorithms based on the size of the table (and therefore the + efficiency of each algorithm). For tables in which a large + number of entries are expected, it is recommended that a MIB + object be defined that returns an acceptable index for + creation. For tables with small numbers of entries, it is + recommended that the latter pseudo-random index mechanism be + used. + + + Interaction 2: Creating the Conceptual Row + + Once an unused instance-identifier has been selected, the + management station determines if it wishes to create and + activate the conceptual row in one transaction or in a + negotiated set of interactions. + + Interaction 2a: Creating and Activating the Conceptual Row + + The management station must first determine the column + requirements, i.e., it must determine those columns for + which it must or must not provide values. Depending on the + complexity of the table and the management station's + knowledge of the agent's capabilities, this determination + can be made locally by the management station. Alternately, + the management station issues a management protocol get + operation to examine all columns in the conceptual row that + it wishes to create. In response, for each column, there + are three possible outcomes: + + - a value is returned, indicating that some other + management station has already created this conceptual + row. We return to interaction 1. + + - the exception `noSuchInstance' is returned, + indicating that the agent implements the object-type + associated with this column, and that this column in at + least one conceptual row would be accessible in the MIB + view used by the retrieval were it to exist. For those + columns to which the agent provides read-create access, + the `noSuchInstance' exception tells the management + station that it should supply a value for this column + when the conceptual row is to be created. + + - the exception `noSuchObject' is returned, indicating + that the agent does not implement the object-type + associated with this column or that there is no + conceptual row for which this column would be + accessible in the MIB view used by the retrieval. As + such, the management station can not issue any + management protocol set operations to create an + instance of this column. + + Once the column requirements have been determined, a + management protocol set operation is accordingly issued. + This operation also sets the new instance of the status + column to `createAndGo'. + + When the agent processes the set operation, it verifies that + it has sufficient information to make the conceptual row + available for use by the managed device. The information + available to the agent is provided by two sources: the + management protocol set operation which creates the + conceptual row, and, implementation-specific defaults + supplied by the agent (note that an agent must provide + implementation-specific defaults for at least those objects + which it implements as read-only). If there is sufficient + information available, then the conceptual row is created, a + `noError' response is returned, the status column is set to + `active', and no further interactions are necessary (i.e., + interactions 3 and 4 are skipped). If there is insufficient + information, then the conceptual row is not created, and the + set operation fails with an error of `inconsistentValue'. + On this error, the management station can issue a management + protocol retrieval operation to determine if this was + because it failed to specify a value for a required column, + or, because the selected instance of the status column + already existed. In the latter case, we return to + interaction 1. In the former case, the management station + can re-issue the set operation with the additional + information, or begin interaction 2 again using + `createAndWait' in order to negotiate creation of the + conceptual row. + + NOTE WELL + + Regardless of the method used to determine the column + requirements, it is possible that the management + station might deem a column necessary when, in fact, + the agent will not allow that particular columnar + instance to be created or written. In this case, the + management protocol set operation will fail with an + error such as `noCreation' or `notWritable'. In this + case, the management station decides whether it needs + to be able to set a value for that particular columnar + instance. If not, the management station re-issues the + management protocol set operation, but without setting + a value for that particular columnar instance; + otherwise, the management station aborts the row + creation algorithm. + + Interaction 2b: Negotiating the Creation of the Conceptual + Row + + The management station issues a management protocol set + operation which sets the desired instance of the status + column to `createAndWait'. If the agent is unwilling to + process a request of this sort, the set operation fails with + an error of `wrongValue'. (As a consequence, such an agent + must be prepared to accept a single management protocol set + operation, i.e., interaction 2a above, containing all of the + columns indicated by its column requirements.) Otherwise, + the conceptual row is created, a `noError' response is + returned, and the status column is immediately set to either + `notInService' or `notReady', depending on whether it has + sufficient information to make the conceptual row available + for use by the managed device. If there is sufficient + information available, then the status column is set to + `notInService'; otherwise, if there is insufficient + information, then the status column is set to `notReady'. + Regardless, we proceed to interaction 3. + + Interaction 3: Initializing non-defaulted Objects + + The management station must now determine the column + requirements. It issues a management protocol get operation + to examine all columns in the created conceptual row. In + the response, for each column, there are three possible + outcomes: + + - a value is returned, indicating that the agent + implements the object-type associated with this column + and had sufficient information to provide a value. For + those columns to which the agent provides read-create + access (and for which the agent allows their values to + be changed after their creation), a value return tells + the management station that it may issue additional + management protocol set operations, if it desires, in + order to change the value associated with this column. + + - the exception `noSuchInstance' is returned, + indicating that the agent implements the object-type + associated with this column, and that this column in at + least one conceptual row would be accessible in the MIB + view used by the retrieval were it to exist. However, + the agent does not have sufficient information to + provide a value, and until a value is provided, the + conceptual row may not be made available for use by the + managed device. For those columns to which the agent + provides read-create access, the `noSuchInstance' + exception tells the management station that it must + issue additional management protocol set operations, in + order to provide a value associated with this column. + + - the exception `noSuchObject' is returned, indicating + that the agent does not implement the object-type + associated with this column or that there is no + conceptual row for which this column would be + accessible in the MIB view used by the retrieval. As + such, the management station can not issue any + management protocol set operations to create an + instance of this column. + + If the value associated with the status column is + `notReady', then the management station must first deal with + all `noSuchInstance' columns, if any. Having done so, the + value of the status column becomes `notInService', and we + proceed to interaction 4. + + Interaction 4: Making the Conceptual Row Available + + Once the management station is satisfied with the values + associated with the columns of the conceptual row, it issues + a management protocol set operation to set the status column + to `active'. If the agent has sufficient information to + make the conceptual row available for use by the managed + device, the management protocol set operation succeeds (a + `noError' response is returned). Otherwise, the management + protocol set operation fails with an error of + `inconsistentValue'. + + + NOTE WELL + + A conceptual row having a status column with value + `notInService' or `notReady' is unavailable to the + managed device. As such, it is possible for the + managed device to create its own instances during the + time between the management protocol set operation + which sets the status column to `createAndWait' and the + management protocol set operation which sets the status + column to `active'. In this case, when the management + protocol set operation is issued to set the status + column to `active', the values held in the agent + supersede those used by the managed device. + + If the management station is prevented from setting the + status column to `active' (e.g., due to management station + or network failure) the conceptual row will be left in the + `notInService' or `notReady' state, consuming resources + indefinitely. The agent must detect conceptual rows that + have been in either state for an abnormally long period of + time and remove them. It is the responsibility of the + DESCRIPTION clause of the status column to indicate what an + abnormally long period of time would be. This period of + time should be long enough to allow for human response time + (including `think time') between the creation of the + conceptual row and the setting of the status to `active'. + In the absense of such information in the DESCRIPTION + clause, it is suggested that this period be approximately 5 + minutes in length. This removal action applies not only to + newly-created rows, but also to previously active rows which + are set to, and left in, the notInService state for a + prolonged period exceeding that which is considered normal + for such a conceptual row. + + + Conceptual Row Suspension + + When a conceptual row is `active', the management station + may issue a management protocol set operation which sets the + instance of the status column to `notInService'. If the + agent is unwilling to do so, the set operation fails with an + error of `wrongValue'. Otherwise, the conceptual row is + taken out of service, and a `noError' response is returned. + It is the responsibility of the DESCRIPTION clause of the + status column to indicate under what circumstances the + status column should be taken out of service (e.g., in order + for the value of some other column of the same conceptual + row to be modified). + + + Conceptual Row Deletion + + For deletion of conceptual rows, a management protocol set + operation is issued which sets the instance of the status + column to `destroy'. This request may be made regardless of + the current value of the status column (e.g., it is possible + to delete conceptual rows which are either `notReady', + `notInService' or `active'.) If the operation succeeds, + then all instances associated with the conceptual row are + immediately removed." + SYNTAX INTEGER + { + active(1), + notInService(2), + notReady(3), + createAndGo(4), + createAndWait(5), + destroy(6) + } + +-- the following two values are states: +-- these values may be read or written +-- the following value is a state: +-- this value may be read, but not written +-- the following three values are +-- actions: these values may be written, +-- but are never read + TimeStamp ::= TEXTUAL-CONVENTION + STATUS current + DESCRIPTION + "The value of the sysUpTime object at which a specific + occurrence happened. The specific occurrence must be + defined in the description of any object defined using this + type." + SYNTAX TimeTicks + + +-- +-- Node definitions +-- + + -- 1.3.6.1.4.1.1379 + cintelNS OBJECT IDENTIFIER ::= { enterprises 1379 } + + + + END + +-- +-- CINTEL-MIB.my +-- diff --git a/sshsvc/mibs/CINTEL-MIB.smidb b/sshsvc/mibs/CINTEL-MIB.smidb new file mode 100644 index 0000000000000000000000000000000000000000..7ff6e9b4c032619429e0d8b5f5e77a727d6aa002 GIT binary patch literal 29052 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 literal 0 HcmV?d00001 From b7db915859f52198c8a9b727eba0ea7fc412b68f Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 23 Sep 2024 17:30:53 +0800 Subject: [PATCH 02/17] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E8=B7=9F?= =?UTF-8?q?=E8=B8=AA=E4=BB=BB=E5=8A=A1pcap=E6=96=87=E4=BB=B6=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/trace/controller/trace_task.go | 24 ++++++++++++++++++++++ src/modules/trace/trace.go | 4 ++++ 2 files changed, 28 insertions(+) diff --git a/src/modules/trace/controller/trace_task.go b/src/modules/trace/controller/trace_task.go index 7598c567..fc912eab 100644 --- a/src/modules/trace/controller/trace_task.go +++ b/src/modules/trace/controller/trace_task.go @@ -1,6 +1,9 @@ package controller import ( + "fmt" + "path/filepath" + "runtime" "strings" "be.ems/src/framework/i18n" @@ -129,3 +132,24 @@ func (s *TraceTaskController) Remove(c *gin.Context) { msg := i18n.TTemplate(language, "app.common.deleteSuccess", map[string]any{"num": rows}) c.JSON(200, result.OkMsg(msg)) } + +// 跟踪任务文件 +// +// GET /filePull +func (s *TraceTaskController) FilePull(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var querys struct { + TraceId string `form:"traceId" binding:"required"` + } + if err := c.ShouldBindQuery(&querys); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + fileName := fmt.Sprintf("task_%s.pcap", querys.TraceId) + localFilePath := filepath.Join("/tmp/omc/trace", fileName) + if runtime.GOOS == "windows" { + localFilePath = fmt.Sprintf("C:%s", localFilePath) + } + c.FileAttachment(localFilePath, fileName) +} diff --git a/src/modules/trace/trace.go b/src/modules/trace/trace.go index db3b777c..b7e4b399 100644 --- a/src/modules/trace/trace.go +++ b/src/modules/trace/trace.go @@ -92,6 +92,10 @@ func Setup(router *gin.Engine) { collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.task", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewTraceTask.Remove, ) + taskGroup.GET("/filePull", + middleware.PreAuthorize(nil), + controller.NewTraceTask.FilePull, + ) } // 跟踪数据 From d69a7c9e6fd131730d7126bf389df058cf7fc9af Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 23 Sep 2024 17:33:42 +0800 Subject: [PATCH 03/17] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96socket=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E6=8E=A5=E6=94=B6=EF=BC=8C=E8=B7=9F=E8=B8=AA=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=8E=A8=E9=80=81ws?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/socket/tcp_server.go | 43 +++++++++--------- src/framework/socket/udp_server.go | 15 ++----- src/modules/trace/service/trace_task.go | 45 +++++++++++++++---- .../trace/service/trace_task_udp_data.go | 6 ++- src/modules/ws/service/ws_send.impl.go | 2 + 5 files changed, 68 insertions(+), 43 deletions(-) diff --git a/src/framework/socket/tcp_server.go b/src/framework/socket/tcp_server.go index 52a9b960..857af870 100644 --- a/src/framework/socket/tcp_server.go +++ b/src/framework/socket/tcp_server.go @@ -10,10 +10,10 @@ import ( // SocketTCP TCP服务端 type SocketTCP struct { - Addr string `json:"addr"` // 主机地址 - Port int64 `json:"port"` // 端口 - Listen *net.Listener `json:"listen"` - StopChan chan struct{} `json:"stop"` // 停止信号 + Addr string `json:"addr"` // 主机地址 + Port int64 `json:"port"` // 端口 + Listener *net.TCPListener `json:"listener"` + StopChan chan struct{} `json:"stop"` // 停止信号 } // New 创建TCP服务端 @@ -26,53 +26,52 @@ func (s *SocketTCP) New() (*SocketTCP, error) { } address := fmt.Sprintf("%s:%d", s.Addr, s.Port) - ln, err := net.Listen(proto, address) + // 解析 TCP 地址 + tcpAddr, err := net.ResolveTCPAddr(proto, address) if err != nil { return nil, err } - s.Listen = &ln + // 监听 TCP 地址 + listener, err := net.ListenTCP(proto, tcpAddr) + if err != nil { + return nil, err + } + + s.Listener = listener s.StopChan = make(chan struct{}, 1) return s, nil } // Close 关闭当前TCP服务端 func (s *SocketTCP) Close() { - if s.Listen != nil { + if s.Listener != nil { s.StopChan <- struct{}{} - (*s.Listen).Close() + (*s.Listener).Close() } } // Resolve 处理消息 -func (s *SocketTCP) Resolve(bufferSize int, callback func([]byte, int)) error { - if s.Listen == nil { +func (s *SocketTCP) Resolve(callback func(conn *net.Conn)) error { + if s.Listener == nil { return fmt.Errorf("tcp service not created") } - - ln := *s.Listen - buffer := make([]byte, bufferSize) + listener := *s.Listener for { select { case <-s.StopChan: return fmt.Errorf("udp service stop") default: - conn, err := ln.Accept() + conn, err := listener.Accept() if err != nil { logger.Errorf("Error accepting connection: %v ", err) continue } defer conn.Close() - // 读取数据 - n, err := conn.Read(buffer) - if err != nil { - fmt.Println("Error reading from TCP connection:", err) - continue - } - - callback(buffer, n) + // 处理连接 + callback(&conn) // 发送响应 if _, err = conn.Write([]byte("tcp>")); err != nil { diff --git a/src/framework/socket/udp_server.go b/src/framework/socket/udp_server.go index d54b957a..33a45a60 100644 --- a/src/framework/socket/udp_server.go +++ b/src/framework/socket/udp_server.go @@ -50,29 +50,20 @@ func (s *SocketUDP) Close() { } // Resolve 处理消息 -func (s *SocketUDP) Resolve(bufferSize int, callback func([]byte, int)) error { +func (s *SocketUDP) Resolve(callback func(*net.UDPConn)) error { if s.Conn == nil { return fmt.Errorf("udp service not created") } - buffer := make([]byte, bufferSize) - for { select { case <-s.StopChan: return fmt.Errorf("udp service stop") default: - // 读取数据 - n, addr, err := s.Conn.ReadFromUDP(buffer) - if err != nil { - fmt.Println("Error reading from UDP connection:", err) - continue - } - - callback(buffer, n) + callback(s.Conn) // 发送响应 - if _, err = s.Conn.WriteToUDP([]byte("udp>"), addr); err != nil { + if _, err := s.Conn.WriteTo([]byte("udp>"), s.Conn.RemoteAddr()); err != nil { fmt.Println("Error sending response:", err) } } diff --git a/src/modules/trace/service/trace_task.go b/src/modules/trace/service/trace_task.go index e9891b28..071f8b28 100644 --- a/src/modules/trace/service/trace_task.go +++ b/src/modules/trace/service/trace_task.go @@ -1,8 +1,10 @@ package service import ( + "encoding/base64" "encoding/json" "fmt" + "net" "strings" "be.ems/src/framework/config" @@ -14,6 +16,7 @@ import ( neService "be.ems/src/modules/network_element/service" "be.ems/src/modules/trace/model" "be.ems/src/modules/trace/repository" + wsService "be.ems/src/modules/ws/service" ) // 实例化数据层 TraceTask 结构体 @@ -57,16 +60,27 @@ func (r *TraceTask) CreateUDP() error { } // 接收处理UDP数据 - go r.udpService.Resolve(2048, func(data []byte, n int) { - logger.Infof("socket UDP: %s", string(data)) - mData, err := UDPDataHandler(data, n) + go r.udpService.Resolve(func(conn *net.UDPConn) { + // 读取数据 + buf := make([]byte, 2048) + n, err := conn.Read(buf) + if err != nil { + logger.Errorf("error reading from UDP connection: %s", err.Error()) + return + } + + logger.Infof("socket UDP: %s", string(buf[:n])) + // logger.Infof("socket UDP Base64: %s", base64.StdEncoding.EncodeToString(buf[:n])) + mData, err := UDPDataHandler(buf, n) if err != nil { logger.Errorf("udp resolve data fail: %s", err.Error()) return } + taskId := parse.Number(mData["taskId"]) + // 插入数据库做记录 r.traceDataRepository.Insert(model.TraceData{ - TaskId: parse.Number(mData["taskId"]), + TaskId: taskId, IMSI: mData["imsi"].(string), SrcAddr: mData["srcAddr"].(string), DstAddr: mData["dstAddr"].(string), @@ -82,6 +96,7 @@ func (r *TraceTask) CreateUDP() error { // 推送文件 if v, ok := mData["pcapFile"]; ok && v != "" { logger.Infof("pcapFile: %s", v) + wsService.NewWSSendImpl.ByGroupID(fmt.Sprintf("%s%d", wsService.GROUP_TRACE, taskId), taskId) } }) @@ -92,16 +107,29 @@ func (r *TraceTask) CreateUDP() error { return err } // 接收处理TCP数据 - go tcpService.Resolve(1024, func(data []byte, n int) { - logger.Infof("socket TCP: %s", string(data)) - mData, err := UDPDataHandler(data, n) + go tcpService.Resolve(func(conn *net.Conn) { + c := (*conn) + // 读取数据 + buf := make([]byte, 2048) + n, err := c.Read(buf) + if err != nil { + logger.Errorf("error reading from TCP connection: %s", err.Error()) + return + } + + logger.Infof("socket TCP: %s", string(buf[:n])) + deData, _ := base64.StdEncoding.DecodeString(string(buf[:n])) + logger.Infof("socket TCP Base64: %s", deData) + mData, err := UDPDataHandler(deData, len(deData)) if err != nil { logger.Errorf("tcp resolve data fail: %s", err.Error()) return } + taskId := parse.Number(mData["taskId"]) + // 插入数据库做记录 r.traceDataRepository.Insert(model.TraceData{ - TaskId: parse.Number(mData["taskId"]), + TaskId: taskId, IMSI: mData["imsi"].(string), SrcAddr: mData["srcAddr"].(string), DstAddr: mData["dstAddr"].(string), @@ -117,6 +145,7 @@ func (r *TraceTask) CreateUDP() error { // 推送文件 if v, ok := mData["pcapFile"]; ok && v != "" { logger.Infof("pcapFile: %s", v) + wsService.NewWSSendImpl.ByGroupID(fmt.Sprintf("%s%d", wsService.GROUP_TRACE, taskId), taskId) } }) return nil diff --git a/src/modules/trace/service/trace_task_udp_data.go b/src/modules/trace/service/trace_task_udp_data.go index 057ddf41..2f007f38 100644 --- a/src/modules/trace/service/trace_task_udp_data.go +++ b/src/modules/trace/service/trace_task_udp_data.go @@ -5,6 +5,7 @@ import ( "encoding/binary" "fmt" "os" + "path/filepath" "runtime" "strings" "time" @@ -264,6 +265,9 @@ const versionMinor = 4 func writeEmptyPcap(filename string, timeStamp int64, length int, data []byte) error { var err error var file *os.File + if err := os.MkdirAll(filepath.Dir(filename), 0775); err != nil { + return err + } if _, err = os.Stat(filename); os.IsNotExist(err) { file, err = os.Create(filename) // File Header @@ -318,7 +322,7 @@ func writeEmptyPcap(filename string, timeStamp int64, length int, data []byte) e // writePcap 写Pcap文件并返回文件路径 func writePcap(extHdr ExtHeader) string { - filePath := fmt.Sprintf("/tmp/trace_%d .pcap", extHdr.TaskId) + filePath := fmt.Sprintf("/tmp/omc/trace/task_%d.pcap", extHdr.TaskId) if runtime.GOOS == "windows" { filePath = fmt.Sprintf("C:%s", filePath) } diff --git a/src/modules/ws/service/ws_send.impl.go b/src/modules/ws/service/ws_send.impl.go index ee440800..969b2688 100644 --- a/src/modules/ws/service/ws_send.impl.go +++ b/src/modules/ws/service/ws_send.impl.go @@ -12,6 +12,8 @@ import ( const ( // 组号-其他 GROUP_OTHER = "0" + // 组号-跟踪任务数据变更 2_traceId + GROUP_TRACE = "2_" // 组号-指标通用 10_neType_neId GROUP_KPI = "10_" // 组号-指标UPF 12_neId From 070c6ff4de403464a9e8417adb93c012354efde6 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 24 Sep 2024 10:06:54 +0800 Subject: [PATCH 04/17] =?UTF-8?q?fix:=20=E5=8E=86=E5=8F=B2=E5=91=8A?= =?UTF-8?q?=E8=AD=A6=E5=90=8C=E6=AD=A5=E5=88=A4=E6=96=AD=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/fm/alarm.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/fm/alarm.go b/features/fm/alarm.go index 7bb89ea8..e22eca17 100644 --- a/features/fm/alarm.go +++ b/features/fm/alarm.go @@ -595,7 +595,7 @@ func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) { exist, err := session.Table("alarm"). Where("ne_type=? and ne_id=? and alarm_id=? and alarm_status=1", alarmData.NeType, alarmData.NeId, alarmData.AlarmId). Exist() - if err == nil || !exist { + if err != nil || !exist { log.Infof("Not found active alarm: ne_id=%s, alarm_id=%s", alarmData.NeId, alarmData.AlarmId) continue } From 2dd0ddc89c8184889e819780f070904d46197cb8 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 24 Sep 2024 10:07:44 +0800 Subject: [PATCH 05/17] =?UTF-8?q?fix:=20redis=E6=95=B0=E6=8D=AEscan?= =?UTF-8?q?=E6=95=B0=E8=B0=83=E6=95=B41000?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/redis/redis.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/framework/redis/redis.go b/src/framework/redis/redis.go index 32576f36..ef574de5 100644 --- a/src/framework/redis/redis.go +++ b/src/framework/redis/redis.go @@ -184,7 +184,7 @@ func GetKeys(source string, pattern string) ([]string, error) { // 循环遍历获取匹配的键 for { // 使用 SCAN 命令获取匹配的键 - batchKeys, nextCursor, err := rdb.Scan(ctx, cursor, pattern, 100).Result() + batchKeys, nextCursor, err := rdb.Scan(ctx, cursor, pattern, 1000).Result() if err != nil { logger.Errorf("Failed to scan keys: %v", err) return keys, err From 4a9e4b1e46a4d7bd30a7cee1f7de6dea6c936a5e Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 24 Sep 2024 10:20:19 +0800 Subject: [PATCH 06/17] =?UTF-8?q?fix:=20SMF=E5=9C=A8=E7=BA=BF=E8=AE=A2?= =?UTF-8?q?=E9=98=85=E7=94=A8=E6=88=B7=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/fetch_link/smf.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/modules/network_element/fetch_link/smf.go b/src/modules/network_element/fetch_link/smf.go index 09954625..c31b6a18 100644 --- a/src/modules/network_element/fetch_link/smf.go +++ b/src/modules/network_element/fetch_link/smf.go @@ -16,9 +16,7 @@ import ( // // 返回结果 {"rows":[],"total":0} func SMFSubInfo(neInfo model.NeInfo, data map[string]string) (map[string]any, error) { - // neUrl := "http://127.0.0.1:4523/m1/3157310-1528434-82b449ee/api/rest/ueManagement/v1/elementType/smf/objectType/ueInfo?apifoxApiId=150640017" - neUrl := fmt.Sprintf("http://%s:%s/api/rest/ueManagement/v1/elementType/smf/objectType/ueInfo", "172.16.20.150", "33030") - // neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/smf/objectType/ueInfo", neInfo.IP, neInfo.Port) + neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/smf/objectType/ueInfo", neInfo.IP, neInfo.Port) // 查询参数拼接 query := []string{} if v, ok := data["imsi"]; ok && v != "" { From 0c053bb38265c29c96d8081d18f714be1c125111 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 24 Sep 2024 10:21:52 +0800 Subject: [PATCH 07/17] =?UTF-8?q?sql:=20=E6=9B=B4=E6=96=B0=E8=B7=9F?= =?UTF-8?q?=E8=B8=AA=E7=9B=B8=E5=85=B3=E8=8F=9C=E5=8D=95=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/sys_dict_data1_i18n_zh.sql | 14 +++++++------- database/install/sys_dict_data2_i18n_en.sql | 14 +++++++------- database/install/sys_menu.sql | 11 +++++++---- database/install/sys_role_menu.sql | 6 ++++++ database/upgrade/upg_sys_dict_data1_i18n_zh.sql | 12 ++++++------ database/upgrade/upg_sys_dict_data2_i18n_en.sql | 12 ++++++------ database/upgrade/upg_sys_menu.sql | 11 +++++++---- database/upgrade/upg_sys_role_menu.sql | 6 ++++++ 8 files changed, 52 insertions(+), 34 deletions(-) diff --git a/database/install/sys_dict_data1_i18n_zh.sql b/database/install/sys_dict_data1_i18n_zh.sql index bc6696a8..e89dd17d 100644 --- a/database/install/sys_dict_data1_i18n_zh.sql +++ b/database/install/sys_dict_data1_i18n_zh.sql @@ -78,8 +78,8 @@ INSERT INTO `sys_dict_data` VALUES (1070, 1070, 'menu.ueUser.onlineIMS', 'IMS在 INSERT INTO `sys_dict_data` VALUES (1071, 1071, 'menu.ueUser.onlineUE', 'UE在线信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1072, 1072, 'menu.ueUser.base5G', '基站信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1073, 1073, 'menu.trace', '跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (1074, 1074, 'menu.trace.task', '跟踪任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (1075, 1075, 'menu.trace.analysis', '信令分析', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (1074, 1074, 'menu.trace.task', '网元跟踪任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (1075, 1075, 'menu.trace.analysis', '网元跟踪数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1076, 1076, 'menu.trace.pcap', '信令抓包', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1077, 1077, 'menu.fault', '监控', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1078, 1078, 'menu.config.backupManageRemark', '备份管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -254,9 +254,9 @@ INSERT INTO `sys_dict_data` VALUES (1520, 1520, 'dictType.sys_yes_no_remark', ' INSERT INTO `sys_dict_data` VALUES (1521, 1521, 'dictType.sys_oper_type_remark', '操作类型列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1522, 1522, 'dictType.sys_common_status_remark', '登录状态列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1523, 1523, 'dictType.trace_type_remark', '跟踪类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); --- INSERT INTO `sys_dict_data` VALUES (1524, 1524, 'dictType.operation_log_type_remark', '操作日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (1525, 1525, 'dictType.alarm_status_remark', '告警日志状态类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); --- INSERT INTO `sys_dict_data` VALUES (1526, 1526, 'dictType.security_log_type_remark', '安全日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (1524, 1524, 'dictType.alarm_status_remark', '告警日志状态类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (1525, 1525, 'menu.trace.tshark', '信令分析', 'i18n_zh', '', '', '1', 'supervisor', 1727085393370, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (1526, 1526, 'menu.trace.wireshark', '信令跟踪', 'i18n_zh', '', '', '1', 'supervisor', 1727085393370, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (1527, 1527, 'dictType.ne_version_status_remark', '网元软件版本状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1528, 1528, 'dictType.i18n_en_remark', 'Internationalization - English', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1529, 1529, 'dictType.i18n_zh_remark', 'Internationalization - Chinese', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -656,7 +656,7 @@ INSERT INTO `sys_dict_data` VALUES (2145, 2145, 'menu.system.user.editPost', ' INSERT INTO `sys_dict_data` VALUES (2146, 2146, 'menu.dashboard.smscCDR', '短信话单', 'i18n_zh', '', '', '1', 'supervisor', 1717051745866, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2147, 2147, 'log.operate.title.smscCDR', '短信话单', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2148, 2148, 'menu.trace.pcapFile', '信令抓包文件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); --- INSERT INTO `sys_dict_data` VALUES (2149, 2149, 'dictData.udm_sub_cn_type.2', '4G', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2149, 2149, 'menu.trace.taskAnalyze', '跟踪数据分析', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -- INSERT INTO `sys_dict_data` VALUES (2150, 2150, 'dictData.udm_sub_cn_type.3', '5G&4G', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2151, 2151, 'menu.system.setting.doc', '系统使用文档', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2152, 2152, 'menu.system.setting.official', '官网链接', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); @@ -673,7 +673,7 @@ INSERT INTO `sys_dict_data` VALUES (2162, 2162, 'table.cdr_event_smf', '数据 INSERT INTO `sys_dict_data` VALUES (2163, 2163, 'table.cdr_event_smsc', '短信话单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2164, 2164, 'menu.log.exportFile', '导出文件管理', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2165, 2165, 'menu.perf.kpiCReport', '自定义指标数据', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2166, 2166, 'menu.trace.taskHLR', '跟踪任务 HLR', 'i18n_zh', '', '', '1', 'supervisor', 1726626822538, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2166, 2166, 'menu.trace.taskHLR', 'HLR 跟踪任务', 'i18n_zh', '', '', '1', 'supervisor', 1726626822538, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2167, 2167, 'dictType.cdr_cause_code', 'CDR 响应原因代码类别类型', 'i18n_zh', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2168, 2168, 'dictData.cdr_cause_code.0', '其他', 'i18n_zh', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2169, 2169, 'dictData.cdr_cause_code.8', '运营者要求禁止', 'i18n_zh', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); diff --git a/database/install/sys_dict_data2_i18n_en.sql b/database/install/sys_dict_data2_i18n_en.sql index a31f13e8..2a11f29d 100644 --- a/database/install/sys_dict_data2_i18n_en.sql +++ b/database/install/sys_dict_data2_i18n_en.sql @@ -78,8 +78,8 @@ INSERT INTO `sys_dict_data` VALUES (3070, 3070, 'menu.ueUser.onlineIMS', 'IMS On INSERT INTO `sys_dict_data` VALUES (3071, 3071, 'menu.ueUser.onlineUE', 'UE Online Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3072, 3072, 'menu.ueUser.base5G', 'Radio Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3073, 3073, 'menu.trace', 'Trace', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (3074, 3074, 'menu.trace.task', 'Trace Tasks', 'i18n_en', '', '', '1', 'supervisor', 1700000000000, NULL, 0, ''); -INSERT INTO `sys_dict_data` VALUES (3075, 3075, 'menu.trace.analysis', 'Signaling Analysis', 'i18n_en', '', '', '1', 'supervisor', 1700000000000, NULL, 0, ''); +INSERT INTO `sys_dict_data` VALUES (3074, 3074, 'menu.trace.task', 'NE Trace Task', 'i18n_en', '', '', '1', 'supervisor', 1700000000000, NULL, 0, ''); +INSERT INTO `sys_dict_data` VALUES (3075, 3075, 'menu.trace.analysis', 'NE Trace Task Data', 'i18n_en', '', '', '1', 'supervisor', 1700000000000, NULL, 0, ''); INSERT INTO `sys_dict_data` VALUES (3076, 3076, 'menu.trace.pcap', 'Signaling Capture', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3077, 3077, 'menu.fault', 'Monitor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3078, 3078, 'menu.config.backupManageRemark', 'Backup Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -254,9 +254,9 @@ INSERT INTO `sys_dict_data` VALUES (3520, 3520, 'dictType.sys_yes_no_remark', 'S INSERT INTO `sys_dict_data` VALUES (3521, 3521, 'dictType.sys_oper_type_remark', 'Operation type list', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3522, 3522, 'dictType.sys_common_status_remark', 'Login Status List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3523, 3523, 'dictType.trace_type_remark', 'Trace Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); --- INSERT INTO `sys_dict_data` VALUES (3524, 3524, 'dictType.operation_log_type_remark', 'Operation log type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (3525, 3525, 'dictType.alarm_status_remark', 'Alarm Log Status Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); --- INSERT INTO `sys_dict_data` VALUES (3526, 3526, 'dictType.security_log_type_remark', 'Security Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (3524, 3524, 'dictType.alarm_status_remark', 'Alarm Log Status Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (3525, 3525, 'menu.trace.tshark', 'Signaling Analysis', 'i18n_en', '', '', '1', 'supervisor', 1727085393370, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (3526, 3526, 'menu.trace.wireshark', 'Signaling Trace', 'i18n_en', '', '', '1', 'supervisor', 1727085393370, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (3527, 3527, 'dictType.ne_version_status_remark', 'Network element software version status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3528, 3528, 'dictType.i18n_en_remark', 'Internationalization - English', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3529, 3529, 'dictType.i18n_en_remark', 'Internationalization - Chinese', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -656,7 +656,7 @@ INSERT INTO `sys_dict_data` VALUES (4145, 4145, 'menu.system.user.editPost', 'Mo INSERT INTO `sys_dict_data` VALUES (4146, 4146, 'menu.dashboard.smscCDR', 'SMS CDR', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4147, 4147, 'log.operate.title.smscCDR', 'SMS CDR', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4148, 4148, 'menu.trace.pcapFile', 'Signaling Capture File', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); --- INSERT INTO `sys_dict_data` VALUES (4149, 4149, 'dictData.udm_sub_cn_type.2', '4G', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4149, 4149, 'menu.trace.taskAnalyze', 'Tracking Data Analysis', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); -- INSERT INTO `sys_dict_data` VALUES (4150, 4150, 'dictData.udm_sub_cn_type.3', '5G&4G', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4151, 4151, 'menu.system.setting.doc', 'System User Documentation', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4152, 4152, 'menu.system.setting.official', 'Official Website', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); @@ -673,7 +673,7 @@ INSERT INTO `sys_dict_data` VALUES (4162, 4162, 'table.cdr_event_smf', 'Data CDR INSERT INTO `sys_dict_data` VALUES (4163, 4163, 'table.cdr_event_smsc', 'SMS CDR', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4164, 4164, 'menu.log.exportFile', 'Exported File Management', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4165, 4165, 'menu.perf.kpiCReport', 'Custom Indicator Data', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4166, 4166, 'menu.trace.taskHLR', 'Tracking Tasks HLR', 'i18n_en', '', '', '1', 'supervisor', 1726626822538, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4166, 4166, 'menu.trace.taskHLR', 'HLR Trace Task', 'i18n_en', '', '', '1', 'supervisor', 1726626822538, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4167, 4167, 'dictType.cdr_cause_code', 'CDR Response Reason Code Category Type', 'i18n_en', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4168, 4168, 'dictData.cdr_cause_code.0', 'Other', 'i18n_en', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4169, 4169, 'dictData.cdr_cause_code.8', 'OPERATOR_DETERMINED_BARRING', 'i18n_en', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); diff --git a/database/install/sys_menu.sql b/database/install/sys_menu.sql index 40fc0bee..a4f116a4 100644 --- a/database/install/sys_menu.sql +++ b/database/install/sys_menu.sql @@ -130,8 +130,8 @@ INSERT INTO `sys_menu` VALUES (2081, 'menu.ueUser.onlineUE', 5, 6, 'ue', 'neUser INSERT INTO `sys_menu` VALUES (2082, 'menu.ueUser.base5G', 5, 7, 'base5G', 'neUser/base5G/index', '1', '0', 'M', '1', '1', 'neUser:base5G:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.base5GRemark'); INSERT INTO `sys_menu` VALUES (2083, 'menu.trace', 2087, 30, 'traceManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.traceRemark'); INSERT INTO `sys_menu` VALUES (2084, 'menu.trace.task', 2083, 1, 'task', 'traceManage/task/index', '1', '0', 'M', '0', '1', 'traceManage:task:index', 'icon-chexiao', 'supervisor', 1700000000000, 'admin', 1713176976458, 'menu.trace.taskRemark'); -INSERT INTO `sys_menu` VALUES (2085, 'menu.trace.analysis', 2083, 2, 'analysis', 'traceManage/analysis/index', '1', '0', 'M', '0', '1', 'traceManage:analysis:index', 'icon-gongnengjieshao', 'supervisor', 1700000000000, 'admin', 1713176987835, 'menu.trace.analysisRemark'); -INSERT INTO `sys_menu` VALUES (2086, 'menu.trace.pcap', 2083, 3, 'pcap', 'traceManage/pcap/index', '1', '1', 'M', '1', '1', 'traceManage:pcap:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.trace.pcapRemark'); +INSERT INTO `sys_menu` VALUES (2085, 'menu.trace.analysis', 2083, 4, 'analysis', 'traceManage/analysis/index', '1', '0', 'M', '0', '1', 'traceManage:analysis:index', 'icon-gongnengjieshao', 'supervisor', 1700000000000, 'admin', 1713176987835, 'menu.trace.analysisRemark'); +INSERT INTO `sys_menu` VALUES (2086, 'menu.trace.pcap', 2083, 11, 'pcap', 'traceManage/pcap/index', '1', '1', 'M', '1', '1', 'traceManage:pcap:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.trace.pcapRemark'); INSERT INTO `sys_menu` VALUES (2087, 'menu.fault', 0, 2, 'faultManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-jinggao', 'supervisor', 1700000000000, NULL, 0, 'menu.faultRemark'); INSERT INTO `sys_menu` VALUES (2088, 'menu.fault.active', 2129, 1, 'active-alarm', 'faultManage/active-alarm/index', '1', '1', 'M', '1', '1', 'faultManage:active-alarm:index', 'icon-wenjian', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.activemRemark'); INSERT INTO `sys_menu` VALUES (2089, 'menu.log', 0, 9, 'logManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.logRemark'); @@ -196,9 +196,12 @@ INSERT INTO `sys_menu` VALUES (2154, 'menu.ne.neConfigBackup', 4, 29, 'neConfigB INSERT INTO `sys_menu` VALUES (2155, 'menu.common.delete', 2154, 1, '#', '', '1', '1', 'B', '1', '1', 'ne:neConfigBackup:remove', '#', 'supervisor', 1721902269805, '', 0, ''); INSERT INTO `sys_menu` VALUES (2156, 'menu.common.edit', 2154, 2, '#', '', '1', '1', 'B', '1', '1', 'ne:neConfigBackup:edit', '#', 'supervisor', 1721902269805, '', 0, ''); INSERT INTO `sys_menu` VALUES (2157, 'menu.dashboard.smscCDR', 2140, 9, 'smscCDR', 'dashboard/smscCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1723107637982, 'supervisor', 1723107637982, ''); -INSERT INTO `sys_menu` VALUES (2158, 'menu.trace.pcapFile', 2083, 4, 'pcap/inline/file', 'traceManage/pcap/file', '1', '1', 'M', '0', '1', 'traceManage:pcap:index', '#', 'supervisor', 1724144595914, '', 0, ''); +INSERT INTO `sys_menu` VALUES (2158, 'menu.trace.pcapFile', 2083, 12, 'pcap/inline/file', 'traceManage/pcap/file', '1', '1', 'M', '0', '1', 'traceManage:pcap:index', '#', 'supervisor', 1724144595914, '', 0, ''); INSERT INTO `sys_menu` VALUES (2159, 'menu.log.exportFile', 2089, 100, 'exportFile', 'logManage/exportFile/index', '1', '1', 'M', '1', '1', 'logManage:exportFile:index', 'icon-wenjian', 'supervisor', 1724144595914, '', 0, ''); INSERT INTO `sys_menu` VALUES (2160, 'menu.perf.kpiCReport', 2099, 100, 'kpiCReport', 'perfManage/kpiCReport/index', '1', '1', 'M', '1', '1', 'perfManage:kpiCReport:index', 'icon-tubiaoku', 'supervisor', 1724144595914, '', 0, ''); -INSERT INTO `sys_menu` VALUES (2161, 'menu.trace.taskHLR', 2083, 10, 'taskHLR', 'traceManage/task-hlr/index', '1', '0', 'M', '1', '1', 'traceManage:taskHLR:index', 'icon-gengduo', 'supervisor', 1724144595914, '', 0, ''); +INSERT INTO `sys_menu` VALUES (2161, 'menu.trace.taskHLR', 2083, 6, 'taskHLR', 'traceManage/task-hlr/index', '1', '0', 'M', '1', '1', 'traceManage:taskHLR:index', 'icon-chexiao', 'supervisor', 1724144595914, '', 0, ''); +INSERT INTO `sys_menu` VALUES (2162, 'menu.trace.taskAnalyze', 2083, 2, 'task/inline/analyze', 'traceManage/task/analyze', '1', '0', 'M', '0', '1', 'traceManage:taskAnalyze:index', '#', 'supervisor', 1724144595914, '', 0, ''); +INSERT INTO `sys_menu` VALUES (2163, 'menu.trace.tshark', 2083, 14, 'tshark', 'traceManage/tshark/index', '1', '0', 'M', '1', '1', 'traceManage:tshark:index', 'icon-gengduo', 'supervisor', 1724144595914, '', 0, ''); +INSERT INTO `sys_menu` VALUES (2164, 'menu.trace.wireshark', 2083, 16, 'wireshark', 'traceManage/wireshark/index', '1', '0', 'M', '1', '1', 'traceManage:wireshark:index', 'icon-gengduo', 'supervisor', 1724144595914, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_role_menu.sql b/database/install/sys_role_menu.sql index 08a4ee9c..5191ee51 100644 --- a/database/install/sys_role_menu.sql +++ b/database/install/sys_role_menu.sql @@ -149,6 +149,8 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2157); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2158); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2159); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2160); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2162); + INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 4); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 5); @@ -214,6 +216,8 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2155); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2156); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2157); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2160); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2162); + INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 5); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 112); @@ -266,6 +270,8 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2151); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2152); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2153); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2160); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2162); + INSERT IGNORE INTO `sys_role_menu` VALUES (5, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (5, 5); INSERT IGNORE INTO `sys_role_menu` VALUES (5, 112); diff --git a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql index 1f201652..d64ea942 100644 --- a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql +++ b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql @@ -91,8 +91,8 @@ REPLACE INTO `sys_dict_data` VALUES (1070, 1070, 'menu.ueUser.onlineIMS', 'IMS REPLACE INTO `sys_dict_data` VALUES (1071, 1071, 'menu.ueUser.onlineUE', 'UE在线信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1072, 1072, 'menu.ueUser.base5G', '基站信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1073, 1073, 'menu.trace', '跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (1074, 1074, 'menu.trace.task', '跟踪任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (1075, 1075, 'menu.trace.analysis', '信令分析', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1074, 1074, 'menu.trace.task', '网元跟踪任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1075, 1075, 'menu.trace.analysis', '网元跟踪数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1076, 1076, 'menu.trace.pcap', '信令抓包', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1077, 1077, 'menu.fault', '监控', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1078, 1078, 'menu.config.backupManageRemark', '备份管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -261,9 +261,9 @@ REPLACE INTO `sys_dict_data` VALUES (1520, 1520, 'dictType.sys_yes_no_remark', ' REPLACE INTO `sys_dict_data` VALUES (1521, 1521, 'dictType.sys_oper_type_remark', '操作类型列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1522, 1522, 'dictType.sys_common_status_remark', '登录状态列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1523, 1523, 'dictType.trace_type_remark', '跟踪类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); --- REPLACE INTO `sys_dict_data` VALUES (1524, 1524, 'dictType.operation_log_type_remark', '操作日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (1525, 1525, 'dictType.alarm_status_remark', '告警日志状态类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); --- REPLACE INTO `sys_dict_data` VALUES (1526, 1526, 'dictType.security_log_type_remark', '安全日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1524, 1524, 'dictType.alarm_status_remark', '告警日志状态类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1525, 1525, 'menu.trace.tshark', '信令分析', 'i18n_zh', '', '', '1', 'supervisor', 1727085393370, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (1526, 1526, 'menu.trace.wireshark', '信令跟踪', 'i18n_zh', '', '', '1', 'supervisor', 1727085393370, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (1527, 1527, 'dictType.ne_version_status_remark', '网元软件版本状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1528, 1528, 'dictType.i18n_en_remark', 'Internationalization - English', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1529, 1529, 'dictType.i18n_zh_remark', 'Internationalization - Chinese', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -680,7 +680,7 @@ REPLACE INTO `sys_dict_data` VALUES (2162, 2162, 'table.cdr_event_smf', '数据 REPLACE INTO `sys_dict_data` VALUES (2163, 2163, 'table.cdr_event_smsc', '短信话单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2164, 2164, 'menu.log.exportFile', '导出文件管理', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2165, 2165, 'menu.perf.kpiCReport', '自定义指标数据', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2166, 2166, 'menu.trace.taskHLR', '跟踪任务 HLR', 'i18n_zh', '', '', '1', 'supervisor', 1726626822538, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2166, 2166, 'menu.trace.taskHLR', 'HLR 跟踪任务', 'i18n_zh', '', '', '1', 'supervisor', 1726626822538, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2167, 2167, 'dictType.cdr_cause_code', 'CDR 响应原因代码类别类型', 'i18n_zh', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2168, 2168, 'dictData.cdr_cause_code.0', '其他', 'i18n_zh', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2169, 2169, 'dictData.cdr_cause_code.8', '运营者要求禁止', 'i18n_zh', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); diff --git a/database/upgrade/upg_sys_dict_data2_i18n_en.sql b/database/upgrade/upg_sys_dict_data2_i18n_en.sql index 9430b0d9..606cc252 100644 --- a/database/upgrade/upg_sys_dict_data2_i18n_en.sql +++ b/database/upgrade/upg_sys_dict_data2_i18n_en.sql @@ -89,8 +89,8 @@ REPLACE INTO `sys_dict_data` VALUES (3070, 3070, 'menu.ueUser.onlineIMS', 'IMS O REPLACE INTO `sys_dict_data` VALUES (3071, 3071, 'menu.ueUser.onlineUE', 'UE Online Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3072, 3072, 'menu.ueUser.base5G', 'Radio Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3073, 3073, 'menu.trace', 'Trace', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3074, 3074, 'menu.trace.task', 'Trace Tasks', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3075, 3075, 'menu.trace.analysis', 'Signaling Analysis', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3074, 3074, 'menu.trace.task', 'NE Trace Task', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3075, 3075, 'menu.trace.analysis', 'NE Trace Task Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3076, 3076, 'menu.trace.pcap', 'Signaling Capture', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3077, 3077, 'menu.fault', 'Monitor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3078, 3078, 'menu.config.backupManageRemark', 'Backup Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -255,9 +255,9 @@ REPLACE INTO `sys_dict_data` VALUES (3520, 3520, 'dictType.sys_yes_no_remark', ' REPLACE INTO `sys_dict_data` VALUES (3521, 3521, 'dictType.sys_oper_type_remark', 'Operation type list', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3522, 3522, 'dictType.sys_common_status_remark', 'Login Status List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3523, 3523, 'dictType.trace_type_remark', 'Trace Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); --- REPLACE INTO `sys_dict_data` VALUES (3524, 3524, 'dictType.operation_log_type_remark', 'Operation log type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3525, 3525, 'dictType.alarm_status_remark', 'Alarm Log Status Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); --- REPLACE INTO `sys_dict_data` VALUES (3526, 3526, 'dictType.security_log_type_remark', 'Security Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3524, 3524, 'dictType.alarm_status_remark', 'Alarm Log Status Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3525, 3525, 'menu.trace.tshark', 'Signaling Analysis', 'i18n_en', '', '', '1', 'supervisor', 1727085393370, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (3526, 3526, 'menu.trace.wireshark', 'Signaling Trace', 'i18n_en', '', '', '1', 'supervisor', 1727085393370, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (3527, 3527, 'dictType.ne_version_status_remark', 'Network element software version status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3528, 3528, 'dictType.i18n_en_remark', 'Internationalization - English', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3529, 3529, 'dictType.i18n_zh_remark', 'Internationalization - Chinese', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -675,7 +675,7 @@ REPLACE INTO `sys_dict_data` VALUES (4162, 4162, 'table.cdr_event_smf', 'Data CD REPLACE INTO `sys_dict_data` VALUES (4163, 4163, 'table.cdr_event_smsc', 'SMS CDR', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4164, 4164, 'menu.log.exportFile', 'Exported File Management', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4165, 4165, 'menu.perf.kpiCReport', 'Custom Indicator Data', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4166, 4166, 'menu.trace.taskHLR', 'Tracking Tasks HLR', 'i18n_en', '', '', '1', 'supervisor', 1726626822538, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4166, 4166, 'menu.trace.taskHLR', 'HLR Trace Task', 'i18n_en', '', '', '1', 'supervisor', 1726626822538, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4167, 4167, 'dictType.cdr_cause_code', 'CDR Response Reason Code Category Type', 'i18n_en', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4168, 4168, 'dictData.cdr_cause_code.0', 'Other', 'i18n_en', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4169, 4169, 'dictData.cdr_cause_code.8', 'OPERATOR_DETERMINED_BARRING', 'i18n_en', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); diff --git a/database/upgrade/upg_sys_menu.sql b/database/upgrade/upg_sys_menu.sql index 48598202..9dbed4f5 100644 --- a/database/upgrade/upg_sys_menu.sql +++ b/database/upgrade/upg_sys_menu.sql @@ -113,8 +113,8 @@ REPLACE INTO `sys_menu` VALUES (2081, 'menu.ueUser.onlineUE', 5, 6, 'ue', 'neUse REPLACE INTO `sys_menu` VALUES (2082, 'menu.ueUser.base5G', 5, 7, 'base5G', 'neUser/base5G/index', '1', '0', 'M', '1', '1', 'neUser:base5G:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.base5GRemark'); REPLACE INTO `sys_menu` VALUES (2083, 'menu.trace', 2087, 30, 'traceManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.traceRemark'); REPLACE INTO `sys_menu` VALUES (2084, 'menu.trace.task', 2083, 1, 'task', 'traceManage/task/index', '1', '0', 'M', '0', '1', 'traceManage:task:index', 'icon-chexiao', 'supervisor', 1700000000000, 'admin', 1713176976458, 'menu.trace.taskRemark'); -REPLACE INTO `sys_menu` VALUES (2085, 'menu.trace.analysis', 2083, 2, 'analysis', 'traceManage/analysis/index', '1', '0', 'M', '0', '1', 'traceManage:analysis:index', 'icon-gongnengjieshao', 'supervisor', 1700000000000, 'admin', 1713176987835, 'menu.trace.analysisRemark'); -REPLACE INTO `sys_menu` VALUES (2086, 'menu.trace.pcap', 2083, 3, 'pcap', 'traceManage/pcap/index', '1', '1', 'M', '1', '1', 'traceManage:pcap:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.trace.pcapRemark'); +REPLACE INTO `sys_menu` VALUES (2085, 'menu.trace.analysis', 2083, 4, 'analysis', 'traceManage/analysis/index', '1', '0', 'M', '0', '1', 'traceManage:analysis:index', 'icon-gongnengjieshao', 'supervisor', 1700000000000, 'admin', 1713176987835, 'menu.trace.analysisRemark'); +REPLACE INTO `sys_menu` VALUES (2086, 'menu.trace.pcap', 2083, 11, 'pcap', 'traceManage/pcap/index', '1', '1', 'M', '1', '1', 'traceManage:pcap:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.trace.pcapRemark'); REPLACE INTO `sys_menu` VALUES (2087, 'menu.fault', 0, 2, 'faultManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-jinggao', 'supervisor', 1700000000000, NULL, 0, 'menu.faultRemark'); REPLACE INTO `sys_menu` VALUES (2088, 'menu.fault.active', 2129, 1, 'active-alarm', 'faultManage/active-alarm/index', '1', '1', 'M', '1', '1', 'faultManage:active-alarm:index', 'icon-wenjian', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.activemRemark'); REPLACE INTO `sys_menu` VALUES (2089, 'menu.log', 0, 9, 'logManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.logRemark'); @@ -179,10 +179,13 @@ REPLACE INTO `sys_menu` VALUES (2154, 'menu.ne.neConfigBackup', 4, 29, 'neConfig REPLACE INTO `sys_menu` VALUES (2155, 'menu.common.delete', 2154, 1, '#', '', '1', '1', 'B', '1', '1', 'ne:neConfigBackup:remove', '#', 'supervisor', 1721902269805, '', 0, ''); REPLACE INTO `sys_menu` VALUES (2156, 'menu.common.edit', 2154, 2, '#', '', '1', '1', 'B', '1', '1', 'ne:neConfigBackup:edit', '#', 'supervisor', 1721902269805, '', 0, ''); REPLACE INTO `sys_menu` VALUES (2157, 'menu.dashboard.smscCDR', 2140, 9, 'smscCDR', 'dashboard/smscCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1723107637982, 'supervisor', 1723107637982, ''); -REPLACE INTO `sys_menu` VALUES (2158, 'menu.trace.pcapFile', 2083, 4, 'pcap/inline/file', 'traceManage/pcap/file', '1', '1', 'M', '0', '1', 'traceManage:pcap:index', '#', 'supervisor', 1724144595914, '', 0, ''); +REPLACE INTO `sys_menu` VALUES (2158, 'menu.trace.pcapFile', 2083, 12, 'pcap/inline/file', 'traceManage/pcap/file', '1', '1', 'M', '0', '1', 'traceManage:pcap:index', '#', 'supervisor', 1724144595914, '', 0, ''); REPLACE INTO `sys_menu` VALUES (2159, 'menu.log.exportFile', 2089, 100, 'exportFile', 'logManage/exportFile/index', '1', '1', 'M', '1', '1', 'logManage:exportFile:index', 'icon-wenjian', 'supervisor', 1724144595914, '', 0, ''); REPLACE INTO `sys_menu` VALUES (2160, 'menu.perf.kpiCReport', 2099, 100, 'kpiCReport', 'perfManage/kpiCReport/index', '1', '1', 'M', '1', '1', 'perfManage:kpiCReport:index', 'icon-tubiaoku', 'supervisor', 1724144595914, '', 0, ''); -REPLACE INTO `sys_menu` VALUES (2161, 'menu.trace.taskHLR', 2083, 10, 'taskHLR', 'traceManage/task-hlr/index', '1', '0', 'M', '1', '1', 'traceManage:taskHLR:index', 'icon-gengduo', 'supervisor', 1724144595914, '', 0, ''); +REPLACE INTO `sys_menu` VALUES (2161, 'menu.trace.taskHLR', 2083, 6, 'taskHLR', 'traceManage/task-hlr/index', '1', '0', 'M', '1', '1', 'traceManage:taskHLR:index', 'icon-chexiao', 'supervisor', 1724144595914, '', 0, ''); +REPLACE INTO `sys_menu` VALUES (2162, 'menu.trace.taskAnalyze', 2083, 2, 'task/inline/analyze', 'traceManage/task/analyze', '1', '0', 'M', '0', '1', 'traceManage:taskAnalyze:index', '#', 'supervisor', 1724144595914, '', 0, ''); +REPLACE INTO `sys_menu` VALUES (2163, 'menu.trace.tshark', 2083, 14, 'tshark', 'traceManage/tshark/index', '1', '0', 'M', '1', '1', 'traceManage:tshark:index', 'icon-gengduo', 'supervisor', 1724144595914, '', 0, ''); +REPLACE INTO `sys_menu` VALUES (2164, 'menu.trace.wireshark', 2083, 16, 'wireshark', 'traceManage/wireshark/index', '1', '0', 'M', '1', '1', 'traceManage:wireshark:index', 'icon-gengduo', 'supervisor', 1724144595914, '', 0, ''); -- 指定记录条件更新 diff --git a/database/upgrade/upg_sys_role_menu.sql b/database/upgrade/upg_sys_role_menu.sql index 6d1de15d..1ad88c9d 100644 --- a/database/upgrade/upg_sys_role_menu.sql +++ b/database/upgrade/upg_sys_role_menu.sql @@ -160,6 +160,8 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2157); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2158); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2159); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2160); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2162); + INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 4); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 5); @@ -225,6 +227,8 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2155); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2156); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2157); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2160); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2162); + INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 5); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 112); @@ -277,6 +281,8 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2151); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2152); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2153); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2160); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2162); + INSERT IGNORE INTO `sys_role_menu` VALUES (5, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (5, 5); INSERT IGNORE INTO `sys_role_menu` VALUES (5, 112); From 02878524707cc6ee89e5aefe3e2a3f540f764eb4 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 24 Sep 2024 10:35:47 +0800 Subject: [PATCH 08/17] =?UTF-8?q?fix:=20SMF=E5=9C=A8=E7=BA=BF=E8=AE=A2?= =?UTF-8?q?=E9=98=85=E7=94=A8=E6=88=B7=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_data/controller/smf.go | 35 +++++++++---------- src/modules/network_element/fetch_link/smf.go | 4 +-- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/modules/network_data/controller/smf.go b/src/modules/network_data/controller/smf.go index e0aaf0df..0dc48827 100644 --- a/src/modules/network_data/controller/smf.go +++ b/src/modules/network_data/controller/smf.go @@ -293,7 +293,7 @@ func (s *SMFController) SubUserList(c *gin.Context) { } // 网元直连 - data, err := neFetchlink.SMFSubInfo(neInfo, map[string]string{ + data, err := neFetchlink.SMFSubInfoList(neInfo, map[string]string{ "imsi": query.IMSI, "msisdn": query.MSISDN, "upstate": query.Upstate, @@ -306,24 +306,23 @@ func (s *SMFController) SubUserList(c *gin.Context) { // 对数据进行处理,去掉前缀,并加入imsi拓展信息 rows := data["rows"].([]any) - arr := &rows - for i := range *arr { - item := (*arr)[i].(map[string]any) - if v, ok := item["imsi"]; ok && v != nil { - imsiStr := v.(string) - imsiStr = strings.TrimPrefix(imsiStr, "imsi-") - item["imsi"] = imsiStr - // 查UDM拓展信息 - info := s.udmUserInfoService.SelectByIMSIAndNeID(imsiStr, "") - item["remark"] = info.Remark - } - if v, ok := item["msisdn"]; ok && v != nil { - item["msisdn"] = strings.TrimPrefix(v.(string), "msisdn-") + if len(rows) > 0 { + arr := &rows + for i := range *arr { + item := (*arr)[i].(map[string]any) + if v, ok := item["imsi"]; ok && v != nil { + imsiStr := v.(string) + imsiStr = strings.TrimPrefix(imsiStr, "imsi-") + item["imsi"] = imsiStr + // 查UDM拓展信息 + info := s.udmUserInfoService.SelectByIMSIAndNeID(imsiStr, "") + item["remark"] = info.Remark + } + if v, ok := item["msisdn"]; ok && v != nil { + item["msisdn"] = strings.TrimPrefix(v.(string), "msisdn-") + } } } - c.JSON(200, result.Ok(map[string]any{ - "total": data["total"], - "rows": data["rows"], - })) + c.JSON(200, result.Ok(data)) } diff --git a/src/modules/network_element/fetch_link/smf.go b/src/modules/network_element/fetch_link/smf.go index c31b6a18..bbbb0ee3 100644 --- a/src/modules/network_element/fetch_link/smf.go +++ b/src/modules/network_element/fetch_link/smf.go @@ -10,12 +10,12 @@ import ( "be.ems/src/modules/network_element/model" ) -// SMFSubInfo SMF在线订阅用户列表信息 +// SMFSubInfoList SMF在线订阅用户列表信息 // // 查询参数 {"imsi":"360000100000130","msisdn":"8612300000130","upstate":"Inactive","pageNum":"1"} // // 返回结果 {"rows":[],"total":0} -func SMFSubInfo(neInfo model.NeInfo, data map[string]string) (map[string]any, error) { +func SMFSubInfoList(neInfo model.NeInfo, data map[string]string) (map[string]any, error) { neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/smf/objectType/ueInfo", neInfo.IP, neInfo.Port) // 查询参数拼接 query := []string{} From 67caba43799fb4550e7fda658751bde2fa1646f0 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 24 Sep 2024 11:51:46 +0800 Subject: [PATCH 09/17] =?UTF-8?q?style:=20=E5=8F=98=E6=9B=B4ws=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E5=87=BD=E6=95=B0=E5=AE=9E=E4=BE=8B=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/cdr/cdrevent.go | 6 +- features/event/event.go | 4 +- features/pm/performance.go | 10 +- src/modules/trace/service/trace_task.go | 4 +- src/modules/ws/controller/ws.go | 8 +- src/modules/ws/service/ws.go | 226 ++++++++++++++++-- src/modules/ws/service/ws.impl.go | 220 ------------------ src/modules/ws/service/ws_receive.go | 264 +++++++++++++++++++++- src/modules/ws/service/ws_receive.impl.go | 258 --------------------- src/modules/ws/service/ws_send.go | 89 +++++++- src/modules/ws/service/ws_send.impl.go | 87 ------- 11 files changed, 558 insertions(+), 618 deletions(-) delete mode 100644 src/modules/ws/service/ws.impl.go delete mode 100644 src/modules/ws/service/ws_receive.impl.go delete mode 100644 src/modules/ws/service/ws_send.impl.go diff --git a/features/cdr/cdrevent.go b/features/cdr/cdrevent.go index 9d73a265..6361fa05 100644 --- a/features/cdr/cdrevent.go +++ b/features/cdr/cdrevent.go @@ -62,12 +62,12 @@ func PostCDREventFrom(w http.ResponseWriter, r *http.Request) { switch neInfo.NeType { case "IMS": if v, ok := cdrEvent.CDR["recordType"]; ok && (v == "MOC" || v == "MTSM") { - wsService.NewWSSendImpl.ByGroupID(wsService.GROUP_IMS_CDR+neInfo.NeId, cdrEvent) + wsService.NewWSSend.ByGroupID(wsService.GROUP_IMS_CDR+neInfo.NeId, cdrEvent) } case "SMF": - wsService.NewWSSendImpl.ByGroupID(wsService.GROUP_SMF_CDR+neInfo.NeId, cdrEvent) + wsService.NewWSSend.ByGroupID(wsService.GROUP_SMF_CDR+neInfo.NeId, cdrEvent) case "SMSC": - wsService.NewWSSendImpl.ByGroupID(wsService.GROUP_SMSC_CDR+neInfo.NeId, cdrEvent) + wsService.NewWSSend.ByGroupID(wsService.GROUP_SMSC_CDR+neInfo.NeId, cdrEvent) } } diff --git a/features/event/event.go b/features/event/event.go index c04cd44b..faad0e11 100644 --- a/features/event/event.go +++ b/features/event/event.go @@ -74,7 +74,7 @@ func PostUEEventFromAMF(c *gin.Context) { // AMF没有RmUID,直接推送 // 推送到ws订阅组 - wsService.NewWSSendImpl.ByGroupID(wsService.GROUP_AMF_UE, ueEvent) + wsService.NewWSSend.ByGroupID(wsService.GROUP_AMF_UE, ueEvent) services.ResponseStatusOK204NoContent(c.Writer) } @@ -103,7 +103,7 @@ func PostUEEvent(w http.ResponseWriter, r *http.Request) { if neInfo.RmUID == ueEvent.RmUID { // 推送到ws订阅组 if ueEvent.NeType == "MME" { - wsService.NewWSSendImpl.ByGroupID(wsService.GROUP_MME_UE+neInfo.NeId, ueEvent) + wsService.NewWSSend.ByGroupID(wsService.GROUP_MME_UE+neInfo.NeId, ueEvent) } } diff --git a/features/pm/performance.go b/features/pm/performance.go index ad99cc26..72fea0ea 100644 --- a/features/pm/performance.go +++ b/features/pm/performance.go @@ -324,11 +324,11 @@ func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) { if neInfo.RmUID == kpiData.RmUid { // 推送到ws订阅组 - wsService.NewWSSendImpl.ByGroupID(fmt.Sprintf("%s%s_%s", wsService.GROUP_KPI, neInfo.NeType, neInfo.NeId), kpiEvent) + wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s%s_%s", wsService.GROUP_KPI, neInfo.NeType, neInfo.NeId), kpiEvent) // 推送自定义KPI到ws订阅组 - wsService.NewWSSendImpl.ByGroupID(fmt.Sprintf("%s%s_%s", wsService.GROUP_KPI_C, neInfo.NeType, neInfo.NeId), kpiCEvent) + wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s%s_%s", wsService.GROUP_KPI_C, neInfo.NeType, neInfo.NeId), kpiCEvent) if neInfo.NeType == "UPF" { - wsService.NewWSSendImpl.ByGroupID(wsService.GROUP_KPI_UPF+neInfo.NeId, kpiEvent) + wsService.NewWSSend.ByGroupID(wsService.GROUP_KPI_UPF+neInfo.NeId, kpiEvent) } } @@ -456,9 +456,9 @@ func PostGoldKPIFromNF(w http.ResponseWriter, r *http.Request) { } // 推送到ws订阅组 - wsService.NewWSSendImpl.ByGroupID(wsService.GROUP_KPI, kpiEvent) + wsService.NewWSSend.ByGroupID(wsService.GROUP_KPI, kpiEvent) if goldKpi.NEType == "UPF" { - wsService.NewWSSendImpl.ByGroupID(wsService.GROUP_KPI_UPF, kpiEvent) + wsService.NewWSSend.ByGroupID(wsService.GROUP_KPI_UPF, kpiEvent) } services.ResponseStatusOK204NoContent(w) diff --git a/src/modules/trace/service/trace_task.go b/src/modules/trace/service/trace_task.go index 071f8b28..fbfb1643 100644 --- a/src/modules/trace/service/trace_task.go +++ b/src/modules/trace/service/trace_task.go @@ -96,7 +96,7 @@ func (r *TraceTask) CreateUDP() error { // 推送文件 if v, ok := mData["pcapFile"]; ok && v != "" { logger.Infof("pcapFile: %s", v) - wsService.NewWSSendImpl.ByGroupID(fmt.Sprintf("%s%d", wsService.GROUP_TRACE, taskId), taskId) + wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s%d", wsService.GROUP_TRACE, taskId), taskId) } }) @@ -145,7 +145,7 @@ func (r *TraceTask) CreateUDP() error { // 推送文件 if v, ok := mData["pcapFile"]; ok && v != "" { logger.Infof("pcapFile: %s", v) - wsService.NewWSSendImpl.ByGroupID(fmt.Sprintf("%s%d", wsService.GROUP_TRACE, taskId), taskId) + wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s%d", wsService.GROUP_TRACE, taskId), taskId) } }) return nil diff --git a/src/modules/ws/controller/ws.go b/src/modules/ws/controller/ws.go index 1b78ed73..c3da955a 100644 --- a/src/modules/ws/controller/ws.go +++ b/src/modules/ws/controller/ws.go @@ -21,8 +21,8 @@ import ( // NewWSController 实例化控制层 WSController 结构体 var NewWSController = &WSController{ - wsService: service.NewWSImpl, - wsSendService: service.NewWSSendImpl, + wsService: service.NewWS, + wsSendService: service.NewWSSend, neHostService: neService.NewNeHostImpl, neInfoService: neService.NewNeInfoImpl, } @@ -32,9 +32,9 @@ var NewWSController = &WSController{ // PATH /ws type WSController struct { // WebSocket 服务 - wsService service.IWS + wsService *service.WS // WebSocket消息发送 服务 - wsSendService service.IWSSend + wsSendService *service.WSSend // 网元主机连接服务 neHostService neService.INeHost // 网元信息服务 diff --git a/src/modules/ws/service/ws.go b/src/modules/ws/service/ws.go index 0026b589..58f2f870 100644 --- a/src/modules/ws/service/ws.go +++ b/src/modules/ws/service/ws.go @@ -1,32 +1,220 @@ package service import ( + "encoding/json" "net/http" + "sync" + "time" + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/generate" + "be.ems/src/framework/vo/result" "be.ems/src/modules/ws/model" "github.com/gorilla/websocket" ) -// IWS WebSocket通信 服务层接口 -type IWS interface { - // UpgraderWs http升级ws请求 - UpgraderWs(w http.ResponseWriter, r *http.Request) *websocket.Conn +var ( + wsClients sync.Map // ws客户端 [clientId: client] + wsUsers sync.Map // ws用户对应的多个客户端id [uid:clientIds] + wsGroup sync.Map // ws组对应的多个客户端id [groupId:clientIds] +) - // ClientCreate 客户端新建 - // - // uid 登录用户ID - // groupIDs 用户订阅组 - // conn ws连接实例 - // childConn 子连接实例 - ClientCreate(uid string, groupIDs []string, conn *websocket.Conn, childConn any) *model.WSClient +// NewWS 实例化服务层 WS 结构体 +var NewWS = &WS{} - // ClientClose 客户端关闭 - ClientClose(clientID string) +// WS WebSocket通信 服务层处理 +type WS struct{} - // ClientReadListen 客户端读取消息监听 - // receiveType 根据接收类型进行消息处理 - ClientReadListen(wsClient *model.WSClient, receiveType int) - - // ClientWriteListen 客户端写入消息监听 - ClientWriteListen(wsClient *model.WSClient) +// UpgraderWs http升级ws请求 +func (s *WS) UpgraderWs(w http.ResponseWriter, r *http.Request) *websocket.Conn { + wsUpgrader := websocket.Upgrader{ + Subprotocols: []string{"omc-ws"}, + // 设置消息发送缓冲区大小(byte),如果这个值设置得太小,可能会导致服务端在发送大型消息时遇到问题 + WriteBufferSize: 1024, + // 消息包启用压缩 + EnableCompression: true, + // ws握手超时时间 + HandshakeTimeout: 5 * time.Second, + // ws握手过程中允许跨域 + CheckOrigin: func(r *http.Request) bool { + return true + }, + } + conn, err := wsUpgrader.Upgrade(w, r, nil) + if err != nil { + logger.Errorf("ws Upgrade err: %s", err.Error()) + } + return conn +} + +// ClientCreate 客户端新建 +// +// uid 登录用户ID +// groupIDs 用户订阅组 +// conn ws连接实例 +// childConn 子连接实例 +func (s *WS) ClientCreate(uid string, groupIDs []string, conn *websocket.Conn, childConn any) *model.WSClient { + // clientID也可以用其他方式生成,只要能保证在所有服务端中都能保证唯一即可 + clientID := generate.Code(16) + + wsClient := &model.WSClient{ + ID: clientID, + Conn: conn, + LastHeartbeat: time.Now().UnixMilli(), + BindUid: uid, + SubGroup: groupIDs, + MsgChan: make(chan []byte, 100), + StopChan: make(chan struct{}, 1), // 卡死循环标记 + ChildConn: childConn, + } + + // 存入客户端 + wsClients.Store(clientID, wsClient) + + // 存入用户持有客户端 + if uid != "" { + if v, ok := wsUsers.Load(uid); ok { + uidClientIds := v.(*[]string) + *uidClientIds = append(*uidClientIds, clientID) + } else { + wsUsers.Store(uid, &[]string{clientID}) + } + } + + // 存入用户订阅组 + if uid != "" && len(groupIDs) > 0 { + for _, groupID := range groupIDs { + if v, ok := wsGroup.Load(groupID); ok { + groupClientIds := v.(*[]string) + *groupClientIds = append(*groupClientIds, clientID) + } else { + wsGroup.Store(groupID, &[]string{clientID}) + } + } + } + + return wsClient +} + +// ClientClose 客户端关闭 +func (s *WS) ClientClose(clientID string) { + v, ok := wsClients.Load(clientID) + if !ok { + return + } + + client := v.(*model.WSClient) + defer func() { + client.MsgChan <- []byte("ws:close") + client.StopChan <- struct{}{} + client.Conn.Close() + wsClients.Delete(clientID) + }() + + // 客户端断线时自动踢出Uid绑定列表 + if client.BindUid != "" { + if v, ok := wsUsers.Load(client.BindUid); ok { + uidClientIds := v.(*[]string) + if len(*uidClientIds) > 0 { + tempClientIds := make([]string, 0, len(*uidClientIds)) + for _, v := range *uidClientIds { + if v != client.ID { + tempClientIds = append(tempClientIds, v) + } + } + *uidClientIds = tempClientIds + } + } + } + + // 客户端断线时自动踢出已加入的组 + if len(client.SubGroup) > 0 { + for _, groupID := range client.SubGroup { + v, ok := wsGroup.Load(groupID) + if !ok { + continue + } + groupClientIds := v.(*[]string) + if len(*groupClientIds) > 0 { + tempClientIds := make([]string, 0, len(*groupClientIds)) + for _, v := range *groupClientIds { + if v != client.ID { + tempClientIds = append(tempClientIds, v) + } + } + *groupClientIds = tempClientIds + } + } + } +} + +// ClientReadListen 客户端读取消息监听 +// receiveType 根据接收类型进行消息处理 +func (s *WS) ClientReadListen(wsClient *model.WSClient, receiveType int) { + defer func() { + if err := recover(); err != nil { + logger.Errorf("ws ReadMessage Panic Error: %v", err) + } + }() + for { + // 读取消息 + messageType, msg, err := wsClient.Conn.ReadMessage() + if err != nil { + logger.Warnf("ws ReadMessage UID %s err: %s", wsClient.BindUid, err.Error()) + s.ClientClose(wsClient.ID) + return + } + // fmt.Println(messageType, string(msg)) + + // 文本 只处理文本json + if messageType == websocket.TextMessage { + var reqMsg model.WSRequest + if err := json.Unmarshal(msg, &reqMsg); err != nil { + msgByte, _ := json.Marshal(result.ErrMsg("message format json error")) + wsClient.MsgChan <- msgByte + continue + } + // 接收器处理 + switch receiveType { + case ReceiveCommont: + go NewWSReceive.Commont(wsClient, reqMsg) + case ReceiveShell: + go NewWSReceive.Shell(wsClient, reqMsg) + case ReceiveShellView: + go NewWSReceive.ShellView(wsClient, reqMsg) + case ReceiveTelnet: + go NewWSReceive.Telnet(wsClient, reqMsg) + } + } + } +} + +// ClientWriteListen 客户端写入消息监听 +func (s *WS) ClientWriteListen(wsClient *model.WSClient) { + defer func() { + if err := recover(); err != nil { + logger.Errorf("ws WriteMessage Panic Error: %v", err) + } + }() + // 发客户端id确认是否连接 + msgByte, _ := json.Marshal(result.OkData(map[string]string{ + "clientId": wsClient.ID, + })) + wsClient.MsgChan <- msgByte + // 消息发送监听 + for msg := range wsClient.MsgChan { + // 关闭句柄 + if string(msg) == "ws:close" { + wsClient.Conn.WriteMessage(websocket.CloseMessage, []byte{}) + return + } + // 发送消息 + err := wsClient.Conn.WriteMessage(websocket.TextMessage, msg) + if err != nil { + logger.Warnf("ws WriteMessage UID %s err: %s", wsClient.BindUid, err.Error()) + s.ClientClose(wsClient.ID) + return + } + wsClient.LastHeartbeat = time.Now().UnixMilli() + } } diff --git a/src/modules/ws/service/ws.impl.go b/src/modules/ws/service/ws.impl.go deleted file mode 100644 index 33307ba2..00000000 --- a/src/modules/ws/service/ws.impl.go +++ /dev/null @@ -1,220 +0,0 @@ -package service - -import ( - "encoding/json" - "net/http" - "sync" - "time" - - "be.ems/src/framework/logger" - "be.ems/src/framework/utils/generate" - "be.ems/src/framework/vo/result" - "be.ems/src/modules/ws/model" - "github.com/gorilla/websocket" -) - -var ( - wsClients sync.Map // ws客户端 [clientId: client] - wsUsers sync.Map // ws用户对应的多个客户端id [uid:clientIds] - wsGroup sync.Map // ws组对应的多个客户端id [groupId:clientIds] -) - -// NewWSImpl 实例化服务层 WSImpl 结构体 -var NewWSImpl = &WSImpl{} - -// WSImpl WebSocket通信 服务层处理 -type WSImpl struct{} - -// UpgraderWs http升级ws请求 -func (s *WSImpl) UpgraderWs(w http.ResponseWriter, r *http.Request) *websocket.Conn { - wsUpgrader := websocket.Upgrader{ - Subprotocols: []string{"omc-ws"}, - // 设置消息发送缓冲区大小(byte),如果这个值设置得太小,可能会导致服务端在发送大型消息时遇到问题 - WriteBufferSize: 1024, - // 消息包启用压缩 - EnableCompression: true, - // ws握手超时时间 - HandshakeTimeout: 5 * time.Second, - // ws握手过程中允许跨域 - CheckOrigin: func(r *http.Request) bool { - return true - }, - } - conn, err := wsUpgrader.Upgrade(w, r, nil) - if err != nil { - logger.Errorf("ws Upgrade err: %s", err.Error()) - } - return conn -} - -// ClientCreate 客户端新建 -// -// uid 登录用户ID -// groupIDs 用户订阅组 -// conn ws连接实例 -// childConn 子连接实例 -func (s *WSImpl) ClientCreate(uid string, groupIDs []string, conn *websocket.Conn, childConn any) *model.WSClient { - // clientID也可以用其他方式生成,只要能保证在所有服务端中都能保证唯一即可 - clientID := generate.Code(16) - - wsClient := &model.WSClient{ - ID: clientID, - Conn: conn, - LastHeartbeat: time.Now().UnixMilli(), - BindUid: uid, - SubGroup: groupIDs, - MsgChan: make(chan []byte, 100), - StopChan: make(chan struct{}, 1), // 卡死循环标记 - ChildConn: childConn, - } - - // 存入客户端 - wsClients.Store(clientID, wsClient) - - // 存入用户持有客户端 - if uid != "" { - if v, ok := wsUsers.Load(uid); ok { - uidClientIds := v.(*[]string) - *uidClientIds = append(*uidClientIds, clientID) - } else { - wsUsers.Store(uid, &[]string{clientID}) - } - } - - // 存入用户订阅组 - if uid != "" && len(groupIDs) > 0 { - for _, groupID := range groupIDs { - if v, ok := wsGroup.Load(groupID); ok { - groupClientIds := v.(*[]string) - *groupClientIds = append(*groupClientIds, clientID) - } else { - wsGroup.Store(groupID, &[]string{clientID}) - } - } - } - - return wsClient -} - -// ClientClose 客户端关闭 -func (s *WSImpl) ClientClose(clientID string) { - v, ok := wsClients.Load(clientID) - if !ok { - return - } - - client := v.(*model.WSClient) - defer func() { - client.MsgChan <- []byte("ws:close") - client.StopChan <- struct{}{} - client.Conn.Close() - wsClients.Delete(clientID) - }() - - // 客户端断线时自动踢出Uid绑定列表 - if client.BindUid != "" { - if v, ok := wsUsers.Load(client.BindUid); ok { - uidClientIds := v.(*[]string) - if len(*uidClientIds) > 0 { - tempClientIds := make([]string, 0, len(*uidClientIds)) - for _, v := range *uidClientIds { - if v != client.ID { - tempClientIds = append(tempClientIds, v) - } - } - *uidClientIds = tempClientIds - } - } - } - - // 客户端断线时自动踢出已加入的组 - if len(client.SubGroup) > 0 { - for _, groupID := range client.SubGroup { - v, ok := wsGroup.Load(groupID) - if !ok { - continue - } - groupClientIds := v.(*[]string) - if len(*groupClientIds) > 0 { - tempClientIds := make([]string, 0, len(*groupClientIds)) - for _, v := range *groupClientIds { - if v != client.ID { - tempClientIds = append(tempClientIds, v) - } - } - *groupClientIds = tempClientIds - } - } - } -} - -// ClientReadListen 客户端读取消息监听 -// receiveType 根据接收类型进行消息处理 -func (s *WSImpl) ClientReadListen(wsClient *model.WSClient, receiveType int) { - defer func() { - if err := recover(); err != nil { - logger.Errorf("ws ReadMessage Panic Error: %v", err) - } - }() - for { - // 读取消息 - messageType, msg, err := wsClient.Conn.ReadMessage() - if err != nil { - logger.Warnf("ws ReadMessage UID %s err: %s", wsClient.BindUid, err.Error()) - s.ClientClose(wsClient.ID) - return - } - // fmt.Println(messageType, string(msg)) - - // 文本 只处理文本json - if messageType == websocket.TextMessage { - var reqMsg model.WSRequest - if err := json.Unmarshal(msg, &reqMsg); err != nil { - msgByte, _ := json.Marshal(result.ErrMsg("message format json error")) - wsClient.MsgChan <- msgByte - continue - } - // 接收器处理 - switch receiveType { - case ReceiveCommont: - go NewWSReceiveImpl.Commont(wsClient, reqMsg) - case ReceiveShell: - go NewWSReceiveImpl.Shell(wsClient, reqMsg) - case ReceiveShellView: - go NewWSReceiveImpl.ShellView(wsClient, reqMsg) - case ReceiveTelnet: - go NewWSReceiveImpl.Telnet(wsClient, reqMsg) - } - } - } -} - -// ClientWriteListen 客户端写入消息监听 -func (s *WSImpl) ClientWriteListen(wsClient *model.WSClient) { - defer func() { - if err := recover(); err != nil { - logger.Errorf("ws WriteMessage Panic Error: %v", err) - } - }() - // 发客户端id确认是否连接 - msgByte, _ := json.Marshal(result.OkData(map[string]string{ - "clientId": wsClient.ID, - })) - wsClient.MsgChan <- msgByte - // 消息发送监听 - for msg := range wsClient.MsgChan { - // 关闭句柄 - if string(msg) == "ws:close" { - wsClient.Conn.WriteMessage(websocket.CloseMessage, []byte{}) - return - } - // 发送消息 - err := wsClient.Conn.WriteMessage(websocket.TextMessage, msg) - if err != nil { - logger.Warnf("ws WriteMessage UID %s err: %s", wsClient.BindUid, err.Error()) - s.ClientClose(wsClient.ID) - return - } - wsClient.LastHeartbeat = time.Now().UnixMilli() - } -} diff --git a/src/modules/ws/service/ws_receive.go b/src/modules/ws/service/ws_receive.go index 0372c39c..68ec9bdd 100644 --- a/src/modules/ws/service/ws_receive.go +++ b/src/modules/ws/service/ws_receive.go @@ -1,6 +1,18 @@ package service -import "be.ems/src/modules/ws/model" +import ( + "encoding/json" + "fmt" + "io" + "time" + + "be.ems/src/framework/logger" + "be.ems/src/framework/telnet" + "be.ems/src/framework/utils/ssh" + "be.ems/src/framework/vo/result" + "be.ems/src/modules/ws/model" + "be.ems/src/modules/ws/processor" +) const ( ReceiveCommont = iota // Commont 接收通用业务处理 @@ -9,17 +21,245 @@ const ( ReceiveTelnet // Telnet 接收终端交互业务处理 ) -// IWSReceive WebSocket消息接收处理 服务层接口 -type IWSReceive interface { - // Commont 接收通用业务处理 - Commont(client *model.WSClient, reqMsg model.WSRequest) +// 实例化服务层 WSReceive 结构体 +var NewWSReceive = &WSReceive{} - // Shell 接收终端交互业务处理 - Shell(client *model.WSClient, reqMsg model.WSRequest) +// WSReceive WebSocket消息接收处理 服务层处理 +type WSReceive struct{} - // ShellView 接收查看文件终端交互业务处理 - ShellView(client *model.WSClient, reqMsg model.WSRequest) - - // Telnet 接收终端交互业务处理 - Telnet(client *model.WSClient, reqMsg model.WSRequest) +// close 关闭服务连接 +func (s *WSReceive) close(client *model.WSClient) { + // 主动关闭 + resultByte, _ := json.Marshal(result.OkMsg("user initiated closure")) + client.MsgChan <- resultByte + // 等待1s后关闭连接 + time.Sleep(1 * time.Second) + NewWS.ClientClose(client.ID) +} + +// Commont 接收通用业务处理 +func (s *WSReceive) Commont(client *model.WSClient, reqMsg model.WSRequest) { + // 必传requestId确认消息 + if reqMsg.RequestID == "" { + msg := "message requestId is required" + logger.Infof("ws Commont UID %s err: %s", client.BindUid, msg) + msgByte, _ := json.Marshal(result.ErrMsg(msg)) + client.MsgChan <- msgByte + return + } + + var resByte []byte + var err error + + switch reqMsg.Type { + case "close": + s.close(client) + return + case "ps": + resByte, err = processor.GetProcessData(reqMsg.RequestID, reqMsg.Data) + case "net": + resByte, err = processor.GetNetConnections(reqMsg.RequestID, reqMsg.Data) + case "ims_cdr": + resByte, err = processor.GetCDRConnectByIMS(reqMsg.RequestID, reqMsg.Data) + case "smf_cdr": + resByte, err = processor.GetCDRConnectBySMF(reqMsg.RequestID, reqMsg.Data) + case "smsc_cdr": + resByte, err = processor.GetCDRConnectBySMSC(reqMsg.RequestID, reqMsg.Data) + case "amf_ue": + resByte, err = processor.GetUEConnectByAMF(reqMsg.RequestID, reqMsg.Data) + case "mme_ue": + resByte, err = processor.GetUEConnectByMME(reqMsg.RequestID, reqMsg.Data) + case "upf_tf": + resByte, err = processor.GetUPFTotalFlow(reqMsg.RequestID, reqMsg.Data) + case "ne_state": + resByte, err = processor.GetNeState(reqMsg.RequestID, reqMsg.Data) + default: + err = fmt.Errorf("message type %s not supported", reqMsg.Type) + } + + if err != nil { + logger.Warnf("ws Commont UID %s err: %s", client.BindUid, err.Error()) + msgByte, _ := json.Marshal(result.ErrMsg(err.Error())) + client.MsgChan <- msgByte + return + } + if len(resByte) > 0 { + client.MsgChan <- resByte + } +} + +// Shell 接收终端交互业务处理 +func (s *WSReceive) Shell(client *model.WSClient, reqMsg model.WSRequest) { + // 必传requestId确认消息 + if reqMsg.RequestID == "" { + msg := "message requestId is required" + logger.Infof("ws Shell UID %s err: %s", client.BindUid, msg) + msgByte, _ := json.Marshal(result.ErrMsg(msg)) + client.MsgChan <- msgByte + return + } + + var resByte []byte + var err error + + switch reqMsg.Type { + case "close": + s.close(client) + return + case "ssh": + // SSH会话消息接收写入会话 + command := reqMsg.Data.(string) + sshClientSession := client.ChildConn.(*ssh.SSHClientSession) + _, err = sshClientSession.Write(command) + case "ssh_resize": + // SSH会话窗口重置 + msgByte, _ := json.Marshal(reqMsg.Data) + var data struct { + Cols int `json:"cols"` + Rows int `json:"rows"` + } + err = json.Unmarshal(msgByte, &data) + if err == nil { + sshClientSession := client.ChildConn.(*ssh.SSHClientSession) + err = sshClientSession.Session.WindowChange(data.Rows, data.Cols) + } + default: + err = fmt.Errorf("message type %s not supported", reqMsg.Type) + } + + if err != nil { + logger.Warnf("ws Shell UID %s err: %s", client.BindUid, err.Error()) + msgByte, _ := json.Marshal(result.ErrMsg(err.Error())) + client.MsgChan <- msgByte + if err == io.EOF { + // 等待1s后关闭连接 + time.Sleep(1 * time.Second) + client.StopChan <- struct{}{} + } + return + } + if len(resByte) > 0 { + client.MsgChan <- resByte + } +} + +// ShellView 接收查看文件终端交互业务处理 +func (s *WSReceive) ShellView(client *model.WSClient, reqMsg model.WSRequest) { + // 必传requestId确认消息 + if reqMsg.RequestID == "" { + msg := "message requestId is required" + logger.Infof("ws ShellView UID %s err: %s", client.BindUid, msg) + msgByte, _ := json.Marshal(result.ErrMsg(msg)) + client.MsgChan <- msgByte + return + } + + var resByte []byte + var err error + + switch reqMsg.Type { + case "close": + s.close(client) + return + case "cat", "tail": + var command string + if reqMsg.Type == "cat" { + command, err = processor.ParseCat(reqMsg.Data) + } + if reqMsg.Type == "tail" { + command, err = processor.ParseTail(reqMsg.Data) + } + if command != "" && err == nil { + sshClientSession := client.ChildConn.(*ssh.SSHClientSession) + _, err = sshClientSession.Write(command) + } + case "ctrl-c": + // 模拟按下 Ctrl+C + sshClientSession := client.ChildConn.(*ssh.SSHClientSession) + _, err = sshClientSession.Write("\u0003\n") + case "resize": + // 会话窗口重置 + msgByte, _ := json.Marshal(reqMsg.Data) + var data struct { + Cols int `json:"cols"` + Rows int `json:"rows"` + } + err = json.Unmarshal(msgByte, &data) + if err == nil { + sshClientSession := client.ChildConn.(*ssh.SSHClientSession) + err = sshClientSession.Session.WindowChange(data.Rows, data.Cols) + } + default: + err = fmt.Errorf("message type %s not supported", reqMsg.Type) + } + + if err != nil { + logger.Warnf("ws ShellView UID %s err: %s", client.BindUid, err.Error()) + msgByte, _ := json.Marshal(result.ErrMsg(err.Error())) + client.MsgChan <- msgByte + if err == io.EOF { + // 等待1s后关闭连接 + time.Sleep(1 * time.Second) + client.StopChan <- struct{}{} + } + return + } + if len(resByte) > 0 { + client.MsgChan <- resByte + } +} + +// Telnet 接收终端交互业务处理 +func (s *WSReceive) Telnet(client *model.WSClient, reqMsg model.WSRequest) { + // 必传requestId确认消息 + if reqMsg.RequestID == "" { + msg := "message requestId is required" + logger.Infof("ws Shell UID %s err: %s", client.BindUid, msg) + msgByte, _ := json.Marshal(result.ErrMsg(msg)) + client.MsgChan <- msgByte + return + } + + var resByte []byte + var err error + + switch reqMsg.Type { + case "close": + s.close(client) + return + case "telnet": + // Telnet会话消息接收写入会话 + command := reqMsg.Data.(string) + telnetClientSession := client.ChildConn.(*telnet.TelnetClientSession) + _, err = telnetClientSession.Write(command) + case "telnet_resize": + // Telnet会话窗口重置 + msgByte, _ := json.Marshal(reqMsg.Data) + var data struct { + Cols int `json:"cols"` + Rows int `json:"rows"` + } + err = json.Unmarshal(msgByte, &data) + if err == nil { + // telnetClientSession := client.ChildConn.(*telnet.TelnetClientSession) + // _ = telnetClientSession.WindowChange(data.Rows, data.Cols) + } + default: + err = fmt.Errorf("message type %s not supported", reqMsg.Type) + } + + if err != nil { + logger.Warnf("ws Shell UID %s err: %s", client.BindUid, err.Error()) + msgByte, _ := json.Marshal(result.ErrMsg(err.Error())) + client.MsgChan <- msgByte + if err == io.EOF { + // 等待1s后关闭连接 + time.Sleep(1 * time.Second) + client.StopChan <- struct{}{} + } + return + } + if len(resByte) > 0 { + client.MsgChan <- resByte + } } diff --git a/src/modules/ws/service/ws_receive.impl.go b/src/modules/ws/service/ws_receive.impl.go deleted file mode 100644 index 918efcc5..00000000 --- a/src/modules/ws/service/ws_receive.impl.go +++ /dev/null @@ -1,258 +0,0 @@ -package service - -import ( - "encoding/json" - "fmt" - "io" - "time" - - "be.ems/src/framework/logger" - "be.ems/src/framework/telnet" - "be.ems/src/framework/utils/ssh" - "be.ems/src/framework/vo/result" - "be.ems/src/modules/ws/model" - "be.ems/src/modules/ws/processor" -) - -// 实例化服务层 WSReceiveImpl 结构体 -var NewWSReceiveImpl = &WSReceiveImpl{} - -// WSReceiveImpl WebSocket消息接收处理 服务层处理 -type WSReceiveImpl struct{} - -// Commont 接收通用业务处理 -func (s *WSReceiveImpl) close(client *model.WSClient) { - // 主动关闭 - resultByte, _ := json.Marshal(result.OkMsg("user initiated closure")) - client.MsgChan <- resultByte - // 等待1s后关闭连接 - time.Sleep(1 * time.Second) - NewWSImpl.ClientClose(client.ID) -} - -// Commont 接收通用业务处理 -func (s *WSReceiveImpl) Commont(client *model.WSClient, reqMsg model.WSRequest) { - // 必传requestId确认消息 - if reqMsg.RequestID == "" { - msg := "message requestId is required" - logger.Infof("ws Commont UID %s err: %s", client.BindUid, msg) - msgByte, _ := json.Marshal(result.ErrMsg(msg)) - client.MsgChan <- msgByte - return - } - - var resByte []byte - var err error - - switch reqMsg.Type { - case "close": - s.close(client) - return - case "ps": - resByte, err = processor.GetProcessData(reqMsg.RequestID, reqMsg.Data) - case "net": - resByte, err = processor.GetNetConnections(reqMsg.RequestID, reqMsg.Data) - case "ims_cdr": - resByte, err = processor.GetCDRConnectByIMS(reqMsg.RequestID, reqMsg.Data) - case "smf_cdr": - resByte, err = processor.GetCDRConnectBySMF(reqMsg.RequestID, reqMsg.Data) - case "smsc_cdr": - resByte, err = processor.GetCDRConnectBySMSC(reqMsg.RequestID, reqMsg.Data) - case "amf_ue": - resByte, err = processor.GetUEConnectByAMF(reqMsg.RequestID, reqMsg.Data) - case "mme_ue": - resByte, err = processor.GetUEConnectByMME(reqMsg.RequestID, reqMsg.Data) - case "upf_tf": - resByte, err = processor.GetUPFTotalFlow(reqMsg.RequestID, reqMsg.Data) - case "ne_state": - resByte, err = processor.GetNeState(reqMsg.RequestID, reqMsg.Data) - default: - err = fmt.Errorf("message type %s not supported", reqMsg.Type) - } - - if err != nil { - logger.Warnf("ws Commont UID %s err: %s", client.BindUid, err.Error()) - msgByte, _ := json.Marshal(result.ErrMsg(err.Error())) - client.MsgChan <- msgByte - return - } - if len(resByte) > 0 { - client.MsgChan <- resByte - } -} - -// Shell 接收终端交互业务处理 -func (s *WSReceiveImpl) Shell(client *model.WSClient, reqMsg model.WSRequest) { - // 必传requestId确认消息 - if reqMsg.RequestID == "" { - msg := "message requestId is required" - logger.Infof("ws Shell UID %s err: %s", client.BindUid, msg) - msgByte, _ := json.Marshal(result.ErrMsg(msg)) - client.MsgChan <- msgByte - return - } - - var resByte []byte - var err error - - switch reqMsg.Type { - case "close": - s.close(client) - return - case "ssh": - // SSH会话消息接收写入会话 - command := reqMsg.Data.(string) - sshClientSession := client.ChildConn.(*ssh.SSHClientSession) - _, err = sshClientSession.Write(command) - case "ssh_resize": - // SSH会话窗口重置 - msgByte, _ := json.Marshal(reqMsg.Data) - var data struct { - Cols int `json:"cols"` - Rows int `json:"rows"` - } - err = json.Unmarshal(msgByte, &data) - if err == nil { - sshClientSession := client.ChildConn.(*ssh.SSHClientSession) - err = sshClientSession.Session.WindowChange(data.Rows, data.Cols) - } - default: - err = fmt.Errorf("message type %s not supported", reqMsg.Type) - } - - if err != nil { - logger.Warnf("ws Shell UID %s err: %s", client.BindUid, err.Error()) - msgByte, _ := json.Marshal(result.ErrMsg(err.Error())) - client.MsgChan <- msgByte - if err == io.EOF { - // 等待1s后关闭连接 - time.Sleep(1 * time.Second) - client.StopChan <- struct{}{} - } - return - } - if len(resByte) > 0 { - client.MsgChan <- resByte - } -} - -// ShellView 接收查看文件终端交互业务处理 -func (s *WSReceiveImpl) ShellView(client *model.WSClient, reqMsg model.WSRequest) { - // 必传requestId确认消息 - if reqMsg.RequestID == "" { - msg := "message requestId is required" - logger.Infof("ws ShellView UID %s err: %s", client.BindUid, msg) - msgByte, _ := json.Marshal(result.ErrMsg(msg)) - client.MsgChan <- msgByte - return - } - - var resByte []byte - var err error - - switch reqMsg.Type { - case "close": - s.close(client) - return - case "cat", "tail": - var command string - if reqMsg.Type == "cat" { - command, err = processor.ParseCat(reqMsg.Data) - } - if reqMsg.Type == "tail" { - command, err = processor.ParseTail(reqMsg.Data) - } - if command != "" && err == nil { - sshClientSession := client.ChildConn.(*ssh.SSHClientSession) - _, err = sshClientSession.Write(command) - } - case "ctrl-c": - // 模拟按下 Ctrl+C - sshClientSession := client.ChildConn.(*ssh.SSHClientSession) - _, err = sshClientSession.Write("\u0003\n") - case "resize": - // 会话窗口重置 - msgByte, _ := json.Marshal(reqMsg.Data) - var data struct { - Cols int `json:"cols"` - Rows int `json:"rows"` - } - err = json.Unmarshal(msgByte, &data) - if err == nil { - sshClientSession := client.ChildConn.(*ssh.SSHClientSession) - err = sshClientSession.Session.WindowChange(data.Rows, data.Cols) - } - default: - err = fmt.Errorf("message type %s not supported", reqMsg.Type) - } - - if err != nil { - logger.Warnf("ws ShellView UID %s err: %s", client.BindUid, err.Error()) - msgByte, _ := json.Marshal(result.ErrMsg(err.Error())) - client.MsgChan <- msgByte - if err == io.EOF { - // 等待1s后关闭连接 - time.Sleep(1 * time.Second) - client.StopChan <- struct{}{} - } - return - } - if len(resByte) > 0 { - client.MsgChan <- resByte - } -} - -// Telnet 接收终端交互业务处理 -func (s *WSReceiveImpl) Telnet(client *model.WSClient, reqMsg model.WSRequest) { - // 必传requestId确认消息 - if reqMsg.RequestID == "" { - msg := "message requestId is required" - logger.Infof("ws Shell UID %s err: %s", client.BindUid, msg) - msgByte, _ := json.Marshal(result.ErrMsg(msg)) - client.MsgChan <- msgByte - return - } - - var resByte []byte - var err error - - switch reqMsg.Type { - case "close": - s.close(client) - return - case "telnet": - // Telnet会话消息接收写入会话 - command := reqMsg.Data.(string) - telnetClientSession := client.ChildConn.(*telnet.TelnetClientSession) - _, err = telnetClientSession.Write(command) - case "telnet_resize": - // Telnet会话窗口重置 - msgByte, _ := json.Marshal(reqMsg.Data) - var data struct { - Cols int `json:"cols"` - Rows int `json:"rows"` - } - err = json.Unmarshal(msgByte, &data) - if err == nil { - // telnetClientSession := client.ChildConn.(*telnet.TelnetClientSession) - // _ = telnetClientSession.WindowChange(data.Rows, data.Cols) - } - default: - err = fmt.Errorf("message type %s not supported", reqMsg.Type) - } - - if err != nil { - logger.Warnf("ws Shell UID %s err: %s", client.BindUid, err.Error()) - msgByte, _ := json.Marshal(result.ErrMsg(err.Error())) - client.MsgChan <- msgByte - if err == io.EOF { - // 等待1s后关闭连接 - time.Sleep(1 * time.Second) - client.StopChan <- struct{}{} - } - return - } - if len(resByte) > 0 { - client.MsgChan <- resByte - } -} diff --git a/src/modules/ws/service/ws_send.go b/src/modules/ws/service/ws_send.go index 91e48b14..04fff1f9 100644 --- a/src/modules/ws/service/ws_send.go +++ b/src/modules/ws/service/ws_send.go @@ -1,10 +1,87 @@ package service -// IWSSend WebSocket消息发送处理 服务层接口 -type IWSSend interface { - // ByClientID 给已知客户端发消息 - ByClientID(clientID string, data any) error +import ( + "encoding/json" + "fmt" - // ByGroupID 给订阅组的客户端发送消息 - ByGroupID(gid string, data any) error + "be.ems/src/framework/vo/result" + "be.ems/src/modules/ws/model" +) + +// 订阅组指定编号为支持服务器向客户端主动推送数据 +const ( + // 组号-其他 + GROUP_OTHER = "0" + // 组号-跟踪任务数据变更 2_traceId + GROUP_TRACE = "2_" + // 组号-指标通用 10_neType_neId + GROUP_KPI = "10_" + // 组号-指标UPF 12_neId + GROUP_KPI_UPF = "12_" + // 组号-自定义KPI指标20_neType_neId + GROUP_KPI_C = "20_" + // 组号-IMS_CDR会话事件 1005_neId + GROUP_IMS_CDR = "1005_" + // 组号-SMF_CDR会话事件 1006_neId + GROUP_SMF_CDR = "1006_" + // 组号-SMSC_CDR会话事件 1007_neId + GROUP_SMSC_CDR = "1007_" + // 组号-AMF_UE会话事件 + GROUP_AMF_UE = "1010" + // 组号-MME_UE会话事件 1011_neId + GROUP_MME_UE = "1011_" +) + +// 实例化服务层 WSSend 结构体 +var NewWSSend = &WSSend{} + +// WSSend WebSocket消息发送处理 服务层处理 +type WSSend struct{} + +// ByClientID 给已知客户端发消息 +func (s *WSSend) ByClientID(clientID string, data any) error { + v, ok := wsClients.Load(clientID) + if !ok { + return fmt.Errorf("no fount client ID: %s", clientID) + } + + dataByte, err := json.Marshal(result.OkData(data)) + if err != nil { + return err + } + + client := v.(*model.WSClient) + if len(client.MsgChan) > 90 { + NewWS.ClientClose(client.ID) + return fmt.Errorf("msg chan over 90 will close client ID: %s", clientID) + } + client.MsgChan <- dataByte + return nil +} + +// ByGroupID 给订阅组的客户端发送消息 +func (s *WSSend) ByGroupID(groupID string, data any) error { + clientIds, ok := wsGroup.Load(groupID) + if !ok { + return fmt.Errorf("no fount Group ID: %s", groupID) + } + + // 检查组内是否有客户端 + ids := clientIds.(*[]string) + if len(*ids) == 0 { + return fmt.Errorf("no members in the group") + } + + // 遍历给客户端发消息 + for _, clientId := range *ids { + err := s.ByClientID(clientId, map[string]any{ + "groupId": groupID, + "data": data, + }) + if err != nil { + continue + } + } + + return nil } diff --git a/src/modules/ws/service/ws_send.impl.go b/src/modules/ws/service/ws_send.impl.go deleted file mode 100644 index 969b2688..00000000 --- a/src/modules/ws/service/ws_send.impl.go +++ /dev/null @@ -1,87 +0,0 @@ -package service - -import ( - "encoding/json" - "fmt" - - "be.ems/src/framework/vo/result" - "be.ems/src/modules/ws/model" -) - -// 订阅组指定编号为支持服务器向客户端主动推送数据 -const ( - // 组号-其他 - GROUP_OTHER = "0" - // 组号-跟踪任务数据变更 2_traceId - GROUP_TRACE = "2_" - // 组号-指标通用 10_neType_neId - GROUP_KPI = "10_" - // 组号-指标UPF 12_neId - GROUP_KPI_UPF = "12_" - // 组号-自定义KPI指标20_neType_neId - GROUP_KPI_C = "20_" - // 组号-IMS_CDR会话事件 1005_neId - GROUP_IMS_CDR = "1005_" - // 组号-SMF_CDR会话事件 1006_neId - GROUP_SMF_CDR = "1006_" - // 组号-SMSC_CDR会话事件 1007_neId - GROUP_SMSC_CDR = "1007_" - // 组号-AMF_UE会话事件 - GROUP_AMF_UE = "1010" - // 组号-MME_UE会话事件 1011_neId - GROUP_MME_UE = "1011_" -) - -// 实例化服务层 WSSendImpl 结构体 -var NewWSSendImpl = &WSSendImpl{} - -// IWSSend WebSocket消息发送处理 服务层处理 -type WSSendImpl struct{} - -// ByClientID 给已知客户端发消息 -func (s *WSSendImpl) ByClientID(clientID string, data any) error { - v, ok := wsClients.Load(clientID) - if !ok { - return fmt.Errorf("no fount client ID: %s", clientID) - } - - dataByte, err := json.Marshal(result.OkData(data)) - if err != nil { - return err - } - - client := v.(*model.WSClient) - if len(client.MsgChan) > 90 { - NewWSImpl.ClientClose(client.ID) - return fmt.Errorf("msg chan over 90 will close client ID: %s", clientID) - } - client.MsgChan <- dataByte - return nil -} - -// ByGroupID 给订阅组的客户端发送消息 -func (s *WSSendImpl) ByGroupID(groupID string, data any) error { - clientIds, ok := wsGroup.Load(groupID) - if !ok { - return fmt.Errorf("no fount Group ID: %s", groupID) - } - - // 检查组内是否有客户端 - ids := clientIds.(*[]string) - if len(*ids) == 0 { - return fmt.Errorf("no members in the group") - } - - // 遍历给客户端发消息 - for _, clientId := range *ids { - err := s.ByClientID(clientId, map[string]any{ - "groupId": groupID, - "data": data, - }) - if err != nil { - continue - } - } - - return nil -} From 6f1c94bf0d55c624d03768773b23d51885946d25 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 25 Sep 2024 09:37:44 +0800 Subject: [PATCH 10/17] =?UTF-8?q?style:=20=E5=8F=98=E6=9B=B4trace=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E5=87=BD=E6=95=B0=E5=AE=9E=E4=BE=8B=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/trace/controller/tcpdump.go | 32 ++++++++++++------------- src/modules/trace/trace.go | 18 +++++++------- 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/src/modules/trace/controller/tcpdump.go b/src/modules/trace/controller/tcpdump.go index 0f0d7bd0..9ef6fa60 100644 --- a/src/modules/trace/controller/tcpdump.go +++ b/src/modules/trace/controller/tcpdump.go @@ -13,26 +13,24 @@ import ( "github.com/gin-gonic/gin/binding" ) -// 实例化控制层 TcpdumpController 结构体 -var NewTcpdump = &TcpdumpController{ - TcpdumpService: traceService.NewTCPdump, +// 实例化控制层 TCPdumpController 结构体 +var NewTCPdump = &TCPdumpController{ + tcpdumpService: traceService.NewTCPdump, neInfoService: neService.NewNeInfoImpl, } -// 信令抓包请求 +// 信令抓包 // // PATH /tcpdump -type TcpdumpController struct { - // 信令抓包服务 - TcpdumpService *traceService.TCPdump - // 网元信息服务 - neInfoService neService.INeInfo +type TCPdumpController struct { + tcpdumpService *traceService.TCPdump // 信令抓包服务 + neInfoService neService.INeInfo // 网元信息服务 } // 网元抓包PACP 开始 // // POST /start -func (s *TcpdumpController) DumpStart(c *gin.Context) { +func (s *TCPdumpController) DumpStart(c *gin.Context) { language := ctx.AcceptLanguage(c) var body struct { NeType string `json:"neType" binding:"required"` // 网元类型 @@ -45,7 +43,7 @@ func (s *TcpdumpController) DumpStart(c *gin.Context) { return } - taskCode, err := s.TcpdumpService.DumpStart(body.NeType, body.NeId, body.Cmd) + taskCode, err := s.tcpdumpService.DumpStart(body.NeType, body.NeId, body.Cmd) if err != nil { c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) return @@ -56,7 +54,7 @@ func (s *TcpdumpController) DumpStart(c *gin.Context) { // 网元抓包PACP 结束 // // POST /stop -func (s *TcpdumpController) DumpStop(c *gin.Context) { +func (s *TCPdumpController) DumpStop(c *gin.Context) { language := ctx.AcceptLanguage(c) var body struct { NeType string `json:"neType" binding:"required"` // 网元类型 @@ -69,7 +67,7 @@ func (s *TcpdumpController) DumpStop(c *gin.Context) { return } - taskLog, err := s.TcpdumpService.DumpStop(body.NeType, body.NeId, body.TaskCode) + taskLog, err := s.tcpdumpService.DumpStop(body.NeType, body.NeId, body.TaskCode) if err != nil { c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) return @@ -80,7 +78,7 @@ func (s *TcpdumpController) DumpStop(c *gin.Context) { // 网元抓包PACP 下载 // // GET /download -func (s *TcpdumpController) DumpDownload(c *gin.Context) { +func (s *TCPdumpController) DumpDownload(c *gin.Context) { language := ctx.AcceptLanguage(c) var query struct { NeType string `form:"neType" binding:"required"` // 网元类型 @@ -93,7 +91,7 @@ func (s *TcpdumpController) DumpDownload(c *gin.Context) { return } - zipFilePath, err := s.TcpdumpService.DumpDownload(query.NeType, query.NeID, query.TaskCode) + zipFilePath, err := s.tcpdumpService.DumpDownload(query.NeType, query.NeID, query.TaskCode) if err != nil { c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) return @@ -110,7 +108,7 @@ func (s *TcpdumpController) DumpDownload(c *gin.Context) { // UPF标准版内部抓包 // // POST /upf -func (s *TcpdumpController) UPFTrace(c *gin.Context) { +func (s *TCPdumpController) UPFTrace(c *gin.Context) { language := ctx.AcceptLanguage(c) var body struct { NeType string `json:"neType" binding:"required"` // 网元类型 @@ -123,7 +121,7 @@ func (s *TcpdumpController) UPFTrace(c *gin.Context) { return } - msg, err := s.TcpdumpService.UPFTrace(body.NeType, body.NeId, body.Cmd) + msg, err := s.tcpdumpService.UPFTrace(body.NeType, body.NeId, body.Cmd) if err != nil { c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) return diff --git a/src/modules/trace/trace.go b/src/modules/trace/trace.go index b7e4b399..ca95c661 100644 --- a/src/modules/trace/trace.go +++ b/src/modules/trace/trace.go @@ -17,34 +17,32 @@ func Setup(router *gin.Engine) { // 启动时需要的初始参数 InitLoad() - traceGroup := router.Group("/trace") - // 信令抓包 - tcpdumpGroup := traceGroup.Group("/tcpdump") + tcpdumpGroup := router.Group("/trace/tcpdump") { tcpdumpGroup.POST("/start", middleware.PreAuthorize(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.tcpdump", collectlogs.BUSINESS_TYPE_OTHER)), - controller.NewTcpdump.DumpStart, + controller.NewTCPdump.DumpStart, ) tcpdumpGroup.POST("/stop", middleware.PreAuthorize(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.tcpdump", collectlogs.BUSINESS_TYPE_OTHER)), - controller.NewTcpdump.DumpStop, + controller.NewTCPdump.DumpStop, ) tcpdumpGroup.GET("/download", middleware.PreAuthorize(nil), - controller.NewTcpdump.DumpDownload, + controller.NewTCPdump.DumpDownload, ) tcpdumpGroup.POST("/upf", middleware.PreAuthorize(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.tcpdump", collectlogs.BUSINESS_TYPE_OTHER)), - controller.NewTcpdump.UPFTrace, + controller.NewTCPdump.UPFTrace, ) } // 跟踪任务 网元HLR (免登录) - taskHLRGroup := traceGroup.Group("/task/hlr") + taskHLRGroup := router.Group("/trace/task/hlr") { taskHLRGroup.GET("/list", controller.NewTraceTaskHlr.List, @@ -67,7 +65,7 @@ func Setup(router *gin.Engine) { } // 跟踪任务 - taskGroup := traceGroup.Group("/task") + taskGroup := router.Group("/trace/task") { taskGroup.GET("/list", middleware.PreAuthorize(nil), @@ -99,7 +97,7 @@ func Setup(router *gin.Engine) { } // 跟踪数据 - taskDataGroup := traceGroup.Group("/data") + taskDataGroup := router.Group("/trace/data") { taskDataGroup.GET("/list", middleware.PreAuthorize(nil), From 2dae055646e4ff308e0b070cc1bb1df640341a36 Mon Sep 17 00:00:00 2001 From: simonzhangsz Date: Wed, 25 Sep 2024 15:37:27 +0800 Subject: [PATCH 11/17] fix: update omc config sql --- database/common/ne_config.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/common/ne_config.sql b/database/common/ne_config.sql index 45f8c522..20a5febb 100644 --- a/database/common/ne_config.sql +++ b/database/common/ne_config.sql @@ -112,7 +112,7 @@ INSERT INTO `ne_config` VALUES (82, 'CBC', 'mmeProfile', 'MME Profile', 'array', -- OMC parameter config INSERT INTO `ne_config` VALUES (83, 'OMC', 'alarmEmailForward', 'Alarm Email Forward Interface', 'list', '[{\"access\":\"rw\",\"comment\":\"Is it enabled forward alarm with Email interface\",\"display\":\"Enable\",\"filter\":\"true;false\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Email List\",\"filter\":\"\",\"name\":\"emailList\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"Email SMTP server\",\"display\":\"SMTP Server\",\"filter\":\"\",\"name\":\"smtp\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Port\",\"filter\":\"0~65535\",\"name\":\"port\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"User\",\"filter\":\"\",\"name\":\"user\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Password\",\"filter\":\"\",\"name\":\"password\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"If skip TLS verify (true/false)\",\"display\":\"TLS Skip Verify\",\"filter\":\"true;false\",\"name\":\"tlsSkipVerify\",\"type\":\"bool\",\"value\":\"true\"}]', 3, '', 1725505025649); -INSERT INTO `ne_config` VALUES (84, 'OMC', 'alarmSMSForward', 'Alarm SMS Forward Interface', 'list', '[{\"access\":\"rw\",\"comment\":\"Is it enabled forward alarm with SMS interface\",\"display\":\"Enable\",\"filter\":\"true;false\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Mobile List\",\"filter\":\"\",\"name\":\"mobileList\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"The SMSC SMPP Address\",\"display\":\"SMSC Address\",\"filter\":\"\",\"name\":\"smscAddr\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"System ID\",\"filter\":\"\",\"name\":\"systemID\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Password\",\"filter\":\"\",\"name\":\"password\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"System Type\",\"filter\":\"\",\"name\":\"systemType\",\"type\":\"string\",\"value\":\"\"}]', 4, '', 1725505025660); +INSERT INTO `ne_config` VALUES (84, 'OMC', 'alarmSMSForward', 'Alarm SMS Forward Interface', 'list', '[{\"access\":\"rw\",\"comment\":\"Is it enabled forward alarm with SMS interface\",\"display\":\"Enable\",\"filter\":\"true;false\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Mobile List\",\"filter\":\"\",\"name\":\"mobileList\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"The SMSC SMPP Address\",\"display\":\"SMSC Address\",\"filter\":\"\",\"name\":\"smscAddr\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"System ID\",\"filter\":\"\",\"name\":\"systemID\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Password\",\"filter\":\"\",\"name\":\"password\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"System Type\",\"filter\":\"\",\"name\":\"systemType\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"Short message coding type\",\"display\":\"Data Coding\",\"filter\":\"{\\\"0\\\":\\\"UCS2\\\",\\\"1\\\":\\\"ASCII\\\",\\\"2\\\":\\\"LATIN1\\\"}\",\"name\":\"dataCoding\",\"type\":\"enum\",\"value\":\"ASCII\"},{\"access\":\"rw\",\"comment\":\"It is the source address and length between 3 and 20\",\"display\":\"Service Number\",\"filter\":\"3~20\",\"name\":\"serviceNumber\",\"type\":\"string\",\"value\":\"OMC\"}]', 4, '', 1726799142528); -- 更新 SMSC 配置 20240920 INSERT INTO `ne_config` VALUES (90, 'SMSC', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CDR Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"cdrFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SM Validity\",\"filter\":\"0-2147483647\",\"name\":\"smValidity\",\"type\":\"int\",\"value\":\"259200\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"logFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable local users.\",\"display\":\"Local Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"localPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable outbound roaming users.\",\"display\":\"Local Roaming Out Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"localRoamingOutPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable inbound roaming users.\",\"display\":\"Visitor Roaming In Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"visitorRoamingInPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to other unattainable users.\",\"display\":\"Other Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"otherPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Define the maximum port number that the queue of pending SMS may grow to.\",\"display\":\"Polling Number\",\"filter\":\"0-64\",\"name\":\"pollingNumber\",\"type\":\"int\",\"value\":\"64\"},{\"access\":\"read-write\",\"comment\":\"Specify the priority parameter of SM_RP_PRI. true = High; false = Low.\",\"display\":\"Priority Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"priorityFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable TP-Reply-Path parameter in the SMS-DELIVER data unit.\",\"display\":\"TP Reply Path Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"tpReplyPathFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMSC Domain\",\"filter\":\"0~16\",\"name\":\"smscDomain\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CSFB VoLTE Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"csfbVolteFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Camel Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"camelFlag\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SCF Address\",\"filter\":\"0~16\",\"name\":\"scfAddress\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"If add plus then set false\",\"display\":\"MT Id Format Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"mtIdFormatFlag\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"enable mcast sms\",\"display\":\"Mcast Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"mcastFlag\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Level\",\"filter\":\"{\\\"0\\\":\\\"none\\\",\\\"1\\\":\\\"error\\\",\\\"2\\\":\\\"debug\\\"}\",\"name\":\"logLevel\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"The MB sizeof log file\",\"display\":\"Log Size\",\"filter\":\"1-1000\",\"name\":\"logSize\",\"type\":\"int\",\"value\":\"200\"},{\"access\":\"read-write\",\"comment\":\"The number of log file\",\"display\":\"Log Number\",\"filter\":\"1-20\",\"name\":\"logNum\",\"type\":\"int\",\"value\":\"10\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Directory\",\"filter\":\"0~128\",\"name\":\"logDir\",\"type\":\"string\",\"value\":\"/var/log/\"}]', 1, '', 1726802301029); From 4a4968a8c6e1a54c781414912ad7710596568beb Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 27 Sep 2024 10:07:03 +0800 Subject: [PATCH 12/17] =?UTF-8?q?sql:=20=E5=A4=9A=E8=AF=AD=E8=A8=80SMSC?= =?UTF-8?q?=E5=8E=9F=E5=9B=A00=E8=A1=A8=E7=A4=BA=E6=9C=AA=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/sys_dict_data1_i18n_zh.sql | 2 +- database/install/sys_dict_data2_i18n_en.sql | 2 +- database/upgrade/upg_sys_dict_data1_i18n_zh.sql | 2 +- database/upgrade/upg_sys_dict_data2_i18n_en.sql | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/database/install/sys_dict_data1_i18n_zh.sql b/database/install/sys_dict_data1_i18n_zh.sql index e89dd17d..1ae08d32 100644 --- a/database/install/sys_dict_data1_i18n_zh.sql +++ b/database/install/sys_dict_data1_i18n_zh.sql @@ -675,7 +675,7 @@ INSERT INTO `sys_dict_data` VALUES (2164, 2164, 'menu.log.exportFile', '导出 INSERT INTO `sys_dict_data` VALUES (2165, 2165, 'menu.perf.kpiCReport', '自定义指标数据', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2166, 2166, 'menu.trace.taskHLR', 'HLR 跟踪任务', 'i18n_zh', '', '', '1', 'supervisor', 1726626822538, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2167, 2167, 'dictType.cdr_cause_code', 'CDR 响应原因代码类别类型', 'i18n_zh', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2168, 2168, 'dictData.cdr_cause_code.0', '其他', 'i18n_zh', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2168, 2168, 'dictData.cdr_cause_code.0', '未知错误', 'i18n_zh', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2169, 2169, 'dictData.cdr_cause_code.8', '运营者要求禁止', 'i18n_zh', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2170, 2170, 'dictData.cdr_cause_code.10', '呼叫禁止', 'i18n_zh', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2171, 2171, 'dictData.cdr_cause_code.21', '短信传输拒绝', 'i18n_zh', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); diff --git a/database/install/sys_dict_data2_i18n_en.sql b/database/install/sys_dict_data2_i18n_en.sql index 2a11f29d..f3188862 100644 --- a/database/install/sys_dict_data2_i18n_en.sql +++ b/database/install/sys_dict_data2_i18n_en.sql @@ -675,7 +675,7 @@ INSERT INTO `sys_dict_data` VALUES (4164, 4164, 'menu.log.exportFile', 'Exported INSERT INTO `sys_dict_data` VALUES (4165, 4165, 'menu.perf.kpiCReport', 'Custom Indicator Data', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4166, 4166, 'menu.trace.taskHLR', 'HLR Trace Task', 'i18n_en', '', '', '1', 'supervisor', 1726626822538, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4167, 4167, 'dictType.cdr_cause_code', 'CDR Response Reason Code Category Type', 'i18n_en', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4168, 4168, 'dictData.cdr_cause_code.0', 'Other', 'i18n_en', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4168, 4168, 'dictData.cdr_cause_code.0', 'Unknown Error', 'i18n_en', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4169, 4169, 'dictData.cdr_cause_code.8', 'OPERATOR_DETERMINED_BARRING', 'i18n_en', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4170, 4170, 'dictData.cdr_cause_code.10', 'CALL_BARRED', 'i18n_en', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4171, 4171, 'dictData.cdr_cause_code.21', 'SM Trans Reject', 'i18n_en', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); diff --git a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql index d64ea942..1a0b62c1 100644 --- a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql +++ b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql @@ -682,7 +682,7 @@ REPLACE INTO `sys_dict_data` VALUES (2164, 2164, 'menu.log.exportFile', '导出 REPLACE INTO `sys_dict_data` VALUES (2165, 2165, 'menu.perf.kpiCReport', '自定义指标数据', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2166, 2166, 'menu.trace.taskHLR', 'HLR 跟踪任务', 'i18n_zh', '', '', '1', 'supervisor', 1726626822538, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2167, 2167, 'dictType.cdr_cause_code', 'CDR 响应原因代码类别类型', 'i18n_zh', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2168, 2168, 'dictData.cdr_cause_code.0', '其他', 'i18n_zh', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2168, 2168, 'dictData.cdr_cause_code.0', '未知错误', 'i18n_zh', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2169, 2169, 'dictData.cdr_cause_code.8', '运营者要求禁止', 'i18n_zh', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2170, 2170, 'dictData.cdr_cause_code.10', '呼叫禁止', 'i18n_zh', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2171, 2171, 'dictData.cdr_cause_code.21', '短信传输拒绝', 'i18n_zh', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); diff --git a/database/upgrade/upg_sys_dict_data2_i18n_en.sql b/database/upgrade/upg_sys_dict_data2_i18n_en.sql index 606cc252..42437f63 100644 --- a/database/upgrade/upg_sys_dict_data2_i18n_en.sql +++ b/database/upgrade/upg_sys_dict_data2_i18n_en.sql @@ -677,7 +677,7 @@ REPLACE INTO `sys_dict_data` VALUES (4164, 4164, 'menu.log.exportFile', 'Exporte REPLACE INTO `sys_dict_data` VALUES (4165, 4165, 'menu.perf.kpiCReport', 'Custom Indicator Data', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4166, 4166, 'menu.trace.taskHLR', 'HLR Trace Task', 'i18n_en', '', '', '1', 'supervisor', 1726626822538, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4167, 4167, 'dictType.cdr_cause_code', 'CDR Response Reason Code Category Type', 'i18n_en', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4168, 4168, 'dictData.cdr_cause_code.0', 'Other', 'i18n_en', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4168, 4168, 'dictData.cdr_cause_code.0', 'Unknown Error', 'i18n_en', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4169, 4169, 'dictData.cdr_cause_code.8', 'OPERATOR_DETERMINED_BARRING', 'i18n_en', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4170, 4170, 'dictData.cdr_cause_code.10', 'CALL_BARRED', 'i18n_en', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4171, 4171, 'dictData.cdr_cause_code.21', 'SM Trans Reject', 'i18n_en', '', '', '1', 'supervisor', 1725877564156, '', 0, ''); From f11970669415f82d166ab76355bc653b7d52a48e Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 27 Sep 2024 10:08:06 +0800 Subject: [PATCH 13/17] =?UTF-8?q?feat:=20=E4=BF=A1=E4=BB=A4=E8=B7=9F?= =?UTF-8?q?=E8=B8=AA=E5=8A=9F=E8=83=BD=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/trace/controller/packet.go | 111 ++++++++++++++ src/modules/trace/service/packet.go | 191 +++++++++++++++++++++++++ src/modules/trace/trace.go | 29 ++++ 3 files changed, 331 insertions(+) create mode 100644 src/modules/trace/controller/packet.go create mode 100644 src/modules/trace/service/packet.go diff --git a/src/modules/trace/controller/packet.go b/src/modules/trace/controller/packet.go new file mode 100644 index 00000000..a89cacc6 --- /dev/null +++ b/src/modules/trace/controller/packet.go @@ -0,0 +1,111 @@ +package controller + +import ( + "be.ems/src/framework/i18n" + "be.ems/src/framework/utils/ctx" + "be.ems/src/framework/vo/result" + traceService "be.ems/src/modules/trace/service" + "github.com/gin-gonic/gin" + "github.com/gin-gonic/gin/binding" +) + +// 实例化控制层 PacketController 结构体 +var NewPacket = &PacketController{ + packetService: traceService.NewPacket, +} + +// 信令跟踪 +// +// PATH /trace/packet +type PacketController struct { + packetService *traceService.Packet // 信令跟踪服务 +} + +// 网元跟踪网卡设备列表 +// +// GET /devices +func (s *PacketController) Devices(c *gin.Context) { + data := s.packetService.NetworkDevices() + c.JSON(200, result.OkData(data)) +} + +// 网元跟踪开始 +// +// POST /start +func (s *PacketController) Start(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var body struct { + Device string `json:"device" binding:"required"` // 网卡设备 + TaskNo string `json:"taskNo" binding:"required"` // 任务编号 + Output string `json:"output" ` // 输出PCAP文件路径,为空则不输出 + } + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + msg, err := s.packetService.LiveStart(body.TaskNo, body.Device, body.Output) + if err != nil { + c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) + return + } + c.JSON(200, result.OkData(msg)) +} + +// 网元跟踪结束 +// +// POST /stop +func (s *PacketController) Stop(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var body struct { + TaskNo string `json:"taskNo" binding:"required"` // 任务编号 + } + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + if err := s.packetService.LiveStop(body.TaskNo); err != nil { + c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) + return + } + c.JSON(200, result.Ok(nil)) +} + +// 网元跟踪过滤 +// +// PUT /filter +func (s *PacketController) Filter(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var body struct { + TaskNo string `json:"taskNo" binding:"required"` // 任务编号 + Expr string `json:"expr" binding:"required"` // 过滤表达式(port 33030 or 33040) + } + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + if err := s.packetService.LiveFilter(body.TaskNo, body.Expr); err != nil { + c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) + return + } + c.JSON(200, result.Ok(nil)) +} + +// 网元跟踪续期保活 +// +// PUT /keep-alive +func (s *PacketController) KeepAlive(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var body struct { + IntervalIn int `json:"intervalIn" ` // 服务续约的频率,默认设置为60秒 + Duration int `json:"duration" ` // 服务失效的时间,默认设置为120秒 + } + err := c.ShouldBindBodyWith(&body, binding.JSON) + if err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + c.JSON(200, result.Ok(nil)) +} diff --git a/src/modules/trace/service/packet.go b/src/modules/trace/service/packet.go new file mode 100644 index 00000000..9b6e8f8a --- /dev/null +++ b/src/modules/trace/service/packet.go @@ -0,0 +1,191 @@ +package service + +import ( + "context" + "fmt" + "os" + "strings" + "sync" + "time" + + "be.ems/src/framework/logger" + "be.ems/src/framework/vo" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/pcap" + "github.com/gopacket/gopacket/pcapgo" +) + +// 实例化服务层 Packet 结构体 +var NewPacket = &Packet{ + taskMap: sync.Map{}, +} + +// 信令跟踪 服务层处理 +type Packet struct { + taskMap sync.Map // 捕获任务 +} + +// task 任务信息 +type task struct { + TaskNo string // 任务编号 + Handle *pcap.Handle // 捕获句柄 + File *os.File // 捕获信息输出文件句柄 + Writer *pcapgo.Writer // 捕获信息输出句柄 + Expire time.Time // 过期时间 + context context.Context // 上下文 控制完成结束 +} + +// NetworkDevices 获取网卡设备信息 +func (s *Packet) NetworkDevices() []vo.TreeSelect { + arr := make([]vo.TreeSelect, 0) + devices, err := pcap.FindAllDevs() + if err != nil { + logger.Errorf("interfaces find all devices err: %s", err.Error()) + return arr + } + + for _, device := range devices { + if len(device.Addresses) == 0 { + continue + } + + lable := device.Description + if lable == "" { + lable = device.Name + } + item := vo.TreeSelect{ + ID: device.Name, + Label: lable, + Children: []vo.TreeSelect{}, + } + + for _, address := range device.Addresses { + if address.IP != nil { + ip := address.IP.String() + item.Children = append(item.Children, vo.TreeSelect{ID: ip, Label: ip}) + } + } + arr = append(arr, item) + } + + return arr +} + +// verifyDevice 检查网卡设备是否存在 +func (s *Packet) verifyDevice(str string) (string, bool) { + devices, err := pcap.FindAllDevs() + if err != nil { + logger.Errorf("interfaces find all devices err: %s", err.Error()) + return "", false + } + for _, device := range devices { + if len(device.Addresses) == 0 { + continue + } + if device.Name == str { + return device.Name, true + } + for _, address := range device.Addresses { + if address.IP.String() == str { + return device.Name, true + } + } + } + return "", false +} + +// LiveStart 开始捕获数据 +func (s *Packet) LiveStart(taskNo, deviceName, outputFile string) (string, error) { + if _, ok := s.taskMap.Load(taskNo); ok { + return "", fmt.Errorf("task no. %s already exist", taskNo) + } + + // Verify the specified network interface exists + device, deviceOk := s.verifyDevice(deviceName) + if !deviceOk { + return "", fmt.Errorf("network device not exist: %s", deviceName) + } + + snapshotLength := 262144 + + // open device + handle, err := pcap.OpenLive(device, int32(snapshotLength), true, pcap.BlockForever) + if err != nil { + logger.Errorf("open live err: %s", err.Error()) + if strings.Contains(err.Error(), "operation not permitted") { + return "", fmt.Errorf("you don't have permission to capture on that/these device(s)") + } + return "", err + } + + // write a new file + var w *pcapgo.Writer + var f *os.File + if outputFile != "" { + f, err = os.Create(outputFile) + if err != nil { + return "", err + } + w = pcapgo.NewWriter(f) + w.WriteFileHeader(uint32(snapshotLength), handle.LinkType()) + } + + // capture packets + packetSource := gopacket.NewPacketSource(handle, handle.LinkType()) + packetSource.Lazy = false + packetSource.NoCopy = true + packetSource.DecodeStreamsAsDatagrams = true + + // save tasks + ctx := context.Background() + task := &task{ + TaskNo: taskNo, + Handle: handle, + File: f, + Writer: w, + Expire: time.Now().Add(time.Second * 120), + context: ctx, + } + s.taskMap.Store(taskNo, task) + + // start capture + go func() { + for packet := range packetSource.PacketsCtx(ctx) { + if packet == nil { + continue + } + if packet.Metadata().Timestamp.Before(time.Now()) { + continue + } + if w != nil { + w.WritePacket(packet.Metadata().CaptureInfo, packet.Data()) + } + fmt.Println(packet.Dump()) + } + }() + return "task initiated", nil +} + +// LiveFilter 捕获过滤 +func (s *Packet) LiveFilter(taskNo, expr string) error { + info, ok := s.taskMap.Load(taskNo) + if !ok { + return fmt.Errorf("task no. %s not exist", taskNo) + } + return info.(*task).Handle.SetBPFFilter(expr) +} + +// LiveStop 停止捕获数据 +func (s *Packet) LiveStop(taskNo string) error { + info, ok := s.taskMap.Load(taskNo) + if !ok { + return fmt.Errorf("task no. %s not exist", taskNo) + } + info.(*task).context.Done() + info.(*task).Handle.Close() + if info.(task).File != nil { + info.(task).File.Close() + } + s.taskMap.Delete(taskNo) + return nil +} diff --git a/src/modules/trace/trace.go b/src/modules/trace/trace.go index ca95c661..98ff72da 100644 --- a/src/modules/trace/trace.go +++ b/src/modules/trace/trace.go @@ -41,6 +41,35 @@ func Setup(router *gin.Engine) { ) } + // 信令跟踪 + packetGroup := router.Group("/trace/packet") + { + packetGroup.GET("/devices", + middleware.PreAuthorize(nil), + controller.NewPacket.Devices, + ) + packetGroup.POST("/start", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.packet", collectlogs.BUSINESS_TYPE_OTHER)), + controller.NewPacket.Start, + ) + packetGroup.POST("/stop", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.packet", collectlogs.BUSINESS_TYPE_OTHER)), + controller.NewPacket.Stop, + ) + packetGroup.PUT("/filter", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.packet", collectlogs.BUSINESS_TYPE_OTHER)), + controller.NewPacket.Filter, + ) + packetGroup.PUT("/keep-alive", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.packet", collectlogs.BUSINESS_TYPE_OTHER)), + controller.NewPacket.KeepAlive, + ) + } + // 跟踪任务 网元HLR (免登录) taskHLRGroup := router.Group("/trace/task/hlr") { From 55aa2f3a3090856df4ab82c7abf6ee41971d29ea Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 27 Sep 2024 11:05:07 +0800 Subject: [PATCH 14/17] =?UTF-8?q?fix:=20=E5=88=A0=E9=99=A4=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=97=B6=E6=A0=87=E8=AE=B0del=5F=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=90=8D/=E6=89=8B=E6=9C=BA=E5=8F=B7/=E9=82=AE=E7=AE=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/system/repository/sys_user.impl.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/modules/system/repository/sys_user.impl.go b/src/modules/system/repository/sys_user.impl.go index afa2236e..b2403043 100644 --- a/src/modules/system/repository/sys_user.impl.go +++ b/src/modules/system/repository/sys_user.impl.go @@ -513,7 +513,9 @@ func (r *SysUserImpl) UpdateUser(sysUser model.SysUser) int64 { func (r *SysUserImpl) DeleteUserByIds(userIds []string) int64 { placeholder := repo.KeyPlaceholderByQuery(len(userIds)) username := "CASE WHEN user_name = '' THEN user_name WHEN LENGTH(user_name) >= 36 THEN CONCAT('del_', SUBSTRING(user_name, 5, 36)) ELSE CONCAT('del_', user_name) END" - sql := fmt.Sprintf("update sys_user set del_flag = '1', user_name = %s where user_id in (%s)", username, placeholder) + email := "CASE WHEN email = '' THEN email WHEN LENGTH(email) >= 64 THEN CONCAT('del_', SUBSTRING(email, 5, 64)) ELSE CONCAT('del_', email) END" + phonenumber := "CASE WHEN phonenumber = '' THEN phonenumber WHEN LENGTH(phonenumber) >= 16 THEN CONCAT('del_', SUBSTRING(phonenumber, 5, 16)) ELSE CONCAT('del_', phonenumber) END" + sql := fmt.Sprintf("update sys_user set del_flag = '1', user_name = %s, email = %s, phonenumber = %s where user_id in (%s)", username, email, phonenumber, placeholder) parameters := repo.ConvertIdsSlice(userIds) results, err := datasource.ExecDB("", sql, parameters) if err != nil { From 6f8611e6f19e5338c78c3d805c7de2e100c52caf Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 27 Sep 2024 11:10:56 +0800 Subject: [PATCH 15/17] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=B7=202.2409.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 11 +++++++++++ captrace/makefile | 2 +- crontask/makefile | 2 +- data2html/makefile | 2 +- makefile | 2 +- mkpkg.sh | 2 +- restagent/makefile | 2 +- src/framework/config/config/config.default.yaml | 2 +- sshsvc/makefile | 2 +- 9 files changed, 19 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a6dc4a6..a0e03d26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # 版本发布日志 +## 2.2409.4-20240927 + +- 新增 跟踪任务pcap文件获取接口 +- 优化 socket消息接收,跟踪任务推送ws +- 修复 历史告警同步判断存在错误 +- 优化 redis数据scan数调整1000 +- 修复 SMF在线订阅用户列表接口地址错误 +- 修复 多语言SMSC原因0表示未知 +- 新增 网元版本列表主动检查服务状态的版本 +- 更新 UDM用户数据表字段 + ## 2.2409.3-20240920 - 修复 字典多语言序号重复问题 diff --git a/captrace/makefile b/captrace/makefile index 13059799..072935f7 100644 --- a/captrace/makefile +++ b/captrace/makefile @@ -1,7 +1,7 @@ # Makefile for rest agent project PROJECT = OMC -VERSION = 2.2409.3 +VERSION = 2.2409.4 PLATFORM = amd64 ARMPLATFORM = aarch64 BUILDDIR = ../../build diff --git a/crontask/makefile b/crontask/makefile index c066c402..88f9d7fd 100644 --- a/crontask/makefile +++ b/crontask/makefile @@ -1,7 +1,7 @@ # Makefile for OMC-OMC-crontask project PROJECT = OMC -VERSION = 2.2409.3 +VERSION = 2.2409.4 LIBDIR = be.ems/lib BINNAME = crontask diff --git a/data2html/makefile b/data2html/makefile index 9218ce11..ba9d3527 100644 --- a/data2html/makefile +++ b/data2html/makefile @@ -1,7 +1,7 @@ # Makefile for rest agent project PROJECT = OMC -VERSION = 2.2409.3 +VERSION = 2.2409.4 RelDate = `date +%Y%m%d` Release = $(RelDate) RelVer = $(VERSION)-$(RelDate) diff --git a/makefile b/makefile index 0ef01ac4..c515e346 100644 --- a/makefile +++ b/makefile @@ -3,7 +3,7 @@ ProjectL = omc ProjectU = OMC PROJECT = $(ProjectL) -VERSION = 2.2409.3 +VERSION = 2.2409.4 RelDate = `date +%Y%m%d` Release = $(RelDate) RelVer = $(VERSION)-$(RelDate) diff --git a/mkpkg.sh b/mkpkg.sh index 310beeb1..cee3c783 100644 --- a/mkpkg.sh +++ b/mkpkg.sh @@ -2,7 +2,7 @@ ProcList="restagent crontask sshsvc captrace data2html" ProjectL=omc -VERSION=2.2409.3 +VERSION=2.2409.4 RelDate=`date +%Y%m%d` Release=${RelDate} RelVer=${VERSION}-${RelDate} diff --git a/restagent/makefile b/restagent/makefile index 10016cd3..3df0eae9 100644 --- a/restagent/makefile +++ b/restagent/makefile @@ -1,7 +1,7 @@ # Makefile for rest agent project PROJECT = OMC -VERSION = 2.2409.3 +VERSION = 2.2409.4 PLATFORM = amd64 ARMPLATFORM = aarch64 BUILDDIR = ../../build diff --git a/src/framework/config/config/config.default.yaml b/src/framework/config/config/config.default.yaml index 1344060d..467085fe 100644 --- a/src/framework/config/config/config.default.yaml +++ b/src/framework/config/config/config.default.yaml @@ -1,7 +1,7 @@ # 项目信息 framework: name: "OMC" - version: "2.2409.3" + version: "2.2409.4" # 应用服务配置 server: diff --git a/sshsvc/makefile b/sshsvc/makefile index 9f6b2f77..58e8aaf1 100644 --- a/sshsvc/makefile +++ b/sshsvc/makefile @@ -1,7 +1,7 @@ # Makefile for OMC-OMC-crontask project PROJECT = OMC -VERSION = 2.2409.3 +VERSION = 2.2409.4 LIBDIR = be.ems/lib BINNAME = sshsvc From a6b869966f83c9ef1ce54f6a8f6b3ddd860a93be Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 27 Sep 2024 11:21:11 +0800 Subject: [PATCH 16/17] chore: go mod tidy --- go.mod | 133 +++++++++++++++++++++++++++++---------------------------- go.sum | 89 +++----------------------------------- 2 files changed, 73 insertions(+), 149 deletions(-) diff --git a/go.mod b/go.mod index 710f517c..1d55f945 100644 --- a/go.mod +++ b/go.mod @@ -9,11 +9,11 @@ require ( github.com/go-resty/resty/v2 v2.14.0 github.com/go-sql-driver/mysql v1.8.1 github.com/golang-jwt/jwt/v5 v5.2.1 + github.com/gopacket/gopacket v1.2.0 github.com/gorilla/mux v1.8.1 github.com/gorilla/websocket v1.5.3 github.com/gosnmp/gosnmp v1.38.0 github.com/jasonlvhit/gocron v0.0.1 - github.com/konsorten/go-windows-terminal-sequences v1.0.1 github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f github.com/linxGnu/gosmpp v0.3.0 github.com/matoous/go-nanoid/v2 v2.1.0 @@ -25,9 +25,7 @@ require ( github.com/prometheus-community/pro-bing v0.4.1 github.com/redis/go-redis/v9 v9.6.1 github.com/robfig/cron/v3 v3.0.1 - github.com/shirou/gopsutil/v3 v3.23.11 github.com/shirou/gopsutil/v4 v4.24.7 - github.com/sirupsen/logrus v1.4.2 github.com/slayercat/GoSNMPServer v0.5.2 github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.19.0 @@ -45,86 +43,89 @@ require ( ) require ( - filippo.io/edwards25519 v1.1.0 - github.com/beorn7/perks v1.0.1 - github.com/bytedance/sonic v1.12.1 - github.com/bytedance/sonic/loader v0.2.0 - github.com/cespare/xxhash/v2 v2.3.0 + filippo.io/edwards25519 v1.1.0 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/bytedance/sonic v1.12.1 // indirect + github.com/bytedance/sonic/loader v0.2.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chenjiandongx/ginprom v0.0.0-20210617023641-6c809602c38a - github.com/cloudwego/base64x v0.1.4 - github.com/cloudwego/iasm v0.2.0 - github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f + github.com/cloudwego/base64x v0.1.4 // indirect + github.com/cloudwego/iasm v0.2.0 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect - github.com/fsnotify/fsnotify v1.7.0 - github.com/gabriel-vasile/mimetype v1.4.5 - github.com/gin-contrib/sse v0.1.0 - github.com/go-forks/fsnotify v1.4.7 - github.com/go-ole/go-ole v1.3.0 - github.com/go-playground/locales v0.14.1 - github.com/go-playground/universal-translator v0.18.1 - github.com/go-playground/validator/v10 v10.22.0 + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/gabriel-vasile/mimetype v1.4.5 // indirect + github.com/gin-contrib/sse v0.1.0 // indirect + github.com/go-forks/fsnotify v1.4.7 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.22.0 // indirect github.com/goccy/go-json v0.10.3 - github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 - github.com/golang/snappy v0.0.4 - github.com/google/uuid v1.6.0 - github.com/hashicorp/hcl v1.0.0 + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect - github.com/jinzhu/inflection v1.0.0 - github.com/jinzhu/now v1.1.5 + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.5 // indirect github.com/jonboulle/clockwork v0.4.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.17.9 - github.com/klauspost/cpuid/v2 v2.2.8 - github.com/kr/fs v0.1.0 - github.com/leodido/go-urn v1.4.0 + github.com/klauspost/compress v1.17.9 // indirect + github.com/klauspost/cpuid/v2 v2.2.8 // indirect + github.com/konsorten/go-windows-terminal-sequences v1.0.1 // indirect + github.com/kr/fs v0.1.0 // indirect + github.com/leodido/go-urn v1.4.0 // indirect github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570 // indirect - github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042 + github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042 // indirect github.com/lufia/plan9stats v0.0.0-20240513124658-fba389f38bae // indirect - github.com/magiconair/properties v1.8.7 - github.com/mattn/go-isatty v0.0.20 - github.com/metaleap/go-util v0.0.0-20180330192724-a09253046f73 - github.com/mitchellh/mapstructure v1.5.0 - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd - github.com/modern-go/reflect2 v1.0.2 - github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 + github.com/magiconair/properties v1.8.7 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/metaleap/go-util v0.0.0-20180330192724-a09253046f73 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/onsi/ginkgo v1.16.5 // indirect github.com/onsi/gomega v1.21.1 // indirect - github.com/orcaman/concurrent-map/v2 v2.0.1 - github.com/pelletier/go-toml/v2 v2.2.2 - github.com/pkg/errors v0.9.1 + github.com/orcaman/concurrent-map/v2 v2.0.1 // indirect + github.com/pelletier/go-toml/v2 v2.2.2 // indirect + github.com/pkg/errors v0.9.1 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect github.com/prometheus/client_golang v1.20.0 - github.com/prometheus/client_model v0.6.1 - github.com/prometheus/common v0.55.0 - github.com/prometheus/procfs v0.15.1 - github.com/richardlehane/mscfb v1.0.4 - github.com/richardlehane/msoleps v1.0.3 + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.55.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect + github.com/richardlehane/mscfb v1.0.4 // indirect + github.com/richardlehane/msoleps v1.0.3 // indirect github.com/sagikazarmark/locafero v0.6.0 // indirect - github.com/sagikazarmark/slog-shim v0.1.0 + github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/shirou/gopsutil/v3 v3.23.11 // indirect github.com/shoenig/go-m1cpu v0.1.6 // indirect - github.com/sourcegraph/conc v0.3.0 - github.com/spf13/afero v1.11.0 - github.com/spf13/cast v1.7.0 - github.com/subosito/gotenv v1.6.0 - github.com/syndtr/goleveldb v1.0.0 + github.com/sirupsen/logrus v1.4.2 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/spf13/cast v1.7.0 // indirect + github.com/subosito/gotenv v1.6.0 // indirect + github.com/syndtr/goleveldb v1.0.0 // indirect github.com/tebeka/strftime v0.1.5 // indirect github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect - github.com/twitchyliquid64/golang-asm v0.15.1 - github.com/ugorji/go/codec v1.2.12 - github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d - github.com/xuri/nfp v0.0.0-20240318013403-ab9948c2c4a7 - github.com/yusufpapurcu/wmi v1.2.4 + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/ugorji/go/codec v1.2.12 // indirect + github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d // indirect + github.com/xuri/nfp v0.0.0-20240318013403-ab9948c2c4a7 // indirect + github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/arch v0.9.0 - golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa - golang.org/x/image v0.19.0 - golang.org/x/sync v0.8.0 - golang.org/x/sys v0.24.0 - golang.org/x/tools/cmd/guru v0.1.1-deprecated - google.golang.org/protobuf v1.34.2 + golang.org/x/arch v0.9.0 // indirect + golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa // indirect + golang.org/x/image v0.19.0 // indirect + golang.org/x/sync v0.8.0 // indirect + golang.org/x/sys v0.24.0 // indirect + golang.org/x/tools/cmd/guru v0.1.1-deprecated // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect - gopkg.in/ini.v1 v1.67.0 - xorm.io/builder v0.3.13 + gopkg.in/ini.v1 v1.67.0 // indirect + xorm.io/builder v0.3.13 // indirect ) diff --git a/go.sum b/go.sum index 95ae1b43..4e2e53ee 100644 --- a/go.sum +++ b/go.sum @@ -1,20 +1,8 @@ -cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= -cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/firestore v1.15.0/go.mod h1:GWOxFXcv8GZUtYpWHw/w6IuYNux/BtmeVTMmjrm4yhk= -cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= -cloud.google.com/go/longrunning v0.5.5/go.mod h1:WV2LAxD8/rg5Z1cNW6FJ/ZpX4E4VnDnoTk0yawPBB7s= -cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU= -gitee.com/travelliu/dm v1.8.11192/go.mod h1:DHTzyhCrM843x9VdKVbZ+GKXGRbKM2sJ4LxihRxShkE= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= -github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= -github.com/allegro/bigcache/v3 v3.1.0/go.mod h1:aPyh7jEvrog9zAwx5N7+JUQX5dZTSGpxF1LAR4dr35I= -github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= @@ -34,8 +22,6 @@ github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/ github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -49,8 +35,6 @@ github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4 github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 h1:Ghm4eQYC0nEPnSJdVkTrXpu9KtoVCSo1hg7mtI7G9KU= github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw= -github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= -github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -65,10 +49,6 @@ github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= github.com/go-forks/fsnotify v1.4.7 h1:lyiU2Wqd4fNGCQDn9dZ4UxSiSFgeU1rM6yIfahk8haY= github.com/go-forks/fsnotify v1.4.7/go.mod h1:AU8mot+GznW5+B4jRJHxKg/2EeO+jMORGRkKSxs0biw= -github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= @@ -89,14 +69,10 @@ github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqw github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= -github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= -github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= @@ -105,7 +81,6 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -118,12 +93,10 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= -github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= -github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4= -github.com/googleapis/google-cloud-go-testing v0.0.0-20210719221736-1c9a4c676720/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gopacket/gopacket v1.2.0 h1:eXbzFad7f73P1n2EJHQlsKuvIMJjVXK5tXoSca78I3A= +github.com/gopacket/gopacket v1.2.0/go.mod h1:BrAKEy5EOGQ76LSqh7DMAr7z0NNPdczWm2GxCG7+I8M= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= @@ -131,26 +104,9 @@ github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad github.com/gosnmp/gosnmp v1.36.2-0.20231009064202-d306ed5aa998/go.mod h1:O938QjIS4vpSag1UTcnnBq9MfNmimuOGtvQsT1NbErc= github.com/gosnmp/gosnmp v1.38.0 h1:I5ZOMR8kb0DXAFg/88ACurnuwGwYkXWq3eLpJPHMEYc= github.com/gosnmp/gosnmp v1.38.0/go.mod h1:FE+PEZvKrFz9afP9ii1W3cprXuVZ17ypCcyyfYuu5LY= -github.com/hashicorp/consul/api v1.28.2/go.mod h1:KyzqzgMEya+IZPcD65YFoOVAgPpbfERu4I/tzG6/ueE= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= -github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/pgconn v1.14.0/go.mod h1:9mBNlny0UvkgJdCDvdVHYSjI+8tD2rnKK69Wz8ti++E= -github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgproto3/v2 v2.3.2/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgtype v1.14.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= -github.com/jackc/pgx/v4 v4.18.0/go.mod h1:FydWkUyadDmdNH/mHnGob881GawxeEm7TcMCzkb+qQE= github.com/jasonlvhit/gocron v0.0.1 h1:qTt5qF3b3srDjeOIR4Le1LfeyvoYzJlYpqvG7tJX5YU= github.com/jasonlvhit/gocron v0.0.1/go.mod h1:k9a3TV8VcU73XZxfVHCHWMWF9SOqgoku0/QlY2yvlA4= github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 h1:IPJ3dvxmJ4uczJe5YQdrYB16oTJlGSC/OyZDqUk9xX4= @@ -161,10 +117,8 @@ github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4= github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= @@ -191,7 +145,6 @@ github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f h1:sgU github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f/go.mod h1:UGmTpUd3rjbtfIpwAPrcfmGf/Z1HS95TATB+m57TPB8= github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042 h1:Bvq8AziQ5jFF4BHGAEDSqwPW1NJS3XshxbRCxtjFAZc= github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042/go.mod h1:TPpsiPUEh0zFL1Snz4crhMlBe60PYxRHr5oFF3rRYg0= -github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/linxGnu/gosmpp v0.3.0 h1:LL+eY+zc9Ei/YY0po9A6L6SHf8nPyGvqsLddttr/y/4= github.com/linxGnu/gosmpp v0.3.0/go.mod h1:Ba6SULQql3IbF2A5Mtj3DqMKoFbx1pEz/8xyiOh8ZOs= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= @@ -201,7 +154,6 @@ github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0V github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/matoous/go-nanoid/v2 v2.1.0 h1:P64+dmq21hhWdtvZfEAofnvJULaRR1Yib0+PnU669bE= github.com/matoous/go-nanoid/v2 v2.1.0/go.mod h1:KlbGNQ+FhrUNIHUxZdL63t7tl4LaPkZNpUULS8H4uVM= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= @@ -210,8 +162,6 @@ github.com/metaleap/go-util v0.0.0-20180330192724-a09253046f73 h1:4vKVhAdype/dej github.com/metaleap/go-util v0.0.0-20180330192724-a09253046f73/go.mod h1:l71/5fppWP5A6nqhcxz6wQAYok6pr/vM2+KHIy50/LY= github.com/metaleap/go-xsd v0.0.0-20180330193350-61f7638f502f h1:eeJGcYszuvOpmuJxeq57LaOO8mJurfjpOHJJMfQSD0s= github.com/metaleap/go-xsd v0.0.0-20180330193350-61f7638f502f/go.mod h1:WK3zEKtwVd/v+NM3lh1ZE6MdDfHsdOFFOD5Ezi4Hutg= -github.com/microsoft/go-mssqldb v1.6.0/go.mod h1:00mDtPbeQCRGC1HwOOR5K/gr30P1NcEG0vx6Kbv2aJU= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -227,10 +177,6 @@ github.com/mssola/useragent v1.0.0 h1:WRlDpXyxHDNfvZaPEut5Biveq86Ze4o4EMffyMxmH5 github.com/mssola/useragent v1.0.0/go.mod h1:hz9Cqz4RXusgg1EdI4Al0INR62kP7aPSRNHnpU+b85Y= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nats-io/nats.go v1.34.0/go.mod h1:Ubdu4Nh9exXdSz0RVWRFBbRfrbSxOYd26oF0wkWclB8= -github.com/nats-io/nkeys v0.4.7/go.mod h1:kqXRgRDPlGy7nGaEDMuYzmiJCIAAWDK0IMBtDmGD0nc= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= @@ -240,7 +186,6 @@ github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.1.6/go.mod h1:MEH45j8TBi6u9BMogfbp0stKC5cdGjumZj5Y7AG4VIk= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= @@ -288,7 +233,6 @@ github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzG github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sagikazarmark/crypt v0.19.0/go.mod h1:c6vimRziqqERhtSe0MhIvzE1w54FrCHtrXb5NH/ja78= github.com/sagikazarmark/locafero v0.6.0 h1:ON7AQg37yzcRPU69mt7gwhFEBwxI6P9T4Qu3N51bwOk= github.com/sagikazarmark/locafero v0.6.0/go.mod h1:77OmuIc6VTraTXKXIs/uvUxKGUXjE1GbemJYHqdNjX0= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= @@ -301,7 +245,6 @@ github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFt github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= -github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -350,7 +293,10 @@ github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2 github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/urfave/cli/v2 v2.1.1/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= -github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= +github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJH8j0= +github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= +github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74 h1:gga7acRE695APm9hlsSMoOoE65U4/TcqNj90mc69Rlg= +github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d h1:llb0neMWDQe87IzJLS4Ci7psK/lVsjIS2otl+1WyRyY= github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI= github.com/xuri/excelize/v2 v2.8.1 h1:pZLMEwK8ep+CLIUWpWmvW8IWE/yxqG0I1xcN6cVMGuQ= @@ -365,21 +311,8 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= -go.etcd.io/etcd/api/v3 v3.5.12/go.mod h1:Ot+o0SWSyT6uHhA56al1oCED0JImsRiU9Dc26+C2a+4= -go.etcd.io/etcd/client/pkg/v3 v3.5.12/go.mod h1:seTzl2d9APP8R5Y2hFL3NVlD6qC/dOT+3kvrqPyTas4= -go.etcd.io/etcd/client/v2 v2.305.12/go.mod h1:aQ/yhsxMu+Oht1FOupSr60oBvcS9cKXHrzBpDsPTf9E= -go.etcd.io/etcd/client/v3 v3.5.12/go.mod h1:tSbBCakoWmmddL+BKVAJHa9km+O/E+bumDe9mSbPiqw= -go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= -go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= -go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= -go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/arch v0.9.0 h1:ub9TgUInamJ8mrZIGlBG6/4TqWeMszd4N8lNorbrr6k= golang.org/x/arch v0.9.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -428,7 +361,6 @@ golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= -golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -515,13 +447,6 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -google.golang.org/api v0.171.0/go.mod h1:Hnq5AHm4OTMt2BUVjael2CWZFD6vksJdWCWiUAmjC9o= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s= -google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2/go.mod h1:O1cOfN1Cy6QEYr7VxtjOyP5AdAuR0aJ/MYZaaof623Y= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= -google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -546,7 +471,6 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= @@ -577,7 +501,6 @@ modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg= modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= xorm.io/builder v0.3.13 h1:a3jmiVVL19psGeXx8GIurTp7p0IIgqeDmwhcR6BAOAo= xorm.io/builder v0.3.13/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= xorm.io/xorm v1.3.9 h1:TUovzS0ko+IQ1XnNLfs5dqK1cJl1H5uHpWbWqAQ04nU= From 0152d4e923869392e46621c95e5128b12eee1170 Mon Sep 17 00:00:00 2001 From: simonzhangsz Date: Mon, 30 Sep 2024 11:38:26 +0800 Subject: [PATCH 17/17] fix: alarm sms forward data coding issue --- config/etc/default/restconf.yaml | 3 +- config/param/omc_param_config.yaml | 8 +-- database/common/ne_config.sql | 2 +- features/fm/smsforward.go | 34 ++++++++---- go.sum | 83 ++++++++++++++++++++++++++++++ restagent/config/config.go | 18 ++----- restagent/etc/restconf.yaml | 11 ++-- 7 files changed, 126 insertions(+), 33 deletions(-) diff --git a/config/etc/default/restconf.yaml b/config/etc/default/restconf.yaml index 39004b71..7c7211eb 100644 --- a/config/etc/default/restconf.yaml +++ b/config/etc/default/restconf.yaml @@ -135,7 +135,8 @@ omc: # TLS Skip verify: true/false # email/sms # smProxy: sms(Short Message Service)/smsc(SMS Centre) -# dataCoding: 0:UCS2, 1:ASCII, 2:LATIN1 +# dataCoding: 0:GSM7BIT, 1:ASCII, 2:BINARY8BIT1, 3:LATIN1, +# 4:BINARY8BIT2, 6:CYRILLIC, 7:HEBREW, 8:UCS2 alarm: alarmEmailForward: enable: true diff --git a/config/param/omc_param_config.yaml b/config/param/omc_param_config.yaml index b2c96186..cddb3c1b 100644 --- a/config/param/omc_param_config.yaml +++ b/config/param/omc_param_config.yaml @@ -69,7 +69,7 @@ omc: access: "rw" filter: "" display: "Mobile List" - comment: "" + comment: "Multiple mobile separated by commas" - name: "smscAddr" type: "string" value: "" @@ -100,9 +100,9 @@ omc: comment: "" - name: "dataCoding" type: "enum" - value: "ASCII" + value: "GSM7BIT" access: "rw" - filter: '{"0":"UCS2","1":"ASCII","2":"LATIN1"}' + filter: '{"0":"GSM7BIT","1":"ASCII","2":"BINARY8BIT1","3":"LATIN1","4":"BINARY8BIT2","6":"CYRILLIC","7":"HEBREW","8":"UCS2"}' display: "Data Coding" comment: "Short message coding type" - name: "serviceNumber" @@ -111,4 +111,4 @@ omc: access: "rw" filter: "3~20" display: "Service Number" - comment: "It is the source address and length is between 3 and 20" \ No newline at end of file + comment: "It is the source address, the length is between 3 and 20" \ No newline at end of file diff --git a/database/common/ne_config.sql b/database/common/ne_config.sql index 20a5febb..de0d585e 100644 --- a/database/common/ne_config.sql +++ b/database/common/ne_config.sql @@ -112,7 +112,7 @@ INSERT INTO `ne_config` VALUES (82, 'CBC', 'mmeProfile', 'MME Profile', 'array', -- OMC parameter config INSERT INTO `ne_config` VALUES (83, 'OMC', 'alarmEmailForward', 'Alarm Email Forward Interface', 'list', '[{\"access\":\"rw\",\"comment\":\"Is it enabled forward alarm with Email interface\",\"display\":\"Enable\",\"filter\":\"true;false\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Email List\",\"filter\":\"\",\"name\":\"emailList\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"Email SMTP server\",\"display\":\"SMTP Server\",\"filter\":\"\",\"name\":\"smtp\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Port\",\"filter\":\"0~65535\",\"name\":\"port\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"User\",\"filter\":\"\",\"name\":\"user\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Password\",\"filter\":\"\",\"name\":\"password\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"If skip TLS verify (true/false)\",\"display\":\"TLS Skip Verify\",\"filter\":\"true;false\",\"name\":\"tlsSkipVerify\",\"type\":\"bool\",\"value\":\"true\"}]', 3, '', 1725505025649); -INSERT INTO `ne_config` VALUES (84, 'OMC', 'alarmSMSForward', 'Alarm SMS Forward Interface', 'list', '[{\"access\":\"rw\",\"comment\":\"Is it enabled forward alarm with SMS interface\",\"display\":\"Enable\",\"filter\":\"true;false\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Mobile List\",\"filter\":\"\",\"name\":\"mobileList\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"The SMSC SMPP Address\",\"display\":\"SMSC Address\",\"filter\":\"\",\"name\":\"smscAddr\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"System ID\",\"filter\":\"\",\"name\":\"systemID\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Password\",\"filter\":\"\",\"name\":\"password\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"System Type\",\"filter\":\"\",\"name\":\"systemType\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"Short message coding type\",\"display\":\"Data Coding\",\"filter\":\"{\\\"0\\\":\\\"UCS2\\\",\\\"1\\\":\\\"ASCII\\\",\\\"2\\\":\\\"LATIN1\\\"}\",\"name\":\"dataCoding\",\"type\":\"enum\",\"value\":\"ASCII\"},{\"access\":\"rw\",\"comment\":\"It is the source address and length between 3 and 20\",\"display\":\"Service Number\",\"filter\":\"3~20\",\"name\":\"serviceNumber\",\"type\":\"string\",\"value\":\"OMC\"}]', 4, '', 1726799142528); +INSERT INTO `ne_config` VALUES (84, 'OMC', 'alarmSMSForward', 'Alarm SMS Forward Interface', 'list', '[{\"access\":\"rw\",\"comment\":\"Is it enabled forward alarm with SMS interface\",\"display\":\"Enable\",\"filter\":\"true;false\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"rw\",\"comment\":\"Multiple mobile separated by commas\",\"display\":\"Mobile List\",\"filter\":\"\",\"name\":\"mobileList\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"The SMSC SMPP Address\",\"display\":\"SMSC Address\",\"filter\":\"\",\"name\":\"smscAddr\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"System ID\",\"filter\":\"\",\"name\":\"systemID\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Password\",\"filter\":\"\",\"name\":\"password\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"System Type\",\"filter\":\"\",\"name\":\"systemType\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"Short message coding type\",\"display\":\"Data Coding\",\"filter\":\"{\\\"0\\\":\\\"GSM7BIT\\\",\\\"1\\\":\\\"ASCII\\\",\\\"2\\\":\\\"BINARY8BIT1\\\",\\\"3\\\":\\\"LATIN1\\\",\\\"4\\\":\\\"BINARY8BIT2\\\",\\\"6\\\":\\\"CYRILLIC\\\",\\\"7\\\":\\\"HEBREW\\\",\\\"8\\\":\\\"UCS2\\\"}\",\"name\":\"dataCoding\",\"type\":\"enum\",\"value\":\"GSM7BIT\"},{\"access\":\"rw\",\"comment\":\"It is the source address, the length is between 3 and 20\",\"display\":\"Service Number\",\"filter\":\"3~20\",\"name\":\"serviceNumber\",\"type\":\"string\",\"value\":\"OMC\"}]', 4, '', 1727664057261); -- 更新 SMSC 配置 20240920 INSERT INTO `ne_config` VALUES (90, 'SMSC', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CDR Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"cdrFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SM Validity\",\"filter\":\"0-2147483647\",\"name\":\"smValidity\",\"type\":\"int\",\"value\":\"259200\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"logFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable local users.\",\"display\":\"Local Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"localPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable outbound roaming users.\",\"display\":\"Local Roaming Out Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"localRoamingOutPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable inbound roaming users.\",\"display\":\"Visitor Roaming In Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"visitorRoamingInPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to other unattainable users.\",\"display\":\"Other Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"otherPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Define the maximum port number that the queue of pending SMS may grow to.\",\"display\":\"Polling Number\",\"filter\":\"0-64\",\"name\":\"pollingNumber\",\"type\":\"int\",\"value\":\"64\"},{\"access\":\"read-write\",\"comment\":\"Specify the priority parameter of SM_RP_PRI. true = High; false = Low.\",\"display\":\"Priority Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"priorityFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable TP-Reply-Path parameter in the SMS-DELIVER data unit.\",\"display\":\"TP Reply Path Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"tpReplyPathFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMSC Domain\",\"filter\":\"0~16\",\"name\":\"smscDomain\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CSFB VoLTE Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"csfbVolteFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Camel Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"camelFlag\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SCF Address\",\"filter\":\"0~16\",\"name\":\"scfAddress\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"If add plus then set false\",\"display\":\"MT Id Format Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"mtIdFormatFlag\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"enable mcast sms\",\"display\":\"Mcast Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"mcastFlag\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Level\",\"filter\":\"{\\\"0\\\":\\\"none\\\",\\\"1\\\":\\\"error\\\",\\\"2\\\":\\\"debug\\\"}\",\"name\":\"logLevel\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"The MB sizeof log file\",\"display\":\"Log Size\",\"filter\":\"1-1000\",\"name\":\"logSize\",\"type\":\"int\",\"value\":\"200\"},{\"access\":\"read-write\",\"comment\":\"The number of log file\",\"display\":\"Log Number\",\"filter\":\"1-20\",\"name\":\"logNum\",\"type\":\"int\",\"value\":\"10\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Directory\",\"filter\":\"0~128\",\"name\":\"logDir\",\"type\":\"string\",\"value\":\"/var/log/\"}]', 1, '', 1726802301029); diff --git a/features/fm/smsforward.go b/features/fm/smsforward.go index 01f85d33..325c2108 100644 --- a/features/fm/smsforward.go +++ b/features/fm/smsforward.go @@ -202,15 +202,7 @@ func newSubmitSM(phoneNumber string, message string) (*pdu.SubmitSM, error) { submitSM := pdu.NewSubmitSM().(*pdu.SubmitSM) submitSM.SourceAddr = srcAddr submitSM.DestAddr = destAddr - dataCoding := data.UCS2 - switch smsForward.DataCoding { - case config.CODING_UCS2: - dataCoding = data.UCS2 - case config.CODING_ASCII: - dataCoding = data.ASCII - case config.CODING_LATIN1: - dataCoding = data.LATIN1 - } + dataCoding := data.FromDataCoding(smsForward.DataCoding) err = submitSM.Message.SetMessageWithEncoding(message, dataCoding) if err != nil { return nil, err @@ -222,3 +214,27 @@ func newSubmitSM(phoneNumber string, message string) (*pdu.SubmitSM, error) { return submitSM, nil } + +// const ( +// // Short message data coding type +// SMS_CODING_GSM7BIT byte = iota +// SMS_CODING_ASCII +// SMS_CODING_BINARY8BIT1 +// SMS_CODING_LATIN1 +// SMS_CODING_BINARY8BIT2 +// SMS_CODING_NODEF +// SMS_CODING_CYRILLIC +// SMS_CODING_HEBREW +// SMS_CODING_UCS2 +// ) + +// var codingMap = map[byte]data.Encoding{ +// SMS_CODING_GSM7BIT: data.GSM7BIT, +// SMS_CODING_ASCII: data.ASCII, +// SMS_CODING_BINARY8BIT1: data.BINARY8BIT1, +// SMS_CODING_LATIN1: data.LATIN1, +// SMS_CODING_BINARY8BIT2: data.BINARY8BIT2, +// SMS_CODING_CYRILLIC: data.CYRILLIC, +// SMS_CODING_HEBREW: data.HEBREW, +// SMS_CODING_UCS2: data.UCS2, +// } diff --git a/go.sum b/go.sum index 4e2e53ee..714cab42 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,20 @@ +cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= +cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/firestore v1.15.0/go.mod h1:GWOxFXcv8GZUtYpWHw/w6IuYNux/BtmeVTMmjrm4yhk= +cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= +cloud.google.com/go/longrunning v0.5.5/go.mod h1:WV2LAxD8/rg5Z1cNW6FJ/ZpX4E4VnDnoTk0yawPBB7s= +cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU= +gitee.com/travelliu/dm v1.8.11192/go.mod h1:DHTzyhCrM843x9VdKVbZ+GKXGRbKM2sJ4LxihRxShkE= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/allegro/bigcache/v3 v3.1.0/go.mod h1:aPyh7jEvrog9zAwx5N7+JUQX5dZTSGpxF1LAR4dr35I= +github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= @@ -22,6 +34,8 @@ github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/ github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -35,6 +49,8 @@ github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4 github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 h1:Ghm4eQYC0nEPnSJdVkTrXpu9KtoVCSo1hg7mtI7G9KU= github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw= +github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -49,6 +65,10 @@ github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= github.com/go-forks/fsnotify v1.4.7 h1:lyiU2Wqd4fNGCQDn9dZ4UxSiSFgeU1rM6yIfahk8haY= github.com/go-forks/fsnotify v1.4.7/go.mod h1:AU8mot+GznW5+B4jRJHxKg/2EeO+jMORGRkKSxs0biw= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= @@ -69,10 +89,14 @@ github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqw github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= @@ -81,6 +105,7 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -93,8 +118,12 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4= +github.com/googleapis/google-cloud-go-testing v0.0.0-20210719221736-1c9a4c676720/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopacket/gopacket v1.2.0 h1:eXbzFad7f73P1n2EJHQlsKuvIMJjVXK5tXoSca78I3A= github.com/gopacket/gopacket v1.2.0/go.mod h1:BrAKEy5EOGQ76LSqh7DMAr7z0NNPdczWm2GxCG7+I8M= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= @@ -104,9 +133,26 @@ github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad github.com/gosnmp/gosnmp v1.36.2-0.20231009064202-d306ed5aa998/go.mod h1:O938QjIS4vpSag1UTcnnBq9MfNmimuOGtvQsT1NbErc= github.com/gosnmp/gosnmp v1.38.0 h1:I5ZOMR8kb0DXAFg/88ACurnuwGwYkXWq3eLpJPHMEYc= github.com/gosnmp/gosnmp v1.38.0/go.mod h1:FE+PEZvKrFz9afP9ii1W3cprXuVZ17ypCcyyfYuu5LY= +github.com/hashicorp/consul/api v1.28.2/go.mod h1:KyzqzgMEya+IZPcD65YFoOVAgPpbfERu4I/tzG6/ueE= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= +github.com/jackc/pgconn v1.14.0/go.mod h1:9mBNlny0UvkgJdCDvdVHYSjI+8tD2rnKK69Wz8ti++E= +github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgproto3/v2 v2.3.2/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgtype v1.14.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= +github.com/jackc/pgx/v4 v4.18.0/go.mod h1:FydWkUyadDmdNH/mHnGob881GawxeEm7TcMCzkb+qQE= github.com/jasonlvhit/gocron v0.0.1 h1:qTt5qF3b3srDjeOIR4Le1LfeyvoYzJlYpqvG7tJX5YU= github.com/jasonlvhit/gocron v0.0.1/go.mod h1:k9a3TV8VcU73XZxfVHCHWMWF9SOqgoku0/QlY2yvlA4= github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 h1:IPJ3dvxmJ4uczJe5YQdrYB16oTJlGSC/OyZDqUk9xX4= @@ -117,8 +163,10 @@ github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4= github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= @@ -145,6 +193,7 @@ github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f h1:sgU github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f/go.mod h1:UGmTpUd3rjbtfIpwAPrcfmGf/Z1HS95TATB+m57TPB8= github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042 h1:Bvq8AziQ5jFF4BHGAEDSqwPW1NJS3XshxbRCxtjFAZc= github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042/go.mod h1:TPpsiPUEh0zFL1Snz4crhMlBe60PYxRHr5oFF3rRYg0= +github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/linxGnu/gosmpp v0.3.0 h1:LL+eY+zc9Ei/YY0po9A6L6SHf8nPyGvqsLddttr/y/4= github.com/linxGnu/gosmpp v0.3.0/go.mod h1:Ba6SULQql3IbF2A5Mtj3DqMKoFbx1pEz/8xyiOh8ZOs= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= @@ -154,6 +203,7 @@ github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0V github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/matoous/go-nanoid/v2 v2.1.0 h1:P64+dmq21hhWdtvZfEAofnvJULaRR1Yib0+PnU669bE= github.com/matoous/go-nanoid/v2 v2.1.0/go.mod h1:KlbGNQ+FhrUNIHUxZdL63t7tl4LaPkZNpUULS8H4uVM= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= @@ -162,6 +212,8 @@ github.com/metaleap/go-util v0.0.0-20180330192724-a09253046f73 h1:4vKVhAdype/dej github.com/metaleap/go-util v0.0.0-20180330192724-a09253046f73/go.mod h1:l71/5fppWP5A6nqhcxz6wQAYok6pr/vM2+KHIy50/LY= github.com/metaleap/go-xsd v0.0.0-20180330193350-61f7638f502f h1:eeJGcYszuvOpmuJxeq57LaOO8mJurfjpOHJJMfQSD0s= github.com/metaleap/go-xsd v0.0.0-20180330193350-61f7638f502f/go.mod h1:WK3zEKtwVd/v+NM3lh1ZE6MdDfHsdOFFOD5Ezi4Hutg= +github.com/microsoft/go-mssqldb v1.6.0/go.mod h1:00mDtPbeQCRGC1HwOOR5K/gr30P1NcEG0vx6Kbv2aJU= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -177,6 +229,10 @@ github.com/mssola/useragent v1.0.0 h1:WRlDpXyxHDNfvZaPEut5Biveq86Ze4o4EMffyMxmH5 github.com/mssola/useragent v1.0.0/go.mod h1:hz9Cqz4RXusgg1EdI4Al0INR62kP7aPSRNHnpU+b85Y= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nats-io/nats.go v1.34.0/go.mod h1:Ubdu4Nh9exXdSz0RVWRFBbRfrbSxOYd26oF0wkWclB8= +github.com/nats-io/nkeys v0.4.7/go.mod h1:kqXRgRDPlGy7nGaEDMuYzmiJCIAAWDK0IMBtDmGD0nc= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= @@ -186,6 +242,7 @@ github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.1.6/go.mod h1:MEH45j8TBi6u9BMogfbp0stKC5cdGjumZj5Y7AG4VIk= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= @@ -233,6 +290,7 @@ github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzG github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sagikazarmark/crypt v0.19.0/go.mod h1:c6vimRziqqERhtSe0MhIvzE1w54FrCHtrXb5NH/ja78= github.com/sagikazarmark/locafero v0.6.0 h1:ON7AQg37yzcRPU69mt7gwhFEBwxI6P9T4Qu3N51bwOk= github.com/sagikazarmark/locafero v0.6.0/go.mod h1:77OmuIc6VTraTXKXIs/uvUxKGUXjE1GbemJYHqdNjX0= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= @@ -245,6 +303,7 @@ github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFt github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= +github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -297,6 +356,7 @@ github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJ github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74 h1:gga7acRE695APm9hlsSMoOoE65U4/TcqNj90mc69Rlg= github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d h1:llb0neMWDQe87IzJLS4Ci7psK/lVsjIS2otl+1WyRyY= github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI= github.com/xuri/excelize/v2 v2.8.1 h1:pZLMEwK8ep+CLIUWpWmvW8IWE/yxqG0I1xcN6cVMGuQ= @@ -311,8 +371,21 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= +go.etcd.io/etcd/api/v3 v3.5.12/go.mod h1:Ot+o0SWSyT6uHhA56al1oCED0JImsRiU9Dc26+C2a+4= +go.etcd.io/etcd/client/pkg/v3 v3.5.12/go.mod h1:seTzl2d9APP8R5Y2hFL3NVlD6qC/dOT+3kvrqPyTas4= +go.etcd.io/etcd/client/v2 v2.305.12/go.mod h1:aQ/yhsxMu+Oht1FOupSr60oBvcS9cKXHrzBpDsPTf9E= +go.etcd.io/etcd/client/v3 v3.5.12/go.mod h1:tSbBCakoWmmddL+BKVAJHa9km+O/E+bumDe9mSbPiqw= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= +go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= +go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= +go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/arch v0.9.0 h1:ub9TgUInamJ8mrZIGlBG6/4TqWeMszd4N8lNorbrr6k= golang.org/x/arch v0.9.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -361,6 +434,7 @@ golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= +golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -447,6 +521,13 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +google.golang.org/api v0.171.0/go.mod h1:Hnq5AHm4OTMt2BUVjael2CWZFD6vksJdWCWiUAmjC9o= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s= +google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2/go.mod h1:O1cOfN1Cy6QEYr7VxtjOyP5AdAuR0aJ/MYZaaof623Y= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -471,6 +552,7 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= @@ -501,6 +583,7 @@ modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg= modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= xorm.io/builder v0.3.13 h1:a3jmiVVL19psGeXx8GIurTp7p0IIgqeDmwhcR6BAOAo= xorm.io/builder v0.3.13/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= xorm.io/xorm v1.3.9 h1:TUovzS0ko+IQ1XnNLfs5dqK1cJl1H5uHpWbWqAQ04nU= diff --git a/restagent/config/config.go b/restagent/config/config.go index aad08afd..00c900f8 100644 --- a/restagent/config/config.go +++ b/restagent/config/config.go @@ -150,16 +150,6 @@ type DbConfig struct { Backup string `yaml:"backup"` } -//type codingType int - -const ( - // Short message data coding type - CODING_UCS2 int = iota - CODING_ASCII - CODING_LATIN1 - CODING_NODEF -) - type AlarmConfig struct { SplitEventAlarm bool `yaml:"splitEventAlarm"` //ForwardAlarm bool `yaml:"forwardAlarm"` @@ -180,7 +170,7 @@ type AlarmConfig struct { SystemID string `yaml:"systemID" json:"systemID"` Password string `yaml:"password" json:"password"` SystemType string `yaml:"systemType" json:"systemType"` - DataCoding int `yaml:"dataCoding" json:"dataCoding"` + DataCoding byte `yaml:"dataCoding" json:"dataCoding"` ServiceNumber string `yaml:"serviceNumber" json:"serviceNumber"` } `yaml:"alarmSMSForward"` SMS struct { @@ -399,8 +389,10 @@ func UpdateStructFromMap(s any, updates map[string]any) { if field.Tag.Get("json") == key { structField := v.FieldByName(field.Name) if structField.IsValid() && structField.CanSet() { - if structField.Type() == reflect.TypeOf(value) { - structField.Set(reflect.ValueOf(value)) + // Convert value to the appropriate type if necessary + convertedValue := reflect.ValueOf(value).Convert(structField.Type()) + if structField.Type() == convertedValue.Type() { + structField.Set(convertedValue) } } break diff --git a/restagent/etc/restconf.yaml b/restagent/etc/restconf.yaml index d7196fca..61b3dbb0 100644 --- a/restagent/etc/restconf.yaml +++ b/restagent/etc/restconf.yaml @@ -132,7 +132,8 @@ omc: # TLS Skip verify: true/false # email/sms # smProxy: sms(Short Message Service)/smsc(SMS Centre) -# dataCoding: 0:UCS2, 1:ASCII, 2:LATIN1 +# dataCoding: 0:GSM7BIT, 1:ASCII, 2:BINARY8BIT1, 3:LATIN1, +# 4:BINARY8BIT2, 6:CYRILLIC, 7:HEBREW, 8:UCS2 alarm: alarmEmailForward: enable: true @@ -144,10 +145,10 @@ alarm: tlsSkipVerify: true alarmSMSForward: enable: true - mobileList: - smscAddr: "192.168.13.114:2775" - systemID: "omc" - password: "omc123" + mobileList: "1006,1008" + smscAddr: "192.168.14.212:2775" + systemID: "123456" + password: "123456" systemType: "UTRAN" dataCoding: 0 serviceNumber: "OMC"