mirror of
https://github.com/LibreQoE/LibreQoS.git
synced 2025-02-25 18:55:32 -06:00
Remove auth cookie from bus. Benchmarks show a tiny improvement in overall performance.
This commit is contained in:
parent
58c692425b
commit
2b573708ac
@ -9,7 +9,6 @@ use lqos_bus::*;
|
||||
pub fn criterion_benchmark(c: &mut Criterion) {
|
||||
c.bench_function("encode_request", |b| {
|
||||
let session_to_encode = BusSession {
|
||||
auth_cookie: 1234,
|
||||
requests: vec![BusRequest::Ping],
|
||||
};
|
||||
b.iter(|| {
|
||||
@ -20,7 +19,6 @@ pub fn criterion_benchmark(c: &mut Criterion) {
|
||||
|
||||
c.bench_function("decode_request", |b| {
|
||||
let session_to_encode = BusSession {
|
||||
auth_cookie: 1234,
|
||||
requests: vec![BusRequest::Ping],
|
||||
};
|
||||
let msg = encode_request(&session_to_encode).unwrap();
|
||||
@ -32,7 +30,6 @@ pub fn criterion_benchmark(c: &mut Criterion) {
|
||||
|
||||
c.bench_function("encode_reply", |b| {
|
||||
let reply_to_encode = BusReply {
|
||||
auth_cookie: cookie_value(),
|
||||
responses: vec![ BusResponse::Ack ]
|
||||
};
|
||||
b.iter(|| {
|
||||
@ -43,7 +40,6 @@ pub fn criterion_benchmark(c: &mut Criterion) {
|
||||
|
||||
c.bench_function("decode_reply", |b| {
|
||||
let reply_to_encode = BusReply {
|
||||
auth_cookie: cookie_value(),
|
||||
responses: vec![ BusResponse::Ack ]
|
||||
};
|
||||
let msg = encode_response(&reply_to_encode).unwrap();
|
||||
|
@ -1,6 +1,6 @@
|
||||
use tokio::{net::UnixStream, io::{AsyncWriteExt, AsyncReadExt}};
|
||||
use crate::{BUS_SOCKET_PATH, BusSession, BusRequest, encode_request, decode_response, cookie_value, BusResponse};
|
||||
use anyhow::{Result, Error};
|
||||
use crate::{BUS_SOCKET_PATH, BusSession, BusRequest, encode_request, decode_response, BusResponse};
|
||||
use anyhow::Result;
|
||||
|
||||
/// Convenient wrapper for accessing the bus
|
||||
///
|
||||
@ -12,7 +12,6 @@ use anyhow::{Result, Error};
|
||||
pub async fn bus_request(requests: Vec<BusRequest>) -> Result<Vec<BusResponse>> {
|
||||
let mut stream = UnixStream::connect(BUS_SOCKET_PATH).await.unwrap();
|
||||
let test = BusSession {
|
||||
auth_cookie: 1234,
|
||||
requests,
|
||||
};
|
||||
let msg = encode_request(&test)?;
|
||||
@ -20,9 +19,6 @@ pub async fn bus_request(requests: Vec<BusRequest>) -> Result<Vec<BusResponse>>
|
||||
let mut buf = Vec::new();
|
||||
let _ = stream.read_to_end(&mut buf).await.unwrap();
|
||||
let reply = decode_response(&buf)?;
|
||||
if reply.auth_cookie != cookie_value() {
|
||||
return Err(Error::msg("Invalid reply cookie"));
|
||||
}
|
||||
|
||||
Ok(reply.responses)
|
||||
}
|
@ -35,11 +35,6 @@ pub fn decode_response(bytes: &[u8]) -> Result<BusReply> {
|
||||
Ok(bincode::deserialize(&bytes)?)
|
||||
}
|
||||
|
||||
/// The cookie value to use to determine that the session is valid.
|
||||
pub fn cookie_value() -> u32 {
|
||||
1234
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
@ -48,13 +43,11 @@ mod test {
|
||||
#[test]
|
||||
fn test_session_roundtrip() {
|
||||
let session = BusSession {
|
||||
auth_cookie: cookie_value(),
|
||||
requests: vec![BusRequest::Ping],
|
||||
};
|
||||
|
||||
let bytes = encode_request(&session).unwrap();
|
||||
let new_session = decode_request(&bytes).unwrap();
|
||||
assert_eq!(new_session.auth_cookie, session.auth_cookie);
|
||||
assert_eq!(new_session.requests.len(), session.requests.len());
|
||||
assert_eq!(new_session.requests[0], session.requests[0]);
|
||||
}
|
||||
@ -62,12 +55,10 @@ mod test {
|
||||
#[test]
|
||||
fn test_reply_roundtrip() {
|
||||
let reply = BusReply {
|
||||
auth_cookie: cookie_value(),
|
||||
responses: vec![BusResponse::Ack],
|
||||
};
|
||||
let bytes = encode_response(&reply).unwrap();
|
||||
let new_reply = decode_response(&bytes).unwrap();
|
||||
assert_eq!(reply.auth_cookie, new_reply.auth_cookie);
|
||||
assert_eq!(reply.responses.len(), new_reply.responses.len());
|
||||
assert_eq!(reply.responses[0], new_reply.responses[0]);
|
||||
}
|
||||
|
@ -10,10 +10,6 @@ use serde::{Deserialize, Serialize};
|
||||
/// respect to the order of the requests.
|
||||
#[derive(Serialize, Deserialize, Clone, Debug)]
|
||||
pub struct BusReply {
|
||||
/// Auth cookie, which should match the output of the `auth_cookie`
|
||||
/// function.
|
||||
pub auth_cookie: u32,
|
||||
|
||||
/// A list of `BusResponse` objects generated in response to the
|
||||
/// requests that started the session.
|
||||
pub responses: Vec<BusResponse>,
|
||||
|
@ -6,10 +6,6 @@ use serde::{Deserialize, Serialize};
|
||||
/// which serves as a sanity check that the connection is valid.
|
||||
#[derive(Serialize, Deserialize, Clone, Debug)]
|
||||
pub struct BusSession {
|
||||
/// Authentication cookie that must match the `auth_cookie()` function's
|
||||
/// return value.
|
||||
pub auth_cookie: u32,
|
||||
|
||||
/// A list of requests to include in this session.
|
||||
pub requests: Vec<BusRequest>,
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ mod ip_stats;
|
||||
pub use ip_stats::{IpMapping, IpStats, XdpPpingResult};
|
||||
mod tc_handle;
|
||||
pub use bus::{
|
||||
cookie_value, decode_request, decode_response, encode_request, encode_response, BusReply,
|
||||
decode_request, decode_response, encode_request, encode_response, BusReply,
|
||||
BusRequest, BusResponse, BusSession, BUS_SOCKET_PATH, bus_request
|
||||
};
|
||||
pub use tc_handle::TcHandle;
|
||||
|
@ -1,5 +1,5 @@
|
||||
use std::{fs::remove_file, ffi::CString};
|
||||
use lqos_bus::{BUS_SOCKET_PATH, decode_request, cookie_value, BusReply, encode_response};
|
||||
use lqos_bus::{BUS_SOCKET_PATH, decode_request, BusReply, encode_response};
|
||||
use anyhow::Result;
|
||||
use nix::libc::mode_t;
|
||||
use tokio::{net::{UnixListener, UnixStream}, io::{AsyncReadExt, AsyncWriteExt}};
|
||||
@ -46,14 +46,11 @@ impl UnixSocketServer {
|
||||
.expect("failed to read data from socket");
|
||||
|
||||
if let Ok(request) = decode_request(&buf) {
|
||||
if request.auth_cookie == cookie_value() {
|
||||
let mut response = BusReply {
|
||||
auth_cookie: request.auth_cookie,
|
||||
responses: Vec::new(),
|
||||
};
|
||||
super::handle_bus_requests(&request.requests, &mut response.responses).await;
|
||||
let _ = reply_unix(&encode_response(&response).unwrap(), &mut socket).await;
|
||||
}
|
||||
let mut response = BusReply {
|
||||
responses: Vec::new(),
|
||||
};
|
||||
super::handle_bus_requests(&request.requests, &mut response.responses).await;
|
||||
let _ = reply_unix(&encode_response(&response).unwrap(), &mut socket).await;
|
||||
} else {
|
||||
warn!("Invalid data on local socket");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user