1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
use crate::libapi::{FuncDef, Module};
use crate::sym::Symbol;
use crate::val::Val;
const HZ: u64 = 1_000_000_000;
const KHZ: u64 = HZ / 1000;
const MHZ: u64 = KHZ / 1000;
const JUMP_SECS: FuncDef = func!(
/// Advance the pcap timestamp clock by some number of seconds
resynth fn jump_seconds(
/// Number of seconds to advance the clock
seconds: U32,
=>
=>
Void
) -> TimeJump
|mut args| {
let secs: u32 = args.next().into();
Ok(Val::TimeJump((secs as u64) * HZ))
}
);
const JUMP_MILLIS: FuncDef = func!(
/// Advance the pcap timestamp clock by some number of milliseconds
resynth fn jump_millis(
/// Number of milliseconds to advance the clock
ms: U64,
=>
=>
Void
) -> TimeJump
|mut args| {
let ms: u64 = args.next().into();
Ok(Val::TimeJump(ms * KHZ))
}
);
const JUMP_MICROS: FuncDef = func!(
/// Advance the pcap timestamp clock by some number of microseconds
resynth fn jump_micros(
/// Number of microseconds to advance the clock
us: U64,
=>
=>
Void
) -> TimeJump
|mut args| {
let us: u64 = args.next().into();
Ok(Val::TimeJump(us * MHZ))
}
);
const JUMP_NANOS: FuncDef = func!(
/// Advance the pcap timestamp clock by some number of nanoseconds
resynth fn jump_nanos(
/// Number of nanoseconds to advance the clock
ns: U64,
=>
=>
Void
) -> TimeJump
|mut args| {
let ns: u64 = args.next().into();
Ok(Val::TimeJump(ns))
}
);
pub const MODULE: Module = module! {
/// # Time Manipulation
///
/// Functions to control packet timestamps and introduce time offsets in captures.
resynth mod time {
jump_seconds => Symbol::Func(&JUMP_SECS),
jump_millis => Symbol::Func(&JUMP_MILLIS),
jump_micros => Symbol::Func(&JUMP_MICROS),
jump_nanos => Symbol::Func(&JUMP_NANOS),
}
};