summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs59
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);
}