1

107 lines
3.9 KiB
Rust

use criterion::{criterion_group, criterion_main, Criterion};
use interproto::protocols::*;
use pnet::packet::{
tcp::{MutableTcpPacket, TcpPacket},
udp::{MutableUdpPacket, UdpPacket},
};
/// Translate TCP packets from IPv4 to IPv6
fn bench_tcp_4_to_6(c: &mut Criterion) {
// Create a test input packet
let mut input_buffer = vec![0u8; TcpPacket::minimum_packet_size() + 13];
let mut input_packet = MutableTcpPacket::new(&mut input_buffer).unwrap();
input_packet.set_source(1234);
input_packet.set_destination(5678);
input_packet.set_payload(&"Hello, world!".as_bytes().to_vec());
// Pre-calculate the source and dest addrs
let source = "2001:db8::1".parse().unwrap();
let dest = "2001:db8::2".parse().unwrap();
// Build a benchmark group for measuring throughput
let mut group = c.benchmark_group("tcp_4_to_6");
group.throughput(criterion::Throughput::Bytes(input_buffer.len() as u64));
group.bench_function("translate", |b| {
b.iter(|| tcp::recalculate_tcp_checksum_ipv6(&input_buffer, source, dest))
});
group.finish();
}
/// Translate TCP packets from IPv6 to IPv4
fn bench_tcp_6_to_4(c: &mut Criterion) {
// Create a test input packet
let mut input_buffer = vec![0u8; TcpPacket::minimum_packet_size() + 13];
let mut input_packet = MutableTcpPacket::new(&mut input_buffer).unwrap();
input_packet.set_source(1234);
input_packet.set_destination(5678);
input_packet.set_payload(&"Hello, world!".as_bytes().to_vec());
// Pre-calculate the source and dest addrs
let source = "192.0.2.1".parse().unwrap();
let dest = "192.0.2.2".parse().unwrap();
// Build a benchmark group for measuring throughput
let mut group = c.benchmark_group("tcp_6_to_4");
group.throughput(criterion::Throughput::Bytes(input_buffer.len() as u64));
group.bench_function("translate", |b| {
b.iter(|| tcp::recalculate_tcp_checksum_ipv4(&input_buffer, source, dest))
});
group.finish();
}
/// Translate UDP packets from IPv4 to IPv6
fn bench_udp_4_to_6(c: &mut Criterion) {
// Create a test input packet
let mut input_buffer = vec![0u8; UdpPacket::minimum_packet_size() + 13];
let mut udp_packet = MutableUdpPacket::new(&mut input_buffer).unwrap();
udp_packet.set_source(1234);
udp_packet.set_destination(5678);
udp_packet.set_length(13);
udp_packet.set_payload(&"Hello, world!".as_bytes().to_vec());
// Pre-calculate the source and dest addrs
let source = "2001:db8::1".parse().unwrap();
let dest = "2001:db8::2".parse().unwrap();
// Build a benchmark group for measuring throughput
let mut group = c.benchmark_group("udp_4_to_6");
group.throughput(criterion::Throughput::Bytes(input_buffer.len() as u64));
group.bench_function("translate", |b| {
b.iter(|| udp::recalculate_udp_checksum_ipv6(&input_buffer, source, dest))
});
group.finish();
}
/// Translate UDP packets from IPv6 to IPv4
fn bench_udp_6_to_4(c: &mut Criterion) {
// Create a test input packet
let mut input_buffer = vec![0u8; UdpPacket::minimum_packet_size() + 13];
let mut udp_packet = MutableUdpPacket::new(&mut input_buffer).unwrap();
udp_packet.set_source(1234);
udp_packet.set_destination(5678);
udp_packet.set_length(13);
udp_packet.set_payload(&"Hello, world!".as_bytes().to_vec());
// Pre-calculate the source and dest addrs
let source = "192.0.2.1".parse().unwrap();
let dest = "192.0.2.2".parse().unwrap();
// Build a benchmark group for measuring throughput
let mut group = c.benchmark_group("udp_6_to_4");
group.throughput(criterion::Throughput::Bytes(input_buffer.len() as u64));
group.bench_function("translate", |b| {
b.iter(|| udp::recalculate_udp_checksum_ipv4(&input_buffer, source, dest))
});
group.finish();
}
// Generate a main function
criterion_group!(
benches,
bench_tcp_4_to_6,
bench_tcp_6_to_4,
bench_udp_4_to_6,
bench_udp_6_to_4
);
criterion_main!(benches);