deepflow agent网络报文解析,会话聚合
在学习agent源码时候,看到在网络报文解析、会话聚合的时候,有一些参考go开源库实现的注释。 请问下网络报文解析、会话聚合这块代码是参考哪个开源go库实现的
贴一下具体代码
src/dispatcher/recv_engine/af_packet/tpacket.rs // TODO: 这里看起来不需要,golang版本未涉及该配置,后续有需要再添加 #[allow(dead_code)] fn set_promisc(&self) -> Result<()> { // 设置混杂模式
//raw_socket.set_flag(IFF_PROMISC as u64)?;
// TODO:
//let mut mreq: packet_mreq = std::mem::zeroed();
//mreq.mr_ifindex = interface.index as i32;
//mreq.mr_type = PACKET_MR_PROMISC as u16;
//raw_socket.setsockopt(SOL_PACKET, PACKET_ADD_MEMBERSHIP, (&mreq as *const packet_mreq) as *const libc::c_void);
Ok(())
}
./src/flow_generator/flow_map.rs self::update_stats_counter(&self.stats_counter, node_map.len() as u64, max_depth as u64); self.node_map.replace((node_map, time_set)); // go实现只有插入node的时候,插入的节点数目大于ring buffer 的capacity 才会执行policy_getter, // rust 版本用了std的hashmap自动处理扩容,所以无需执行policy_gettelr
// go 版本的removeAndOutput fn node_removed_aftercare( &mut self, config: &FlowConfig, mut node: Box<FlowNode>, timeout: Duration, meta_packet: Option<&mut MetaPacket>, ) { // 统计数据输出前矫正流方向 self.update_flow_direction(&mut node, meta_packet);
// go 版本的copyAndOutput fn node_updated_aftercare( &mut self, config: &FlowConfig, node: &mut FlowNode, timestamp: Duration, meta_packet: Option<&mut MetaPacket>, ) { // if this function is called by inject_flush_ticker (no meta_packet), // skip statistical interval check because timestamp will be equal to // flow_stat_time if node.packet_in_tick && (meta_packet.is_none()
DeepFlow 是 2016 年开始开发的产品,最早 Agent 是使用 Golang 实现的,从三年前开始重构为 Rust。
因此这些注释里面的 Golang 实际上是指我们的内部闭源版本,可以忽略他们。
@yuanchaoa 找时间将这些 comment 梳理纠正一下。