benchmark mode added test
All checks were successful
Build and Deploy MITM Webserver / traffic_target (push) Successful in 0s
Build and Deploy MITM Webserver / build (push) Successful in 12s

This commit is contained in:
2026-05-03 20:54:37 +02:00
parent c40ddf4ded
commit 10f0e518c7
6 changed files with 131 additions and 11 deletions

View File

@@ -17,6 +17,7 @@ import {
Select,
Space,
Spin,
Switch,
Tag,
Tooltip,
Typography,
@@ -62,8 +63,13 @@ export default function SnifferManager(props: SnifferManagerProps): ReactElement
setIsModalOpen(false);
};
const handleStartSubmit = async (values: { target?: string; bridgeCaptureMode?: 'tc_ebpf' | 'af_packet' }) => {
const handleStartSubmit = async (values: {
target?: string;
bridgeCaptureMode?: 'tc_ebpf' | 'af_packet';
benchmarkMode?: boolean;
}) => {
const target = values.target;
const benchmarkMode = Boolean(values.benchmarkMode);
if (!target) {
notification.warning({ message: 'Warning', description: 'Please select a target to start capture on.' });
return;
@@ -72,12 +78,14 @@ export default function SnifferManager(props: SnifferManagerProps): ReactElement
try {
const payload =
startMode === 'interface'
? { interface: target }
: { bridge: target, bridge_capture_mode: values.bridgeCaptureMode ?? bridgeCaptureMode };
? { interface: target, benchmark_mode: benchmarkMode }
: { bridge: target, bridge_capture_mode: values.bridgeCaptureMode ?? bridgeCaptureMode, benchmark_mode: benchmarkMode };
const result = await startSniffer(payload);
notification.success({
message: 'Capture started',
description: `Capture started on ${target} via ${result.capture_mode} (session ${result.session_id})`,
description: `Capture started on ${target} via ${result.capture_mode}${
result.benchmark_mode ? ' in benchmark mode' : ''
} (session ${result.session_id})`,
});
await props.refreshAll();
setIsModalOpen(false);
@@ -241,6 +249,7 @@ export default function SnifferManager(props: SnifferManagerProps): ReactElement
{status.capture_mode === 'af_packet' ? 'AF_PACKET' : 'tc/eBPF'}
</Tag>
)}
{status.benchmark_mode && <Tag color="gold">benchmark</Tag>}
</Space>
}
description={<Text type="secondary">interface: {name}</Text>}
@@ -260,7 +269,12 @@ export default function SnifferManager(props: SnifferManagerProps): ReactElement
confirmLoading={props.loading}
okText="Start"
>
<Form form={form} layout="vertical" onFinish={handleStartSubmit} initialValues={{ target: undefined }}>
<Form
form={form}
layout="vertical"
onFinish={handleStartSubmit}
initialValues={{ target: undefined, benchmarkMode: false }}
>
<Form.Item label="Mode" name="mode">
<Radio.Group
value={startMode}
@@ -323,6 +337,19 @@ export default function SnifferManager(props: SnifferManagerProps): ReactElement
</Radio.Group>
</Form.Item>
)}
<Form.Item
label="Benchmark Mode"
name="benchmarkMode"
valuePropName="checked"
extra={
startMode === 'bridge' && bridgeCaptureMode === 'tc_ebpf'
? 'Keeps tc/eBPF raw export and JSON emission, but skips backend parsing, telemetry merge, DB persistence, DPI enrichment, and live packet publishing.'
: 'Receives packets for measurement, but skips packet parsing, packet tracking, DB persistence, DPI enrichment, and live packet publishing.'
}
>
<Switch checkedChildren="Benchmark" unCheckedChildren="Normal" />
</Form.Item>
</Form>
</Modal>
</div>

View File

@@ -6,6 +6,7 @@ export interface SnifferStartRequest {
bridge?: string;
interface?: string;
bridge_capture_mode?: 'tc_ebpf' | 'af_packet';
benchmark_mode?: boolean;
}
/**
@@ -17,6 +18,7 @@ export interface SnifferStartResponse {
target: string;
target_type: 'bridge' | 'interface';
capture_mode: 'tc_ebpf' | 'af_packet';
benchmark_mode?: boolean;
}
/**
@@ -47,6 +49,7 @@ export interface InterfaceSnifferStatus {
session_id?: string | null;
session_label?: string | null;
capture_mode?: 'tc_ebpf' | 'af_packet' | null;
benchmark_mode?: boolean | null;
}
/**