短い答えはこれです:あなたが尋ねなければならないなら、あなたはそれをしてはいけません。
ここでは長いバージョンです:
TCP/IPプログラミングは、APIがそれを使用してユーザ空間向けですこれらの分野の一つです。その結果、カーネルからTCP/IP(UDPを含む)ソケットを簡単に作成する方法はありません。
あなたがそれを管理しても、あなたが持っているAPIが適切でないことがわかります。コードは、使用時にユーザー空間のメモリ、ユーザー空間の通知などを操作しようとします。
十分な経験を積んだカーネル開発者が、おそらくそれを取り除くことができます。しかし、スタックオーバーフローを開始しなければならない人は、おそらく十分な経験はありません。
これは元の質問に戻ります。どうしてこのようなコードをカーネルに書きたいのですか? Voice over IPは複雑なプロトコルです。カーネル内のコードをデバッグすることは、ユーザーのスペースコードをデバッグすることよりもかなり難しくなります。
パフォーマンスと待ち時間が絶対に必要なコードを作成している場合は、ソリューションを純粋なユーザー空間(つまり、カーネルなし)に基づいて見てみることをお勧めします。
このような解決策は、DPDKです。これにより、ネットワークパケットをユーザー空間バッファーに直接受け取ることができます。残念ながら、これは初心者のためのソリューションではありません。関与するカーネルがないため、DPDK専用にインターフェイスを使用する必要があります。これはまた、独自のUDPスタックを作成してサポートする必要があることを意味します。
DPDKは単純なツールではありませんが、絶対最小の待ち時間で絶対最大帯域幅が必要な場合は、最適な解決策です。カーネルにVoIPスタック全体を書くよりはるかに良いでしょう。それがあなたが必要としているものではない場合は、通常のソケットプログラミングツールを使用してください。
私は尋ねる必要があります - なぜあなたはカーネルでこれをやっていますか? –
@ ShacharShemesh:もしあなたが尋ねなかったなら、私は持っていたでしょう。私にXYの問題のように見えます。 – Olaf
特定の問題について特定の質問をする必要があります。スタックオーバーフローはあなたからの閉鎖理由を隠すので:*「適切な答えを特定するのに十分な詳細で特定の問題に制限するために質問を編集してください。質問。 "* – jww