Modem2G/3G/4G/5G:高通Policy Manager(概述,优势,架构与API,配置与debug方法)

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

用于追踪定期的Eventaction

在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>

5 如何debug policy manager

猜你喜欢

转载自blog.csdn.net/GentelmanTsao/article/details/106711175
今日推荐