By:GentlemanTsao
本篇主要介绍
1 Policy Manager概述
- Policy Manager是MMCP(多模通话处理器)组件,用于管理modem策略。
- 基于设备和网络当前状态,提供了多种配置项。
- 指导modem该做什么。
2 为什么使用policy manager
弱耦合:
将配置与特定需求从modem核心代码中分离出来,独立成一个组件。
方便修改:
以XML的形式配置规则与策略。
动态配置:
XML中的策略规则在build版本时不参与编译。
3 policy manager架构与API
3.1 policy manager包括两部分:
数据库(用于保存当前配置);
规则引擎(逻辑部分)
3.2 上层架构:
3.3 Policy生效过程
1.初始化或更换SIM卡后读取policy
Policyman任务启动,读取/policyman/carrier_policy.xml,创建规则集合以提供给规则引擎。
2.Policyman注册三类事件
UIM事件
Serving System事件
Phone事件
此时Policyman发布配置项的初始值(可能从XML中得到,也可能是默认值),之后休眠,等待事件唤醒。
3.Policy规则触发
当监听的事件发生时,policyman判断是否满足了相应规则的预置条件。如果满足,policyman通过规则引擎执行该规则,并决定当前配置项的值。
4.发送配置更新
Policyman将配置项的当前值更新到数据库,如果有改动,则发送MSGR(message Router)消息,该消息只包含改动项
5.组件(主要是Call Manager)更新配置
通过监听 POLICYMAN_CFG_UPDATE_IND消息,获得更新的配置项。
4 如何修改Policyman XML
4.1 Policyman包含的XML文件
在EFS中的\policyman\目录:
4.2 三种类型:Lists, booleans, and timers
List
常用于配置MCC,PLMN,Bands,
用法:
<mcc_list name="{listname}"> {MCC set} </mcc_list>
<plmn_list name="{listname}"> {PLMN set} </plmn_list>
<rf_band_list name="{listname}"> {bands} </rf_band_list>
举例:
<!– MCC should be defined with 3 digits(XXX) -->
<mcc_list name="sxlte_mccs"> 302 310 311 312 313 </mcc_list>
<!– PLMN MNC can be defined with 3 (XXX-XX) or 2 (XXX-XX) digits -->
<plmn_list name="operators">
460-01 460-06 460-09
</plmn_list>
<!– Example of RF Band list -->
<rf_band_list name="rf_bands_home">
<gw_bands base="none" >
<include> 7 8 9 19 20 21 22 23 25 26 49 </include>
</gw_bands>
<lte_bands base="none" >
<include> 0 1 2 3 4 5 6 9 11 13 19 28 29 37 39 41 65 </include>
</lte_bands>
</rf_band_list>
Booleans
用于根据条件,设定状态的开或关(true or false)。
Initial段定义初始值;
Values段定义根据条件的切换值。
用法:
<boolean_define name="{name}" initial="{true,false}" />
<boolean_set name="{name}" value="{true,false}" />
<boolean_set name="{name}">
{condition}
</boolean_set>
举例:
<!–- Boolean definition -->
<boolean_define name="in_home" initial="false" />
<!–- Set Boolean value -->
<boolean_set name="in_home" value="true" />
<!–- Set Boolean value based on condition, refer to conditions section -->
<boolean_set name="in_home">
<location_mcc_in list="sxlte_mccs" />
</boolean_set>
Timers
用于追踪定期的Event与action。
在initial段定义timer,另外还需定义一个规则,包含start,stop,expiry handler。
用法:
<define_timer name="{name}" interval="{value}" units="{sec,min}"
id="{value}" />
<timer_start name="{name}" />
<timer_stop name="{name}" />
<expired_timer_handled name="{name}" />
举例:
<!–- Timer definition -->
<define_timer name="ue_mode_timer" interval="1" units="min" id="102" />
<!–- Start Timer -->
<timer_start name="noservice" />
<!–- Stop Timer -->
<timer_stop name="noservice" />
<!–- Condition to check if Timer has expired -->
<expired_timer_handled name="noservice" />
4.3 Policyman XML 结构
policy XML配置文件的结构包含一个元素以及随之一系列规则。
<?xml version="1.0" encoding="UTF-8"?>Ex: <mcc_list name=“sxlte_mccs”> 455 460
</mcc_list>
Ex:
<if>
<not>
<phone_operating_mode> ONLINE </phone_operating_mode>
<fullrat_enter />
功能
XML定义下面三种功能:
l 根据MCC或PLMN,定义RAT和band list
l 定义了当特定事件(例如无服务)发生时要启动的timer
l 根据PLMN,定义CA组合
配置项
配置方法
RAT capability
Policy Manager使用<rat_capability>通知call
manager(CM)
哪些RAT可以搜索。CM结合用户设置的制式(例如,通过NV10或菜单)计算出最终的RATs.
用法:
<rat_capability
base="{none,hardware}">
<include>
{G,W,T,L,C,H,5G}
</rat_capability>
举例:
<rat_capability
base=“none”>
C H G W L 5G
</rat_capability>