From 92f9c432300b0d6a3447d3071b49d5ff484b4325 Mon Sep 17 00:00:00 2001 From: Kabir Kwatra Date: Mon, 24 Apr 2023 23:38:13 -0700 Subject: [PATCH] feat(bpf+sk_skb): wrap `change_proto` helper --- bpf/aya-bpf/src/programs/sk_buff.rs | 14 ++++++++++++-- bpf/aya-bpf/src/programs/tc.rs | 5 +++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/bpf/aya-bpf/src/programs/sk_buff.rs b/bpf/aya-bpf/src/programs/sk_buff.rs index 669c2c95..ab7f5038 100644 --- a/bpf/aya-bpf/src/programs/sk_buff.rs +++ b/bpf/aya-bpf/src/programs/sk_buff.rs @@ -6,8 +6,8 @@ use core::{ use aya_bpf_bindings::helpers::{ bpf_clone_redirect, bpf_get_socket_uid, bpf_l3_csum_replace, bpf_l4_csum_replace, - bpf_skb_adjust_room, bpf_skb_change_type, bpf_skb_load_bytes, bpf_skb_pull_data, - bpf_skb_store_bytes, + bpf_skb_adjust_room, bpf_skb_change_proto, bpf_skb_change_type, bpf_skb_load_bytes, + bpf_skb_pull_data, bpf_skb_store_bytes, }; use aya_bpf_cty::c_long; @@ -189,6 +189,16 @@ impl SkBuff { } } + #[inline] + pub fn change_proto(&self, proto: u16, flags: u64) -> Result<(), c_long> { + let ret = unsafe { bpf_skb_change_proto(self.as_ptr() as *mut _, proto, flags) }; + if ret == 0 { + Ok(()) + } else { + Err(ret) + } + } + #[inline] pub fn change_type(&self, ty: u32) -> Result<(), c_long> { let ret = unsafe { bpf_skb_change_type(self.as_ptr() as *mut _, ty) }; diff --git a/bpf/aya-bpf/src/programs/tc.rs b/bpf/aya-bpf/src/programs/tc.rs index 1d3133d5..5aa0a173 100644 --- a/bpf/aya-bpf/src/programs/tc.rs +++ b/bpf/aya-bpf/src/programs/tc.rs @@ -142,6 +142,11 @@ impl TcContext { self.skb.clone_redirect(if_index, flags) } + #[inline] + pub fn change_proto(&self, proto: u16, flags: u64) -> Result<(), c_long> { + self.skb.change_proto(proto, flags) + } + #[inline] pub fn change_type(&self, ty: u32) -> Result<(), c_long> { self.skb.change_type(ty)