2007年05月30日

quaggaのソースコードを開いてみよう3

quaggaのソースをオープンする。

各ソースファイルやヘッダーファイルを
開くだけで、色々な値や
キーワードを目にすることになります。


参考書籍を買った人は、
先に調べておくと学習がはかどりますよ、きっと。

=================================================

荒:じゃや、休憩ばかりしてても、
  進まないので、最後にどれか開いて
  いったん、終了としましょうか。

奥:はい。

  今日は、コレ!


[root@bind1 ospfd]# less ospf_lsa.c
(途中省略)

/* OSPF LSA Type definition. */
#define OSPF_UNKNOWN_LSA 0
#define OSPF_ROUTER_LSA 1
#define OSPF_NETWORK_LSA 2
#define OSPF_SUMMARY_LSA 3
#define OSPF_ASBR_SUMMARY_LSA 4
#define OSPF_AS_EXTERNAL_LSA 5
#define OSPF_GROUP_MEMBER_LSA 6 /* Not supported. */
#define OSPF_AS_NSSA_LSA 7
#define OSPF_EXTERNAL_ATTRIBUTES_LSA 8 /* Not supported. */
#define OSPF_OPAQUE_LINK_LSA 9
#define OSPF_OPAQUE_AREA_LSA 10
#define OSPF_OPAQUE_AS_LSA 11



奥:本以上に、たくさんありますよ。

荒:ホンマ。

  へぇーっ、LSAって6とか8以上あるのかぁー。

奥:

「要点解説 IPルーティング入門」P277〜
「とこトンやさしいIPルーティング」P248〜

 http://homepage3.nifty.com/sysaho/ccnp.html


  P277から読んでるんですけど、
  どこにも出てないLSAですね。

  RFCには、あるのかなぁー。

  CCNAとCCNPには、出題されないですね、きっと。

荒:うん。

  まあ、時間があったら、
  RFCとかquaggaのヘルプを
  読みましょう。

  
  これなんかも、すごいね。

  ルーターLSAの構造が、
  書かれてるよ。

  P277〜と見比べると、よくわかるよ。


/* OSPF Router-LSAs structure. */
struct router_lsa
{
struct lsa_header header;
u_char flags;
u_char zero;
u_int16_t links;
struct
{
struct in_addr link_id;
struct in_addr link_data;
u_char type;
u_char tos;
u_int16_t metric;
} link[1];
};



奥:うーん。

  C言語がわかると、
  更にわかるんでしょうねぇー。

  いっぱい、学習しなきゃ。


荒:じゃあ、明日から、また
  ルーティングに戻りますか。

  BGPかOSPFの再配送をやろうかな。

奥:はい。

  おつかれさまでした。手(パー)

荒:おつかれさまー。手(パー)


posted by アンドレアス at 20:05| Comment(0) | quaggaのソースをオープン | このブログの読者になる | 更新情報をチェックする

2007年05月29日

quaggaのソースコードを開いてみよう2

休憩がてらに、ソースをオープン。

ルーティングのプログラムのソースを
見る機会って少ないと思います。

色々なファイルを開くと
動作を理解するヒントになって面白いですよ。

==========================================

荒:どうも、このカテゴリ
  評判いいみたいだね。

奥:ホントですね。

荒:まあ、不定期にオープンソースしましょうか?

  僕らもC言語の学習になるし。

奥:はい。

  じゃあ、今日は、これを覗いてみますね。



[root@bind1 ospfd]# pwd
/usr/local/src/quagga-0.99.7/ospfd

[root@bind1 ospfd]# less ospfd.h


荒:このヘッダファイルは、
  かなり学習効果があると思います。

  結構、OSPFの動作上、重要な値が
  てんこ盛りですよね。

奥:これ、2604番ポートの接続ですよね。

/* VTY port number. */
#define OSPF_VTY_PORT 2604


奥:ここら辺は、もっとすごいですよね。

荒:マルチキャストのアドレスが定義されてますね。

  これいじると、吐き出すパケットの
  あて先の値が変わるんだろうね。

  暇な時に、1回いじってみましょう。


#define OSPF_ALLSPFROUTERS 0xe0000005 /* 224.0.0.5 */
#define OSPF_ALLDROUTERS 0xe0000006 /* 224.0.0.6 */

/* XXX Where is this used? And why it was used only if compiled with
* NSSA support. */
#define OSPF_LOOPer 0x7f000000 /* 127.0.0.0 */

#define OSPF_AREA_BACKBONE 0x00000000 /* 0.0.0.0 */


奥:これは、バックボーンエリアの定義ですね。



荒:上で定義された

  OSPF_ALLSPFROUTERS でgrepすると、
  どのソースが、この値を使っているか
  すぐわかるね。


奥:grepしてみると・・・・・。

  あっ、こんなにたくさんありますよ。


[root@bind1 ospfd]# grep OSPF_ALLSPFROUTERS *
ospf_network.c: p->u.prefix4, htonl (OSPF_ALLSPFROUTERS),
ospf_network.c: p->u.prefix4, htonl (OSPF_ALLSPFROUTERS),
ospf_packet.c: if (op->dst.s_addr == htonl (OSPF_ALLSPFROUTERS)
ospf_packet.c: if (iph->ip_dst.s_addr == htonl(OSPF_ALLSPFROUTERS))
ospf_packet.c: if (iph->ip_dst.s_addr == htonl(OSPF_ALLSPFROUTERS))
ospf_packet.c: op->dst.s_addr = htonl (OSPF_ALLSPFROUTERS);
ospf_packet.c: p.prefix.s_addr = htonl (OSPF_ALLSPFROUTERS);
ospf_packet.c: p.prefix.s_addr = htonl (OSPF_ALLSPFROUTERS);
ospf_packet.c: p.prefix.s_addr = htonl (OSPF_ALLSPFROUTERS);
ospf_packet.c: dst.s_addr = htonl (OSPF_ALLSPFROUTERS);
ospf_packet.c: dst.s_addr = htonl (OSPF_ALLSPFROUTERS);
ospf_packet.c: dst.s_addr = htonl (OSPF_ALLSPFROUTERS);
ospfd.h:#define OSPF_ALLSPFROUTERS 0xe0000005 /* 224.0.0.5 */



荒:ospf_packet.c で、
  Helloパケットなど行っているっぽいねー。

奥:ちゃんと、dst=destination(あて先)って
  書いてありますね。


荒:あー、なるほど。

[root@bind1 ospfd]# less ospf_packet.c


  LSAのタイプなんかもconstで書いてるなー。

奥:うーん。

  すごいですねぇー。

荒:いや、これ、いいわ。

  これからも、このカテゴリーは
  続けましょう。

  すごく動作の理解が深まるよ、きっと。

奥:はい。

  頑張ってオープン ソースしましょう。手(グー)



■参考書籍

「人生のバイブルだ」と言った人が大勢いる
私のとても尊敬する落合 信彦さんの著作です。

http://homepage3.nifty.com/sysaho/newcomer.html


若い人ほど、早目に読むべきです。

太鼓判を押せる本です。

posted by アンドレアス at 23:42| Comment(0) | quaggaのソースをオープン | このブログの読者になる | 更新情報をチェックする

2007年05月28日

quaggaのソースコードを開いてみよう。

今日は、休憩。喫茶店

2人は、quaggaのソースを開いて見る事に。

======================================

荒:今日は、ソースを開いてみましょう。

  もちろん、quaggaのです。


奥:rpmばっかりですもんね。

  最近。

  ソースのダウンロードはここからできますね。

  http://www.quagga.net/download.php


荒:/usr/local/src に置いてるよ。

奥:あ、ほんとだ。

  ありがとうございます。

  では、さっそく・・・。


[root@bind1 src]# ls -la
合計 2316
drwxr-xr-x 2 root root 4096 5月 28 23:05 .
drwxr-xr-x 11 root root 4096 2月 21 04:23 ..
-rw-r--r-- 1 root root 2350372 5月 28 23:04 quagga-0.99.7.tar.gz

[root@bind1 src]# pwd
/usr/local/src

[root@bind1 src]# tar xvzf quagga-0.99.7.tar.gz



奥:ファイルが、たくさんありますねぇー。

  あれ、solarisってディレクトリもありますよ。


[root@bind1 src]# cd quagga-0.99.7
[root@bind1 quagga-0.99.7]# ls
AUTHORS README configure missing solaris
COPYING REPORTING-BUGS configure.ac mkinstalldirs tests
COPYING.LIB SERVICES depcomp ospf6d tools
ChangeLog TODO doc ospfclient update-autotools
INSTALL aclocal.m4 install-sh ospfd vtysh
INSTALL.quagga.txt bgpd isisd pkgsrc watchquagga
Makefile.am config.guess lib redhat zebra
Makefile.in config.h.in ltmain.sh ripd
NEWS config.sub m4 ripngd


奥:redhatもある。

荒:そのディレクトリの中に、
  起動スクリプトなんかもあるよ。

奥:あっ、ホントですねぇー。

荒:じゃあ、ospfdディレクトリを見ていきましょうか。

  ospf関連のプログラムソースが、
  たくさんあるはずです。


奥:はーーーい。

  お、これは多いですねぇー。


[root@bind1 quagga-0.99.7]# cd ospfd
[root@bind1 ospfd]# ls
ChangeLog ospf_ase.h ospf_main.c ospf_snmp.h
ChangeLog.opaque.txt ospf_dump.c ospf_neighbor.c ospf_spf.c
Makefile.am ospf_dump.h ospf_neighbor.h ospf_spf.h
Makefile.in ospf_flood.c ospf_network.c ospf_te.c
OSPF-MIB.txt ospf_flood.h ospf_network.h ospf_te.h
OSPF-TRAP-MIB.txt ospf_ia.c ospf_nsm.c ospf_vty.c
ospf_abr.c ospf_ia.h ospf_nsm.h ospf_vty.h
ospf_abr.h ospf_interface.c ospf_opaque.c ospf_zebra.c
ospf_api.c ospf_interface.h ospf_opaque.h ospf_zebra.h
ospf_api.h ospf_ism.c ospf_packet.c ospfd.c
ospf_apiserver.c ospf_ism.h ospf_packet.h ospfd.conf.sample
ospf_apiserver.h ospf_lsa.c ospf_route.c ospfd.h
ospf_asbr.c ospf_lsa.h ospf_route.h
ospf_asbr.h ospf_lsdb.c ospf_routemap.c
ospf_ase.c ospf_lsdb.h ospf_snmp.c


奥:これ、開いてみますね。


[root@bind1 ospfd]# less ospf_neighbor.c

(途中省略)

ospf_nbr_key (struct ospf_interface *oi, struct ospf_neighbor *nbr,
struct prefix *key)
{
key->family = AF_INET;
key->prefixlen = IPV4_MAX_BITLEN;

(途中省略)

struct ospf_neighbor *
ospf_nbr_new (struct ospf_interface *oi)
{
struct ospf_neighbor *nbr;

/* Allcate new neighbor. */

(途中省略)



荒:このカテゴリーは、適当に流さないとあかんなぁー。

奥:そうですね。

  チンプンカンプンですがく〜(落胆した顔)

荒:何となく、ネイバーテーブルのdeadtimeのクリアっぽい
  記述もあるけど・・・・。


/* Cancel all timers. */
OSPF_NSM_TIMER_OFF (nbr->t_inactivity);
OSPF_NSM_TIMER_OFF (nbr->t_db_desc);
OSPF_NSM_TIMER_OFF (nbr->t_ls_req);
OSPF_NSM_TIMER_OFF (nbr->t_ls_upd);


奥:気長に見ていきましょう。

  このコーナーは・・わーい(嬉しい顔)



■CCNA合格への最短距離となる推薦書籍

 重くて分厚い本ですが、
 今もこれがNo1です。
 実務でも役立つから。

 「図解CCNA対策教本 スキルアップ問題集」
 http://homepage3.nifty.com/sysaho/ccna.html






posted by アンドレアス at 23:41| Comment(0) | quaggaのソースをオープン | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。