Commit Graph

556 Commits

Author SHA1 Message Date
782cd05ade Implement raw sock options 2024-01-11 22:10:29 +08:00
f099409b22 Implement sock options 2024-01-11 22:10:29 +08:00
2eaf2e1290 Add sockoption test 2024-01-11 22:10:29 +08:00
11ff35d34e Style improvements on the boot code 2024-01-02 07:21:36 +08:00
501894652f Refactor the crate linux-boot-params 2024-01-02 07:21:36 +08:00
327e991477 Rename boot-wrapper to bzimage-setup 2024-01-02 07:21:36 +08:00
1cc6116790 Remove a feature that goes stable 2024-01-02 07:21:36 +08:00
302b547a0d Bump version to 0.3.0 2024-01-02 07:21:36 +08:00
85d4cfdeb7 Do mapping in the wrapper 2024-01-02 07:21:36 +08:00
e922eaa428 Fix errors raised by the new clippy 2024-01-02 07:21:36 +08:00
94f8914a5e Update versions 2024-01-02 07:21:36 +08:00
6c50c10001 Remove unnecessary #[allow(unused)] 2024-01-02 07:21:36 +08:00
9d2be39b83 Add unit test for linux-boot-params 2024-01-02 07:21:36 +08:00
432f0c34b0 Bring both EFI and legacy to test 2024-01-02 07:21:36 +08:00
487e0cdd15 Recognize kernel memory regions in the Linux boot path 2024-01-02 07:21:36 +08:00
d4b6eea97d Make the linux boot protocol test boot test only 2024-01-02 07:21:36 +08:00
e71c2701d6 Rename trojan to wrapper and add docs 2024-01-02 07:21:36 +08:00
12d01ca1e4 Update image and Rust toolchain 2024-01-02 07:21:36 +08:00
97323f612b Fix boot phase mappings 2024-01-02 07:21:36 +08:00
ebbe451cc4 Apply relocations to enable vtable 2024-01-02 07:21:36 +08:00
32e62080ce Add EFI stub 2024-01-02 07:21:36 +08:00
acf4a057d9 Make trojan compile in 64-bit mode 2024-01-02 07:21:36 +08:00
953ff66fcc Introduce the boot trojan 2024-01-02 07:21:36 +08:00
ddca4fb2fc Enable some fs system call test cases 2023-12-28 04:54:48 +08:00
5bc1312a91 Add support for the sync and fsync syscall 2023-12-28 04:54:48 +08:00
9473889c6b Add Ext2 fs and basic bio layer 2023-12-28 04:54:48 +08:00
1616f2d32c Change block device trait 2023-12-28 04:54:48 +08:00
5b274d6cbe Add project logo to README 2023-12-28 04:42:50 +08:00
d044be4e49 Update the license to MPLv2 2023-12-26 17:43:45 +08:00
77e49d5cd5 Rename the banner 2023-12-26 11:49:24 +08:00
7b7e3c4b7a Rename the path of dependent crates 2023-12-26 11:49:24 +08:00
632b1937c5 Rename docker image as asterinas/asterinas 2023-12-26 11:49:24 +08:00
99f6765ced Rename jinux to asterinas in documentation and code 2023-12-26 11:49:24 +08:00
2b248dc326 Rename jinux-runner to aster-runner 2023-12-26 11:49:24 +08:00
f3dab1f798 Raname kernel as asterinas 2023-12-26 11:49:24 +08:00
93781df27b Rename crates from jinux-* to aster-* 2023-12-26 11:49:24 +08:00
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
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
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
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
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
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
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
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
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
14ee9c2dc7 Fix missing kernel/initramfs memory regions 2023-12-26 06:32:01 +08:00
7278589aa2 Prettify bootloader code 2023-12-26 06:32:01 +08:00
4e6f281956 CI should fail on triple faults 2023-12-26 06:32:01 +08:00
ff7e18b114 Clean up and enable more network tests 2023-12-25 11:39:57 +08:00
9a3f95eee2 Fix wrong regression test type 2023-12-24 07:05:24 +08:00