Skip to content

Commit e0ad809

Browse files
committed
add kernel::net::device::feature::NetIf
Signed-off-by: Finn Behrens <[email protected]>
1 parent 113573d commit e0ad809

File tree

3 files changed

+206
-173
lines changed

3 files changed

+206
-173
lines changed

drivers/net/dummy_rs.rs

+26-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
// SPDX-License-Identifier: GPL-2.0
22

33
//! Rust dummy network driver
4+
//!
5+
//! This is a demonstration of what a small driver looks like in Rust, based on drivers/net/dummy.c.
6+
//! This code is provided as a demonstration only, not as a proposal to mass-rewrite existing drivers in Rust
7+
8+
// TODO: copyright (see ./dummy.c)
9+
410

511
#![no_std]
612
#![feature(allocator_api, global_asm)]
@@ -32,11 +38,26 @@ fn setup(dev: &mut NetDevice<DummyRsDev>) {
3238
dev.remove_flag(device::Iff::MULTICAST);
3339

3440
dev.add_private_flag(device::IffPriv::LIVE_ADDR_CHANGE);
35-
dev.add_private_flag(device::IffPriv::IFF_NO_QUEUE);
36-
37-
dev.add_feature(device::Feature::NETIF_F_SG);
38-
dev.add_feature(device::Feature::NETIF_F_FRAGLIST_BIT);
39-
dev.add_feature(device::Feature::NETIF_F_GSO_SOFTWARE);
41+
dev.add_private_flag(device::IffPriv::NO_QUEUE);
42+
43+
let mut feature = device::feature::NetIF::new();
44+
45+
//feature.add(device::feature::NETIF_F_SG);
46+
//feature.add(device::feature::NETIF_F_FRAGLIST_BIT as u64);
47+
feature += device::feature::NETIF_F_SG;
48+
feature += device::feature::NETIF_F_FRAGLIST;
49+
feature += device::feature::NETIF_F_GSO_SOFTWARE;
50+
feature += device::feature::NETIF_F_HW_CSUM;
51+
feature += device::feature::NETIF_F_HIGHDMA;
52+
feature += device::feature::NETIF_F_LLTX;
53+
feature += device::feature::NETIF_F_GSO_ENCAP_ALL;
54+
55+
dev.set_features(feature);
56+
dev.set_hw_features(feature);
57+
dev.set_hw_enc_features(feature);
58+
59+
dev.hw_addr_random();
60+
dev.set_mtu(0, 0);
4061
}
4162

4263
rtnl_link_ops! {

rust/generate_rust_analyzer.sh

+7-6
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ objtree=$2
55
lib_src=$3
66
bindgen_file=$4
77

8+
dylib_and_extra=',"proc_macro_dylib_path":"./rust/libmodule.so","env":{"RUST_BINDINGS_FILE":"'$bindgen_file'"},
9+
"source": { "include_dirs": ["'${objtree}'/rust/"], "exclude_dirs": []}'
10+
811
# TODO: create issue at RA to accept @arg file
912
function generate_cfgs() {
1013
echo '['
@@ -19,7 +22,7 @@ function generate_crate() {
1922
member=${3:-"true"}
2023
cfg=${4:-$(generate_cfgs)}
2124
deps=${5:-'[{"crate":0,"name":"core"},{"crate":2,"name":"alloc"},{"crate":3,"name":"kernel"}]'}
22-
extra=${6:-""}
25+
extra=${EXTRA:-""}
2326

2427
echo "{
2528
\"display_name\":\"$name\",
@@ -40,10 +43,8 @@ function generate_kernel() {
4043
generate_crate "alloc" "${lib_src}/alloc/src/lib.rs" "false" "[]" \
4144
'[{"crate":0,"name":"core"},{"crate":1,"name":"compiler_builtins"}]'
4245
echo ","
43-
generate_crate "kernel" "${srctree}/rust/kernel/lib.rs" "true" "$(generate_cfgs)" \
44-
'[{"crate":0,"name":"core"},{"crate":2,"name":"alloc"}]' \
45-
',"proc_macro_dylib_path":"./rust/libmodule.so","env":{"RUST_BINDINGS_FILE":"'$bindgen_file'"},
46-
"source": { "include_dirs": ["'${objtree}'/rust/"], "exclude_dirs": []}'
46+
EXTRA=$dylib_and_extra generate_crate "kernel" "${srctree}/rust/kernel/lib.rs" "true" "$(generate_cfgs)" \
47+
'[{"crate":0,"name":"core"},{"crate":2,"name":"alloc"}]'
4748
echo ","
4849
echo '{
4950
"display_name":"module",
@@ -66,7 +67,7 @@ function check_and_generate() {
6667
echo "checking $filepath" >&2
6768
if grep -q $objname $makefile; then
6869
echo "building crate $name" >&2
69-
echo $(generate_crate "$name" "$filepath")
70+
echo $(EXTRA=$dylib_and_extra generate_crate "$name" "$filepath")
7071
echo ","
7172
fi
7273
}

0 commit comments

Comments
 (0)