diff options
| author | luwenpeng <[email protected]> | 2023-09-12 14:34:56 +0800 |
|---|---|---|
| committer | luwenpeng <[email protected]> | 2023-09-12 14:39:33 +0800 |
| commit | 8755e95f068da56c099e9c51dc4a89b55960e48d (patch) | |
| tree | 3db6cea2db66eb55d64a67dc214af5ed4fd18157 /src/main.rs | |
| parent | 88172ebc1d79a7b289b125418ddc50f20421d944 (diff) | |
[feature] Support IPv6 Extensions Decode
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 59 |
1 files changed, 27 insertions, 32 deletions
diff --git a/src/main.rs b/src/main.rs index cafd456..24e907c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,65 +4,60 @@ use stellar_rs::event::event::BuiltInEvent; use stellar_rs::event::manager::EventHandle; use stellar_rs::event::manager::EventManager; use stellar_rs::packet::capture::PacketCapture; +use stellar_rs::packet::packet::Encapsulation; use stellar_rs::packet::packet::Packet; -use stellar_rs::packet::packet::PacketEvent; use stellar_rs::plugin::example::ExamplePulgin; use stellar_rs::session::session::Session; use stellar_rs::session::session::SessionProto; use stellar_rs::session::session::SessionState; use stellar_rs::thread::thread::ThreadContex; -fn trigger_packet_event( +fn trigger_event_by_packet( packet: &Packet, session: Option<Rc<RefCell<Session>>>, event_mgr: Rc<RefCell<EventManager>>, ) { - for packet_event in &packet.event { - match packet_event { - PacketEvent::L2_EVENT => { - BuiltInEvent::trigger_l2_event(event_mgr.clone(), session.clone()); - } - PacketEvent::L2_ETH_EVENT => { + let num = packet.encapsulation.len(); + for i in 0..num { + match packet.encapsulation[i] { + Encapsulation::L2_ETH(_, _) => { // TODO } - PacketEvent::L2_VLAN_EVENT => { + Encapsulation::L2_VLAN(_, _) => { // TODO } - PacketEvent::L2_MPLS_EVENT => { + Encapsulation::L2_MPLS(_, _) => { // TODO } - PacketEvent::L2_PWETH_EVENT => { + Encapsulation::L2_PWETH(_, _) => { // TODO } - PacketEvent::L3_EVENT => { - BuiltInEvent::trigger_l3_event(event_mgr.clone(), session.clone()); - } - PacketEvent::L3_IPV4_EVENT => { - BuiltInEvent::trigger_ip4_event(event_mgr.clone(), session.clone()); - } - PacketEvent::L3_IPV6_EVENT => { - BuiltInEvent::trigger_ip6_event(event_mgr.clone(), session.clone()); + Encapsulation::L3_IPV4(_, _) => { + BuiltInEvent::trigger_ipv4_event(event_mgr.clone(), session.clone()); } - PacketEvent::L4_EVENT => { - BuiltInEvent::trigger_l4_event(event_mgr.clone(), session.clone()); + Encapsulation::L3_IPV6(_, _) => { + BuiltInEvent::trigger_ipv6_event(event_mgr.clone(), session.clone()); } - PacketEvent::L4_TCP_EVENT => { + Encapsulation::L4_TCP(_, _) => { BuiltInEvent::trigger_tcp_event(event_mgr.clone(), session.clone()); } - PacketEvent::L4_UDP_EVENT => { + Encapsulation::L4_UDP(_, _) => { BuiltInEvent::trigger_udp_event(event_mgr.clone(), session.clone()); } - PacketEvent::L4_ICMP_EVENT => { + Encapsulation::L4_ICMP(_, _) => { + // TODO + } + Encapsulation::L4_ICMPV6(_, _) => { // TODO } - PacketEvent::L4_ICMPV6_EVENT => { + Encapsulation::UNSUPPORTED(_) => { // TODO } } } } -fn trigger_session_event( +fn trigger_event_by_session( session: Option<Rc<RefCell<Session>>>, event_mgr: Rc<RefCell<EventManager>>, ) { @@ -93,7 +88,7 @@ fn trigger_session_event( } } -fn capture_callback(data: &[u8], len: u32, ctx: Rc<RefCell<ThreadContex>>) { +fn handle_one_packet(data: &[u8], len: u32, ctx: Rc<RefCell<ThreadContex>>) { let event_mgr = ctx.borrow_mut().get_event_mgr(); let session_mgr = ctx.borrow_mut().get_session_mgr(); @@ -119,11 +114,11 @@ fn capture_callback(data: &[u8], len: u32, ctx: Rc<RefCell<ThreadContex>>) { if packet.get_inner_tuple().is_some() { let flow_id = packet.get_flow_id().unwrap(); let session = session_mgr.borrow_mut().update(flow_id); - trigger_packet_event(&packet, Some(session.clone()), event_mgr.clone()); - trigger_session_event(Some(session.clone()), event_mgr.clone()); + trigger_event_by_packet(&packet, Some(session.clone()), event_mgr.clone()); + trigger_event_by_session(Some(session.clone()), event_mgr.clone()); // Packets have no sessions, only packet events are triggered } else { - trigger_packet_event(&packet, None, event_mgr.clone()); + trigger_event_by_packet(&packet, None, event_mgr.clone()); } // Handle packet events and session events on the current package @@ -131,7 +126,7 @@ fn capture_callback(data: &[u8], len: u32, ctx: Rc<RefCell<ThreadContex>>) { // Handle expire events without packets let session = session_mgr.borrow_mut().expire_oldest_session(); - trigger_session_event(session, event_mgr.clone()); + trigger_event_by_session(session, event_mgr.clone()); event_mgr.borrow_mut().dispatch(None); } @@ -142,5 +137,5 @@ fn main() { PacketCapture::show_devices(); let mut cap = PacketCapture::new("en0"); - cap.poll_packet(capture_callback, thread_ctx); + cap.poll_packet(handle_one_packet, thread_ctx); } |
