deepflow icon indicating copy to clipboard operation
deepflow copied to clipboard

deepflow agent网络报文解析,会话聚合

Open taohorse opened this issue 1 year ago • 3 comments

在学习agent源码时候,看到在网络报文解析、会话聚合的时候,有一些参考go开源库实现的注释。 请问下网络报文解析、会话聚合这块代码是参考哪个开源go库实现的

taohorse avatar Mar 27 '24 07:03 taohorse

贴一下具体代码

sharang avatar Mar 28 '24 12:03 sharang

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()

taohorse avatar Mar 29 '24 08:03 taohorse

DeepFlow 是 2016 年开始开发的产品,最早 Agent 是使用 Golang 实现的,从三年前开始重构为 Rust。

因此这些注释里面的 Golang 实际上是指我们的内部闭源版本,可以忽略他们。

@yuanchaoa 找时间将这些 comment 梳理纠正一下。

sharang avatar Mar 31 '24 15:03 sharang