feat(forwarding): add hybrid forwarding mode with per-client bridge and VLAN settings
This commit is contained in:
@@ -579,6 +579,17 @@ pub async fn run_wg_listener(
|
||||
ForwardingEngine::Bridge(sender) => {
|
||||
let _ = sender.try_send(packet.to_vec());
|
||||
}
|
||||
ForwardingEngine::Hybrid { socket_tx, bridge_tx, routing_table } => {
|
||||
if packet.len() >= 20 {
|
||||
let src_ip = Ipv4Addr::new(packet[12], packet[13], packet[14], packet[15]);
|
||||
let use_bridge = routing_table.read().await.get(&src_ip).copied().unwrap_or(false);
|
||||
if use_bridge {
|
||||
let _ = bridge_tx.try_send(packet.to_vec());
|
||||
} else {
|
||||
let _ = socket_tx.try_send(packet.to_vec());
|
||||
}
|
||||
}
|
||||
}
|
||||
ForwardingEngine::Testing => {}
|
||||
}
|
||||
peer.stats.bytes_received += pkt_len;
|
||||
@@ -614,6 +625,17 @@ pub async fn run_wg_listener(
|
||||
ForwardingEngine::Bridge(sender) => {
|
||||
let _ = sender.try_send(packet.to_vec());
|
||||
}
|
||||
ForwardingEngine::Hybrid { socket_tx, bridge_tx, routing_table } => {
|
||||
if packet.len() >= 20 {
|
||||
let src_ip = Ipv4Addr::new(packet[12], packet[13], packet[14], packet[15]);
|
||||
let use_bridge = routing_table.read().await.get(&src_ip).copied().unwrap_or(false);
|
||||
if use_bridge {
|
||||
let _ = bridge_tx.try_send(packet.to_vec());
|
||||
} else {
|
||||
let _ = socket_tx.try_send(packet.to_vec());
|
||||
}
|
||||
}
|
||||
}
|
||||
ForwardingEngine::Testing => {}
|
||||
}
|
||||
peer.stats.bytes_received += pkt_len;
|
||||
|
||||
Reference in New Issue
Block a user