pingのコードを読みたい。

ネットワークの勉強がてらpingソースコードをみたくなってしらべてみた。 環境はWSL2のUbuntuとする。

まずはpingのパッケージを調べる。

$ which ping
/bin/ping
$ dpkg --search /bin/ping
iputils-ping: /bin/ping

iputils-pingだとわかった。 次にaptでiputils-pingソースコードを取得してみる。

$ apt-get source iputils-ping ./
Reading package lists... Done
E: You must put some 'deb-src' URIs in your sources.list

dev-srcの設定が必要とのこと。/etc/apt/sources.listで設定変更する。

具体的にはコメントになっているdev-srcをコメントアウトしておく。どれかわからないのでとりあえず全部の定義をコメントアウトした。

deb http://archive.ubuntu.com/ubuntu/ focal multiverse
# deb-src http://archive.ubuntu.com/ubuntu/ focal multiverse

aptをアップデートしておく。

$ sudo apt update

ソースコードを取得しようとする。

sudo apt-get source iputils-ping ./
Reading package lists... Done
Picking 'iputils' as source package instead of 'iputils-ping'
NOTICE: 'iputils' packaging is maintained in the 'Git' version control system at:
https://salsa.debian.org/debian/iputils.git
Please use:
git clone https://salsa.debian.org/debian/iputils.git
to retrieve the latest (possibly unreleased) updates to the package.
E: Unable to find a source package for .

結局gitからとってこいとのこと。

git clone https://salsa.debian.org/debian/iputils.git

できた。

コードの規模はそんなに大きくなさそうかな。

$ wc -l iputils/ping/*
    28 iputils/ping/meson.build
   446 iputils/ping/node_info.c
  1705 iputils/ping/ping.c
   430 iputils/ping/ping.h
   925 iputils/ping/ping6_common.c
   963 iputils/ping/ping_common.c
  4497 total