Skip to main content

Module net

Module net 

Source
Expand description

TCP/IPネットワークスタック。

Link 層(イーサネット)から Application 層(DNS/HTTP)までを自前実装する。 各層の設計方針・API境界の事前条件検証は spec/DESIGN.md §2「ネットワークスタック アーキテクチャ」を参照。カーネル外部(アプリ)との境界は crate::kernel::net_stackTcpIpStack::web_get/web_post/web_get_binary に一本化されている。

  • arp/arp_cache: IP→MAC 解決
  • dhcp: DHCP クライアント
  • dns: UDP 経由の名前解決(ホスト名自動解決フォールバック)
  • icmp: Ping 等の診断
  • tcp/tcp_state: コネクション指向・スライディングウィンドウ
  • udp/udp_queue: コネクションレス転送
  • http: HTTP クライアント(チャンク転送対応)
  • eth_frame/tx_queue/reassembly: フレーム送受信・再構成

Modules§

addr_util 🔒
arp 🔒
arp_cache 🔒
dhcp 🔒
dns 🔒
eth_frame 🔒
L2: Ethernet フレームの解析と振り分け(純粋ロジック)。
http 🔒
icmp 🔒
reassembly 🔒
TCP 受信側の順序外セグメント再構成バッファ。
tcp 🔒
tcp_state 🔒
tx_queue 🔒
L2: NIC 送信キューの容量判定(純粋ロジック)。
udp 🔒
udp_queue 🔒

Structs§

ArpEntry
DhcpAckInfo 🔒
DhcpLease
DnsCacheEntry 🔒
HttpGetResult
HttpsGetResult
NetworkState
NicTxEntry 🔒
PingReply
TcpSocket 🔒
UdpDatagram

Enums§

NicBackend

Constants§

ARP_CACHE_SIZE 🔒
DNS_CACHE_NAME_MAX 🔒
DNS_CACHE_SIZE 🔒
DNS 解決結果キャッシュ(host→IP, TTL付き)。画像が多いページで同一ホストを 何度も引く無駄をなくし、UDP RX キューの競合を激減させる。
DNS_CACHE_TTL_MS 🔒
DNS_SRC_PORT_BASE 🔒
DNS_SRC_PORT_RANGE 🔒
NIC_TX_MAX_PAYLOAD 🔒
NIC_TX_QUEUE_SIZE 🔒
【2026-07-30】NIC 送信キューの長さ。
TCP_SOCKET_TABLE_SIZE 🔒
UDP_RX_QUEUE_SIZE 🔒

Statics§

ARP_CACHE 🔒
ARP_NEG_IP 🔒
ARP 解決の否定キャッシュ(直近に解決失敗した宛先1件のみ)。DNS の複数回リトライ (3回 × 複数サーバ) が同じ到達不能な next-hop に対して毎回 2秒のブロッキング ARP 再試行を払うのを防ぐ。ゲートウェイ/DNSサーバが応答しない環境では、これが 無いと「DNSがタイムアウトするまでに十数秒かかる」原因になる。
ARP_NEG_UNTIL_MS 🔒
ARP_TICK 🔒
DHCP_ASYNC_ATTEMPT 🔒
DHCP_ASYNC_DEADLINE_TICK 🔒
DHCP_ASYNC_REBINDING 🔒
DHCP_ASYNC_RENEWING 🔒
DHCP_ASYNC_STATE 🔒
DHCP_ASYNC_XID 🔒
DHCP_AUTO_PENDING 🔒
DHCP_LAST_AUTO_ATTEMPT_TICK 🔒
DHCP_LEASE_START_TICK 🔒
DHCP_NEXT_RENEW_TICK 🔒
DHCP_RENEW_STAGE 🔒
DHCP_SERVICE_TICK 🔒
DHCP_XID 🔒
DNS_CACHE 🔒
DNS_SRC_PORT 🔒
DNS クエリの送信元ポート。クエリ毎にローテーションして並行クエリ間の 応答取り違えを防ぐ(固定ポートだと複数スレッドの DNS が同一ポートを共有し、 txid 不一致で応答を読み捨ててタイムアウトしていた)。アトミック化でレース解消。
DNS_TXID 🔒
DNS トランザクション ID。複数スレッド(browser_loader / img_load)が同時に DNS を引くため、非アトミックだと採番が衝突して応答照合を誤る。アトミック化。
HTTPS_ATTEMPT_ORDINAL 🔒
【2026-07-25診断用】同一ブート内でのHTTPS接続の通し番号。「ブート後 最初の接続(メインHTML取得)は成功しやすいが、直後に連続する2件目 以降(CSS/フォント取得)は失敗しやすい」という今回のセッションで 繰り返し観測された現象が、接続の「順序」自体に起因するのか、単なる ホスト依存かを定量的に切り分けるための通し番号カウンタ。
LAST_PING_REPLY 🔒
NET_LOCK 🔒
NET_STATE 🔒
NIC_TX_DROPS 🔒
【2026-07-26診断】送信キュー枯渇で捨てたパケットの累計。 送信失敗は呼び出し側の大半が let _ = で戻り値を捨てるため不可視だった。
NIC_TX_QUEUE 🔒
NIC_TX_TICK 🔒
PING_SEQ 🔒
TCP_EPHEMERAL_PORT 🔒
TCP_SOCKETS 🔒
UDP_RX_QUEUE 🔒
UDP_RX_TICK 🔒

Functions§

arp_cache_lines
build_arp_request
build_dns_query
build_icmp_echo_request
dhcp_acquire
dhcp_release
dhcp_start_async
dhcp_status_line
dhcp_tick
dns_cache_insert 🔒
DNS キャッシュへ登録(既存の同名/期限切れ/最古エントリを上書き)。
dns_cache_lookup 🔒
DNS キャッシュを検索。期限内の有効エントリがあれば IP を返す。
dns_query_a_via_udp
extract_http_body_binary
force_release_locks
format_ipv4
format_mac
get_next_hop_ip
http_get_binary
http_get_real
http_post_real
http_request_real
任意メソッド(GET/POST/PUT/DELETE/PATCH 等)の平文 HTTP リクエスト。 body が空かつ GET/HEAD/DELETE 等の場合は Content-Type / Content-Length を付けない。 メソッドは呼び出し側で検証済み(英大文字トークン)である前提。 CRLF はエスケープ事故を避けるためバイト値で組み立てる。
https_get_real
ingest_ethernet_frame
ingest_nic_ethernet_frame
ingest_nic_ipv4_packet
init
next_dns_src_port 🔒
クエリ毎に DNS 送信元ポートを 1 つ進めて返す(53000..=53511 を循環)。アトミック。
next_dns_txid 🔒
クエリ毎に DNS トランザクション ID を 1 つ進めて返す。アトミック。
next_https_attempt_ordinal
nic_backend_name
nic_debug_info
nic_pop_tx_ipv4_packet
nic_take_tx_ipv4_chunk
ntp_query
ntp_sync
parse_dns_a_response
parse_http_response
parse_http_response_bytes
parse_http_response のバイト保存版。ヘッダ部分は ASCII 前提で文字列化するが、 ボディは extract_http_body_binary の chunked 復号をそのまま使い、ロスの無い 生バイト列で返す(画像/zip 等のバイナリダウンロード向け)。 戻り値: (status_code, reason, headers, body_bytes)
parse_icmp_echo_reply_ipv4
parse_ipv4
parse_mac
ping_once_real
register_usb_ethernet
self_test 🔒
send_udp_ipv4
set_dhcp_auto_pending
status
status_line
tcp_close_real
【2026-08-05 検証済み・入れていない】ロック無しの「読むべきものがある」印。
tcp_connect_real
tcp_current_snd_seq
現在のsnd_nxt(次に使われる送信シーケンス番号)を取得する。再送時に 「このデータを送った時点でのシーケンス番号」を正しく再利用するため、 呼び出し側がtcp_send_realの直前に取得しておく用途。
tcp_is_socket_closed
tcp_recv_peek_nonempty
tcp_recv_real
tcp_retransmit_real
【2026-07-24追加】tcp_send_realが呼ばれる度に無条件でsnd_nxtを進めて しまうため、同一データを“再送“する目的でtcp_send_realを再度呼ぶと、 実際には既に進んだ(誤った)シーケンス番号で送信してしまい、相手側の TCP/TLSストリームを破壊するバグを発見した(kernel/tls.rsTcpIoWrapper書き込み再送機構で使用)。この関数はsnd_nxtを一切 変更せず、呼び出し元が明示的に指定したseqのみで再送パケットを 組み立てて送出する(正しいTCP再送のセマンティクス)。
tcp_send_real
tcp_socket_lines
transmit_nic_ethernet_frame
transmit_nic_ipv4_packet
udp_queue_lines
udp_recv_next_datagram
udp_recv_next_line