twizzler_net/
lib.rs

1use secgate::TwzError;
2pub use twizzler_io::packet;
3
4mod client;
5pub mod drivers;
6mod endpoint;
7mod server;
8
9pub use client::{
10    NetClient, NetClientConfig, NetClientOpenInfo, NetClientRxToken, NetClientTxToken,
11    net_alloc_port, net_release_port,
12};
13pub use server::{NetServer, NetServerRxToken, NetServerTxToken};
14
15pub type PacketNum = u32;
16
17pub const MAX_PACKETS_SET: usize = 8;
18pub const INVALID_PACKET: PacketNum = !0;
19
20#[derive(Clone, Copy, Debug)]
21#[repr(C)]
22pub struct PacketSet([u32; MAX_PACKETS_SET]);
23
24impl PacketSet {
25    pub fn new() -> Self {
26        Self([INVALID_PACKET; _])
27    }
28
29    pub fn from_slice(slice: &[u32]) -> (Self, usize) {
30        let mut arr = [INVALID_PACKET; _];
31        let len = MAX_PACKETS_SET.min(slice.len());
32        arr[0..len].copy_from_slice(&slice[0..len]);
33        (Self(arr), len)
34    }
35
36    pub fn push(&mut self, num: PacketNum) -> Option<()> {
37        let inv = self.0.iter().position(|p| *p == INVALID_PACKET)?;
38        self.0[inv] = num;
39        Some(())
40    }
41}
42
43pub struct PacketSetIter<'a> {
44    set: &'a PacketSet,
45    index: usize,
46}
47
48impl<'a> Iterator for PacketSetIter<'a> {
49    type Item = PacketNum;
50
51    fn next(&mut self) -> Option<Self::Item> {
52        let mut num = INVALID_PACKET;
53        while num == INVALID_PACKET && self.index < MAX_PACKETS_SET {
54            num = self.set.0[self.index];
55            self.index += 1;
56        }
57        if num == INVALID_PACKET {
58            None
59        } else {
60            Some(num)
61        }
62    }
63}
64
65impl<'a> IntoIterator for &'a PacketSet {
66    type Item = PacketNum;
67    type IntoIter = PacketSetIter<'a>;
68
69    fn into_iter(self) -> Self::IntoIter {
70        PacketSetIter {
71            set: self,
72            index: 0,
73        }
74    }
75}
76
77#[derive(Clone, Copy, Debug)]
78#[repr(C)]
79pub struct ServerMsg {
80    kind: ServerMsgKind,
81}
82
83#[derive(Clone, Copy, Debug)]
84#[repr(C)]
85pub enum ClientMsgKind {
86    Tx(PacketSet),
87}
88
89#[derive(Clone, Copy, Debug)]
90#[repr(C)]
91pub enum ServerMsgKind {
92    Tx(PacketSet),
93}
94
95#[derive(Clone, Copy, Debug)]
96#[repr(C)]
97pub struct ClientMsg {
98    kind: ClientMsgKind,
99}
100
101#[derive(Clone, Copy, Debug)]
102#[repr(C)]
103pub struct ClientRet {}
104
105#[derive(Clone, Copy, Debug)]
106#[repr(C)]
107pub struct ServerRet {}
108
109#[secgate::gatecall]
110pub fn start_network() -> Result<(), TwzError> {}
111
112#[secgate::gatecall]
113fn twz_net_drop_client(handle: secgate::util::Descriptor) -> Result<(), TwzError> {}
114
115#[secgate::gatecall]
116fn twz_net_open_client(config: NetClientConfig) -> Result<NetClientOpenInfo, TwzError> {}
117
118#[secgate::gatecall]
119fn twz_net_alloc_port(
120    handle: secgate::util::Descriptor,
121    port: Option<u16>,
122) -> Result<u16, TwzError> {
123}
124
125#[secgate::gatecall]
126fn twz_net_release_port(handle: secgate::util::Descriptor, port: u16) -> Result<(), TwzError> {}