diff --git a/CHANGELOG.md b/CHANGELOG.md index c718a4bb..4a6dc4a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # 版本发布日志 +## 2.2409.3-20240920 + +- 修复 字典多语言序号重复问题 +- 更新 UDM用户数据表,SMSC参数配置属性,字典数据和跟踪相关表 +- 新增 跟踪任务HLR免登录接口 +- 新增 跟踪任务相关接口初始化,跟踪任务新增非201/400时接收信息 +- 修复 抓包文件下载zip时目录同名导致删除压缩无内容 + ## 2.2409.1-20240909 - 新增 告警前转的两个接口email前转和短信前转的系统参数,采用了和网元统一的参数配置方式, diff --git a/captrace/makefile b/captrace/makefile index 9b7ded71..13059799 100644 --- a/captrace/makefile +++ b/captrace/makefile @@ -1,7 +1,7 @@ # Makefile for rest agent project PROJECT = OMC -VERSION = 2.2409.1 +VERSION = 2.2409.3 PLATFORM = amd64 ARMPLATFORM = aarch64 BUILDDIR = ../../build diff --git a/crontask/makefile b/crontask/makefile index a1d52818..c066c402 100644 --- a/crontask/makefile +++ b/crontask/makefile @@ -1,7 +1,7 @@ # Makefile for OMC-OMC-crontask project PROJECT = OMC -VERSION = 2.2409.1 +VERSION = 2.2409.3 LIBDIR = be.ems/lib BINNAME = crontask diff --git a/data2html/makefile b/data2html/makefile index 62aeb265..9218ce11 100644 --- a/data2html/makefile +++ b/data2html/makefile @@ -1,7 +1,7 @@ # Makefile for rest agent project PROJECT = OMC -VERSION = 2.2409.1 +VERSION = 2.2409.3 RelDate = `date +%Y%m%d` Release = $(RelDate) RelVer = $(VERSION)-$(RelDate) 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); diff --git a/database/install/alarm_event.sql b/database/install/alarm_event.sql index 53e499b6..fff32946 100644 --- a/database/install/alarm_event.sql +++ b/database/install/alarm_event.sql @@ -21,43 +21,43 @@ SET FOREIGN_KEY_CHECKS = 0; -- Table structure for alarm_event -- ---------------------------- DROP TABLE IF EXISTS `alarm_event`; -CREATE TABLE `alarm_event` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `alarm_seq` int(11) NULL DEFAULT NULL, +CREATE TABLE `alarm_event` ( + `id` int NOT NULL AUTO_INCREMENT, + `alarm_seq` int DEFAULT NULL, `alarm_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `alarm_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `alarm_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `ne_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `alarm_code` int(11) NULL DEFAULT NULL, - `event_time` datetime NULL DEFAULT NULL, - `alarm_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', - `orig_severity` enum('Critical','Major','Minor','Warning','Event') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'Minor' COMMENT '1: Critical, 2: Major, 3: Minor, 4: Warning, 5: Event(Only VNF)', - `perceived_severity` enum('Critical','Major','Minor','Warning','Event') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '1: Critical, 2: Major, 3: Minor, 4: Warning, 5: Event(Only VNF)', - `pv_flag` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `ne_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `object_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `object_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0', - `object_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `location_info` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `province` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `alarm_status` int(11) NOT NULL DEFAULT 1 COMMENT '0:clear, 1:active', - `specific_problem` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `specific_problem_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `add_info` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `counter` int(11) NULL DEFAULT 0, - `latest_event_time` datetime NULL DEFAULT NULL, - `ack_state` tinyint(4) NULL DEFAULT 0 COMMENT '0: Unacked, 1: Acked', - `ack_time` datetime NULL DEFAULT NULL, - `ack_user` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `clear_type` tinyint(4) NULL DEFAULT 0 COMMENT '0: Unclear, 1: AutoClear, 2: ManualClear', - `clear_time` datetime NULL DEFAULT NULL, - `clear_user` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `timestamp` datetime NULL DEFAULT current_timestamp() ON UPDATE CURRENT_TIMESTAMP, + `alarm_code` int DEFAULT NULL, + `event_time` datetime DEFAULT NULL, + `alarm_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `orig_severity` enum('Critical','Major','Minor','Warning','Event') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Minor' COMMENT '1: Critical, 2: Major, 3: Minor, 4: Warning, 5: Event(Only VNF)', + `perceived_severity` enum('Critical','Major','Minor','Warning','Event') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '1: Critical, 2: Major, 3: Minor, 4: Warning, 5: Event(Only VNF)', + `pv_flag` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `ne_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `object_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `object_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0', + `object_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `location_info` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `province` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `alarm_status` int NOT NULL DEFAULT '1' COMMENT '0:clear, 1:active', + `specific_problem` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `specific_problem_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `add_info` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `counter` int DEFAULT '0', + `latest_event_time` datetime DEFAULT NULL, + `ack_state` tinyint DEFAULT '0' COMMENT '0: Unacked, 1: Acked', + `ack_time` datetime DEFAULT NULL, + `ack_user` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `clear_type` tinyint DEFAULT '0' COMMENT '0: Unclear, 1: AutoClear, 2: ManualClear', + `clear_time` datetime DEFAULT NULL, + `clear_user` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `timestamp` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `idx_pk_id`(`id`) USING BTREE, - UNIQUE INDEX `idx_uni_aid_ne_aseq`(`ne_type`, `ne_id`, `alarm_id`, `alarm_seq`) USING BTREE, - INDEX `idx_event_time`(`event_time`) USING BTREE, - INDEX `idx_severity_status`(`alarm_status`, `orig_severity`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 228788 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + UNIQUE KEY `idx_pk_id` (`id`) USING BTREE, + UNIQUE KEY `idx_uni_aid_ne_aseq` (`ne_type`,`ne_id`,`alarm_id`,`alarm_seq`) USING BTREE, + KEY `idx_event_time` (`event_time`) USING BTREE, + KEY `idx_severity_status` (`alarm_status`,`orig_severity`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_alarm_event.sql b/database/upgrade/upg_alarm_event.sql index 7a72e790..f66fa213 100644 --- a/database/upgrade/upg_alarm_event.sql +++ b/database/upgrade/upg_alarm_event.sql @@ -60,80 +60,80 @@ CREATE TABLE IF NOT EXISTS `alarm_event` ( ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- Move event alarm from table alarm to alarm_event -START TRANSACTION; +-- START TRANSACTION; -INSERT INTO `alarm_event` ( - `alarm_seq`, - `alarm_id`, - `alarm_title`, - `ne_type`, - `ne_id`, - `alarm_code`, - `event_time`, - `alarm_type`, - `orig_severity`, - `perceived_severity`, - `pv_flag`, - `ne_name`, - `object_uid`, - `object_name`, - `object_type`, - `location_info`, - `province`, - `alarm_status`, - `specific_problem`, - `specific_problem_id`, - `add_info`, - `counter`, - `latest_event_time`, - `ack_state`, - `ack_time`, - `ack_user`, - `clear_type`, - `clear_time`, - `clear_user`, - `timestamp` - ) -SELECT - `alarm_seq`, - `alarm_id`, - `alarm_title`, - `ne_type`, - `ne_id`, - `alarm_code`, - `event_time`, - `alarm_type`, - `orig_severity`, - `perceived_severity`, - `pv_flag`, - `ne_name`, - `object_uid`, - `object_name`, - `object_type`, - `location_info`, - `province`, - `alarm_status`, - `specific_problem`, - `specific_problem_id`, - `add_info`, - `counter`, - `latest_event_time`, - `ack_state`, - `ack_time`, - `ack_user`, - `clear_type`, - `clear_time`, - `clear_user`, - `timestamp` -FROM `alarm` -WHERE - `orig_severity` = 'Event'; +-- INSERT INTO `alarm_event` ( +-- `alarm_seq`, +-- `alarm_id`, +-- `alarm_title`, +-- `ne_type`, +-- `ne_id`, +-- `alarm_code`, +-- `event_time`, +-- `alarm_type`, +-- `orig_severity`, +-- `perceived_severity`, +-- `pv_flag`, +-- `ne_name`, +-- `object_uid`, +-- `object_name`, +-- `object_type`, +-- `location_info`, +-- `province`, +-- `alarm_status`, +-- `specific_problem`, +-- `specific_problem_id`, +-- `add_info`, +-- `counter`, +-- `latest_event_time`, +-- `ack_state`, +-- `ack_time`, +-- `ack_user`, +-- `clear_type`, +-- `clear_time`, +-- `clear_user`, +-- `timestamp` +-- ) +-- SELECT +-- `alarm_seq`, +-- `alarm_id`, +-- `alarm_title`, +-- `ne_type`, +-- `ne_id`, +-- `alarm_code`, +-- `event_time`, +-- `alarm_type`, +-- `orig_severity`, +-- `perceived_severity`, +-- `pv_flag`, +-- `ne_name`, +-- `object_uid`, +-- `object_name`, +-- `object_type`, +-- `location_info`, +-- `province`, +-- `alarm_status`, +-- `specific_problem`, +-- `specific_problem_id`, +-- `add_info`, +-- `counter`, +-- `latest_event_time`, +-- `ack_state`, +-- `ack_time`, +-- `ack_user`, +-- `clear_type`, +-- `clear_time`, +-- `clear_user`, +-- `timestamp` +-- FROM `alarm` +-- WHERE +-- `orig_severity` = 'Event'; -DELETE FROM `alarm` WHERE `orig_severity` = 'Event'; +-- DELETE FROM `alarm` WHERE `orig_severity` = 'Event'; -COMMIT; +-- COMMIT; -DELETE FROM alarm_event WHERE id NOT IN (SELECT MIN(id) FROM alarm_event GROUP BY `ne_type`, `ne_id`, `alarm_id`, `event_time`); +-- DELETE FROM alarm_event WHERE id NOT IN (SELECT MIN(id) FROM alarm_event GROUP BY `ne_type`, `ne_id`, `alarm_id`, `event_time`); ALTER TABLE `alarm_event` ADD UNIQUE INDEX IF NOT EXISTS `idx_uni_aid_ne_time`(`ne_type`, `ne_id`, `alarm_id`, `event_time`) USING BTREE; diff --git a/database/upgrade/upg_u_auth_user.sql b/database/upgrade/upg_u_auth_user.sql index e73125d2..7627b565 100644 --- a/database/upgrade/upg_u_auth_user.sql +++ b/database/upgrade/upg_u_auth_user.sql @@ -1,7 +1,7 @@ -- -- Table structure for table `u_auth_user` -- -DROP TABLE IF EXISTS `u_auth_user`; +-- DROP TABLE IF EXISTS `u_auth_user`; CREATE TABLE IF NOT EXISTS `u_auth_user` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键', `imsi` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'SIM卡/USIM卡ID', @@ -16,3 +16,12 @@ CREATE TABLE IF NOT EXISTS `u_auth_user` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='UDM鉴权用户'; -- Dump completed on 2024-03-06 17:26:59 + +ALTER TABLE `u_auth_user` MODIFY COLUMN IF EXISTS `imsi` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'SIM卡/USIM卡ID' AFTER `id`; +ALTER TABLE `u_auth_user` MODIFY COLUMN IF EXISTS `ne_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'UDM网元标识' AFTER `imsi`; +ALTER TABLE `u_auth_user` MODIFY COLUMN IF EXISTS `amf` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'AMF' AFTER `ne_id`; +ALTER TABLE `u_auth_user` MODIFY COLUMN IF EXISTS `status` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '状态' AFTER `amf`; +ALTER TABLE `u_auth_user` MODIFY COLUMN IF EXISTS `ki` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'ki' AFTER `status`; +ALTER TABLE `u_auth_user` MODIFY COLUMN IF EXISTS `algo_index` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'algoIndex' AFTER `ki`; +ALTER TABLE `u_auth_user` MODIFY COLUMN IF EXISTS `opc` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'OPC' AFTER `algo_index`; +ALTER TABLE `u_auth_user` DROP COLUMN IF EXISTS `msisdn`; diff --git a/database/upgrade/upg_u_sub_user.sql b/database/upgrade/upg_u_sub_user.sql index 8646a08c..b3a2d46f 100644 --- a/database/upgrade/upg_u_sub_user.sql +++ b/database/upgrade/upg_u_sub_user.sql @@ -1,7 +1,7 @@ -- -- Table structure for table `u_sub_user` -- -DROP TABLE IF EXISTS `u_sub_user`; +-- DROP TABLE IF EXISTS `u_sub_user`; CREATE TABLE IF NOT EXISTS `u_sub_user` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键', `imsi` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'SIM卡/USIM卡ID', @@ -30,3 +30,25 @@ CREATE TABLE IF NOT EXISTS `u_sub_user` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='UDM签约用户'; -- Dump completed on 2024-03-06 17:26:59 + +ALTER TABLE `u_sub_user` ADD COLUMN IF NOT EXISTS `cag` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'CAG' AFTER `static_ip`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `imsi` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'SIM卡/USIM卡ID' AFTER `id`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `msisdn` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户电话号码' AFTER `imsi`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `ne_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'UDM网元标识' AFTER `msisdn`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `ambr` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'SubUeAMBRTemp' AFTER `ne_id`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `nssai` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'SubSNSSAITemp' AFTER `ambr`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `rat` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'rat VIRTUAL|WLAN|EUTRA|NR' AFTER `nssai`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `arfb` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'forbiddenAreasTemp' AFTER `rat`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `sar` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'serviceAreaRestrictTemp' AFTER `arfb`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `cn` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'cnType EPC|5GC' AFTER `sar`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `sm_data` varchar(1500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'smData' AFTER `cn`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `smf_sel` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'smfSel' AFTER `sm_data`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `eps_dat` varchar(1500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'Eps' AFTER `smf_sel`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `eps_flag` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'epsFlag' AFTER `eps_dat`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `eps_odb` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'epsOdb' AFTER `eps_flag`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `hplmn_odb` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'hplmnOdb' AFTER `eps_odb`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `ard` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'Ard' AFTER `hplmn_odb`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `epstpl` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'Epstpl' AFTER `ard`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `context_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'ContextId' AFTER `epstpl`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `apn_context` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'apnContext' AFTER `context_id`; +ALTER TABLE `u_sub_user` MODIFY COLUMN IF EXISTS `static_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'staticIpstatic_ip指给4G UE分配的静态IP,没有可不带此字段名' AFTER `apn_context`; diff --git a/database/upgrade/zupgrade.sql b/database/upgrade/zupgrade.sql index f1ae3e39..c52bdb92 100644 --- a/database/upgrade/zupgrade.sql +++ b/database/upgrade/zupgrade.sql @@ -1,10 +1,5 @@ DROP TRIGGER IF EXISTS `tg_account_menu`; -ALTER TABLE `gold_kpi` -MODIFY COLUMN `value` bigint NULL DEFAULT 0 AFTER `kpi_id`; - -ALTER TABLE `ne_link` DROP INDEX IF EXISTS `idx_netype_neid`; - ALTER TABLE `nbi_operation_log` MODIFY COLUMN `created_at` datetime NULL DEFAULT NULL AFTER `log_time`; @@ -23,21 +18,6 @@ ALTER TABLE `measure_task` ADD COLUMN IF NOT EXISTS `account_id` varchar(32) NULL AFTER `status`, ADD COLUMN IF NOT EXISTS `comment` varchar(255) NULL AFTER `account_id`; -ALTER TABLE `trace_task` -ADD COLUMN IF NOT EXISTS `account_id` varchar(32) NULL AFTER `status`, -ADD COLUMN IF NOT EXISTS `comment` varchar(255) NULL AFTER `account_id`; - -DELETE FROM trace_data WHERE timestamp LIKE '2023-%'; -ALTER TABLE `trace_data` -MODIFY COLUMN `timestamp` bigint NULL DEFAULT NULL AFTER `msg_direct`; - -ALTER TABLE `trace_data` -ADD COLUMN IF NOT EXISTS `length` int NULL AFTER `msg_direct`; - -ALTER TABLE `ne_backup` -ADD - COLUMN IF NOT EXISTS `comment` varchar(255) NULL AFTER `md5_sum`; - ALTER TABLE `mml_command` ADD COLUMN IF NOT EXISTS `status` enum('Active', 'Inactive') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'Active' COMMENT '激活: Active 未激活: Inactive' AFTER `param_json`; diff --git a/makefile b/makefile index 1d2bdcaf..0ef01ac4 100644 --- a/makefile +++ b/makefile @@ -3,7 +3,7 @@ ProjectL = omc ProjectU = OMC PROJECT = $(ProjectL) -VERSION = 2.2409.1 +VERSION = 2.2409.3 RelDate = `date +%Y%m%d` Release = $(RelDate) RelVer = $(VERSION)-$(RelDate) diff --git a/mkpkg.sh b/mkpkg.sh index 4e490773..310beeb1 100644 --- a/mkpkg.sh +++ b/mkpkg.sh @@ -2,7 +2,7 @@ ProcList="restagent crontask sshsvc captrace data2html" ProjectL=omc -VERSION=2.2409.1 +VERSION=2.2409.3 RelDate=`date +%Y%m%d` Release=${RelDate} RelVer=${VERSION}-${RelDate} diff --git a/restagent/makefile b/restagent/makefile index 92c2f410..10016cd3 100644 --- a/restagent/makefile +++ b/restagent/makefile @@ -1,7 +1,7 @@ # Makefile for rest agent project PROJECT = OMC -VERSION = 2.2409.1 +VERSION = 2.2409.3 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 b42ed73e..1344060d 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.1" + version: "2.2409.3" # 应用服务配置 server: diff --git a/src/modules/network_element/controller/ne_info.go b/src/modules/network_element/controller/ne_info.go index 45e0c4ed..001b778a 100644 --- a/src/modules/network_element/controller/ne_info.go +++ b/src/modules/network_element/controller/ne_info.go @@ -20,7 +20,7 @@ import ( var NewNeInfo = &NeInfoController{ neInfoService: neService.NewNeInfoImpl, neLicenseService: neService.NewNeLicenseImpl, - neVersionService: neService.NewNeVersionImpl, + neVersionService: neService.NewNeVersion, } // 网元信息请求 @@ -32,7 +32,7 @@ type NeInfoController struct { // 网元授权激活信息服务 neLicenseService neService.INeLicense // 网元版本信息服务 - neVersionService neService.INeVersion + neVersionService *neService.NeVersion } // neStateCacheMap 网元状态缓存最后一次成功的信息 @@ -318,6 +318,8 @@ func (s *NeInfoController) Add(c *gin.Context) { // 已有网元可获取的信息 if body.ServerState != nil { if v, ok := body.ServerState["version"]; ok && v != nil { + neVersion.Name = "-" + neVersion.Path = "-" neVersion.Version = v.(string) } if v, ok := body.ServerState["sn"]; ok && v != nil { @@ -397,6 +399,8 @@ func (s *NeInfoController) Edit(c *gin.Context) { // 已有网元可获取的信息 if body.ServerState != nil { if v, ok := body.ServerState["version"]; ok && v != nil { + neVersion.Name = "-" + neVersion.Path = "-" neVersion.Version = v.(string) neVersion.UpdateBy = loginUserName } diff --git a/src/modules/network_element/controller/ne_version.go b/src/modules/network_element/controller/ne_version.go index 8df9b017..366e30c2 100644 --- a/src/modules/network_element/controller/ne_version.go +++ b/src/modules/network_element/controller/ne_version.go @@ -11,7 +11,7 @@ import ( // 实例化控制层 NeVersionController 结构体 var NewNeVersion = &NeVersionController{ - neVersionService: neService.NewNeVersionImpl, + neVersionService: neService.NewNeVersion, } // 网元版本请求 @@ -19,7 +19,7 @@ var NewNeVersion = &NeVersionController{ // PATH /version type NeVersionController struct { // 网元版本服务 - neVersionService neService.INeVersion + neVersionService *neService.NeVersion } // 网元版本列表 @@ -27,7 +27,7 @@ type NeVersionController struct { // GET /list func (s *NeVersionController) List(c *gin.Context) { querys := ctx.QueryMap(c) - data := s.neVersionService.SelectPage(querys) + data := s.neVersionService.SelectPage(querys, true) c.JSON(200, result.Ok(data)) } diff --git a/src/modules/network_element/repository/ne_version.go b/src/modules/network_element/repository/ne_version.go index 6da08cc8..e02466b2 100644 --- a/src/modules/network_element/repository/ne_version.go +++ b/src/modules/network_element/repository/ne_version.go @@ -1,24 +1,329 @@ package repository -import "be.ems/src/modules/network_element/model" +import ( + "strings" + "time" -// INeVersion 网元版本信息 数据层接口 -type INeVersion interface { - // SelectPage 根据条件分页查询字典类型 - SelectPage(query map[string]any) map[string]any + "be.ems/src/framework/datasource" + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/parse" + "be.ems/src/framework/utils/repo" + "be.ems/src/modules/network_element/model" +) - // SelectList 根据实体查询 - SelectList(neVersion model.NeVersion) []model.NeVersion +// 实例化数据层 NeVersion 结构体 +var NewNeVersion = &NeVersion{ + selectSql: `select + id, ne_type, ne_id, name, version, path, pre_name, pre_version, pre_path, new_name, new_version, new_path, status, create_by, create_time, update_by, update_time + from ne_version`, - // SelectByIds 通过ID查询 - SelectByIds(ids []string) []model.NeVersion - - // Insert 新增信息 - Insert(neVersion model.NeVersion) string - - // Update 修改信息 - Update(neVersion model.NeVersion) int64 - - // DeleteByIds 批量删除信息 - DeleteByIds(ids []string) int64 + resultMap: map[string]string{ + "id": "ID", + "ne_type": "NeType", + "ne_id": "NeId", + "name": "name", + "version": "Version", + "path": "Path", + "pre_name": "preName", + "pre_version": "PreVersion", + "pre_path": "PrePath", + "new_name": "NewName", + "new_version": "NewVersion", + "new_path": "NewPath", + "status": "Status", + "create_by": "CreateBy", + "create_time": "CreateTime", + "update_by": "UpdateBy", + "update_time": "UpdateTime", + }, +} + +// NeVersion 网元版本信息 数据层处理 +type NeVersion struct { + // 查询视图对象SQL + selectSql string + // 结果字段与实体映射 + resultMap map[string]string +} + +// convertResultRows 将结果记录转实体结果组 +func (r *NeVersion) convertResultRows(rows []map[string]any) []model.NeVersion { + arr := make([]model.NeVersion, 0) + for _, row := range rows { + item := model.NeVersion{} + for key, value := range row { + if keyMapper, ok := r.resultMap[key]; ok { + repo.SetFieldValue(&item, keyMapper, value) + } + } + arr = append(arr, item) + } + return arr +} + +// SelectPage 根据条件分页查询字典类型 +func (r *NeVersion) SelectPage(query map[string]any) map[string]any { + // 查询条件拼接 + var conditions []string + var params []any + if v, ok := query["neType"]; ok && v != "" { + conditions = append(conditions, "ne_type = ?") + params = append(params, strings.Trim(v.(string), " ")) + } + if v, ok := query["neId"]; ok && v != "" { + conditions = append(conditions, "ne_id = ?") + params = append(params, strings.Trim(v.(string), " ")) + } + if v, ok := query["version"]; ok && v != "" { + conditions = append(conditions, "version like concat(?, '%')") + params = append(params, strings.Trim(v.(string), " ")) + } + if v, ok := query["path"]; ok && v != "" { + conditions = append(conditions, "path like concat(?, '%')") + params = append(params, strings.Trim(v.(string), " ")) + } + + // 构建查询条件语句 + whereSql := "" + if len(conditions) > 0 { + whereSql += " where " + strings.Join(conditions, " and ") + } + + result := map[string]any{ + "total": 0, + "rows": []model.NeHost{}, + } + + // 查询数量 长度为0直接返回 + totalSql := "select count(1) as 'total' from ne_version" + totalRows, err := datasource.RawDB("", totalSql+whereSql, params) + if err != nil { + logger.Errorf("total err => %v", err) + return result + } + total := parse.Number(totalRows[0]["total"]) + if total == 0 { + return result + } else { + result["total"] = total + } + + // 分页 + pageNum, pageSize := repo.PageNumSize(query["pageNum"], query["pageSize"]) + pageSql := " order by update_time desc limit ?,? " + params = append(params, pageNum*pageSize) + params = append(params, pageSize) + + // 查询数据 + querySql := r.selectSql + whereSql + pageSql + results, err := datasource.RawDB("", querySql, params) + if err != nil { + logger.Errorf("query err => %v", err) + return result + } + + // 转换实体 + result["rows"] = r.convertResultRows(results) + return result +} + +// SelectList 根据实体查询 +func (r *NeVersion) SelectList(neVersion model.NeVersion) []model.NeVersion { + // 查询条件拼接 + var conditions []string + var params []any + if neVersion.NeType != "" { + conditions = append(conditions, "ne_type = ?") + params = append(params, neVersion.NeType) + } + if neVersion.NeId != "" { + conditions = append(conditions, "ne_id = ?") + params = append(params, neVersion.NeId) + } + if neVersion.Version != "" { + conditions = append(conditions, "version like concat(?, '%')") + params = append(params, neVersion.Version) + } + if neVersion.Path != "" { + conditions = append(conditions, "path like concat(?, '%')") + params = append(params, neVersion.Path) + } + if neVersion.Status != "" { + conditions = append(conditions, "status = ?") + params = append(params, neVersion.Status) + } + + // 构建查询条件语句 + whereSql := "" + if len(conditions) > 0 { + whereSql += " where " + strings.Join(conditions, " and ") + } + + // 查询数据 + querySql := r.selectSql + whereSql + " order by id asc " + results, err := datasource.RawDB("", querySql, params) + if err != nil { + logger.Errorf("query err => %v", err) + } + + // 转换实体 + return r.convertResultRows(results) +} + +// SelectByIds 通过ID查询 +func (r *NeVersion) SelectByIds(cmdIds []string) []model.NeVersion { + placeholder := repo.KeyPlaceholderByQuery(len(cmdIds)) + querySql := r.selectSql + " where id in (" + placeholder + ")" + parameters := repo.ConvertIdsSlice(cmdIds) + results, err := datasource.RawDB("", querySql, parameters) + if err != nil { + logger.Errorf("query err => %v", err) + return []model.NeVersion{} + } + // 转换实体 + return r.convertResultRows(results) +} + +// Insert 新增信息 +func (r *NeVersion) Insert(neVersion model.NeVersion) string { + // 参数拼接 + params := make(map[string]any) + if neVersion.NeType != "" { + params["ne_type"] = neVersion.NeType + } + if neVersion.NeId != "" { + params["ne_id"] = neVersion.NeId + } + if neVersion.Name != "" { + params["name"] = neVersion.Name + } + if neVersion.Version != "" { + params["version"] = neVersion.Version + } + if neVersion.Path != "" { + params["path"] = neVersion.Path + } + if neVersion.PreName != "" { + params["pre_name"] = neVersion.PreName + } + if neVersion.PreVersion != "" { + params["pre_version"] = neVersion.PreVersion + } + if neVersion.PrePath != "" { + params["pre_path"] = neVersion.PrePath + } + if neVersion.NewName != "" { + params["new_name"] = neVersion.NewName + } + if neVersion.NewVersion != "" { + params["new_version"] = neVersion.NewVersion + } + if neVersion.NewPath != "" { + params["new_path"] = neVersion.NewPath + } + if neVersion.Status != "" { + params["status"] = neVersion.Status + } + if neVersion.CreateBy != "" { + params["create_by"] = neVersion.CreateBy + params["create_time"] = time.Now().UnixMilli() + } + + // 构建执行语句 + keys, placeholder, values := repo.KeyPlaceholderValueByInsert(params) + sql := "insert into ne_version (" + strings.Join(keys, ",") + ")values(" + placeholder + ")" + + db := datasource.DefaultDB() + // 开启事务 + tx := db.Begin() + // 执行插入 + err := tx.Exec(sql, values...).Error + if err != nil { + logger.Errorf("insert row : %v", err.Error()) + tx.Rollback() + return "" + } + // 获取生成的自增 ID + var insertedID string + err = tx.Raw("select last_insert_id()").Row().Scan(&insertedID) + if err != nil { + logger.Errorf("insert last id : %v", err.Error()) + tx.Rollback() + return "" + } + // 提交事务 + tx.Commit() + return insertedID +} + +// Update 修改信息 +func (r *NeVersion) Update(neVersion model.NeVersion) int64 { + // 参数拼接 + params := make(map[string]any) + if neVersion.NeType != "" { + params["ne_type"] = neVersion.NeType + } + if neVersion.NeId != "" { + params["ne_id"] = neVersion.NeId + } + if neVersion.Name != "" { + params["name"] = neVersion.Name + } + if neVersion.Version != "" { + params["version"] = neVersion.Version + } + if neVersion.Path != "" { + params["path"] = neVersion.Path + } + if neVersion.PreName != "" { + params["pre_name"] = neVersion.PreName + } + if neVersion.PreVersion != "" { + params["pre_version"] = neVersion.PreVersion + } + if neVersion.PrePath != "" { + params["pre_path"] = neVersion.PrePath + } + if neVersion.NewName != "" { + params["new_name"] = neVersion.NewName + } + if neVersion.NewVersion != "" { + params["new_version"] = neVersion.NewVersion + } + if neVersion.NewPath != "" { + params["new_path"] = neVersion.NewPath + } + if neVersion.Status != "" { + params["status"] = neVersion.Status + } + if neVersion.UpdateBy != "" { + params["update_by"] = neVersion.UpdateBy + params["update_time"] = time.Now().UnixMilli() + } + + // 构建执行语句 + keys, values := repo.KeyValueByUpdate(params) + sql := "update ne_version set " + strings.Join(keys, ",") + " where id = ?" + + // 执行更新 + values = append(values, neVersion.ID) + rows, err := datasource.ExecDB("", sql, values) + if err != nil { + logger.Errorf("update row : %v", err.Error()) + return 0 + } + return rows +} + +// DeleteByIds 批量删除信息 +func (r *NeVersion) DeleteByIds(cmdIds []string) int64 { + placeholder := repo.KeyPlaceholderByQuery(len(cmdIds)) + sql := "delete from ne_version where id in (" + placeholder + ")" + parameters := repo.ConvertIdsSlice(cmdIds) + results, err := datasource.ExecDB("", sql, parameters) + if err != nil { + logger.Errorf("delete err => %v", err) + return 0 + } + return results } diff --git a/src/modules/network_element/repository/ne_version.impl.go b/src/modules/network_element/repository/ne_version.impl.go deleted file mode 100644 index ad2c1440..00000000 --- a/src/modules/network_element/repository/ne_version.impl.go +++ /dev/null @@ -1,329 +0,0 @@ -package repository - -import ( - "strings" - "time" - - "be.ems/src/framework/datasource" - "be.ems/src/framework/logger" - "be.ems/src/framework/utils/parse" - "be.ems/src/framework/utils/repo" - "be.ems/src/modules/network_element/model" -) - -// 实例化数据层 NewNeVersion 结构体 -var NewNeVersionImpl = &NeVersionImpl{ - selectSql: `select - id, ne_type, ne_id, name, version, path, pre_name, pre_version, pre_path, new_name, new_version, new_path, status, create_by, create_time, update_by, update_time - from ne_version`, - - resultMap: map[string]string{ - "id": "ID", - "ne_type": "NeType", - "ne_id": "NeId", - "name": "name", - "version": "Version", - "path": "Path", - "pre_name": "preName", - "pre_version": "PreVersion", - "pre_path": "PrePath", - "new_name": "NewName", - "new_version": "NewVersion", - "new_path": "NewPath", - "status": "Status", - "create_by": "CreateBy", - "create_time": "CreateTime", - "update_by": "UpdateBy", - "update_time": "UpdateTime", - }, -} - -// NeVersionImpl 网元版本信息 数据层处理 -type NeVersionImpl struct { - // 查询视图对象SQL - selectSql string - // 结果字段与实体映射 - resultMap map[string]string -} - -// convertResultRows 将结果记录转实体结果组 -func (r *NeVersionImpl) convertResultRows(rows []map[string]any) []model.NeVersion { - arr := make([]model.NeVersion, 0) - for _, row := range rows { - item := model.NeVersion{} - for key, value := range row { - if keyMapper, ok := r.resultMap[key]; ok { - repo.SetFieldValue(&item, keyMapper, value) - } - } - arr = append(arr, item) - } - return arr -} - -// SelectPage 根据条件分页查询字典类型 -func (r *NeVersionImpl) SelectPage(query map[string]any) map[string]any { - // 查询条件拼接 - var conditions []string - var params []any - if v, ok := query["neType"]; ok && v != "" { - conditions = append(conditions, "ne_type = ?") - params = append(params, strings.Trim(v.(string), " ")) - } - if v, ok := query["neId"]; ok && v != "" { - conditions = append(conditions, "ne_id = ?") - params = append(params, strings.Trim(v.(string), " ")) - } - if v, ok := query["version"]; ok && v != "" { - conditions = append(conditions, "version like concat(?, '%')") - params = append(params, strings.Trim(v.(string), " ")) - } - if v, ok := query["path"]; ok && v != "" { - conditions = append(conditions, "path like concat(?, '%')") - params = append(params, strings.Trim(v.(string), " ")) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - result := map[string]any{ - "total": 0, - "rows": []model.NeHost{}, - } - - // 查询数量 长度为0直接返回 - totalSql := "select count(1) as 'total' from ne_version" - totalRows, err := datasource.RawDB("", totalSql+whereSql, params) - if err != nil { - logger.Errorf("total err => %v", err) - return result - } - total := parse.Number(totalRows[0]["total"]) - if total == 0 { - return result - } else { - result["total"] = total - } - - // 分页 - pageNum, pageSize := repo.PageNumSize(query["pageNum"], query["pageSize"]) - pageSql := " order by update_time desc limit ?,? " - params = append(params, pageNum*pageSize) - params = append(params, pageSize) - - // 查询数据 - querySql := r.selectSql + whereSql + pageSql - results, err := datasource.RawDB("", querySql, params) - if err != nil { - logger.Errorf("query err => %v", err) - return result - } - - // 转换实体 - result["rows"] = r.convertResultRows(results) - return result -} - -// SelectList 根据实体查询 -func (r *NeVersionImpl) SelectList(neVersion model.NeVersion) []model.NeVersion { - // 查询条件拼接 - var conditions []string - var params []any - if neVersion.NeType != "" { - conditions = append(conditions, "ne_type = ?") - params = append(params, neVersion.NeType) - } - if neVersion.NeId != "" { - conditions = append(conditions, "ne_id = ?") - params = append(params, neVersion.NeId) - } - if neVersion.Version != "" { - conditions = append(conditions, "version like concat(?, '%')") - params = append(params, neVersion.Version) - } - if neVersion.Path != "" { - conditions = append(conditions, "path like concat(?, '%')") - params = append(params, neVersion.Path) - } - if neVersion.Status != "" { - conditions = append(conditions, "status = ?") - params = append(params, neVersion.Status) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - // 查询数据 - querySql := r.selectSql + whereSql + " order by id asc " - results, err := datasource.RawDB("", querySql, params) - if err != nil { - logger.Errorf("query err => %v", err) - } - - // 转换实体 - return r.convertResultRows(results) -} - -// SelectByIds 通过ID查询 -func (r *NeVersionImpl) SelectByIds(cmdIds []string) []model.NeVersion { - placeholder := repo.KeyPlaceholderByQuery(len(cmdIds)) - querySql := r.selectSql + " where id in (" + placeholder + ")" - parameters := repo.ConvertIdsSlice(cmdIds) - results, err := datasource.RawDB("", querySql, parameters) - if err != nil { - logger.Errorf("query err => %v", err) - return []model.NeVersion{} - } - // 转换实体 - return r.convertResultRows(results) -} - -// Insert 新增信息 -func (r *NeVersionImpl) Insert(neVersion model.NeVersion) string { - // 参数拼接 - params := make(map[string]any) - if neVersion.NeType != "" { - params["ne_type"] = neVersion.NeType - } - if neVersion.NeId != "" { - params["ne_id"] = neVersion.NeId - } - if neVersion.Name != "" { - params["name"] = neVersion.Name - } - if neVersion.Version != "" { - params["version"] = neVersion.Version - } - if neVersion.Path != "" { - params["path"] = neVersion.Path - } - if neVersion.PreName != "" { - params["pre_name"] = neVersion.PreName - } - if neVersion.PreVersion != "" { - params["pre_version"] = neVersion.PreVersion - } - if neVersion.PrePath != "" { - params["pre_path"] = neVersion.PrePath - } - if neVersion.NewName != "" { - params["new_name"] = neVersion.NewName - } - if neVersion.NewVersion != "" { - params["new_version"] = neVersion.NewVersion - } - if neVersion.NewPath != "" { - params["new_path"] = neVersion.NewPath - } - if neVersion.Status != "" { - params["status"] = neVersion.Status - } - if neVersion.CreateBy != "" { - params["create_by"] = neVersion.CreateBy - params["create_time"] = time.Now().UnixMilli() - } - - // 构建执行语句 - keys, placeholder, values := repo.KeyPlaceholderValueByInsert(params) - sql := "insert into ne_version (" + strings.Join(keys, ",") + ")values(" + placeholder + ")" - - db := datasource.DefaultDB() - // 开启事务 - tx := db.Begin() - // 执行插入 - err := tx.Exec(sql, values...).Error - if err != nil { - logger.Errorf("insert row : %v", err.Error()) - tx.Rollback() - return "" - } - // 获取生成的自增 ID - var insertedID string - err = tx.Raw("select last_insert_id()").Row().Scan(&insertedID) - if err != nil { - logger.Errorf("insert last id : %v", err.Error()) - tx.Rollback() - return "" - } - // 提交事务 - tx.Commit() - return insertedID -} - -// Update 修改信息 -func (r *NeVersionImpl) Update(neVersion model.NeVersion) int64 { - // 参数拼接 - params := make(map[string]any) - if neVersion.NeType != "" { - params["ne_type"] = neVersion.NeType - } - if neVersion.NeId != "" { - params["ne_id"] = neVersion.NeId - } - if neVersion.Name != "" { - params["name"] = neVersion.Name - } - if neVersion.Version != "" { - params["version"] = neVersion.Version - } - if neVersion.Path != "" { - params["path"] = neVersion.Path - } - if neVersion.PreName != "" { - params["pre_name"] = neVersion.PreName - } - if neVersion.PreVersion != "" { - params["pre_version"] = neVersion.PreVersion - } - if neVersion.PrePath != "" { - params["pre_path"] = neVersion.PrePath - } - if neVersion.NewName != "" { - params["new_name"] = neVersion.NewName - } - if neVersion.NewVersion != "" { - params["new_version"] = neVersion.NewVersion - } - if neVersion.NewPath != "" { - params["new_path"] = neVersion.NewPath - } - if neVersion.Status != "" { - params["status"] = neVersion.Status - } - if neVersion.UpdateBy != "" { - params["update_by"] = neVersion.UpdateBy - params["update_time"] = time.Now().UnixMilli() - } - - // 构建执行语句 - keys, values := repo.KeyValueByUpdate(params) - sql := "update ne_version set " + strings.Join(keys, ",") + " where id = ?" - - // 执行更新 - values = append(values, neVersion.ID) - rows, err := datasource.ExecDB("", sql, values) - if err != nil { - logger.Errorf("update row : %v", err.Error()) - return 0 - } - return rows -} - -// DeleteByIds 批量删除信息 -func (r *NeVersionImpl) DeleteByIds(cmdIds []string) int64 { - placeholder := repo.KeyPlaceholderByQuery(len(cmdIds)) - sql := "delete from ne_version where id in (" + placeholder + ")" - parameters := repo.ConvertIdsSlice(cmdIds) - results, err := datasource.ExecDB("", sql, parameters) - if err != nil { - logger.Errorf("delete err => %v", err) - return 0 - } - return results -} diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index 6de019c7..0036dd75 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -283,9 +283,9 @@ func (r *NeInfoImpl) DeleteByIds(infoIds []string) (int64, error) { NewNeLicenseImpl.DeleteByIds([]string{neLicense.ID}) } // 删除Version - neVersion := NewNeVersionImpl.SelectByNeTypeAndNeID(v.NeType, v.NeId) + neVersion := NewNeVersion.SelectByNeTypeAndNeID(v.NeType, v.NeId) if neVersion.NeId == v.NeId { - NewNeVersionImpl.DeleteByIds([]string{neVersion.ID}) + NewNeVersion.DeleteByIds([]string{neVersion.ID}) } // 缓存信息删除 redis.Del("", fmt.Sprintf("%s%s:%s", cachekey.NE_KEY, v.NeType, v.NeId)) diff --git a/src/modules/network_element/service/ne_software.impl.go b/src/modules/network_element/service/ne_software.impl.go index 8ac52094..326ae339 100644 --- a/src/modules/network_element/service/ne_software.impl.go +++ b/src/modules/network_element/service/ne_software.impl.go @@ -47,7 +47,7 @@ func (r *NeSoftwareImpl) Insert(neSoftware model.NeSoftware) string { inserId := r.neSoftwareRepository.Insert(neSoftware) if inserId != "" { // 更新同类型的新包版本 - neVersions := NewNeVersionImpl.SelectList(model.NeVersion{NeType: neSoftware.NeType}) + neVersions := NewNeVersion.SelectList(model.NeVersion{NeType: neSoftware.NeType}, false) if len(neVersions) > 0 { for _, neVersion := range neVersions { neVersion.NewName = neSoftware.Name @@ -55,7 +55,7 @@ func (r *NeSoftwareImpl) Insert(neSoftware model.NeSoftware) string { neVersion.NewPath = neSoftware.Path neVersion.Status = "3" neVersion.UpdateBy = neSoftware.CreateBy - NewNeVersionImpl.Update(neVersion) + NewNeVersion.Update(neVersion) } } } @@ -67,10 +67,10 @@ func (r *NeSoftwareImpl) Update(neSoftware model.NeSoftware) int64 { rows := r.neSoftwareRepository.Update(neSoftware) if rows > 0 { // 更新同类型的新包版本 - neVersions := NewNeVersionImpl.SelectList(model.NeVersion{ + neVersions := NewNeVersion.SelectList(model.NeVersion{ NeType: neSoftware.NeType, Status: "3", - }) + }, false) if len(neVersions) > 0 { for _, neVersion := range neVersions { neVersion.NewName = neSoftware.Name @@ -78,7 +78,7 @@ func (r *NeSoftwareImpl) Update(neSoftware model.NeSoftware) int64 { neVersion.NewPath = neSoftware.Path neVersion.Status = "3" neVersion.UpdateBy = neSoftware.UpdateBy - NewNeVersionImpl.Update(neVersion) + NewNeVersion.Update(neVersion) } } } @@ -128,7 +128,7 @@ func (r *NeSoftwareImpl) CheckUniqueTypeAndNameAndVersion(neType, name, version, func (r *NeSoftwareImpl) UpdateVersions(neSoftware model.NeSoftware, neVersion model.NeVersion) int64 { var rows int64 = 0 // 更新同类型的新包版本 - neVersions := NewNeVersionImpl.SelectList(neVersion) + neVersions := NewNeVersion.SelectList(neVersion, false) if len(neVersions) > 0 { for _, v := range neVersions { v.NewName = neSoftware.Name @@ -136,7 +136,7 @@ func (r *NeSoftwareImpl) UpdateVersions(neSoftware model.NeSoftware, neVersion m v.NewPath = neSoftware.Path v.Status = "3" v.UpdateBy = neVersion.UpdateBy - rows += NewNeVersionImpl.Update(v) + rows += NewNeVersion.Update(v) } } return rows diff --git a/src/modules/network_element/service/ne_version.go b/src/modules/network_element/service/ne_version.go index f92a81be..198f3d5a 100644 --- a/src/modules/network_element/service/ne_version.go +++ b/src/modules/network_element/service/ne_version.go @@ -1,32 +1,697 @@ package service -import "be.ems/src/modules/network_element/model" +import ( + "fmt" + "os" + "path/filepath" + "strings" + "time" -// INeVersion 网元版本信息 服务层接口 -type INeVersion interface { - // SelectPage 根据条件分页查询字典类型 - SelectPage(query map[string]any) map[string]any + "be.ems/src/framework/utils/file" + "be.ems/src/framework/utils/ssh" + neFetchlink "be.ems/src/modules/network_element/fetch_link" + "be.ems/src/modules/network_element/model" + "be.ems/src/modules/network_element/repository" +) - // SelectList 根据实体查询 - SelectList(neVersion model.NeVersion) []model.NeVersion - - // SelectById 通过ID查询 - SelectById(id string) model.NeVersion - - // Insert 新增信息 - Insert(neVersion model.NeVersion) string - - // Update 修改信息 - Update(neVersion model.NeVersion) int64 - - // DeleteByIds 批量删除信息 - DeleteByIds(ids []string) (int64, error) - - // SelectByNeTypeAndNeID 通过网元类型和网元ID查询 - SelectByNeTypeAndNeID(neType, neId string) model.NeVersion - - // Operate 操作版本上传到网元主机执行命令 - // - // action 安装行为:install upgrade rollback - Operate(action string, neVersion model.NeVersion, preinput map[string]string) (string, error) +// 实例化服务层 NeVersion 结构体 +var NewNeVersion = &NeVersion{ + neVersionRepository: repository.NewNeVersion, +} + +// NeVersion 网元版本信息 服务层处理 +type NeVersion struct { + // 网元版本信息表 + neVersionRepository *repository.NeVersion +} + +// SelectNeHostPage 分页查询列表数据 +func (r *NeVersion) SelectPage(query map[string]any, checkVersion bool) map[string]any { + data := r.neVersionRepository.SelectPage(query) + + // 网元直连检查更新网元服务版本 + if checkVersion { + rows := data["rows"].([]model.NeVersion) + r.checkNeVersion(&rows) + } + + return data +} + +// SelectConfigList 查询列表 +func (r *NeVersion) SelectList(neVersion model.NeVersion, checkVersion bool) []model.NeVersion { + list := r.neVersionRepository.SelectList(neVersion) + + // 网元直连检查更新网元服务版本 + if checkVersion { + r.checkNeVersion(&list) + } + + return list +} + +// checkNeVersion 网元列表检查更新网元版本 +func (r *NeVersion) checkNeVersion(arr *[]model.NeVersion) { + for i := range *arr { + item := (*arr)[i] + // 查询网元获取IP + neInfo := NewNeInfoImpl.SelectNeInfoByNeTypeAndNeID(item.NeType, item.NeId) + if neInfo.NeId != item.NeId || neInfo.IP == "" { + continue + } + result, err := neFetchlink.NeState(neInfo) + if err != nil { + continue + } + if v, ok := result["version"]; ok && v != nil { + ver := v.(string) + if ver == item.Version { + continue + } + item.Name = "-" + item.Path = "-" + item.Version = ver + } + if item.NeType != neInfo.NeType || item.NeId != neInfo.NeId { + item.NeType = neInfo.NeType + item.NeId = neInfo.NeId + } + r.Update(item) + (*arr)[i] = item + } +} + +// SelectByIds 通过ID查询 +func (r *NeVersion) SelectById(id string) model.NeVersion { + if id == "" { + return model.NeVersion{} + } + neVersions := r.neVersionRepository.SelectByIds([]string{id}) + if len(neVersions) > 0 { + return neVersions[0] + } + return model.NeVersion{} +} + +// Insert 新增信息 +func (r *NeVersion) Insert(neVersion model.NeVersion) string { + return r.neVersionRepository.Insert(neVersion) +} + +// Update 修改信息 +func (r *NeVersion) Update(neVersion model.NeVersion) int64 { + return r.neVersionRepository.Update(neVersion) +} + +// DeleteByIds 批量删除信息 +func (r *NeVersion) DeleteByIds(ids []string) (int64, error) { + // 检查是否存在 + rowIds := r.neVersionRepository.SelectByIds(ids) + if len(rowIds) <= 0 { + return 0, fmt.Errorf("neVersion.noData") + } + + if len(rowIds) == len(ids) { + rows := r.neVersionRepository.DeleteByIds(ids) + return rows, nil + } + // 删除信息失败! + return 0, fmt.Errorf("delete fail") +} + +// SelectByNeTypeAndNeID 通过网元类型和网元ID查询 +func (r *NeVersion) SelectByNeTypeAndNeID(neType, neId string) model.NeVersion { + neVersions := r.neVersionRepository.SelectList(model.NeVersion{ + NeType: neType, + NeId: neId, + }) + if len(neVersions) > 0 { + return neVersions[0] + } + return model.NeVersion{} +} + +// Operate 操作版本上传到网元主机执行命令 +// +// action 安装行为:install upgrade rollback +func (r *NeVersion) Operate(action string, neVersion model.NeVersion, preinput map[string]string) (string, error) { + // 网元主机的SSH客户端 + sshClient, err := NewNeInfoImpl.NeRunSSHClient(neVersion.NeType, neVersion.NeId) + if err != nil { + return "", err + } + defer sshClient.Close() + + // ========= 文件传输阶段 ========= + softwarePath := neVersion.Path + if action == "install" || action == "upgrade" { + softwarePath = neVersion.NewPath + } + if action == "rollback" { + softwarePath = neVersion.PrePath + } + neFilePaths, err := r.operateFile(sshClient, softwarePath) + if err != nil { + return "", err + } + + // ========= 安装时设置 ========= + if action == "install" { + // 网元公共配置文件 + para5GMap, err := NewNeInfoImpl.NeConfPara5GRead() + if para5GMap == nil || err != nil { + return "", fmt.Errorf("error read para5G file info") + } + if err := NewNeInfoImpl.NeConfPara5GWirte(para5GMap, []string{fmt.Sprintf("%s@%s", neVersion.NeType, neVersion.NeId)}); err != nil { + return "", fmt.Errorf("error wirte para5G file info") + } + } + + // ========= 命令生成阶段 ========= + okFlagStr, cmdStrArr, err := r.operateCommand(action, neVersion.NeType, neFilePaths) + if err != nil { + return "", err + } + + // ========= 执行阶段 ========= + commandLine, err := r.operateRun(sshClient, preinput, cmdStrArr, neVersion.NeType, okFlagStr) + if err != nil { + return "", err + } + + // ========= 完成阶段 ========= + if strings.LastIndex(commandLine, okFlagStr) > 5 { + if err := r.operateDome(action, neVersion); err != nil { + return "", err + } + } + return commandLine, nil +} + +// operateFile 操作版本-文件传输阶段 +func (r *NeVersion) operateFile(sshClient *ssh.ConnSSH, softwarePath string) ([]string, error) { + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshClient.NewClientSFTP() + if err != nil { + return nil, err + } + defer sftpClient.Close() + + nePath := "/tmp" + copyFileToNeMap := map[string]string{} + + // 统一处理多个文件和单个文件的情况 + var softwarePaths []string + if strings.Contains(softwarePath, ",") { + softwarePaths = strings.Split(softwarePath, ",") + } else { + softwarePaths = []string{softwarePath} + } + + for _, path := range softwarePaths { + // 检查文件是否存在 + localFilePath := file.ParseUploadFilePath(path) + if _, err := os.Stat(localFilePath); err != nil { + return nil, fmt.Errorf("file read failure") + } + + fileName := filepath.Base(path) + neFilePath := fmt.Sprintf("%s/%s", nePath, fileName) + copyFileToNeMap[localFilePath] = neFilePath + } + + // 上传软件包到 /tmp + neFilePaths := []string{} + for k, v := range copyFileToNeMap { + if err = sftpClient.CopyFileLocalToRemote(k, v); err != nil { + return nil, fmt.Errorf("error uploading package") + } + neFilePaths = append(neFilePaths, v) + } + return neFilePaths, nil +} + +// operateCommand 操作版本-命令生成阶段 +func (r *NeVersion) operateCommand(action, neType string, neFilePaths []string) (string, []string, error) { + neTypeLower := strings.ToLower(neType) + // 命令终止结束标记 + okFlagStr := fmt.Sprintf("%s version %s successful!", neTypeLower, action) + // 安装软件包 + pkgCmdStr := fmt.Sprintf("sudo dpkg -i %s", strings.Join(neFilePaths, " ")) + fileExt := filepath.Ext(strings.ToLower(neFilePaths[0])) + if strings.HasSuffix(fileExt, "rpm") { + pkgCmdStr = fmt.Sprintf("sudo rpm -Uvh %s", strings.Join(neFilePaths, " ")) + } + + // 组合命令输入 + cmdStrArr := []string{} + if neType == "OMC" { + omcStrArr := []string{} + if action == "install" { + // 安装软件包 + pkgCmdStr = fmt.Sprintf("sudo M_PARAM=install dpkg -i %s", strings.Join(neFilePaths, " ")) + if strings.HasSuffix(fileExt, "rpm") { + pkgCmdStr = fmt.Sprintf("sudo M_PARAM=install rpm -Uvh %s", strings.Join(neFilePaths, " ")) + } + omcStrArr = append(omcStrArr, pkgCmdStr) + } else { + // 升级软件包 + pkgCmdStr = fmt.Sprintf("sudo M_PARAM=upgrade dpkg -i %s", strings.Join(neFilePaths, " ")) + if strings.HasSuffix(fileExt, "rpm") { + pkgCmdStr = fmt.Sprintf("sudo M_PARAM=upgrade rpm -Uvh %s", strings.Join(neFilePaths, " ")) + } + omcStrArr = append(omcStrArr, pkgCmdStr) + } + // 删除软件包 + omcStrArr = append(omcStrArr, fmt.Sprintf("sudo rm %s", strings.Join(neFilePaths, " "))) + + // 2s后执行omc相关命令 + cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 2s && %s\" > /tmp/omc_%s.out 2>&1 & \n", strings.Join(omcStrArr, " && "), action)) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("echo '%s' \n", okFlagStr)) + return okFlagStr, cmdStrArr, nil + } else if neType == "IMS" { + if action == "install" { + para5GData := NewNeInfoImpl.Para5GData + cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") + + // 公网 PLMN地址 + cmdStrArr = append(cmdStrArr, fmt.Sprintf("/usr/local/etc/ims/default/tools/modipplmn.sh %s %s %s \n", para5GData["SIP_IP"], para5GData["MCC"], para5GData["MNC"])) + // 内网 服务地址 + cmdStrArr = append(cmdStrArr, fmt.Sprintf("/usr/local/etc/ims/default/tools/modintraip.sh %s \n", para5GData["IMS_IP"])) + // IWF连接PCF服务 + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/iwf/iwf_conf.yaml \n", para5GData["PCF_IP"])) + // 设置 HOST + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s ims' /etc/hosts || echo '%s ims' | sudo tee -a /etc/hosts \n", para5GData["IMS_IP"], para5GData["IMS_IP"])) + mnc_mcc := fmt.Sprintf("mnc%s.mcc%s", para5GData["MNC_DOMAIN"], para5GData["MCC"]) + hssHost := fmt.Sprintf("%s hss.ims.%s.3gppnetwork.org hss", para5GData["UDM_IP"], mnc_mcc) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", hssHost, hssHost)) + pcrfHost := fmt.Sprintf("%s pcrf.epc.%s.3gppnetwork.org pcrf", para5GData["IMS_IP"], mnc_mcc) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", pcrfHost, pcrfHost)) + imsOrgHost := fmt.Sprintf("ims.%s.3gppnetwork.org", mnc_mcc) + imsHost := fmt.Sprintf("%s %s ims", para5GData["SIP_IP"], imsOrgHost) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", imsHost, imsHost)) + pcscfHost := fmt.Sprintf("%s pcscf.%s pcscf", para5GData["SIP_IP"], imsOrgHost) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", pcscfHost, pcscfHost)) + icscfHost := fmt.Sprintf("%s icscf.%s icscf", para5GData["SIP_IP"], imsOrgHost) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", icscfHost, icscfHost)) + scscfHost := fmt.Sprintf("%s scscf.%s scscf", para5GData["SIP_IP"], imsOrgHost) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", scscfHost, scscfHost)) + mmtelHost := fmt.Sprintf("%s mmtel.%s mmtel", para5GData["SIP_IP"], imsOrgHost) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", mmtelHost, mmtelHost)) + mrfcHost := fmt.Sprintf("%s mrfc.%s mrfc", para5GData["SIP_IP"], imsOrgHost) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", mrfcHost, mrfcHost)) + smsHost := fmt.Sprintf("%s smsc.%s smsc", para5GData["SIP_IP"], imsOrgHost) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", smsHost, smsHost)) + + cmdStrArr = append(cmdStrArr, "ims-stop || true && ims-start \n") + // 30s后停止服务 + // cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 30s && sudo ims-stop\" > /dev/null 2>&1 & \n") + } else { + cmdStrArr = append(cmdStrArr, "ims-stop \n") + cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") + cmdStrArr = append(cmdStrArr, "ims-start \n") + } + } else { + if action == "install" { + para5GData := NewNeInfoImpl.Para5GData + cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") + + // AMF配置修改 + if neTypeLower == "amf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/amf/default/amfcfg.yaml /usr/local/etc/amf/amfcfg.yaml \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["AMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.120/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["N2_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["SST"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["SD"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/- 4388/- %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["TAC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["AUSF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["UDM_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["SMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["PCF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["NRF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.200/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["LMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.210/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["NEF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/- internet/- %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["DNN_DATA"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s n2' /etc/hosts || echo '%s n2' | sudo tee -a /etc/hosts \n", para5GData["N2_IP"], para5GData["N2_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s amf' /etc/hosts || echo '%s amf' | sudo tee -a /etc/hosts \n", para5GData["AMF_IP"], para5GData["AMF_IP"])) + } + // AUSF配置修改 + if neTypeLower == "ausf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/ausf/default/ausfcfg.yaml /usr/local/etc/ausf/ausfcfg.yaml \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["AUSF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["UDM_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["NRF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s ausf' /etc/hosts || echo '%s ausf' | sudo tee -a /etc/hosts \n", para5GData["AUSF_IP"], para5GData["AUSF_IP"])) + } + // UDM配置修改 + if neTypeLower == "udm" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/udmcfg.yaml /usr/local/etc/udm/udmcfg.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/nssai.yaml /usr/local/etc/udm/nssai.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/snssai.yaml /usr/local/etc/udm/snssai.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/as.yaml /usr/local/etc/udm/as.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/dnn.yaml /usr/local/etc/udm/dnn.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/scscfSet.yaml /usr/local/etc/udm/scscfSet.yaml \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["NRF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["UDM_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["AUSF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["AMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["MNC_DOMAIN"], para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/udm/as.yaml \n", para5GData["MNC_DOMAIN"], para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/udm/scscfSet.yaml \n", para5GData["MNC_DOMAIN"], para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/udm/nssai.yaml \n", para5GData["SST"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["SST"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/udm/nssai.yaml \n", para5GData["SD"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["SD"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: internet/dnn: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["DNN_DATA"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: ims/dnn: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["DNN_IMS"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/serviceSelection: 'internet'/serviceSelection: '%s'/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_DATA"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/serviceSelection: 'ims'/serviceSelection: '%s'/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_IMS"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: internet/dnn: %s/g\" /usr/local/etc/udm/dnn.yaml \n", para5GData["DNN_DATA"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: ims/dnn: %s/g\" /usr/local/etc/udm/dnn.yaml \n", para5GData["DNN_IMS"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.110/%s/g\" /usr/local/etc/udm/as.yaml \n", para5GData["SIP_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s udm' /etc/hosts || echo '%s udm' | sudo tee -a /etc/hosts \n", para5GData["UDM_IP"], para5GData["UDM_IP"])) + } + // SMF配置修改 + if neTypeLower == "smf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/smf/default/smf_conf.yaml /usr/local/etc/smf/smf_conf.yaml \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.110/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["SIP_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["AMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UDM_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["SMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["PCF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["NRF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UPF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|10.2.1.0/24|%s|g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UE_POOL"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/internet/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["DNN_DATA"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s smf' /etc/hosts || echo '%s smf' | sudo tee -a /etc/hosts \n", para5GData["SMF_IP"], para5GData["SMF_IP"])) + } + // PCF配置修改 + if neTypeLower == "pcf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/pcf/default/pcfcfg.yaml /usr/local/etc/pcf/pcfcfg.yaml \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["AMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["UDM_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["PCF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["NRF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.210/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["NEF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MNC_DOMAIN"], para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s pcf' /etc/hosts || echo '%s pcf' | sudo tee -a /etc/hosts \n", para5GData["PCF_IP"], para5GData["PCF_IP"])) + } + + // NSSF配置修改 + if neTypeLower == "nssf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nssf/default/nssfcfg.yaml /usr/local/etc/nssf/nssfcfg.yaml \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.170/%s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["NSSF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["NRF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s nssf' /etc/hosts || echo '%s nssf' | sudo tee -a /etc/hosts \n", para5GData["NSSF_IP"], para5GData["NSSF_IP"])) + } + // NRF配置修改 + if neTypeLower == "nrf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nrf/default/nrfcfg.yaml /usr/local/etc/nrf/nrfcfg.yaml \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["NRF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s nrf' /etc/hosts || echo '%s nrf' | sudo tee -a /etc/hosts \n", para5GData["NRF_IP"], para5GData["NRF_IP"])) + } + + // UPF配置修改 + if neTypeLower == "upf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfcfg.yaml /usr/local/etc/upf/upfcfg.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfForwarder_1.yaml /usr/local/etc/upf/upfForwarder_1.yaml \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/upf/upfcfg.yaml \n", para5GData["UPF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/localhost/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UPF_IP"])) + // UE + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4: 10.2.1.0/s/ueIpv4: 10.2.1.0/ueIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4Mask: 255.255.255.0/s/ueIpv4Mask: 255.255.255.0/ueIpv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_MASK"])) + // N3 + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.190/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_MASK"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_GW"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/interfacePCI: \"0000:00:00.0\"/s/interfacePCI: \"0000:00:00.0\"/interfacePCI: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_PCI"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/macAddr: \"00:00:00:00:00:00\"/s/macAddr: \"00:00:00:00:00:00\"/macAddr: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_MAC"])) + // 标准版 N6 + if para5GData["UPF_TYPE"] == "StandardUPF" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.191/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MASK"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_GW"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/interfacePCI: \"0000:00:00.0\"/s/interfacePCI: \"0000:00:00.0\"/interfacePCI: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_PCI"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/macAddr: \"00:00:00:00:00:00\"/s/macAddr: \"00:00:00:00:00:00\"/macAddr: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MAC"])) + // 路由 + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo ip route add '%s/%s' via '%s' \n", para5GData["UE_IP"], para5GData["UE_CIDR"], para5GData["N6_IP"])) + } + // 轻量版 + if para5GData["UPF_TYPE"] == "LightUPF" { + cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/192.168.8.191/0.0.0.0/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/type: upfd/type: tun/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo sed -i 's/driverType: vmxnet3/driverType: \"\"/g' /usr/local/etc/upf/upfForwarder_1.yaml \n") + } + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s upf' /etc/hosts || echo '%s upf' | sudo tee -a /etc/hosts \n", para5GData["UPF_IP"], para5GData["UPF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s upfn3' /etc/hosts || echo '%s upfn3' | sudo tee -a /etc/hosts \n", para5GData["N3_IP"], para5GData["N3_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s upfn6' /etc/hosts || echo '%s upfn6' | sudo tee -a /etc/hosts \n", para5GData["N6_IP"], para5GData["N6_IP"])) + } + + // LMF配置修改 - 已不再维护,导致激活License失败 + // NEF配置修改 - SNMP无需License + if neTypeLower == "nef" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nef/default/nef_conf.yaml /usr/local/etc/nef/nef_conf.yaml \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.110/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["IMS_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["AMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["AUSF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["UDM_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["SMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["PCF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.170/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["NSSF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["NRF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["UPF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.210/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["NEF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s nef' /etc/hosts || echo '%s nef' | sudo tee -a /etc/hosts \n", para5GData["NEF_IP"], para5GData["NEF_IP"])) + } + + // MME配置修改 - 4G + if neTypeLower == "mme" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/mme/default/mme.conf /usr/local/etc/mme/mme.conf \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["AMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["SMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|192.168.8.220/20|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S1_MMEIP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.220/24|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S11_MMEIP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.220|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["MME_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.221/24|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S10_MMEIP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MNC_DOMAIN"], para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/\"00101\"/\"%s%s\"/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MCC"], para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MCC=\"001\"/MCC=\"%s\"/g' /usr/local/etc/mme/mme.conf \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MCC = \"001\"/MCC = \"%s\"/g' /usr/local/etc/mme/mme.conf \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MNC=\"01\";/MNC=\"%s\";/g' /usr/local/etc/mme/mme.conf \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MNC = \"01\";/MNC = \"%s\";/g' /usr/local/etc/mme/mme.conf \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/TAC = \"1\";/TAC = \"%s\";/g' /usr/local/etc/mme/mme.conf \n", para5GData["TAC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/TAC = 1;/TAC = %s;/g' /usr/local/etc/mme/mme.conf \n", para5GData["TAC"])) + // SMF开启 + cmdStrArr = append(cmdStrArr, "sudo sed -i \"/^ *gxcfg:/,/^ *[^ ]/{s/enable: false/enable: true/;b};\" /usr/local/etc/smf/smf_conf.yaml \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s mme' /etc/hosts || echo '%s mme' | sudo tee -a /etc/hosts \n", para5GData["MME_IP"], para5GData["MME_IP"])) + } + // N3IWF配置修改 + if neTypeLower == "n3iwf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/n3iwf/default/n3iwfcfg.yaml /usr/local/etc/n3iwf/n3iwfcfg.yaml \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MCC: 001/MCC: %s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MNC: 01/MNC: %s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.12.161/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N3IWF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.12.160/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N3IWF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.27/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["UDM_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.1.239/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["SMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.22/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N2_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.1.161/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N3_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.1.160/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N6_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s n3iwf' /etc/hosts || echo '%s n3iwf' | sudo tee -a /etc/hosts \n", para5GData["N3IWF_IP"], para5GData["N3IWF_IP"])) + } + + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower)) + // 30s后停止服务 + // cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 30s && sudo service %s stop\" > /dev/null 2>&1 & \n", neTypeLower)) + } else { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s stop \n", neTypeLower)) + cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower)) + } + } + + // 安装操作有redis安装时需要重启 + if action == "install" && (neTypeLower == "ims" || neTypeLower == "udm") { + // adb + if strings.Contains(pkgCmdStr, "adb") { + para5GData := NewNeInfoImpl.Para5GData + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/adb/default/adb.conf /usr/local/etc/adb/adb.conf \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/bind 127.0.0.1/bind 127.0.0.1 %s/g\" /usr/local/etc/adb/adb.conf \n", para5GData["DB_IP"])) + cmdStrArr = append(cmdStrArr, "sudo service adb restart \n") + } + // kvdb + if strings.Contains(pkgCmdStr, "kvdb") { + para5GData := NewNeInfoImpl.Para5GData + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/kvdb/default/kvdb.conf /usr/local/etc/kvdb/kvdb.conf \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/bind 127.0.0.1/bind 127.0.0.1 %s/g\" /usr/local/etc/kvdb/kvdb.conf \n", para5GData["DB_IP"])) + cmdStrArr = append(cmdStrArr, "sudo service kvdb restart \n") + } + } + + // 删除软件包 + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo rm %s \n", strings.Join(neFilePaths, " "))) + // 结束 + cmdStrArr = append(cmdStrArr, fmt.Sprintf("echo '%s' \n", okFlagStr)) + + return okFlagStr, cmdStrArr, nil +} + +// operateRun 操作版本-执行阶段 +func (r *NeVersion) operateRun(sshClient *ssh.ConnSSH, preinput map[string]string, cmdStrArr []string, neType string, okFlagStr string) (string, error) { + // ssh连接会话 + clientSession, err := sshClient.NewClientSession(127, 42) + if err != nil { + return "", fmt.Errorf("neinfo ssh client session new err") + } + defer clientSession.Close() + + firstRead := true // 首次命令进行记录日志信息 + commandLineText := "" // 日志信息 + done := make(chan bool) // 完成信号 + // 超时退出 120s + timeoutTicker := time.NewTicker(120 * time.Second) + defer timeoutTicker.Stop() + // 实时读取SSH消息直接输出 + msTicker := time.NewTicker(100 * time.Millisecond) + defer msTicker.Stop() + go func() { + for { + select { + case <-timeoutTicker.C: + done <- true + return + case <-msTicker.C: + outputByte := clientSession.Read() + if len(outputByte) > 0 { + outputStr := string(outputByte) + // 非首次进行记录命令 + if !firstRead { + commandLineText += outputStr + } + + // IMS预输入 + if neType == "IMS" { + // IMS包 P/I/S-CSCF Config 配置覆盖 + if strings.Contains(outputStr, "(P/I/S-CSCF Config)? ") { + if pisCSCF, ok := preinput["pisCSCF"]; ok && pisCSCF != "" { + clientSession.Write(fmt.Sprintf("%s \n", pisCSCF)) + } else { + clientSession.Write("y \n") + } + continue + } + // MF包 etc下目录覆盖 + if strings.Contains(outputStr, "/usr/local/etc/mf directory? (Yes/No, default: No)") { + if pisCSCF, ok := preinput["updateMFetc"]; ok && pisCSCF != "" { + clientSession.Write(fmt.Sprintf("%s \n", pisCSCF)) + } else { + clientSession.Write("No \n") + } + continue + } + // MF包 share下目录覆盖 + if strings.Contains(outputStr, "/usr/local/share/mf directory? (Yes/No, default: No)") { + if pisCSCF, ok := preinput["updateMFshare"]; ok && pisCSCF != "" { + clientSession.Write(fmt.Sprintf("%s \n", pisCSCF)) + } else { + clientSession.Write("No \n") + } + continue + } + } + + // 命令终止符后继续执行命令 + suffix := strings.HasSuffix(outputStr, "~]# ") || strings.HasSuffix(outputStr, "~$ ") + if len(cmdStrArr) > 0 && suffix { + if firstRead { + firstRead = false + } + shiftElement := cmdStrArr[0] // 获取第一个元素 + cmdStrArr = cmdStrArr[1:] // 将第一个元素从切片中移除 + clientSession.Write(shiftElement) + continue + } + // 最后输出的退出标记 + if strings.LastIndex(outputStr, okFlagStr) > 5 { + done <- true + break + } + } + } + } + }() + // 等待写入协程完成 + <-done + + return commandLineText, nil +} + +// operateDome 操作版本-完成阶段 +func (r *NeVersion) operateDome(action string, neVersion model.NeVersion) error { + if action == "install" { + // 网元信息 + neInfo := NewNeInfoImpl.SelectNeInfoByNeTypeAndNeID(neVersion.NeType, neVersion.NeId) + if neInfo.NeId != neVersion.NeId { + return fmt.Errorf("error found neinfo") + } + // ========= 网元OAM配置文件 start ========== + if err := NewNeInfoImpl.NeConfOAMWirteSync(neInfo, nil, true); err != nil { + return fmt.Errorf("error wirte OAM file info") + } + // ========= 网元OAM配置文件 end =========== + } + + // 更新Version + verInfo := r.SelectByNeTypeAndNeID(neVersion.NeType, neVersion.NeId) + if verInfo.NeId == neVersion.NeId { + curName := verInfo.Name + curVersion := verInfo.Version + curPath := verInfo.Path + if action == "install" { + verInfo.Name = neVersion.NewName + verInfo.Version = neVersion.NewVersion + verInfo.Path = neVersion.NewPath + verInfo.PreName = "-" + verInfo.PreVersion = "-" + verInfo.PrePath = "-" + verInfo.NewName = "-" + verInfo.NewVersion = "-" + verInfo.NewPath = "-" + } + if action == "upgrade" { + verInfo.Name = neVersion.NewName + verInfo.Version = neVersion.NewVersion + verInfo.Path = neVersion.NewPath + verInfo.PreName = curName + verInfo.PreVersion = curVersion + verInfo.PrePath = curPath + verInfo.NewName = "-" + verInfo.NewVersion = "-" + verInfo.NewPath = "-" + } + if action == "rollback" { + verInfo.Name = neVersion.PreName + verInfo.Version = neVersion.PreVersion + verInfo.Path = neVersion.PrePath + verInfo.PreName = curName + verInfo.PreVersion = curVersion + verInfo.PrePath = curPath + } + + verInfo.Status = "1" + r.Update(verInfo) + } + return nil } diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go deleted file mode 100644 index ab1b8844..00000000 --- a/src/modules/network_element/service/ne_version.impl.go +++ /dev/null @@ -1,650 +0,0 @@ -package service - -import ( - "fmt" - "os" - "path/filepath" - "strings" - "time" - - "be.ems/src/framework/utils/file" - "be.ems/src/framework/utils/ssh" - "be.ems/src/modules/network_element/model" - "be.ems/src/modules/network_element/repository" -) - -// 实例化服务层 NeVersionImpl 结构体 -var NewNeVersionImpl = &NeVersionImpl{ - neVersionRepository: repository.NewNeVersionImpl, -} - -// NeVersionImpl 网元版本信息 服务层处理 -type NeVersionImpl struct { - // 网元版本信息表 - neVersionRepository repository.INeVersion -} - -// SelectNeHostPage 分页查询列表数据 -func (r *NeVersionImpl) SelectPage(query map[string]any) map[string]any { - return r.neVersionRepository.SelectPage(query) -} - -// SelectConfigList 查询列表 -func (r *NeVersionImpl) SelectList(neVersion model.NeVersion) []model.NeVersion { - return r.neVersionRepository.SelectList(neVersion) -} - -// SelectByIds 通过ID查询 -func (r *NeVersionImpl) SelectById(id string) model.NeVersion { - if id == "" { - return model.NeVersion{} - } - neVersions := r.neVersionRepository.SelectByIds([]string{id}) - if len(neVersions) > 0 { - return neVersions[0] - } - return model.NeVersion{} -} - -// Insert 新增信息 -func (r *NeVersionImpl) Insert(neVersion model.NeVersion) string { - return r.neVersionRepository.Insert(neVersion) -} - -// Update 修改信息 -func (r *NeVersionImpl) Update(neVersion model.NeVersion) int64 { - return r.neVersionRepository.Update(neVersion) -} - -// DeleteByIds 批量删除信息 -func (r *NeVersionImpl) DeleteByIds(ids []string) (int64, error) { - // 检查是否存在 - rowIds := r.neVersionRepository.SelectByIds(ids) - if len(rowIds) <= 0 { - return 0, fmt.Errorf("neVersion.noData") - } - - if len(rowIds) == len(ids) { - rows := r.neVersionRepository.DeleteByIds(ids) - return rows, nil - } - // 删除信息失败! - return 0, fmt.Errorf("delete fail") -} - -// SelectByNeTypeAndNeID 通过网元类型和网元ID查询 -func (r *NeVersionImpl) SelectByNeTypeAndNeID(neType, neId string) model.NeVersion { - neVersions := r.neVersionRepository.SelectList(model.NeVersion{ - NeType: neType, - NeId: neId, - }) - if len(neVersions) > 0 { - return neVersions[0] - } - return model.NeVersion{} -} - -// Operate 操作版本上传到网元主机执行命令 -// -// action 安装行为:install upgrade rollback -func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinput map[string]string) (string, error) { - // 网元主机的SSH客户端 - sshClient, err := NewNeInfoImpl.NeRunSSHClient(neVersion.NeType, neVersion.NeId) - if err != nil { - return "", err - } - defer sshClient.Close() - - // ========= 文件传输阶段 ========= - softwarePath := neVersion.Path - if action == "install" || action == "upgrade" { - softwarePath = neVersion.NewPath - } - if action == "rollback" { - softwarePath = neVersion.PrePath - } - neFilePaths, err := r.operateFile(sshClient, softwarePath) - if err != nil { - return "", err - } - - // ========= 安装时设置 ========= - if action == "install" { - // 网元公共配置文件 - para5GMap, err := NewNeInfoImpl.NeConfPara5GRead() - if para5GMap == nil || err != nil { - return "", fmt.Errorf("error read para5G file info") - } - if err := NewNeInfoImpl.NeConfPara5GWirte(para5GMap, []string{fmt.Sprintf("%s@%s", neVersion.NeType, neVersion.NeId)}); err != nil { - return "", fmt.Errorf("error wirte para5G file info") - } - } - - // ========= 命令生成阶段 ========= - okFlagStr, cmdStrArr, err := r.operateCommand(action, neVersion.NeType, neFilePaths) - if err != nil { - return "", err - } - - // ========= 执行阶段 ========= - commandLine, err := r.operateRun(sshClient, preinput, cmdStrArr, neVersion.NeType, okFlagStr) - if err != nil { - return "", err - } - - // ========= 完成阶段 ========= - if strings.LastIndex(commandLine, okFlagStr) > 5 { - if err := r.operateDome(action, neVersion); err != nil { - return "", err - } - } - return commandLine, nil -} - -// operateDome 操作版本-文件传输阶段 -func (r *NeVersionImpl) operateFile(sshClient *ssh.ConnSSH, softwarePath string) ([]string, error) { - // 网元主机的SSH客户端进行文件传输 - sftpClient, err := sshClient.NewClientSFTP() - if err != nil { - return nil, err - } - defer sftpClient.Close() - - nePath := "/tmp" - copyFileToNeMap := map[string]string{} - - // 统一处理多个文件和单个文件的情况 - var softwarePaths []string - if strings.Contains(softwarePath, ",") { - softwarePaths = strings.Split(softwarePath, ",") - } else { - softwarePaths = []string{softwarePath} - } - - for _, path := range softwarePaths { - // 检查文件是否存在 - localFilePath := file.ParseUploadFilePath(path) - if _, err := os.Stat(localFilePath); err != nil { - return nil, fmt.Errorf("file read failure") - } - - fileName := filepath.Base(path) - neFilePath := fmt.Sprintf("%s/%s", nePath, fileName) - copyFileToNeMap[localFilePath] = neFilePath - } - - // 上传软件包到 /tmp - neFilePaths := []string{} - for k, v := range copyFileToNeMap { - if err = sftpClient.CopyFileLocalToRemote(k, v); err != nil { - return nil, fmt.Errorf("error uploading package") - } - neFilePaths = append(neFilePaths, v) - } - return neFilePaths, nil -} - -// operateDome 操作版本-命令生成阶段 -func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []string) (string, []string, error) { - neTypeLower := strings.ToLower(neType) - // 命令终止结束标记 - okFlagStr := fmt.Sprintf("%s version %s successful!", neTypeLower, action) - // 安装软件包 - pkgCmdStr := fmt.Sprintf("sudo dpkg -i %s", strings.Join(neFilePaths, " ")) - fileExt := filepath.Ext(strings.ToLower(neFilePaths[0])) - if strings.HasSuffix(fileExt, "rpm") { - pkgCmdStr = fmt.Sprintf("sudo rpm -Uvh %s", strings.Join(neFilePaths, " ")) - } - - // 组合命令输入 - cmdStrArr := []string{} - if neType == "OMC" { - omcStrArr := []string{} - if action == "install" { - // 安装软件包 - pkgCmdStr = fmt.Sprintf("sudo M_PARAM=install dpkg -i %s", strings.Join(neFilePaths, " ")) - if strings.HasSuffix(fileExt, "rpm") { - pkgCmdStr = fmt.Sprintf("sudo M_PARAM=install rpm -Uvh %s", strings.Join(neFilePaths, " ")) - } - omcStrArr = append(omcStrArr, pkgCmdStr) - } else { - // 升级软件包 - pkgCmdStr = fmt.Sprintf("sudo M_PARAM=upgrade dpkg -i %s", strings.Join(neFilePaths, " ")) - if strings.HasSuffix(fileExt, "rpm") { - pkgCmdStr = fmt.Sprintf("sudo M_PARAM=upgrade rpm -Uvh %s", strings.Join(neFilePaths, " ")) - } - omcStrArr = append(omcStrArr, pkgCmdStr) - } - // 删除软件包 - omcStrArr = append(omcStrArr, fmt.Sprintf("sudo rm %s", strings.Join(neFilePaths, " "))) - - // 2s后执行omc相关命令 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 2s && %s\" > /tmp/omc_%s.out 2>&1 & \n", strings.Join(omcStrArr, " && "), action)) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("echo '%s' \n", okFlagStr)) - return okFlagStr, cmdStrArr, nil - } else if neType == "IMS" { - if action == "install" { - para5GData := NewNeInfoImpl.Para5GData - cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") - - // 公网 PLMN地址 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("/usr/local/etc/ims/default/tools/modipplmn.sh %s %s %s \n", para5GData["SIP_IP"], para5GData["MCC"], para5GData["MNC"])) - // 内网 服务地址 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("/usr/local/etc/ims/default/tools/modintraip.sh %s \n", para5GData["IMS_IP"])) - // IWF连接PCF服务 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/iwf/iwf_conf.yaml \n", para5GData["PCF_IP"])) - // 设置 HOST - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s ims' /etc/hosts || echo '%s ims' | sudo tee -a /etc/hosts \n", para5GData["IMS_IP"], para5GData["IMS_IP"])) - mnc_mcc := fmt.Sprintf("mnc%s.mcc%s", para5GData["MNC_DOMAIN"], para5GData["MCC"]) - hssHost := fmt.Sprintf("%s hss.ims.%s.3gppnetwork.org hss", para5GData["UDM_IP"], mnc_mcc) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", hssHost, hssHost)) - pcrfHost := fmt.Sprintf("%s pcrf.epc.%s.3gppnetwork.org pcrf", para5GData["IMS_IP"], mnc_mcc) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", pcrfHost, pcrfHost)) - imsOrgHost := fmt.Sprintf("ims.%s.3gppnetwork.org", mnc_mcc) - imsHost := fmt.Sprintf("%s %s ims", para5GData["SIP_IP"], imsOrgHost) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", imsHost, imsHost)) - pcscfHost := fmt.Sprintf("%s pcscf.%s pcscf", para5GData["SIP_IP"], imsOrgHost) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", pcscfHost, pcscfHost)) - icscfHost := fmt.Sprintf("%s icscf.%s icscf", para5GData["SIP_IP"], imsOrgHost) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", icscfHost, icscfHost)) - scscfHost := fmt.Sprintf("%s scscf.%s scscf", para5GData["SIP_IP"], imsOrgHost) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", scscfHost, scscfHost)) - mmtelHost := fmt.Sprintf("%s mmtel.%s mmtel", para5GData["SIP_IP"], imsOrgHost) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", mmtelHost, mmtelHost)) - mrfcHost := fmt.Sprintf("%s mrfc.%s mrfc", para5GData["SIP_IP"], imsOrgHost) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", mrfcHost, mrfcHost)) - smsHost := fmt.Sprintf("%s smsc.%s smsc", para5GData["SIP_IP"], imsOrgHost) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", smsHost, smsHost)) - - cmdStrArr = append(cmdStrArr, "ims-stop || true && ims-start \n") - // 30s后停止服务 - // cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 30s && sudo ims-stop\" > /dev/null 2>&1 & \n") - } else { - cmdStrArr = append(cmdStrArr, "ims-stop \n") - cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") - cmdStrArr = append(cmdStrArr, "ims-start \n") - } - } else { - if action == "install" { - para5GData := NewNeInfoImpl.Para5GData - cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") - - // AMF配置修改 - if neTypeLower == "amf" { - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/amf/default/amfcfg.yaml /usr/local/etc/amf/amfcfg.yaml \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["AMF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.120/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["N2_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["MCC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["MNC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["SST"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["SD"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/- 4388/- %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["TAC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["AUSF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["UDM_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["SMF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["PCF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["NRF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.200/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["LMF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.210/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["NEF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/- internet/- %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["DNN_DATA"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s n2' /etc/hosts || echo '%s n2' | sudo tee -a /etc/hosts \n", para5GData["N2_IP"], para5GData["N2_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s amf' /etc/hosts || echo '%s amf' | sudo tee -a /etc/hosts \n", para5GData["AMF_IP"], para5GData["AMF_IP"])) - } - // AUSF配置修改 - if neTypeLower == "ausf" { - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/ausf/default/ausfcfg.yaml /usr/local/etc/ausf/ausfcfg.yaml \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["AUSF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["UDM_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["NRF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["MCC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["MNC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s ausf' /etc/hosts || echo '%s ausf' | sudo tee -a /etc/hosts \n", para5GData["AUSF_IP"], para5GData["AUSF_IP"])) - } - // UDM配置修改 - if neTypeLower == "udm" { - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/udmcfg.yaml /usr/local/etc/udm/udmcfg.yaml \n") - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/nssai.yaml /usr/local/etc/udm/nssai.yaml \n") - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/snssai.yaml /usr/local/etc/udm/snssai.yaml \n") - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/as.yaml /usr/local/etc/udm/as.yaml \n") - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/dnn.yaml /usr/local/etc/udm/dnn.yaml \n") - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/scscfSet.yaml /usr/local/etc/udm/scscfSet.yaml \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["NRF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["UDM_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["AUSF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["AMF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["MCC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["MNC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["MNC_DOMAIN"], para5GData["MCC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/udm/as.yaml \n", para5GData["MNC_DOMAIN"], para5GData["MCC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/udm/scscfSet.yaml \n", para5GData["MNC_DOMAIN"], para5GData["MCC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/udm/nssai.yaml \n", para5GData["SST"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["SST"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/udm/nssai.yaml \n", para5GData["SD"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["SD"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: internet/dnn: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["DNN_DATA"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: ims/dnn: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["DNN_IMS"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/serviceSelection: 'internet'/serviceSelection: '%s'/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_DATA"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/serviceSelection: 'ims'/serviceSelection: '%s'/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_IMS"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: internet/dnn: %s/g\" /usr/local/etc/udm/dnn.yaml \n", para5GData["DNN_DATA"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: ims/dnn: %s/g\" /usr/local/etc/udm/dnn.yaml \n", para5GData["DNN_IMS"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.110/%s/g\" /usr/local/etc/udm/as.yaml \n", para5GData["SIP_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s udm' /etc/hosts || echo '%s udm' | sudo tee -a /etc/hosts \n", para5GData["UDM_IP"], para5GData["UDM_IP"])) - } - // SMF配置修改 - if neTypeLower == "smf" { - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/smf/default/smf_conf.yaml /usr/local/etc/smf/smf_conf.yaml \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.110/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["SIP_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["AMF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UDM_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["SMF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["PCF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["NRF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UPF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|10.2.1.0/24|%s|g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UE_POOL"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/internet/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["DNN_DATA"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s smf' /etc/hosts || echo '%s smf' | sudo tee -a /etc/hosts \n", para5GData["SMF_IP"], para5GData["SMF_IP"])) - } - // PCF配置修改 - if neTypeLower == "pcf" { - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/pcf/default/pcfcfg.yaml /usr/local/etc/pcf/pcfcfg.yaml \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["AMF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["UDM_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["PCF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["NRF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.210/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["NEF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MCC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MNC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MNC_DOMAIN"], para5GData["MCC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s pcf' /etc/hosts || echo '%s pcf' | sudo tee -a /etc/hosts \n", para5GData["PCF_IP"], para5GData["PCF_IP"])) - } - - // NSSF配置修改 - if neTypeLower == "nssf" { - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nssf/default/nssfcfg.yaml /usr/local/etc/nssf/nssfcfg.yaml \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.170/%s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["NSSF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["NRF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["MCC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["MNC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s nssf' /etc/hosts || echo '%s nssf' | sudo tee -a /etc/hosts \n", para5GData["NSSF_IP"], para5GData["NSSF_IP"])) - } - // NRF配置修改 - if neTypeLower == "nrf" { - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nrf/default/nrfcfg.yaml /usr/local/etc/nrf/nrfcfg.yaml \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["NRF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["MCC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["MNC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s nrf' /etc/hosts || echo '%s nrf' | sudo tee -a /etc/hosts \n", para5GData["NRF_IP"], para5GData["NRF_IP"])) - } - - // UPF配置修改 - if neTypeLower == "upf" { - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfcfg.yaml /usr/local/etc/upf/upfcfg.yaml \n") - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfForwarder_1.yaml /usr/local/etc/upf/upfForwarder_1.yaml \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/upf/upfcfg.yaml \n", para5GData["UPF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/localhost/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UPF_IP"])) - // UE - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4: 10.2.1.0/s/ueIpv4: 10.2.1.0/ueIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4Mask: 255.255.255.0/s/ueIpv4Mask: 255.255.255.0/ueIpv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_MASK"])) - // N3 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.190/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_MASK"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_GW"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/interfacePCI: \"0000:00:00.0\"/s/interfacePCI: \"0000:00:00.0\"/interfacePCI: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_PCI"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/macAddr: \"00:00:00:00:00:00\"/s/macAddr: \"00:00:00:00:00:00\"/macAddr: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_MAC"])) - // 标准版 N6 - if para5GData["UPF_TYPE"] == "StandardUPF" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.191/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MASK"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_GW"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/interfacePCI: \"0000:00:00.0\"/s/interfacePCI: \"0000:00:00.0\"/interfacePCI: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_PCI"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/macAddr: \"00:00:00:00:00:00\"/s/macAddr: \"00:00:00:00:00:00\"/macAddr: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MAC"])) - // 路由 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo ip route add '%s/%s' via '%s' \n", para5GData["UE_IP"], para5GData["UE_CIDR"], para5GData["N6_IP"])) - } - // 轻量版 - if para5GData["UPF_TYPE"] == "LightUPF" { - cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/192.168.8.191/0.0.0.0/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") - cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/type: upfd/type: tun/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") - cmdStrArr = append(cmdStrArr, "sudo sed -i 's/driverType: vmxnet3/driverType: \"\"/g' /usr/local/etc/upf/upfForwarder_1.yaml \n") - } - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s upf' /etc/hosts || echo '%s upf' | sudo tee -a /etc/hosts \n", para5GData["UPF_IP"], para5GData["UPF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s upfn3' /etc/hosts || echo '%s upfn3' | sudo tee -a /etc/hosts \n", para5GData["N3_IP"], para5GData["N3_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s upfn6' /etc/hosts || echo '%s upfn6' | sudo tee -a /etc/hosts \n", para5GData["N6_IP"], para5GData["N6_IP"])) - } - - // LMF配置修改 - 已不再维护,导致激活License失败 - // NEF配置修改 - SNMP无需License - if neTypeLower == "nef" { - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nef/default/nef_conf.yaml /usr/local/etc/nef/nef_conf.yaml \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.110/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["IMS_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["AMF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["AUSF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["UDM_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["SMF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["PCF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.170/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["NSSF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["NRF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["UPF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.210/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["NEF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s nef' /etc/hosts || echo '%s nef' | sudo tee -a /etc/hosts \n", para5GData["NEF_IP"], para5GData["NEF_IP"])) - } - - // MME配置修改 - 4G - if neTypeLower == "mme" { - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/mme/default/mme.conf /usr/local/etc/mme/mme.conf \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["AMF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["SMF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|192.168.8.220/20|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S1_MMEIP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.220/24|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S11_MMEIP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.220|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["MME_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.221/24|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S10_MMEIP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MNC_DOMAIN"], para5GData["MCC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/\"00101\"/\"%s%s\"/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MCC"], para5GData["MNC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MCC=\"001\"/MCC=\"%s\"/g' /usr/local/etc/mme/mme.conf \n", para5GData["MCC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MCC = \"001\"/MCC = \"%s\"/g' /usr/local/etc/mme/mme.conf \n", para5GData["MCC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MNC=\"01\";/MNC=\"%s\";/g' /usr/local/etc/mme/mme.conf \n", para5GData["MNC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MNC = \"01\";/MNC = \"%s\";/g' /usr/local/etc/mme/mme.conf \n", para5GData["MNC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/TAC = \"1\";/TAC = \"%s\";/g' /usr/local/etc/mme/mme.conf \n", para5GData["TAC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/TAC = 1;/TAC = %s;/g' /usr/local/etc/mme/mme.conf \n", para5GData["TAC"])) - // SMF开启 - cmdStrArr = append(cmdStrArr, "sudo sed -i \"/^ *gxcfg:/,/^ *[^ ]/{s/enable: false/enable: true/;b};\" /usr/local/etc/smf/smf_conf.yaml \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s mme' /etc/hosts || echo '%s mme' | sudo tee -a /etc/hosts \n", para5GData["MME_IP"], para5GData["MME_IP"])) - } - // N3IWF配置修改 - if neTypeLower == "n3iwf" { - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/n3iwf/default/n3iwfcfg.yaml /usr/local/etc/n3iwf/n3iwfcfg.yaml \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MCC: 001/MCC: %s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["MCC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MNC: 01/MNC: %s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["MNC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.12.161/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N3IWF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.12.160/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N3IWF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.27/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["UDM_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.1.239/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["SMF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.22/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N2_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.1.161/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N3_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.1.160/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N6_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s n3iwf' /etc/hosts || echo '%s n3iwf' | sudo tee -a /etc/hosts \n", para5GData["N3IWF_IP"], para5GData["N3IWF_IP"])) - } - - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower)) - // 30s后停止服务 - // cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 30s && sudo service %s stop\" > /dev/null 2>&1 & \n", neTypeLower)) - } else { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s stop \n", neTypeLower)) - cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower)) - } - } - - // 安装操作有redis安装时需要重启 - if action == "install" && (neTypeLower == "ims" || neTypeLower == "udm") { - // adb - if strings.Contains(pkgCmdStr, "adb") { - para5GData := NewNeInfoImpl.Para5GData - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/adb/default/adb.conf /usr/local/etc/adb/adb.conf \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/bind 127.0.0.1/bind 127.0.0.1 %s/g\" /usr/local/etc/adb/adb.conf \n", para5GData["DB_IP"])) - cmdStrArr = append(cmdStrArr, "sudo service adb restart \n") - } - // kvdb - if strings.Contains(pkgCmdStr, "kvdb") { - para5GData := NewNeInfoImpl.Para5GData - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/kvdb/default/kvdb.conf /usr/local/etc/kvdb/kvdb.conf \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/bind 127.0.0.1/bind 127.0.0.1 %s/g\" /usr/local/etc/kvdb/kvdb.conf \n", para5GData["DB_IP"])) - cmdStrArr = append(cmdStrArr, "sudo service kvdb restart \n") - } - } - - // 删除软件包 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo rm %s \n", strings.Join(neFilePaths, " "))) - // 结束 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("echo '%s' \n", okFlagStr)) - - return okFlagStr, cmdStrArr, nil -} - -// operateDome 操作版本-执行阶段 -func (r *NeVersionImpl) operateRun(sshClient *ssh.ConnSSH, preinput map[string]string, cmdStrArr []string, neType string, okFlagStr string) (string, error) { - // ssh连接会话 - clientSession, err := sshClient.NewClientSession(127, 42) - if err != nil { - return "", fmt.Errorf("neinfo ssh client session new err") - } - defer clientSession.Close() - - firstRead := true // 首次命令进行记录日志信息 - commandLineText := "" // 日志信息 - done := make(chan bool) // 完成信号 - // 超时退出 120s - timeoutTicker := time.NewTicker(120 * time.Second) - defer timeoutTicker.Stop() - // 实时读取SSH消息直接输出 - msTicker := time.NewTicker(100 * time.Millisecond) - defer msTicker.Stop() - go func() { - for { - select { - case <-timeoutTicker.C: - done <- true - return - case <-msTicker.C: - outputByte := clientSession.Read() - if len(outputByte) > 0 { - outputStr := string(outputByte) - // 非首次进行记录命令 - if !firstRead { - commandLineText += outputStr - } - - // IMS预输入 - if neType == "IMS" { - // IMS包 P/I/S-CSCF Config 配置覆盖 - if strings.Contains(outputStr, "(P/I/S-CSCF Config)? ") { - if pisCSCF, ok := preinput["pisCSCF"]; ok && pisCSCF != "" { - clientSession.Write(fmt.Sprintf("%s \n", pisCSCF)) - } else { - clientSession.Write("y \n") - } - continue - } - // MF包 etc下目录覆盖 - if strings.Contains(outputStr, "/usr/local/etc/mf directory? (Yes/No, default: No)") { - if pisCSCF, ok := preinput["updateMFetc"]; ok && pisCSCF != "" { - clientSession.Write(fmt.Sprintf("%s \n", pisCSCF)) - } else { - clientSession.Write("No \n") - } - continue - } - // MF包 share下目录覆盖 - if strings.Contains(outputStr, "/usr/local/share/mf directory? (Yes/No, default: No)") { - if pisCSCF, ok := preinput["updateMFshare"]; ok && pisCSCF != "" { - clientSession.Write(fmt.Sprintf("%s \n", pisCSCF)) - } else { - clientSession.Write("No \n") - } - continue - } - } - - // 命令终止符后继续执行命令 - suffix := strings.HasSuffix(outputStr, "~]# ") || strings.HasSuffix(outputStr, "~$ ") - if len(cmdStrArr) > 0 && suffix { - if firstRead { - firstRead = false - } - shiftElement := cmdStrArr[0] // 获取第一个元素 - cmdStrArr = cmdStrArr[1:] // 将第一个元素从切片中移除 - clientSession.Write(shiftElement) - continue - } - // 最后输出的退出标记 - if strings.LastIndex(outputStr, okFlagStr) > 5 { - done <- true - break - } - } - } - } - }() - // 等待写入协程完成 - <-done - - return commandLineText, nil -} - -// operateDome 操作版本-完成阶段 -func (r *NeVersionImpl) operateDome(action string, neVersion model.NeVersion) error { - if action == "install" { - // 网元信息 - neInfo := NewNeInfoImpl.SelectNeInfoByNeTypeAndNeID(neVersion.NeType, neVersion.NeId) - if neInfo.NeId != neVersion.NeId { - return fmt.Errorf("error found neinfo") - } - // ========= 网元OAM配置文件 start ========== - if err := NewNeInfoImpl.NeConfOAMWirteSync(neInfo, nil, true); err != nil { - return fmt.Errorf("error wirte OAM file info") - } - // ========= 网元OAM配置文件 end =========== - } - - // 更新Version - verInfo := r.SelectByNeTypeAndNeID(neVersion.NeType, neVersion.NeId) - if verInfo.NeId == neVersion.NeId { - curName := verInfo.Name - curVersion := verInfo.Version - curPath := verInfo.Path - if action == "install" { - verInfo.Name = neVersion.NewName - verInfo.Version = neVersion.NewVersion - verInfo.Path = neVersion.NewPath - verInfo.PreName = "-" - verInfo.PreVersion = "-" - verInfo.PrePath = "-" - verInfo.NewName = "-" - verInfo.NewVersion = "-" - verInfo.NewPath = "-" - } - if action == "upgrade" { - verInfo.Name = neVersion.NewName - verInfo.Version = neVersion.NewVersion - verInfo.Path = neVersion.NewPath - verInfo.PreName = curName - verInfo.PreVersion = curVersion - verInfo.PrePath = curPath - verInfo.NewName = "-" - verInfo.NewVersion = "-" - verInfo.NewPath = "-" - } - if action == "rollback" { - verInfo.Name = neVersion.PreName - verInfo.Version = neVersion.PreVersion - verInfo.Path = neVersion.PrePath - verInfo.PreName = curName - verInfo.PreVersion = curVersion - verInfo.PrePath = curPath - } - - verInfo.Status = "1" - NewNeVersionImpl.Update(verInfo) - } - return nil -} diff --git a/sshsvc/config/config.go b/sshsvc/config/config.go index 591d7fdf..ab4b0ed2 100644 --- a/sshsvc/config/config.go +++ b/sshsvc/config/config.go @@ -44,7 +44,7 @@ type YamlConfig struct { ListenAddr string `yaml:"listenAddr"` ListenPort uint16 `yaml:"listenPort"` PrivateKey string `yaml:"privateKey"` - MaxConnNum uint8 `yaml:"maxConnNum"` + MaxConnNum int `yaml:"maxConnNum"` Timeout uint16 `yaml:"timeout"` Session string `yaml:"session"` MmlHome string `yaml:"mmlHome"` @@ -57,7 +57,7 @@ type YamlConfig struct { TelnetServer struct { ListenAddr string `yaml:"listenAddr"` ListenPort uint16 `yaml:"listenPort"` - MaxConnNum uint8 `yaml:"maxConnNum"` + MaxConnNum int `yaml:"maxConnNum"` Timeout uint16 `yaml:"timeout"` Session string `yaml:"session"` MmlHome string `yaml:"mmlHome"` diff --git a/sshsvc/etc/sshsvc.yaml b/sshsvc/etc/sshsvc.yaml index ed3bacf9..7a8435ab 100644 --- a/sshsvc/etc/sshsvc.yaml +++ b/sshsvc/etc/sshsvc.yaml @@ -61,8 +61,8 @@ snmpServer: #engineID: "800007db03360102101101" engineID: "8000000004323030313a6462383a3a39313636" trapPort: 34958 - trapListen: true - trapBool: true + trapListen: false + trapBool: false trapTick: 60 timeOut: 5 trapTarget: "2001:db8::9219" diff --git a/sshsvc/makefile b/sshsvc/makefile index 7e1ef871..9f6b2f77 100644 --- a/sshsvc/makefile +++ b/sshsvc/makefile @@ -1,7 +1,7 @@ # Makefile for OMC-OMC-crontask project PROJECT = OMC -VERSION = 2.2409.1 +VERSION = 2.2409.3 LIBDIR = be.ems/lib BINNAME = sshsvc 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 00000000..411ce61a Binary files /dev/null and b/sshsvc/mibs/CINTEL-HLR-MIB.smidb differ 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 00000000..7ff6e9b4 Binary files /dev/null and b/sshsvc/mibs/CINTEL-MIB.smidb differ diff --git a/sshsvc/setHLRServiceState b/sshsvc/setHLRServiceState new file mode 100644 index 00000000..c792036b --- /dev/null +++ b/sshsvc/setHLRServiceState @@ -0,0 +1,25 @@ +#!/bin/bash + +TargetIP="[2001:db8::9166]" +PORT="34957" + +case "$1" in + 1) + echo -n "Set HLR state link down ... " + snmpset -v3 -l noAuthNoPriv -u manager ${TargetIP}:${PORT} .1.3.6.1.4.1.1379.2.3.3.3.1.1.9.0 i 1 >/dev/null + echo "done" + ;; + 2) + echo -n "Set HLR state link up ... " + snmpset -v3 -l noAuthNoPriv -u manager ${TargetIP}:${PORT} .1.3.6.1.4.1.1379.2.3.3.3.1.1.9.0 i 2 >/dev/null + echo "done" + ;; + 3) + echo -n "Set HLR state authentication failure ... " + snmpset -v3 -l noAuthNoPriv -u manager ${TargetIP}:${PORT} .1.3.6.1.4.1.1379.2.3.3.3.1.1.9.0 i 3 >/dev/null + echo "done" + ;; + *) + echo "Unknown state ($1)" + ;; +esac \ No newline at end of file diff --git a/sshsvc/snmp/snmp.go b/sshsvc/snmp/snmp.go index 26cf2c9d..613dcd8e 100644 --- a/sshsvc/snmp/snmp.go +++ b/sshsvc/snmp/snmp.go @@ -33,8 +33,13 @@ type SNMPService struct { ListenHost string TrapHost string - SysDescr string - SysService int + + SysName string + SysDescr string + SysLocation string + SysContact string + SysStatus string + SysService int } func (s *SNMPService) getAuthProto() g.SnmpV3AuthProtocol { @@ -135,7 +140,39 @@ func (s *SNMPService) StartSNMPServer() { func (s *SNMPService) handleOIDs() []*GoSNMPServer.PDUValueControlItem { customOIDs := []*GoSNMPServer.PDUValueControlItem{ { - OID: "1.3.6.1.2.1.1.1.0", + OID: "1.3.6.1.4.1.1379.2.3.3.3.1.1.1.0", + Type: g.OctetString, + OnGet: func() (value interface{}, err error) { + return s.SysName, nil + }, + OnSet: func(value interface{}) error { + // 将[]uint8转换为string + if v, ok := value.([]uint8); ok { + s.SysName = string(v) + log.Printf("Set request for OID 1.3.6.1.4.1.1379.2.3.3.3.1.1.1.0 with value %v", s.SysName) + return nil + } + return nil + }, + }, + { + OID: ".1.3.6.1.4.1.1379.2.3.3.3.1.1.2.0", + Type: g.OctetString, + OnGet: func() (value interface{}, err error) { + return s.SysStatus, nil + }, + OnSet: func(value interface{}) error { + // 将[]uint8转换为string + if v, ok := value.([]uint8); ok { + s.SysStatus = string(v) + log.Printf("Set request for OID 1.3.6.1.4.1.1379.2.3.3.3.1.1.2.0 with value %v", s.SysStatus) + return nil + } + return nil + }, + }, + { + OID: ".1.3.6.1.4.1.1379.2.3.3.3.1.1.3.0", Type: g.OctetString, OnGet: func() (value interface{}, err error) { return s.SysDescr, nil @@ -144,36 +181,80 @@ func (s *SNMPService) handleOIDs() []*GoSNMPServer.PDUValueControlItem { // 将[]uint8转换为string if v, ok := value.([]uint8); ok { s.SysDescr = string(v) - log.Printf("Set request for OID 1.3.6.1.2.1.1.1.0 with value %v", s.SysDescr) + log.Printf("Set request for OID .1.3.6.1.4.1.1379.2.3.3.3.1.1.3.0 with value %v", s.SysDescr) return nil } return nil }, }, { - OID: "1.3.6.1.2.1.1.3.0", + OID: ".1.3.6.1.4.1.1379.2.3.3.3.1.1.4.0", + Type: g.OctetString, + OnGet: func() (value interface{}, err error) { + return s.SysLocation, nil + }, + OnSet: func(value interface{}) error { + // 将[]uint8转换为string + if v, ok := value.([]uint8); ok { + s.SysLocation = string(v) + log.Printf("Set request for OID .1.3.6.1.4.1.1379.2.3.3.3.1.1.4.0 with value %v", s.SysLocation) + return nil + } + return nil + }, + }, + { + OID: ".1.3.6.1.4.1.1379.2.3.3.3.1.1.5.0", + Type: g.OctetString, + OnGet: func() (value interface{}, err error) { + return s.SysContact, nil + }, + OnSet: func(value interface{}) error { + // 将[]uint8转换为string + if v, ok := value.([]uint8); ok { + s.SysContact = string(v) + log.Printf("Set request for OID .1.3.6.1.4.1.1379.2.3.3.3.1.1.5.0 with value %v", s.SysContact) + return nil + } + return nil + }, + }, + { + OID: ".1.3.6.1.4.1.1379.2.3.3.3.1.1.7.0", Type: g.TimeTicks, OnGet: func() (value interface{}, err error) { return uint32(time.Now().Unix()), nil }, }, { - OID: "1.3.6.1.2.1.1.7.0", + OID: ".1.3.6.1.4.1.1379.2.3.3.3.1.1.9.0", Type: g.Integer, OnGet: func() (value interface{}, err error) { return s.SysService, nil }, OnSet: func(value interface{}) error { - // 将[]uint8转换为string if v, ok := value.(int); ok { s.SysService = v - log.Printf("Set request for OID 1.3.6.1.2.1.1.7.0 with value %v", s.SysService) + log.Printf("Set request for OID .1.3.6.1.4.1.1379.2.3.3.3.1.1.9.0 with value %v", s.SysService) return nil } return nil }, }, } + // 为 GETBULK 新增处理 OIDs + bulkOIDs := &GoSNMPServer.PDUValueControlItem{ + OID: ".1.3.6.1.4.1.1379.2.3.3.3.1.1", // 这里是您想要支持 GETBULK 的 OID 前缀 + Type: g.OctetString, + OnGet: func() (value interface{}, err error) { + // 假设我们返回一百度值,您可以根据您的实现进行调整 + values := []interface{}{s.SysName, s.SysStatus, s.SysDescr, s.SysLocation, s.SysContact, uint32(time.Now().Unix()), s.SysService} // 可以从其他结构中获取真实值 + return values, nil + }, + } + + customOIDs = append(customOIDs, bulkOIDs) + // 获取mibImps.All()返回的OID列表 mibOIDs := mibImps.All() @@ -311,27 +392,38 @@ func (s *SNMPService) SendPeriodicTraps(gs *g.GoSNMP) { // 1. 设备链路连接失败时发送Trap (LinkDown) func (s *SNMPService) sendLinkDownTrap(gs *g.GoSNMP, ifIndex int, ifDescr string) { + err := gs.Connect() + if err != nil { + log.Fatalf("Connect() err: %v", err) + } + defer gs.Conn.Close() + trap := g.SnmpTrap{ Variables: []g.SnmpPDU{ { - Name: ".1.3.6.1.2.1.2.2.1.1", // ifIndex + Name: ".1.3.6.1.4.1.1379.2.3.3.3.3.1", // linkDown + Type: g.OctetString, + Value: ".1.3.6.1.4.1.1379.2.3.3.3.3.1", + }, + { + Name: ".1.3.6.1.4.1.1379.2.3.3.3.3.1.1", // ifIndex Type: g.Integer, Value: ifIndex, }, { - Name: ".1.3.6.1.2.1.2.2.1.2", // ifDescr + Name: ".1.3.6.1.4.1.1379.2.3.3.3.3.1.2", // ifDescr Type: g.OctetString, Value: ifDescr, }, { - Name: ".1.3.6.1.6.3.1.1.5.3", // linkDown - Type: g.ObjectIdentifier, - Value: ".1.3.6.1.6.3.1.1.5.3", + Name: ".1.3.6.1.4.1.1379.2.3.3.3.4", // severity OID + Type: g.Integer, + Value: 2, // event }, }, } - _, err := gs.SendTrap(trap) + _, err = gs.SendTrap(trap) if err != nil { log.Printf("error sending LinkDown trap: %s", err) } else { @@ -341,27 +433,38 @@ func (s *SNMPService) sendLinkDownTrap(gs *g.GoSNMP, ifIndex int, ifDescr string // 2. 设备链路恢复正常时发送Trap (LinkUp) func (s *SNMPService) sendLinkUpTrap(gs *g.GoSNMP, ifIndex int, ifDescr string) { + err := gs.Connect() + if err != nil { + log.Fatalf("Connect() err: %v", err) + } + defer gs.Conn.Close() + trap := g.SnmpTrap{ Variables: []g.SnmpPDU{ { - Name: ".1.3.6.1.2.1.2.2.1.1", // ifIndex + Name: ".1.3.6.1.4.1.1379.2.3.3.3.3.2", // linkUp + Type: g.OctetString, + Value: ".1.3.6.1.4.1.1379.2.3.3.3.3.2", + }, + { + Name: ".1.3.6.1.4.1.1379.2.3.3.3.3.2.1", // ifIndex Type: g.Integer, Value: ifIndex, }, { - Name: ".1.3.6.1.2.1.2.2.1.2", // ifDescr + Name: ".1.3.6.1.4.1.1379.2.3.3.3.3.2.2", // ifDescr Type: g.OctetString, Value: ifDescr, }, { - Name: ".1.3.6.1.6.3.1.1.5.4", // linkUp - Type: g.ObjectIdentifier, - Value: ".1.3.6.1.6.3.1.1.5.4", + Name: ".1.3.6.1.4.1.1379.2.3.3.3.4", // severity OID + Type: g.Integer, + Value: 5, // event }, }, } - _, err := gs.SendTrap(trap) + _, err = gs.SendTrap(trap) if err != nil { log.Printf("error sending LinkUp trap: %s", err) } else { @@ -371,27 +474,38 @@ func (s *SNMPService) sendLinkUpTrap(gs *g.GoSNMP, ifIndex int, ifDescr string) // 3. 设备鉴权失败时发送Trap (AuthenticationFailure) func (s *SNMPService) sendAuthFailureTrap(gs *g.GoSNMP, username, descr string) { + err := gs.Connect() + if err != nil { + log.Fatalf("Connect() err: %v", err) + } + defer gs.Conn.Close() + trap := g.SnmpTrap{ Variables: []g.SnmpPDU{ { - Name: ".1.3.6.1.6.3.1.1.5.5", // authenticationFailure - Type: g.ObjectIdentifier, - Value: ".1.3.6.1.6.3.1.1.5.5", + Name: ".1.3.6.1.4.1.1379.2.3.3.3.3.3", // authenticationFailure + Type: g.OctetString, + Value: ".1.3.6.1.4.1.1379.2.3.3.3.3.3", }, { - Name: ".1.3.6.1.4.1.2021.251.1", // 自定义OID,用于记录失败的用户名 + Name: ".1.3.6.1.4.1.1379.2.3.3.3.3.3.1", // 自定义OID,用于记录失败的用户名 Type: g.OctetString, Value: username, }, { - Name: ".1.3.6.1.4.1.2021.252.1", // 自定义OID,用于记录描述 + Name: ".1.3.6.1.4.1.1379.2.3.3.3.3.3.2", // 自定义OID,用于记录描述 Type: g.OctetString, Value: descr, }, + { + Name: ".1.3.6.1.4.1.1379.2.3.3.3.4", // severity OID + Type: g.Integer, + Value: 4, // event + }, }, } - _, err := gs.SendTrap(trap) + _, err = gs.SendTrap(trap) if err != nil { log.Printf("error sending AuthenticationFailure trap: %s", err) } else { diff --git a/sshsvc/sshsvc.go b/sshsvc/sshsvc.go index 5964e062..c8efe92a 100644 --- a/sshsvc/sshsvc.go +++ b/sshsvc/sshsvc.go @@ -155,10 +155,14 @@ func main() { TimeOut: conf.SNMPServer.TimeOut, TrapTarget: conf.SNMPServer.TrapTarget, - ListenHost: conf.SNMPServer.ListenAddr + ":" + strconv.Itoa(int(conf.SNMPServer.ListenPort)), - TrapHost: conf.SNMPServer.ListenAddr + ":" + strconv.Itoa(int(conf.SNMPServer.TrapPort)), - SysDescr: "HLR server", - SysService: 0, + ListenHost: conf.SNMPServer.ListenAddr + ":" + strconv.Itoa(int(conf.SNMPServer.ListenPort)), + TrapHost: conf.SNMPServer.ListenAddr + ":" + strconv.Itoa(int(conf.SNMPServer.TrapPort)), + SysName: "HLR-0", + SysStatus: "Normal", + SysDescr: "HLR server(sysNO=0)", + SysLocation: "Shanghai", + SysContact: "", + SysService: 0, } go snmpSvc.StartSNMPServer() @@ -375,7 +379,7 @@ func handleSSHConnection(conn net.Conn, serverConfig *ssh.ServerConfig) { if sshCC > int(conf.Sshd.MaxConnNum) { sshMu.Unlock() log.Error("Maximum number of connections exceeded") - //conn.Write([]byte("Reach max connections")) + channel.Write([]byte(fmt.Sprintf("Connection limit reached (limit=%d). Try again later.\r\n", conf.Sshd.MaxConnNum))) conn.Close() continue } @@ -442,15 +446,19 @@ func handleSSHShell(sshConn *ssh.ServerConn, channel ssh.Channel) { Version: global.Version, Output: mmlp.DefaultFormatType, MmlHome: conf.Sshd.MmlHome, - Limit: 50, + Limit: conf.Sshd.MaxConnNum, User: sshConn.User(), SessionToken: fmt.Sprintf("%x", sshConn.SessionID()), HttpUri: conf.OMC.HttpUri, UserAgent: config.GetDefaultUserAgent(), TagNE: conf.Sshd.TagNE, } - term := term.NewTerminal(channel, fmt.Sprintf("[%s@%s]> ", omcMmlVar.User, omcMmlVar.TagNE)) + msg := fmt.Sprintf("\r\nWelcome to the %s server!\r\n", strings.ToUpper(omcMmlVar.TagNE)) + term.Write([]byte(msg)) + msg = fmt.Sprintf("Last login: %s from %s \r\n\r\n", time.Now().Format(time.RFC1123), sshConn.RemoteAddr()) + term.Write([]byte(msg)) + // 启动交互式shell会话 for { line, err := term.ReadLine() @@ -468,6 +476,13 @@ func handleSSHShell(sshConn *ssh.ServerConn, channel ssh.Channel) { } var response string switch cmdline { + case "hello": + term.Write([]byte("Hello, world!\r\n")) + goto continueLoop + case "time": + response = fmt.Sprintf("Current time: %s\r\n", time.Now().Format(time.RFC1123)) + term.Write([]byte(response)) + goto continueLoop case "exit", "quit": goto exitLoop case "": diff --git a/sshsvc/telnet/telnet.go b/sshsvc/telnet/telnet.go index 28622b44..ce28993d 100644 --- a/sshsvc/telnet/telnet.go +++ b/sshsvc/telnet/telnet.go @@ -18,7 +18,7 @@ type TelnetHandler struct { UserName string Password string AuthType string - MaxConnNum uint8 + MaxConnNum int TagNE string ListenHost string @@ -65,7 +65,8 @@ func (t *TelnetHandler) StartTelnetServer() { t.mu.Lock() if t.connCount >= int(t.MaxConnNum) { t.mu.Unlock() - io.WriteString(conn, "Connection limit reached. Try again later.\r\n") + msg := fmt.Sprintf("Connection limit reached (limit=%d). Try again later.\r\n", t.MaxConnNum) + io.WriteString(conn, msg) conn.Close() continue } @@ -88,7 +89,8 @@ func (t *TelnetHandler) handleTelnetConnection(conn net.Conn) { writer := bufio.NewWriter(conn) // 发送欢迎信息 - writer.WriteString("Welcome to the Telnet server!\r\n") + + writer.WriteString(fmt.Sprintf("\r\nWelcome to the %s server!\r\n", strings.ToUpper(t.TagNE))) writer.Flush() // 请求用户名 @@ -129,7 +131,8 @@ func (t *TelnetHandler) handleTelnetConnection(conn net.Conn) { writer.Flush() if t.handleTelnetAuth(t.AuthType, user, pass) { - writer.WriteString("\r\nAuthentication successful!\r\n") + msg := fmt.Sprintf("\r\n\r\nLast login: %s from %s \r\n\r\n", time.Now().Format(time.RFC1123), conn.RemoteAddr()) + writer.WriteString(msg) writer.Flush() t.HandleCommands(user, t.TagNE, reader, writer) } else { @@ -181,7 +184,7 @@ func (t *TelnetHandler) HandleCommands(user, tag string, reader *bufio.Reader, w case "time": writer.WriteString(fmt.Sprintf("\r\nCurrent time: %s\r\n", time.Now().Format(time.RFC1123))) case "exit", "quit": - writer.WriteString("\r\nGoodbye!\r\n") + writer.WriteString("\r\n\r\nGoodbye!\r\n") writer.Flush() return case "":