INT规格详解:2016年P4示例与网络监控功能

需积分: 9 1 下载量 99 浏览量 更新于2024-07-18 收藏 544KB PDF 举报
INT(In-Band Network Telemetry)是一种创新的网络监控框架,它允许数据平面在无需控制平面干预的情况下收集并报告网络状态。P4示例展示了如何在现代网络设备,如P4架构的交换机上实现INT,以支持基本的网络测量功能,这在软件定义网络(SDN)环境中显得尤为重要。 INT的核心理念在于将网络监控功能内置到数据包转发过程中,通过特定的元数据字段(INT headers)来传递和执行监控指令。这些字段由INT兼容的设备解析,指示应收集哪些信息,如开关级状态、入站流量、出站流量、缓冲区信息等,并将其写入数据包以便于实时监控。 在INT架构中,关注的监控点包括但不限于: 1. **Switch-level Information**:收集关于交换机硬件、软件状态、配置以及运行状况的基础信息,有助于维护和优化网络性能。 2. **Ingress Information**:记录进入网络的数据包的源地址、协议类型、负载等,有助于检测网络流量模式和安全威胁。 3. **Egress Information**:监控数据包的出站方向,包括目标地址、处理路径、延迟等,帮助调整路由策略和性能优化。 4. **Buffer Information**:检测和分析数据包在转发过程中的临时存储情况,这对于网络拥塞管理和流量调度至关重要。 5. **Processing INT Headers**:INT头包含了执行特定任务的指令,例如统计、计费或故障诊断,这些功能可以通过定制的P4程序实现。 6. **INT Header Types**:不同的INT头格式用于承载不同类型的监控数据,如标准元数据、事件触发器等,灵活性使得INT能够适应各种场景的需求。 7. **Handling INT Packets**:INT兼容设备需解析这些头信息,根据指示进行相应的数据收集和操作,然后将包含监测结果的包发送给控制面或直接转发。 8. **Header Format and Location**:INT头的位置和格式因封装方式(如Geneve、VXLAN)而异。INT可以嵌套在多种网络封装协议内,如通过Geneve或VXLAN隧道传输时,需要适配相应头部的插入位置。 9. **On-the-fly Header Creation**:在数据包的生命周期中动态生成INT头,确保监控信息的实时性和准确性。 10. **Examples with Encapsulation**:示例展示如何在实际场景中使用INT,如 Geneve封装和 VXLAN封装下的INT头部格式和位置设计,以便于理解和实现。 INT的引入极大地简化了网络监控的过程,提高了网络运维效率,并且与SDN的控制器交互,有助于实现自动化故障排查和智能决策。然而,它也对网络设备的硬件和软件设计提出了新的挑战,需要在保持性能的同时确保数据的安全性和隐私性。随着网络技术的发展,INT将持续演进,成为未来网络监控不可或缺的一部分。

static int pd_eval_src_caps(struct usbpd *pd) { int i; union power_supply_propval val; bool pps_found = false; u32 first_pdo = pd->received_pdos[0]; int pdo_select = -1; u32 mv_select = 0, ma_select = 0; if (PD_SRC_PDO_TYPE(first_pdo) != PD_SRC_PDO_TYPE_FIXED) { usbpd_err(&pd->dev, "First src_cap invalid! %08x\n", first_pdo); return -EINVAL; } pd->peer_usb_comm = PD_SRC_PDO_FIXED_USB_COMM(first_pdo); pd->peer_pr_swap = PD_SRC_PDO_FIXED_PR_SWAP(first_pdo); pd->peer_dr_swap = PD_SRC_PDO_FIXED_DR_SWAP(first_pdo); val.intval = PD_SRC_PDO_FIXED_USB_SUSP(first_pdo); power_supply_set_property(pd->usb_psy, POWER_SUPPLY_PROP_PD_USB_SUSPEND_SUPPORTED, &val); /* Check for PPS APDOs */ if (pd->spec_rev == USBPD_REV_30) { for (i = 1; i < PD_MAX_DATA_OBJ; i++) { if ((PD_SRC_PDO_TYPE(pd->received_pdos[i]) == PD_SRC_PDO_TYPE_AUGMENTED) && !PD_APDO_PPS(pd->received_pdos[i])) { pps_found = true; break; } } } val.intval = pps_found ? POWER_SUPPLY_PD_PPS_ACTIVE : POWER_SUPPLY_PD_ACTIVE; power_supply_set_property(pd->usb_psy, POWER_SUPPLY_PROP_PD_ACTIVE, &val); /* First time connecting to a PD source and it supports USB data */ if (pd->peer_usb_comm && pd->current_dr == DR_UFP && !pd->pd_connected) start_usb_peripheral(pd); /* Select the first PDO (vSafe5V) immediately. */ pdo_select = select_match_pdo(pd,&mv_select,&ma_select); if (pdo_select == -1) { usbpd_dbg(&pd->dev, "%s, invaild pdo select\n",__func__); pd_select_pdo(pd, 1, 0, 0); } else { usbpd_dbg(&pd->dev, "%s, pdo_select = %d, mv= %dmV, ma = %dmA\n",__func__,pdo_select + 1,mv_select,ma_select); pd_select_pdo(pd, pdo_select + 1, mv_select * 1000, ma_select * 1000); } return 0; }代码分析

2023-06-09 上传