mirror of https://github.com/aya-rs/aya
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
3.8 KiB
Rust
128 lines
3.8 KiB
Rust
mod expand;
|
|
|
|
use expand::{
|
|
Args, Map, PerfEvent, Probe, ProbeKind, SchedClassifier, SkMsg, SockOps, TracePoint, Xdp,
|
|
};
|
|
use proc_macro::TokenStream;
|
|
use syn::{parse_macro_input, ItemFn, ItemStatic};
|
|
|
|
use crate::expand::CgroupSkb;
|
|
|
|
#[proc_macro_attribute]
|
|
pub fn map(attrs: TokenStream, item: TokenStream) -> TokenStream {
|
|
let args = parse_macro_input!(attrs as Args);
|
|
let item = parse_macro_input!(item as ItemStatic);
|
|
|
|
Map::from_syn(args, item)
|
|
.and_then(|u| u.expand())
|
|
.unwrap_or_else(|err| err.to_compile_error())
|
|
.into()
|
|
}
|
|
|
|
#[proc_macro_attribute]
|
|
pub fn kprobe(attrs: TokenStream, item: TokenStream) -> TokenStream {
|
|
probe(ProbeKind::KProbe, attrs, item)
|
|
}
|
|
|
|
#[proc_macro_attribute]
|
|
pub fn kretprobe(attrs: TokenStream, item: TokenStream) -> TokenStream {
|
|
probe(ProbeKind::KRetProbe, attrs, item)
|
|
}
|
|
|
|
#[proc_macro_attribute]
|
|
pub fn uprobe(attrs: TokenStream, item: TokenStream) -> TokenStream {
|
|
probe(ProbeKind::UProbe, attrs, item)
|
|
}
|
|
|
|
#[proc_macro_attribute]
|
|
pub fn uretprobe(attrs: TokenStream, item: TokenStream) -> TokenStream {
|
|
probe(ProbeKind::URetProbe, attrs, item)
|
|
}
|
|
|
|
#[proc_macro_attribute]
|
|
pub fn sock_ops(attrs: TokenStream, item: TokenStream) -> TokenStream {
|
|
let args = parse_macro_input!(attrs as Args);
|
|
let item = parse_macro_input!(item as ItemFn);
|
|
|
|
SockOps::from_syn(args, item)
|
|
.and_then(|u| u.expand())
|
|
.unwrap_or_else(|err| err.to_compile_error())
|
|
.into()
|
|
}
|
|
|
|
#[proc_macro_attribute]
|
|
pub fn sk_msg(attrs: TokenStream, item: TokenStream) -> TokenStream {
|
|
let args = parse_macro_input!(attrs as Args);
|
|
let item = parse_macro_input!(item as ItemFn);
|
|
|
|
SkMsg::from_syn(args, item)
|
|
.and_then(|u| u.expand())
|
|
.unwrap_or_else(|err| err.to_compile_error())
|
|
.into()
|
|
}
|
|
|
|
#[proc_macro_attribute]
|
|
pub fn xdp(attrs: TokenStream, item: TokenStream) -> TokenStream {
|
|
let args = parse_macro_input!(attrs as Args);
|
|
let item = parse_macro_input!(item as ItemFn);
|
|
|
|
Xdp::from_syn(args, item)
|
|
.and_then(|u| u.expand())
|
|
.unwrap_or_else(|err| err.to_compile_error())
|
|
.into()
|
|
}
|
|
|
|
#[proc_macro_attribute]
|
|
pub fn classifier(attrs: TokenStream, item: TokenStream) -> TokenStream {
|
|
let args = parse_macro_input!(attrs as Args);
|
|
let item = parse_macro_input!(item as ItemFn);
|
|
|
|
SchedClassifier::from_syn(args, item)
|
|
.and_then(|u| u.expand())
|
|
.unwrap_or_else(|err| err.to_compile_error())
|
|
.into()
|
|
}
|
|
|
|
#[proc_macro_attribute]
|
|
pub fn cgroup_skb(attrs: TokenStream, item: TokenStream) -> TokenStream {
|
|
let args = parse_macro_input!(attrs as Args);
|
|
let item = parse_macro_input!(item as ItemFn);
|
|
|
|
CgroupSkb::from_syn(args, item)
|
|
.and_then(|u| u.expand())
|
|
.unwrap_or_else(|err| err.to_compile_error())
|
|
.into()
|
|
}
|
|
|
|
fn probe(kind: ProbeKind, attrs: TokenStream, item: TokenStream) -> TokenStream {
|
|
let args = parse_macro_input!(attrs as Args);
|
|
let item = parse_macro_input!(item as ItemFn);
|
|
|
|
Probe::from_syn(kind, args, item)
|
|
.and_then(|u| u.expand())
|
|
.unwrap_or_else(|err| err.to_compile_error())
|
|
.into()
|
|
}
|
|
|
|
#[proc_macro_attribute]
|
|
pub fn tracepoint(attrs: TokenStream, item: TokenStream) -> TokenStream {
|
|
let args = parse_macro_input!(attrs as Args);
|
|
let item = parse_macro_input!(item as ItemFn);
|
|
|
|
TracePoint::from_syn(args, item)
|
|
.and_then(|u| u.expand())
|
|
.unwrap_or_else(|err| err.to_compile_error())
|
|
.into()
|
|
}
|
|
|
|
#[proc_macro_attribute]
|
|
pub fn perf_event(attrs: TokenStream, item: TokenStream) -> TokenStream {
|
|
let args = parse_macro_input!(attrs as Args);
|
|
let item = parse_macro_input!(item as ItemFn);
|
|
|
|
PerfEvent::from_syn(args, item)
|
|
.and_then(|u| u.expand())
|
|
.unwrap_or_else(|err| err.to_compile_error())
|
|
.into()
|
|
}
|