Remove auth cookie from bus. Benchmarks show a tiny improvement in overall performance.

This commit is contained in:
Herbert Wolverson 2023-01-18 22:18:16 +00:00
parent 58c692425b
commit 2b573708ac
7 changed files with 9 additions and 37 deletions

View File

@ -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();

View File

@ -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)
}

View File

@ -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]);
}

View File

@ -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>,

View File

@ -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>,
}

View File

@ -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;

View File

@ -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");
}