Merge pull request #229 from dave-tucker/fix_cgroup_skb_attach_v2

aya: Fix Loading from cgroup/skb sections
pull/239/head
Alessandro Decina 3 years ago committed by GitHub
commit 3dc9308c8e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -462,6 +462,10 @@ impl<'a> BpfLoader<'a> {
}, },
}) })
} }
ProgramSection::CgroupSkb { .. } => Program::CgroupSkb(CgroupSkb {
data,
expected_attach_type: None,
}),
ProgramSection::CgroupSkbIngress { .. } => Program::CgroupSkb(CgroupSkb { ProgramSection::CgroupSkbIngress { .. } => Program::CgroupSkb(CgroupSkb {
data, data,
expected_attach_type: Some(CgroupSkbAttachType::Ingress), expected_attach_type: Some(CgroupSkbAttachType::Ingress),

@ -115,6 +115,7 @@ pub enum ProgramSection {
SkSkbStreamVerdict { name: String }, SkSkbStreamVerdict { name: String },
SockOps { name: String }, SockOps { name: String },
SchedClassifier { name: String }, SchedClassifier { name: String },
CgroupSkb { name: String },
CgroupSkbIngress { name: String }, CgroupSkbIngress { name: String },
CgroupSkbEgress { name: String }, CgroupSkbEgress { name: String },
LircMode2 { name: String }, LircMode2 { name: String },
@ -142,6 +143,7 @@ impl ProgramSection {
ProgramSection::SkSkbStreamVerdict { name } => name, ProgramSection::SkSkbStreamVerdict { name } => name,
ProgramSection::SockOps { name } => name, ProgramSection::SockOps { name } => name,
ProgramSection::SchedClassifier { name } => name, ProgramSection::SchedClassifier { name } => name,
ProgramSection::CgroupSkb { name } => name,
ProgramSection::CgroupSkbIngress { name } => name, ProgramSection::CgroupSkbIngress { name } => name,
ProgramSection::CgroupSkbEgress { name } => name, ProgramSection::CgroupSkbEgress { name } => name,
ProgramSection::LircMode2 { name } => name, ProgramSection::LircMode2 { name } => name,
@ -199,8 +201,26 @@ impl FromStr for ProgramSection {
"sk_skb/stream_verdict" => SkSkbStreamVerdict { name }, "sk_skb/stream_verdict" => SkSkbStreamVerdict { name },
"sockops" => SockOps { name }, "sockops" => SockOps { name },
"classifier" => SchedClassifier { name }, "classifier" => SchedClassifier { name },
"cgroup_skb" => match &*name {
"ingress" => CgroupSkbIngress { name },
"egress" => CgroupSkbEgress { name },
_ => {
return Err(ParseError::InvalidProgramSection {
section: section.to_owned(),
})
}
},
"cgroup_skb/ingress" => CgroupSkbIngress { name }, "cgroup_skb/ingress" => CgroupSkbIngress { name },
"cgroup_skb/egress" => CgroupSkbEgress { name }, "cgroup_skb/egress" => CgroupSkbEgress { name },
"cgroup/skb" => CgroupSkb { name },
"cgroup" => match &*name {
"skb" => CgroupSkb { name },
_ => {
return Err(ParseError::InvalidProgramSection {
section: section.to_owned(),
})
}
},
"lirc_mode2" => LircMode2 { name }, "lirc_mode2" => LircMode2 { name },
"perf_event" => PerfEvent { name }, "perf_event" => PerfEvent { name },
"raw_tp" | "raw_tracepoint" => RawTracePoint { name }, "raw_tp" | "raw_tracepoint" => RawTracePoint { name },
@ -1434,6 +1454,90 @@ mod tests {
); );
} }
#[test]
fn test_parse_section_cgroup_skb_ingress_unnamed() {
let mut obj = fake_obj();
assert_matches!(
obj.parse_section(fake_section(
BpfSectionKind::Program,
"cgroup_skb/ingress",
bytes_of(&fake_ins())
)),
Ok(())
);
assert_matches!(
obj.programs.get("ingress"),
Some(Program {
section: ProgramSection::CgroupSkbIngress { .. },
..
})
);
}
#[test]
fn test_parse_section_cgroup_skb_ingress_named() {
let mut obj = fake_obj();
assert_matches!(
obj.parse_section(fake_section(
BpfSectionKind::Program,
"cgroup_skb/ingress/foo",
bytes_of(&fake_ins())
)),
Ok(())
);
assert_matches!(
obj.programs.get("foo"),
Some(Program {
section: ProgramSection::CgroupSkbIngress { .. },
..
})
);
}
#[test]
fn test_parse_section_cgroup_skb_no_direction_unamed() {
let mut obj = fake_obj();
assert_matches!(
obj.parse_section(fake_section(
BpfSectionKind::Program,
"cgroup/skb",
bytes_of(&fake_ins())
)),
Ok(())
);
assert_matches!(
obj.programs.get("skb"),
Some(Program {
section: ProgramSection::CgroupSkb { .. },
..
})
);
}
#[test]
fn test_parse_section_cgroup_skb_no_direction_named() {
let mut obj = fake_obj();
assert_matches!(
obj.parse_section(fake_section(
BpfSectionKind::Program,
"cgroup/skb/foo",
bytes_of(&fake_ins())
)),
Ok(())
);
assert_matches!(
obj.programs.get("foo"),
Some(Program {
section: ProgramSection::CgroupSkb { .. },
..
})
);
}
#[test] #[test]
fn test_patch_map_data() { fn test_patch_map_data() {
let mut obj = fake_obj(); let mut obj = fake_obj();

Loading…
Cancel
Save