如何区分MNO和MVNO

MVNO(Mobile Virtaul Network Operator)虚拟网络运营商,没有自己的实体网络,通过租用MNO(Mobile Network Operator)的网络来提供网络服务。

我们知道Spec规定operator之间是通过MCC/MNC (Mobile Country Code/Mobile Network Code)来区分的;而MVNO和对应MNO的MCC/MNC是相同的,那就需要MVNO定义额外的栏位(通常都是SIM卡中某支文件)来和对应MNO做区分;具体这个额外的栏位是什么是每个MVNO自己定义的,需要向MVNO确认。

目前MTK支持区分MVNO的方式有四种(KK以前没有EF_GID1方式),每种区分方式对应一个xml的配置表:

1. EF_SPN方式,对应MVNO配置到Virtual-spn-conf-by-efspn.xml中

2. EF_IMSI方式,对应MVNO配置到Virtual-spn-conf-by-imsi.xml中

3. EF_PNN方式,对应MVNO配置到Virtual-spn-conf-by-efpnn.xml中

4. EF_GID1方式,对应MVNO配置到Virtual-spn-conf-by-efgid1.xml中

需要向MVNO确认的信息如下:

1. 区分方式是以上哪种,从而决定相关信息需要配置到哪个xml中

2. MVNO的MCC/MNC是什么

3. MVNO的区分栏位的值是什么

4. MVNO需要显示成什么

5. MVNO是否有自己的APN需要配置(还是直接使用对应MNO的),如果需要,值是什么

KK以前(JB*.MP):

一 SPN的设定:

(1)通过EF_SPN区分

这中方式是读取SIM中的文件EF_SPN,结合SIM的mccmnc+spn,在virtual-spn-conf-by-efspn.xml 中查找有没有对应的记录,如果有这表示这个SIM是MVNO的卡,同时取name字段的内容当作运营商名称。

如果知道MVNO的SIM卡中的SPN是“abc”,MNO的MCC/MNC是10000,期望显示运营商名是”MVNO“,那就这样加记录(在Virtual-spn-conf-by-efspn.xml中)

<virtualSpnOverride mccmncspn="10000abc“ name="MVNO">

(2)通过EF_IMSI区分

这中方式是imsi中有一段特殊的数字标识用于和MNO区分

例如MNO的MCC/MNC是46692,MVNO的IMSI是466923302848289,IMSI的第9位(注意:是0 base, 所以index要填08)起连续2个数字为特殊标识(28),期望显示的运营商名称是“MVNO”,那就这样加记录(Virtual-spn-conf-by-imsi.xml中)

<virtualSpnOverride mccmnc="46692" index="08" length="02" pattern="28" name=“MVNO”>

(3)通过EF_PNN区分

EF_PNN是SIM中的一个option的文件,里面存放一组网络运营商名称(PLMN Network Name)。这种方式即是读取EF_PNN中的第一个pnn来匹配。如果MNO的MCC/MNC是10000,MVNO中EF_PNN的第一个pnn是“abc”,期望显示的运营商名称是“MVNO”,那就这样加记录(Virtual-spn-conf-by-efpnn.xml中)

<virtualSpnOverride mccmncpnn="10000abc“ name="MVNO">

二 APN的设定

其对应的文件是apns-conf.xml,和spn-conf.xml相同的目录。对比SPN,APN就简单许多,APN填写和SPN区分选择有联系。 这里举例说明,原MNO的APN的设定

<apn carrier="Orange Entreprise"

mcc="100"

mnc="00"

apn="MNO的apn"

user="MNO的user"

password="MNO的password"

type="default,supl"

/>

(1)通过EF_SPN区分

区分是通过spn字段,和spn记录中的spn字段相同

假如spn中MVNO对应记录是<virtualSpnOverride mccmncspn="10000abc“ name="MVNO">;

<apn carrier="Orange Entreprise"  <<设定中显示的名称

mcc="100"

mnc="00"

spn="abc" <<增加这个字段

apn="MVNO的apn"

user="MVNO的user"

password="MVNO的password"

type="default,supl"

/>

(2)通过EF_IMSI区分

通过imsi的pattern区分,和spn中的pattern相同。

假如spn中的MVNO记录是<virtualSpnOverride mccmnc="46692" index="08" length="02" pattern="28" name=“MVNO”>

那这个对应的MVNO的AP是

<apn carrier="Orange Entreprise"  <<设定中显示的名称

mcc="100"

mnc="00"

imsi="28" <<增加这个字段

apn="MVNO的apn"

user="MVNO的user"

password="MVNO的password"

type="default,supl"

/>

(3)通过EF_PNN区分

区分是通过pnn字段,和spn记录中的pnn字段相同

假如spn中MVNO对应记录是<virtualSpnOverride mccmncpnn="10000abc“ name="MVNO">;

<apn carrier="Orange Entreprise"  <<设定中显示的名称

mcc="100"

mnc="00"

pnn="abc" <<增加这个字段

apn="MVNO的apn"

user="MVNO的user"

password="MVNO的password"

type="default,supl"

/>

KK以后(包含KK):

一 SPN的设定:

所有MVNO区分方式的virtual xml的构成都应该是mccmnc+pattern

(1)通过EF_SPN区分

这中方式是读取SIM中的文件EF_SPN,结合SIM的mccmnc+spn,在virtual-spn-conf-by-efspn.xml 中查找有没有对应的记录,如果有这表示这个SIM是MVNO的卡,同时取name字段的内容当作运营商名称。

如果知道MVNO的SIM卡中的SPN是“abc”,MNO的MCC/MNC是10000,期望显示运营商名是”MVNO“,那就这样加记录(在Virtual-spn-conf-by-efspn.xml中)

<virtualSpnOverride mccmncspn="10000abc“ name="MVNO">

(2)通过EF_IMSI区分

这中方式是imsi中有一段特殊的数字标识用于和MNO区分

例如MNO的MCC/MNC是46692,MVNO的IMSI是466923302848289,IMSI的第9位起连续2个数字为特殊标识(28),期望显示的运营商名称是“MVNO”,那就这样加记录(Virtual-spn-conf-by-imsi.xml中)

<virtualSpnOverride imsipattern="4669246692×××28×××××" name=“MVNO”>

(3)通过EF_PNN区分

EF_PNN是SIM中的一个option的文件,里面存放一组网络运营商名称(PLMN Network Name)。这种方式即是读取EF_PNN中的第一个pnn来匹配。如果MNO的MCC/MNC是10000,MVNO中EF_PNN的第一个pnn是“abc”,期望显示的运营商名称是“MVNO”,那就这样加记录(Virtual-spn-conf-by-efpnn.xml中)

<virtualSpnOverride mccmncpnn="10000abc“ name="MVNO">

(4)通过EF_GID1区分

EF_GID1是SIM中的一个option的文件,里面存放了n个byte的数据;如果MNO的MCC/MNC是10000,MVNO的EF_GID1的内容是"11",期望显示的运营商名称是"MVNO",那就这样加记录(Virtual-spn-conf-by-efgid1.xml中)

<virtualSpnOverride mccmncgid1="1000011" name="MVNO">

二 APN的设定

其对应的文件是apns-conf.xml,和spn-conf.xml相同的目录。对比SPN,APN就简单许多,APN填写和SPN区分选择有联系。 这里举例说明,原MNO的APN的设定

<apn carrier="Orange Entreprise"

mcc="100"

mnc="00"

apn="MNO的apn"

user="MNO的user"

password="MNO的password"

type="default,supl"

/>

(1)通过EF_SPN区分

区分是通过spn字段,和spn记录中的spn字段相同

假如spn中MVNO对应记录是<virtualSpnOverride mccmncspn="10000abc“ name="MVNO">;

<apn carrier="Orange Entreprise"  <<设定中显示的名称

mcc="100"

mnc="00"

apn="MVNO的apn"

user="MVNO的user"

password="MVNO的password"

type="default,supl"

mvno_type="spn"                  <<增加这两个字段

mvno_match_data="abc"

/>

(2)通过EF_IMSI区分

通过imsi的pattern区分,和spn中的pattern相同。

假如spn中的MVNO记录是<virtualSpnOverride imsipattern="4669246692×××28×××××" name=“MVNO”>

那这个对应的MVNO的APN是

<apn carrier="Orange Entreprise"  <<设定中显示的名称

mcc="100"

mnc="00"

apn="MVNO的apn"

user="MVNO的user"

password="MVNO的password"

type="default,supl"

mvno_type="imsi"                  <<增加这两个字段

mvno_match_data="46692×××28×××××"

/>

(3)通过EF_PNN区分

区分是通过pnn字段,和spn记录中的pnn字段相同

假如spn中MVNO对应记录是<virtualSpnOverride mccmncpnn="10000abc“ name="MVNO">;

<apn carrier="Orange Entreprise"  <<设定中显示的名称

mcc="100"

mnc="00"

apn="MVNO的apn"

user="MVNO的user"

password="MVNO的password"

type="default,supl"

mvno_type="pnn"                  <<增加这两个字段

mvno_match_data="abc"

/>

(4)通过EF_GID1区分

区分是通过gid1字段,和spn记录中的gid1字段相同

假如spn中MVNO对应记录是<virtualSpnOverride mccmncgid1="1000011" name="MVNO">;

<apn carrier="Orange Entreprise"  <<设定中显示的名称

mcc="100"

mnc="00"

apn="MVNO的apn"

user="MVNO的user"

password="MVNO的password"

type="default,supl"

mvno_type="gid1"                  <<增加这两个字段

mvno_match_data="11"

/>

时间: 2024-11-05 20:35:47

如何区分MNO和MVNO的相关文章

android 网络运营商名称显示规则(锁屏界面,下拉列表)

一:Background & 相关flow MTK Operator name display在手机中分成两种类型: 1. Sim卡名称: 根据开机从SIM卡中读取的IMSI去到Spn-conf.xml中(如果是MVNO的卡则是Virtual-spn-conf-by-***.xml中)匹配得到的name,会保存在SIMInfo这个database中,后续sim卡的名称就从此database中取得 关于MVNO可以参考如下FAQ: ID: FAQ09811 [NW]如何区分MNO和MVNO 使用场

PHP如何区分未定义,null

今天遇到群里一个人提的问题,isset无法区分未定义和null怎么办? 下面是代码. <?php$b = null;$c = '';$arr = get_defined_vars(); if(!isset($a) && !array_key_exists('a', $arr)){    echo '变量未定义';}else if($a === null){    echo '变量已定义,但变量为空';}else{    echo '变量已定义且变量不为空';} echo '<b

大端小端是什么?如何区分?

    今天我们谈谈计算机中的大端小端以及网络中的大端小端.参考了网上好多资料以后,从众多资料中我也按照自己的理解方式,总结一下. 学习一个新东西:我们依然是先了解一下大端小端的历史: 讲故事 这个就需要求救一下度娘,以下故事来自度娘,真假我也不知道,权当听故事: "大端"和"小端"可以追溯到1726年的Jonathan Swift的<格列佛游记>,其中一篇讲到有两个国家因为吃鸡蛋究竟是先打破较大的一端还是先打破较小的一端而争执不休,甚至爆发了战争.19

C语言学习笔记(6):如何从变量声明的表面上来区分指针数组和数组指针

举例:int *p[5]是指针数组int (*p)[5]是数组指针区分两者只要看变量名p周围的修饰符即可. 这里要明确两点:1.不论int *p[5]还是int (*p)[5]都不应该看成一个整体,而应该看成一些修饰符来修饰变量p,从而使p得到准确定义:2.[]的优先级要比*高,相同优先级修饰符,采取从左向右的编译方式. *p[5]由于[]优先级高所以[]先修饰变量名p,所以p是一个数组名,然后再看其它修饰符,可以发现是一个int * 类型的数组,即p为指针数组. (*P)[5]由于()和[]两

《Effective C++》之条款34:区分接口继承和实现继承

<Effective C++> 条款34:区分接口继承和实现继承 Public继承由两部分组成 函数接口继承 函数实现继承 三种可能面对的继承 derived class 只继承成员函数的接口 derived class 同时继承函数的接口和实现,但又希望能够覆写它们所继承的实现 derived class 同时继承函数的接口和实现,但不允许覆写任何东西 总结: 接口继承和实现继承不同.在public继承下,derived classes 总是继承base class 的接口. Pure vi

按日期把文件区分&&修改文件的mtime

模拟场景: 在一个目录下存在不同天产生的大量文件,而且文件命名没有日期的标识,如何把这些文件按照日期分到不同的文件夹. 按照文件修改的日期也就是mtime把文件做区分 > date Tue Dec 20 14:04:04 CST 2016 修改文件的mtime /sysout> touch -c -t 12180010 file{101..200} 12180010表示12月18号0点10分 /sysout> find -mtime +1 -type f | more ./file135

contentSize、contentInset和contentOffset的区分

一.  frame.bounds和center的区分 frame:由左边原点和矩形面积组成,其中原点代表其在父视图中的起点位置. bounds:就是原点始终为(0,0)的frame. center:本身矩形的中心点,加上原点的偏移. 1. 如下图所示,假设白色底层为View1,照片为视图View2,则其中View2的: frame: {(40, 40), 240, 380) bounds:    {(0, 0), 240, 380) center:    (160, 230)  -> 240/2

android LayoutInflater、setContentView、findviewbyid 区分解析

一.LayoutInflater.inflate(layoutId, root, boolen)中三个参数的意义及作用 (这点可以参考鸿洋前辈博客地址:http://blog.csdn.net/lmj623565791/article/details/38171465) 主要知识点其实很少,如下: 若temp为layoutId所代表的布局,inflate的三种方法区分如下: View view=LayoutInflater.Inflate(layoutId, null )只创建temp ,返回t

fork子进程之间传输信息的方法(包含子进程与子进程之间区分的问题的解决)

今天看到一道题,要求是父进程fork出两个子进程,子进程1需要给子进程2发送一个数据,然后子进程2再将这个数据发送给父进程 具体思想如下. 父进程fork出来的子进程的pid,只有父进程保存下来了, 子进程1可以获取到父进程的pid,子进程2可以获取到子进程1的pid,但是子进程1得不到子进程2的pid,只能通过父进程发送. 因为是先产生子进程1,再产生子进程2 fork代码如下 pidChild[2]是全局变量. for(i = 0; i < 2; i++) { pidChild[i] = p