diff --git a/aya/src/obj/mod.rs b/aya/src/obj/mod.rs index 5e3c99c3..810cc83b 100644 --- a/aya/src/obj/mod.rs +++ b/aya/src/obj/mod.rs @@ -146,6 +146,15 @@ impl FromStr for ProgramSection { } "socket_filter" => SocketFilter { name }, "sk_msg" => SkMsg { name }, + "sk_skb" => match &*name { + "stream_parser" => SkSkbStreamParser { name }, + "stream_verdict" => SkSkbStreamVerdict { name }, + _ => { + return Err(ParseError::InvalidProgramSection { + section: section.to_owned(), + }) + } + }, "sk_skb/stream_parser" => SkSkbStreamParser { name }, "sk_skb/stream_verdict" => SkSkbStreamVerdict { name }, "sockops" => SockOps { name }, @@ -1072,4 +1081,41 @@ mod tests { }) ); } + + #[test] + fn test_parse_section_skskb_unnamed() { + let mut obj = fake_obj(); + + assert_matches!( + obj.parse_section(fake_section("sk_skb/stream_parser", bytes_of(&fake_ins()))), + Ok(()) + ); + assert_matches!( + obj.programs.get("stream_parser"), + Some(Program { + section: ProgramSection::SkSkbStreamParser { .. }, + .. + }) + ); + } + + #[test] + fn test_parse_section_skskb_named() { + let mut obj = fake_obj(); + + assert_matches!( + obj.parse_section(fake_section( + "sk_skb/stream_parser/my_parser", + bytes_of(&fake_ins()) + )), + Ok(()) + ); + assert_matches!( + obj.programs.get("my_parser"), + Some(Program { + section: ProgramSection::SkSkbStreamParser { .. }, + .. + }) + ); + } }