Merge branch 'named_network_adapters' into 'master'
Don't set the mac address network config from drivers See merge request redox-os/drivers!143
This commit is contained in:
+28
-13
@@ -30,7 +30,7 @@ pub trait NetworkAdapter {
|
||||
|
||||
pub struct NetworkScheme<T: NetworkAdapter> {
|
||||
adapter: T,
|
||||
_scheme_name: String,
|
||||
scheme_name: String,
|
||||
scheme: File,
|
||||
next_id: usize,
|
||||
handles: BTreeMap<usize, Handle>,
|
||||
@@ -44,9 +44,8 @@ enum Handle {
|
||||
}
|
||||
|
||||
impl<T: NetworkAdapter> NetworkScheme<T> {
|
||||
pub fn new(adapter: T, scheme_name: &str) -> Self {
|
||||
assert_eq!(scheme_name, "network"); // FIXME update fpath before removing this assertion
|
||||
|
||||
pub fn new(adapter: T, scheme_name: String) -> Self {
|
||||
assert!(scheme_name.starts_with("network"));
|
||||
let scheme_fd = syscall::open(
|
||||
format!(":{scheme_name}"),
|
||||
syscall::O_RDWR | syscall::O_CREAT | syscall::O_NONBLOCK,
|
||||
@@ -56,7 +55,7 @@ impl<T: NetworkAdapter> NetworkScheme<T> {
|
||||
|
||||
NetworkScheme {
|
||||
adapter,
|
||||
_scheme_name: scheme_name.to_owned(),
|
||||
scheme_name,
|
||||
scheme,
|
||||
next_id: 0,
|
||||
handles: BTreeMap::new(),
|
||||
@@ -218,17 +217,33 @@ impl<T: NetworkAdapter> SchemeBlockMut for NetworkScheme<T> {
|
||||
fn fpath(&mut self, id: usize, buf: &mut [u8]) -> Result<Option<usize>> {
|
||||
let handle = self.handles.get(&id).ok_or(Error::new(EBADF))?;
|
||||
|
||||
let scheme_path = match handle {
|
||||
// FIXME use self.scheme_name instead of hardcoding "network"
|
||||
Handle::Data { .. } => &b"network:"[..],
|
||||
Handle::Mac { .. } => &b"network:mac"[..],
|
||||
};
|
||||
|
||||
let mut i = 0;
|
||||
while i < buf.len() && i < scheme_path.len() {
|
||||
buf[i] = scheme_path[i];
|
||||
|
||||
let scheme_name = self.scheme_name.as_bytes();
|
||||
let mut j = 0;
|
||||
while i < buf.len() && j < scheme_name.len() {
|
||||
buf[i] = scheme_name[j];
|
||||
i += 1;
|
||||
j += 1;
|
||||
}
|
||||
|
||||
if i < buf.len() {
|
||||
buf[i] = b':';
|
||||
i += 1;
|
||||
}
|
||||
|
||||
let path = match handle {
|
||||
Handle::Data { .. } => &b""[..],
|
||||
Handle::Mac { .. } => &b"mac"[..],
|
||||
};
|
||||
|
||||
j = 0;
|
||||
while i < buf.len() && j < path.len() {
|
||||
buf[i] = path[j];
|
||||
i += 1;
|
||||
j += 1;
|
||||
}
|
||||
|
||||
Ok(Some(i))
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@ fn main() {
|
||||
let device =
|
||||
unsafe { device::Intel8254x::new(address).expect("e1000d: failed to allocate device") };
|
||||
|
||||
let scheme = Rc::new(RefCell::new(NetworkScheme::new(device, "network")));
|
||||
let scheme = Rc::new(RefCell::new(NetworkScheme::new(device, format!("network.{name}"))));
|
||||
|
||||
let mut event_queue =
|
||||
EventQueue::<Infallible>::new().expect("e1000d: failed to create event queue");
|
||||
|
||||
+1
-1
@@ -50,7 +50,7 @@ fn main() {
|
||||
let device = device::Intel8259x::new(address, IXGBE_MMIO_SIZE)
|
||||
.expect("ixgbed: failed to allocate device");
|
||||
|
||||
let scheme = Rc::new(RefCell::new(NetworkScheme::new(device, "network")));
|
||||
let scheme = Rc::new(RefCell::new(NetworkScheme::new(device, format!("network.{name}"))));
|
||||
|
||||
let mut event_queue =
|
||||
EventQueue::<Infallible>::new().expect("ixgbed: failed to create event queue");
|
||||
|
||||
@@ -237,7 +237,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
let device =
|
||||
unsafe { device::Rtl8139::new(address).expect("rtl8139d: failed to allocate device") };
|
||||
|
||||
let scheme = Rc::new(RefCell::new(NetworkScheme::new(device, "network")));
|
||||
let scheme = Rc::new(RefCell::new(NetworkScheme::new(device, format!("network.{name}"))));
|
||||
|
||||
let mut event_queue =
|
||||
EventQueue::<Infallible>::new().expect("rtl8139d: failed to create event queue");
|
||||
|
||||
@@ -232,7 +232,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
let device =
|
||||
unsafe { device::Rtl8168::new(address).expect("rtl8168d: failed to allocate device") };
|
||||
|
||||
let scheme = Rc::new(RefCell::new(NetworkScheme::new(device, "network")));
|
||||
let scheme = Rc::new(RefCell::new(NetworkScheme::new(device, format!("network.{name}"))));
|
||||
|
||||
let mut event_queue =
|
||||
EventQueue::<Infallible>::new().expect("rtl8168d: failed to create event queue");
|
||||
|
||||
@@ -93,7 +93,7 @@ fn deamon(daemon: redox_daemon::Daemon) -> Result<(), Box<dyn std::error::Error>
|
||||
name.push_str("_virtio_net");
|
||||
|
||||
let device = VirtioNet::new(mac_address, rx_queue, tx_queue);
|
||||
let mut scheme = NetworkScheme::new(device, "network");
|
||||
let mut scheme = NetworkScheme::new(device, format!("network.{name}"));
|
||||
|
||||
let mut event_queue = File::open("event:")?;
|
||||
event_queue.write(&syscall::Event {
|
||||
|
||||
Reference in New Issue
Block a user