Skip to content

Commit

Permalink
WIP: rtnl decouple mark and table
Browse files Browse the repository at this point in the history
  • Loading branch information
hack3ric committed Jan 7, 2025
1 parent 6ef171e commit 291af77
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 9 deletions.
17 changes: 9 additions & 8 deletions src/integration_tests/kernel_linux.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,24 +68,25 @@ async fn test_redirect_to_ip() -> anyhow::Result<()> {
let (conn, handle, _) = rtnetlink::new_connection()?;
tokio::spawn(conn);

let table_index = 10000;
let dummy_index = create_dummy_link(&handle, "10.128.128.254/24".parse()?).await?;
let (name, (_g1, bird, chans, _g2)) =
run_kernel_test(["flow4 { dst 172.20.0.0/16; } { bgp_ext_community.add((unknown 0x800c, 10.128.128.1, 0)); }"])
.await?;
let (name, (_g1, mut bird, chans, _g2)) = run_kernel_test([
"flow4 { dst 172.20.0.0/16; } { bgp_ext_community.add((unknown 0x800c, 10.128.128.1, 0)); }",
"flow4 { dst 172.21.0.0/16; } { bgp_ext_community.add((unknown 0x800c, 10.128.128.1, 0)); }",
])
.await?;

print_nft_chain(&name, &name).await?;
print_ip_rule().await?;
print_ip_route(10000).await?;
print_ip_route(table_index).await?;

let nft_stmts = get_nft_stmts(&name, &name).await?;
let ip_rules = get_ip_rule(&handle, IpVersion::V4).await?;
let ip_routes = get_ip_route(&handle, IpVersion::V4, 10000).await?;
let nft_stmts = get_nft_stmts(&name, &name).await?;
close_cli(chans).await;
drop(bird);
bird.kill().await?;
remove_link(&handle, dummy_index).await?;

let table_index = 10000;

assert_eq!(nft_stmts, [vec![
prefix_stmt("daddr", "172.20.0.0/16".parse()?).unwrap(),
stmt::Statement::Mangle(stmt::Mangle { key: make_meta(expr::MetaKey::Mark), value: Number(table_index) }),
Expand Down
2 changes: 1 addition & 1 deletion src/kernel/linux/nft.rs
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,7 @@ impl TrafficFilterAction {
let new = RtNetlink::new(rtnl_args.clone()).unwrap();
rtnl.get_or_insert(new)
};
let table_id = rtnl.next_table_id();
let table_id = rtnl.next_table_id(); // TODO: bug, should not be next_table_id and should be next_mark (?)
let result = smallvec_inline![stmt::Statement::Mangle(stmt::Mangle {
key: make_meta(expr::MetaKey::Mark),
value: NUM(table_id),
Expand Down

0 comments on commit 291af77

Please sign in to comment.