2009年01月20日(火) [長年日記]
■ [unix][net][howto] ipコマンドでの経路の設定方法
CentOSにおける静的ルーティングの設定方法を以前にメモしたが、ファイルに書くのではなく直接ipコマンドを使って一時的に経路を設定する方法をメモ。ipコマンド難しー。
# /sbin/ip route add 172.32.0.0/12 via 192.168.254.10 dev eth0
を実行すると
$ netstat -nr Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 172.32.0.0 192.168.254.10 255.240.0.0 UG 0 0 0 eth0 0.0.0.0 192.168.254.2 0.0.0.0 UG 0 0 0 eth0
てな感じで経路が追加された。
ipコマンドのマニュアルは見難いと思っていたら、コマンドラインのヘルプでも詳しい情報が表示されることを知った。
$ /sbin/ip help
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
ip [ -force ] [-batch filename
where OBJECT := { link | addr | route | rule | neigh | ntable | tunnel |
maddr | mroute | monitor | xfrm }
OPTIONS := { -V[ersion] | -s[tatistics] | -r[esolve] |
-f[amily] { inet | inet6 | ipx | dnet | link } |
-o[neline] | -t[imestamp] }
$ /sbin/ip route help
Usage: ip route { list | flush } SELECTOR
ip route get ADDRESS [ from ADDRESS iif STRING ]
[ oif STRING ] [ tos TOS ]
ip route { add | del | change | append | replace | monitor } ROUTE
SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
[ table TABLE_ID ] [ proto RTPROTO ]
[ type TYPE ] [ scope SCOPE ]
ROUTE := NODE_SPEC [ INFO_SPEC ]
NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]
[ table TABLE_ID ] [ proto RTPROTO ]
[ scope SCOPE ] [ metric METRIC ]
[ mpath MP_ALGO ]
INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...
NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS
OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ]
[ rtt NUMBER ] [ rttvar NUMBER ]
[ window NUMBER] [ cwnd NUMBER ] [ initcwnd NUMBER ]
[ ssthresh NUMBER ] [ realms REALM ]
TYPE := [ unicast | local | broadcast | multicast | throw |
unreachable | prohibit | blackhole | nat ]
TABLE_ID := [ local | main | default | all | NUMBER ]
SCOPE := [ host | link | global | NUMBER ]
FLAGS := [ equalize ]
MP_ALGO := { rr | drr | random | wrandom }
NHFLAGS := [ onlink | pervasive ]
RTPROTO := [ kernel | boot | static | NUMBER ]
見難いのは変わりないか。
■ [dev][howto] autotoolsでprefixの値をプログラムに静的に組み込む
先週メモした、config.hにインストール先ディレクトリパスを埋め込む方法には問題があることが分かった。configure実行時に--prefixオプションを指定すれば動くが、指定しないと定数の値が "NONE" に設定されてしまう。
configureスクリプトを読むと、#defineの行を出力した後で変数prefixにデフォルト値(/usr/local)を代入しており、このアプローチではうまくいきそうにない。どうすればいいのか。
というFAQが書かれていた。読んでもよく分からなかったのだけれど、単純にAC_DEFINE_UNQUOTEDを使うのではダメだということが書かれているのだと思う。
なので、次のようにした。
- 前に書いたAC_DEFINE_UNQUOTEDの指定は削除。
- Makefile.am 内に AM_CPPFLAGS という行があったので、ここに「-DPREFIX_DIR='"@prefix@"'」というような記述を追加。
これでautomake, autoconfをやり直すと、configure実行時に--prefixを指定してもしなくても、PREFIX_DIRにprefixの値が設定されるようになった。
小さなことですが 172.32.0.0/12 は private net ではありません。
そのようですね。ご指摘ありがとうございます。<br><br>当時なぜこのネットワークアドレスを採用したのか思い出せませんが、次から気をつけたいと思います。