mp2 - ip五元组分流增加优先级

目前ip五元组分流的大致流程

ip_rule_priority_1

ue 流量过来后,会去匹配 session,然后轮询查找 session 下的 pdr 规则,pdracl 中可能包含转发至边缘 dnacl,也可能包含转发至正常 dn 的规则,只要命中其中一条规则,就往对应的 dn 转发。

增加优先级和traffic-rule的设计思想

  • 边缘 acl 要插在最前面,每条边缘 acl 都有优先级,插入时按优先级排序,这样匹配 pdracl 时就能最先命中优先级高的 acl

  • 目前代码的 acl 规则没有隶属于某个 traffic-rule 的概念,增加下发 upf_traffic_id ,使每条规则隶属于对应的 traffic-rule

具体开发方法

typedef struct
{
  u8 upf_trafficrule_id;
  u16 mp2_precedence;
}acl_list_information_t;
typedef struct
{
  ...
  acl_rule_t *acl;
  acl_list_information_t *acl_information;
  ...
} upf_pdi_t;

在结构体 upf_pdi_t 里面增加向量 acl_information,插入 acl 时记录 upf_trafficrule_id 和优先级,因为两个向量排序一致,插入后我们也能知道每条 acl 的信息,如下:

ip_rule_priority_2

这样,就能保证后插入的规则可与之前的规则进行优先级比较,进行排序,同时删除时也知道每条规则的 upf_trafficrule_id,保证精确删除。

命令行更改说明

注:traffic_rule_precedence的范围是1-255,值越小优先级越高。
//命令行原型
#upf mec-traffic pfd-list appid <name> fd {xxx} [traffic_rule_precedence <>] [upf_traffic_id <>] [<del>] [<del_all>]
// del :删除该 mec APPID 指定 upf_traffic_id 的 pfd
// del_all : 删除该 mec APPID 下挂所有 pfd

// 新增一条 mec fd (若 appid 已存在,则删除指定 upf_traffic_id 下的规则,再增加)
# upf mec-traffic pfd-list appid 1030 fd {permit in ip from 172.20.231.0/24 to 192.168.2.1/32} traffic_rule_precedence 1 upf_traffic_id 1

// 删除该 mec APPID 指定upf_traffic_id 的 pfd
# upf mec-traffic pfd-list appid 1030 upf_traffic_id 1 del

// 删除该 mec APPID 下挂所有 pfd
# upf mec-traffic pfd-list appid 1030 del_all