chiark / gitweb /
server messages
[hippotat.git] / server / slocal.rs
index 09e6aba82cbdf0813a202d5b1c86c499c8eff3ff..130df23942b4c9de28d630aa9c7281635ff770e2 100644 (file)
@@ -30,20 +30,26 @@ pub async fn run(global: Arc<Global>,
           match checkn(SlipNoConv, global.config.mtu, &data, |header|{
             let saddr = ip_packet_addr::<false>(header)?;
             let daddr = ip_packet_addr::<true>(header)?;
-            if ! global.config.vnetwork.iter().any(|n| n.contains(&saddr)) {
-              throw!(PE::Src(saddr))
+            Ok((saddr,daddr))
+          }, |(data, (saddr, daddr))| {
+            let global = &global;
+            let may_route = &may_route;
+            async move {
+              if ! global.config.vnetwork.iter().any(|n| n.contains(&saddr)) {
+                trace!( "ipif local discard outside-vnets saddr={:?}",
+                         saddr);
+                return Ok(())
+              }
+
+              route_packet(
+                &global, "ipif", None,
+                data, daddr, may_route.clone()
+              ).await;
+
+              Ok(())
             }
-            Ok(daddr)
-          }, |(data, daddr)| route_packet(
-            &global, "ipif", None,
-            data, daddr, may_route.clone()
-          ).map(Ok), |pe| Ok(match pe {
+          }, |pe| Ok(match pe {
             PE::Empty => { },
-            PE::Src(saddr) => trace!(
-              target: "hippotatd",
-              "ipif local discard outside-vnets saddr={:?}",
-              saddr
-            ),
             other => throw!(other),
           })).await {
             Ok(()) => goodness += 1,