X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=server%2Fslocal.rs;h=130df23942b4c9de28d630aa9c7281635ff770e2;hb=2e16801071d6ef7688ae5d5e7735c04b67cb6e47;hp=09e6aba82cbdf0813a202d5b1c86c499c8eff3ff;hpb=6a35daf7485069d04c28722dcfcc65ada0234d72;p=hippotat.git diff --git a/server/slocal.rs b/server/slocal.rs index 09e6aba..130df23 100644 --- a/server/slocal.rs +++ b/server/slocal.rs @@ -30,20 +30,26 @@ pub async fn run(global: Arc, match checkn(SlipNoConv, global.config.mtu, &data, |header|{ let saddr = ip_packet_addr::(header)?; let daddr = ip_packet_addr::(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,