Skip to content

Commit 48a4078

Browse files
committed
on tient qqc là
1 parent 73ad77a commit 48a4078

File tree

2 files changed

+29
-7
lines changed

2 files changed

+29
-7
lines changed

oryx-tui/src/ebpf.rs

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ fn update_ipv4_blocklist(
7474
// add port to blocklist
7575
if let Some(first_zero) = blocked_ports.iter().enumerate().find(|&x| *x.1 == 0) {
7676
blocked_ports[first_zero.0] = port;
77-
dbg!("UPSERTING");
78-
dbg!(blocked_ports[0], blocked_ports[1]);
77+
// dbg!("UPSERTING");
78+
// dbg!(blocked_ports[0], blocked_ports[1]);
7979
ipv4_firewall
8080
.insert(addr.to_bits(), blocked_ports, 0)
8181
.unwrap();
@@ -84,10 +84,22 @@ fn update_ipv4_blocklist(
8484
}
8585
} else {
8686
// remove port from blocklist
87-
if let Some(matching_port) = blocked_ports.iter().enumerate().find(|&x| *x.1 == port) {
88-
blocked_ports[matching_port.0] = 0;
89-
dbg!("REMOVING");
90-
dbg!(blocked_ports[0], blocked_ports[1]);
87+
// on veut rebuild une blocklist avec les ports restants non nuls
88+
// par example là [8888,0,80,0,..]
89+
// hashmap = key:[0,0,0]
90+
// => [8888,80,0 ....]
91+
let non_null_ports = blocked_ports
92+
.into_iter()
93+
.filter(|p| (*p != 0 && *p != port))
94+
.collect::<Vec<u16>>();
95+
let mut blocked_ports = [0; 32];
96+
for (idx, p) in non_null_ports.iter().enumerate() {
97+
blocked_ports[idx] = *p;
98+
}
99+
if blocked_ports.iter().sum::<u16>() == 0 {
100+
//now block_list is empty, we need to delete key
101+
ipv4_firewall.remove(&addr.to_bits()).unwrap();
102+
} else {
91103
ipv4_firewall
92104
.insert(addr.to_bits(), blocked_ports, 0)
93105
.unwrap();
@@ -96,7 +108,7 @@ fn update_ipv4_blocklist(
96108
} else {
97109
// shouldn't be disabling if blocklist is empty
98110
assert!(enabled);
99-
//create new blocklist with port as first element
111+
// create new blocklist with port as first element
100112
let mut blocked_ports: [u16; 32] = [0; 32];
101113
blocked_ports[0] = port;
102114
ipv4_firewall

oryx-tui/src/section/firewall.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,14 @@ impl Firewall {
270270

271271
if let Some(id) = user_input.id {
272272
let rule = self.rules.iter_mut().find(|rule| rule.id == id).unwrap();
273+
274+
if rule.enabled {
275+
// set disable notification on previous rule definition
276+
rule.enabled = false;
277+
self.ingress_sender.send(rule.clone())?;
278+
}
279+
280+
// update rule with user input
273281
rule.name = user_input.name.field.to_string();
274282
rule.ip = IpAddr::from_str(user_input.ip.field.value()).unwrap();
275283
rule.port = u16::from_str(user_input.port.field.value()).unwrap();
@@ -331,6 +339,8 @@ impl Firewall {
331339

332340
KeyCode::Char('d') => {
333341
if let Some(index) = self.state.selected() {
342+
self.rules[index].enabled = false;
343+
self.ingress_sender.send(self.rules[index].clone())?;
334344
self.rules.remove(index);
335345
}
336346
}

0 commit comments

Comments
 (0)