sysctl: add /scheme/netcfg/sysctl tree with ip_forward toggle
Router gains Rc<Cell<bool>> ip_forward flag (default: true). When false, forward_packets() returns immediately — no packets forwarded between interfaces. Security best practice for non-router hosts. netcfg scheme gains sysctl subtree: /scheme/netcfg/sysctl/net/ipv4/ip_forward (rw: 0 or 1) Read: echo /scheme/netcfg/sysctl/net/ipv4/ip_forward → 1 Write: echo 0 > /scheme/netcfg/sysctl/net/ipv4/ip_forward (disable) Restore: echo 1 > /scheme/netcfg/sysctl/net/ipv4/ip_forward Mirrors Linux /proc/sys/net/ipv4/ip_forward. Shared via Rc<Cell<bool>> between Router and NetCfgScheme.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
use std::cell::RefCell;
|
||||
use std::cell::{Cell, RefCell};
|
||||
use std::rc::Rc;
|
||||
|
||||
use smoltcp::phy::{Device, DeviceCapabilities, Medium};
|
||||
@@ -21,6 +21,7 @@ pub struct Router {
|
||||
tx_buffer: PacketBuffer,
|
||||
devices: Rc<RefCell<DeviceList>>,
|
||||
route_table: Rc<RefCell<RouteTable>>,
|
||||
pub ip_forward: Rc<Cell<bool>>,
|
||||
}
|
||||
|
||||
impl Router {
|
||||
@@ -38,6 +39,7 @@ impl Router {
|
||||
tx_buffer,
|
||||
devices,
|
||||
route_table,
|
||||
ip_forward: Rc::new(Cell::new(true)),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,6 +95,9 @@ impl Router {
|
||||
}
|
||||
|
||||
pub fn forward_packets(&mut self, filter_table: &Rc<RefCell<FilterTable>>, now: Instant) {
|
||||
if !self.ip_forward.get() {
|
||||
return;
|
||||
}
|
||||
let mut forwarded: Vec<Vec<u8>> = Vec::new();
|
||||
let mut local: Vec<Vec<u8>> = Vec::new();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user