Commit Graph

163 Commits

Author SHA1 Message Date
Jianfeng Jiang 77e49d5cd5 Rename the banner 2023-12-26 11:49:24 +08:00
Jianfeng Jiang 7b7e3c4b7a Rename the path of dependent crates 2023-12-26 11:49:24 +08:00
Jianfeng Jiang 99f6765ced Rename jinux to asterinas in documentation and code 2023-12-26 11:49:24 +08:00
Jianfeng Jiang 93781df27b Rename crates from jinux-* to aster-* 2023-12-26 11:49:24 +08:00
Ruihan Li 6dbf5d560d Improve code readability in `BoundSocket`
The previous iface observer refactoring exposes some existing code
readability issues (as pointed out by @tatetian). Ideally, it is a bit
better to fix readability issues before doing new code refactoring, but
to avoid complex rebase conflicts, this commit fixes these issues only
after the code refactoring has landed.
2023-12-26 06:51:25 +08:00
Ruihan Li 9f28aae78d Split UDP logic into multiple files
The TCP logic consists of multiple files, each file representing a TCP
state. Since the UPP logic also consists of two states, `BoundDatagram`
and `UnboundDatagram`, this commit puts them into separate files, just
like TCP does.
2023-12-26 06:51:25 +08:00
Ruihan Li bc771de494 Remove the redundant `bound_socket()` from `ListenStream`
There is no need to get the bound socket by cloning the first element
from `self.backlog_sockets`. If we want a bound socket, we can always
use `self.bound_socket` directly.
2023-12-26 06:51:25 +08:00
Ruihan Li 0cc9c5fb3a Implement iface event observers and move `Pollee` to them
Finally, this commit implements an iface event observer trait for the
`ConnectingStream`, `ListenStream`, and `ConnectedStream` states in
`StreamSocket`, as well as the `BoundDatagram` state in
`DatagramSocket`. It also moves the `Pollee` from `AnyBoundSocket` to
these observer implementors.

What I have tried to do is minimize the semantic changes. Ideally, this
commit should be a pure refactor commit, meaning that even if the
sematics of the previous code is wrong, the sematics after this commit
should be wrong in the same way. Fixing the wrong sematics should be
done in a separate commit afterwards.

However, keeping exactly the same sematics for `ListenStream` is hard.
We used to maintain a `Pollee` for each `BacklogSocket`, but now we can
just maintain one `Pollee` for the whole `ListenStream`. However,
implementing the correct semantics looks much easier, so we just do it.

For `ConnectingStream`, it used to share the same `Pollee` logic with
`ConnectedStream` (because the `Pollee` was maintained by
`AnyBoundSocket`, which is used by both). Now we write the `Pollee`
logic separately for `ConnectingStream`, so we can just write a correct
one or try to reuse the logic in `ConnectingStream`. This commit does
the former.

There should be no semantic changes for `ConnectedStream` in
`StreamSocket` and `BoundDatagram` in `DatagramSocket`.
2023-12-26 06:51:25 +08:00
Ruihan Li 6b903d0c10 Seperate `ConnectingStream` from `InitStream`
For TCP streams we used to have three states, e.g. `InitStream`,
`ListenStream`, `ConnectedStream`. If the socket is not bound, it is in
the `InitStream` state. If the socket is bound, it is still in that
state. Most seriously, if the socket is connecting to the remote peer,
but the connection has not been established, it is also in the
`InitStream` state.

While the socket is trying to connect to its peer, it needs to handle
iface events to update its internal state. So it is expected to
implement the trait that observes such events for this later. However,
the reality that sockets connecting to their peers are mixed in with
other unbound and bound sockets in the `InitStream` will complicate
things.

In fact, the connecting socket should belong to an independent state. It
does not share too much logic with unbound and bound sockets in the
`InitStream`. So in this commit we will decouple that and create a new
`ConnectingStream` state.
2023-12-26 06:51:25 +08:00
Ruihan Li 58948d498c Remove incorrect logic about TCP's HUP/RDHUP events
Changes in this commit were suggested by @StevenJiang1110. HUP/RDHUP
events are not correctly updated for TCP sockets (#529), so we are
removing this to avoid further confusion.
2023-12-26 06:51:25 +08:00
Ruihan Li 9dc5a4d28f Box the large structure `AnyUnboundSocket`
So far it is quite common to put the `AnyUnboundSocket` in an enum
variant, e.g. the following code snippet.
```rust
enum Inner {
    Unbound(AlwaysSome<Box<AnyUnboundSocket>>),
    Bound(AlwaysSome<Arc<AnyBoundSocket>>),
    // ...
}
```

However, this pattern is very memory inefficient because the size
difference between two enum variants is significant. The size of
`AnyUnboundSocket` is much larger than the size of
`Arc<AnyBoundSocket>`, where the latter is simply a pointer and a
reference counter.

In fact, we're about to trigger Clippy's large_enum_variant warning.
We're just below its threshold, so the warning doesn't appear.

The solution is simple: If we put `AnyBoundSocket` in `Arc`, we should
also put `AnyUnboundSocket` in `Box`. This way the sizes of different
enum variants will be similar.
2023-12-26 06:51:25 +08:00
Ruihan Li 02e10705af Use `Arc` to pack bound datagram structure
For TCP streams we have packed their different states with `Arc`, e.g.
`InitStream`, `ConnectedStream`, and `ListenStream`. Later we will
implement an trait that observes iface events for some of these states.

For UDP datagrams, they can be in the unbound state and the bound state.
If we want to implement the observer trait for the bound state, we need
to wrap it with `Arc` so that it can be registered with
`AnyBoundSocket`.

Alternatively, we can implement the observer trait directly on the UDP
datagram structure (i.e. `DatagramSocket`). However, there are literally
no events to handle if the socket is not bound at all (i.e. it is in the
unbound state). So a more efficient way is to implement the observer
trait only for the bound state, which motivates changes in this commit.
2023-12-26 06:51:25 +08:00
Ruihan Li 246d8521f2 Rename the `nonblocking` method to `is_nonblocking`
We used to use `is_nonblocking()` in TCP streams, but use
`nonblocking()` in UDP datagrams.

Since `is_nonblocking()` is generally preferred, this commit renames
`nonblocking()` to `is_nonblocking()` in UDP datagrams.
2023-12-26 06:51:25 +08:00
Chen Chengjun 47d2a895af Fix a bug and support more clockids in vdso. 2023-12-20 16:20:07 +08:00
Chen Chengjun 2ad9735eab Support VDSO in Jinux 2023-12-06 19:31:19 +08:00
Chen Chengjun 715072b9f3 Implement a high precision gettime based on tsc 2023-12-06 19:31:19 +08:00
Hsy-Intel 65ef055f4e impl From<TdCallError> for Error 2023-12-06 18:50:53 +08:00
Hsy-Intel 2d0f5253e9 Add error handling 2023-12-06 18:50:53 +08:00
Hsy-Intel 55ea3dc86f Add tdx-guest device 2023-12-06 18:50:53 +08:00
Jianfeng Jiang a91a35ebce Support alternate signal stack 2023-12-06 12:54:03 +08:00
Jianfeng Jiang 3734306398 Refactor signal code 2023-12-06 11:01:54 +08:00
Jianfeng Jiang 90be8038e0 Add credential-related syscalls 2023-12-06 11:01:54 +08:00
Jianfeng Jiang c99e6b4ced Implememt static cap credentials 2023-12-06 11:01:54 +08:00
Chuandong Li 5aa3124e66 Make the upgrade method of read-write locks atomic 2023-12-06 10:40:11 +08:00
Jianfeng Jiang ce5730287e Refactor session & tty code 2023-11-28 12:11:54 +08:00
Jianfeng Jiang 3bde0f6bb7 Add unit test for session and group 2023-11-28 12:11:54 +08:00
Jianfeng Jiang 9d8a2b420d Refactor tty&pty code 2023-11-28 12:11:54 +08:00
Jianfeng Jiang 001326110e Add trait FileIo and refactor current devices 2023-11-28 12:11:54 +08:00
Jianfeng Jiang 43fd1a52fa Add syscall getsid, setsid and refactor other syscalls 2023-11-28 12:11:54 +08:00
Jianfeng Jiang 9040fb54ea Add basic structures for session, terminal and job control 2023-11-28 12:11:54 +08:00
LI Qing 2edbe1f725 Add as_device method for file handle 2023-11-28 12:11:54 +08:00
Yuke Peng 232888982c Rename TrapInformation 2023-11-23 09:15:37 +08:00
Yuke Peng edd808bd3d Refactor drivers 2023-11-23 09:15:37 +08:00
Yuke Peng 34e66a51d9 Reimplement print in std 2023-11-23 09:15:37 +08:00
Yuke Peng 01e485b96e Support virtio console device 2023-11-23 09:15:37 +08:00
Zhang Junyang 45a6b2f46c Implement should_panic for ktest and clear the codebase 2023-11-09 13:22:34 +08:00
Zhang Junyang bb0560530f Enable usermode unit test for specific crates 2023-11-09 13:22:34 +08:00
Zhang Junyang b8818bb740 Add ktest framework 2023-11-09 13:22:34 +08:00
LI Qing d7cc52c615 Update the version of pod 2023-11-09 03:38:37 +08:00
LI Qing 4c72f5b7fa Add VmSegment and rewrite the vm allocation code with VmAllocOptions 2023-11-08 06:31:21 +08:00
Ruihan Li 040f5a53ae Fix panic when listen backlog is one 2023-11-03 08:52:39 +08:00
Ruihan Li f6c230f756 Fix endless loops when send buffer is full 2023-11-03 08:51:37 +08:00
Yuke Peng f789aa357f Fix SafePtr 2023-10-30 09:39:23 +08:00
Yuke Peng eeac55e2e5 Refactor console 2023-10-30 09:39:23 +08:00
LI Qing 9c52f7aee7 Fix the incorrect nlinks decrease in ramfs 2023-10-23 07:48:26 +08:00
LI Qing 97c2f5065e Fix the memory ordering in subject 2023-10-17 00:23:37 -05:00
LI Qing 98bf3d4845 Remove Vnode to let the fs use PageCache for itself 2023-10-16 18:12:48 -05:00
Zhang Junyang cdc2b960dc Switch to EFI boot and use official release for QEMU and GDB 2023-10-12 14:38:36 -05:00
Zhang Junyang d0c84e0b6f Add protected mode sub-crate for Linux boot setup 2023-10-12 14:38:36 -05:00
Jianfeng Jiang 6ff4601482 Fix: raw mode tty can echo and send signal 2023-10-12 14:35:39 -05:00