## upgw-traffic-process 节点 `upgw-traffic-process` 节点承接 `dpdk-input` 节点分过来的流量,并按收包的端口角色做区分处理: * `upgw_user` 角色: * 若非 `gtpu` 报文,去匹配 `traffic-rule`,若能 `match`,则修改转发端口为 `lbp`,修改目的 `mac` 为 `lbp` 对端的 `mac`,否则按默认转发。 * 若为 `gtpu` 报文,去匹配 `traffic-rule`,若能 `match`,则修改转发端口为 `lbp`,剥去 `gtpu` 头,修改目的 `mac` 为 `lbp` 对端的 `mac`,否则按默认转发。 * `upgw_network` 角色: * 若非 `gtpu` 报文,则根据目的 `ip` 计算 `hash`,去创建或者更新 `learning` 表项,此表项只存储五元组信息。 * 若为带扩展头的 `gtpu` 报文,则根据 `ue ip` 计算 `hash`,去创建或者更新 `learning` 表项,此表项存储外层的五元组信息、`gtpu` 头信息和扩展头的信息。 * 若为不带扩展头的 `gtpu` 报文,则根据 `ue ip` 计算 `hash`,去创建或者更新 `learning` 表项,此表项存储外层的五元组信息和 `gtpu` 头信息。 * `upgw_local_break_out` 角色: 到该端口角色的都是非 `gtpu` 的 `ip` 报文,根据目的 `ip` 去查询 `learning` 表项: * 若查询到的表项是非 `gtpu` 的,则去修改报文源 `mac` 和 转发端口。 * 若查询到的表项是带扩展头 `gtpu` 的,则去封装带扩展头的 `gtpu`,同时封装外层 `udp`、`ip` 和 `mac` 头。 * 若查询到的表项是不带扩展头 `gtpu` 的,则去封装带不扩展头的 `gtpu`,同时封装外层 `udp`、`ip` 和 `mac` 头。 ### 处理流程 ![upgw_traffic_process](../../_static/upgw_traffic_process.png) ### 命令行介绍 #### 五元组分流命令 ##### 增加 traffic-rule ``` /* 需指定 rule_id、要分流的五元组信息、协议类型、优先级和要转发的 lbp 口 */ upgw traffic-rule add rule_id ue_ip server_ip [ue_port ] [server_port ] proto prio dst_lbp_port eg: upgw traffic-rule add rule_id 1 ue_ip 1.2.3.4/24 server_ip 4.3.2.1/24 ue_port 123 server_port 456 proto ip prio 0 dst_lbp_port GigabitEthernet0/a/0 ``` ##### 查询 traffic-rule ``` /* 可以根据协议查询全部 acl,也可查询指定 rule_id 下的 acl */ show upgw traffic-rule [rule_id ] proto eg: upgw traffic-rule show proto ip upgw_ip_traffic_rule count = 1 rule_id: 1 prio: 0 dst_lbp_port 4 mask_string: mask l3 ip4 src/24 dst/24 l4 src_port dst_port match_string: match l3 ip4 src 1.2.3.4 dst 4.3.2.1 l4 src_port 123 dst_port 456 upgw traffic-rule show rule_id 1 proto ip upgw_ip_traffic_rule count = 1 rule_id: 1 prio: 0 dst_lbp_port 4 mask_string: mask l3 ip4 src/24 dst/24 l4 src_port dst_port match_string: match l3 ip4 src 1.2.3.4 dst 4.3.2.1 l4 src_port 123 dst_port 456 ``` ##### 删除 traffic-rule ``` /* 可以根据协议删除全部 acl,也可删除指定 rule_id 下的 acl */ upgw traffic-rule del [rule_id ] proto eg: upgw traffic-rule del proto ip upgw traffic-rule del rule_id 1 proto ip ``` #### 查询 learning 表命令 ``` /* 查询指定 ue/src ip 下的 learning 表项 */ show upgw learning table eg: show upgw learning table 172.20.231.1 Encap_type: GTPU WHIT EXTENSION PDU SESSION Ue IP: 172.20.231.1 User IP: 192.168.30.100 Network IP: 192.168.30.99 Teid: 1299 Qfi: 1 Default tx interface: TenGigabitEthernet0/a/0 User Mac:3c:ec:ef:1d:63:42 Network Mac:52:54:00:9b:29:cb ```