pppd-2.3b2 on FreeBSD

[ Nob's Home | FreeBSD | ppp ]

FreeBSD 2.1 boxにpppd2.3b2をinstallしてみました。
怪しげなことをやってますので、ご批判ください。 村田までよろしくお願いします。
  1. ftp://cs.anu.edu.au/pub/software/ppp/より ppp-2.3b2.tar.gz(630998 Sep 14 05:59)をget

  2. /usr/local/srcに展開
    [makioka]/home/nob# tar zxvf ppp-2.3b2.tar.gz -C /usr/local/src

  3. ./configure
    [makioka]/usr/local/src/ppp-2.3b2# ./configure
    
  4. make
    [makioka]/usr/local/src/ppp-2.3b2# make
    略
    ===> pppstats
    cc -O -I..   -c pppstats.c
    In file included from pppstats.c:50:
    ../net/ppp_defs.h:81: redefinition of `u_int32_t'
    /usr/include/machine/types.h:62: `u_int32_t' previously declared here
    *** Error code 1
    
  5. u_int32_t対策 net/ppp_defs.hの
    #if !defined(__BIT_TYPES_DEFINED__) && !defined(_BITYPES)
    #ifdef  UINT32_T
    typedef UINT32_T        u_int32_t;
    #else
    typedef unsigned int    u_int32_t;
    #endif
    #endif
    
    の部分をcomment outする。

  6. 再度make
    [makioka]/usr/local/src/ppp-2.3b2# make
    ===> chat
    ===> pppd
    ===> pppstats
    cc -O -I..   -c pppstats.c
    cc -O -I..    -o pppstats pppstats.o
    

  7. ppp-2.2でのpatch ということでpatchの必要はない。

  8. make install
    ppp-2.2同様manのinstall先がおかしいので pppd/Makfile, chat/Makefile, pppstats/Makefileの
    MAN8=   chat.0
    
    MAN8=   chat.8
    
    としてから、rootでmake install

  9. make kernel
    /sys/net/にfileがcopyされ、/sys/conf/filesにpatchがあたる。
    注意:
    ppp-2.2をinstallしていると "make kernel"で/sys/conf/filesにpatchがあたらない。
    この場合手入力で
    net/ppp-deflate.c     optional ppp
    net/zlib.c            optional ppp
    
    を追加する。

  10. kernel recompile
    /sys/i386/confでconfig MAKIOKA
    /sys/compile/MAKIOKAでmake depend;makeするとerrorになる。

  11. /sys/net/if_ppp.cの修正
    /sys/net/if_ppp.cの
    #ifdef VJC
        MALLOC(sc->sc_comp, struct slcompress *, sizeof(struct slcompress),
               M_DEVBUF, M_NOWAIT);
        if (sc->sc_comp)
            vj_compress_init(sc->sc_comp, -1);
    #endif
    
    という部分であるが
    freebsd-2.0/if_ppp.cではvjcompressであるはず。
    (slcompressはnetbsd-1.1/if_ppp.cで使用されている)
    そこで/sys/net/if_ppp.cを
    #ifdef VJC
        MALLOC(sc->sc_comp, struct vjcompress *, sizeof(struct vjcompress),
               M_DEVBUF, M_NOWAIT);
        if (sc->sc_comp)
            vj_compress_init(sc->sc_comp, -1);
    #endif
    
    と変更。
  12. /sys/net/if_pppvar.hの修正
    さらに、/sys/net/if_pppvar.hでもslcompressを使用しているので、
    /sys/net/if_pppvar.hの
    ifdef  VJC
            struct  slcompress *sc_comp;    /* vjc control buffer */
    #endif
    
    ifdef  VJC
            struct  vjcompress *sc_comp;    /* vjc control buffer */
    #endif
    
    にした。

  13. 再度 make これで
    loading kernel
    inflate.o: Definition of symbol `_inflate' (multiply defined)
    zlib.o: Definition of symbol `_inflate' (multiply defined)
    *** Error code 1
    
    Stop.
    
    まですすんだ。^_^v

  14. inflate
    ppp-2.3b2で使用しているinflateがどこかとかち合っているのか?
    /sys/net/ppp-deflate.cと/sys/net/zlib.cでinflate()が使用されている。
    両方のinflate()をinflateP()にしてみた。 /sys/net/ppp-deflate.cの
        /*
         * Call inflate, supplying more input or output as needed.
         */
        for (;;) {
            r = inflate(&state->strm, flush);
            if (r != Z_OK) {
    #if !DEFLATE_DEBUG
                if (state->debug)
    #endif
    
    /sys/net/zlib.cの
    #define NEEDBYTE {if(z->avail_in==0)goto empty;r=Z_OK;}
    #define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)
    
    int inflate(z, f)
    z_stream *z;
    int f;
    
    この2ヵ所の"inflate"を"inflateP"に変更した。

  15. 再度make
    すると最後まですすみ、kernelができる。
    (果たして、これでうまくいくのか?)

  16. make install
    kernelをmake installして、reboot。
    Sep 25 21:11:35 cs1 pppd[146]: pppd 2.3.0 started by root, uid 0
    Sep 25 21:11:35 cs1 pppd[147]: pppd 2.3.0 started by root, uid 0
    
    と、これまでのところ問題なく稼働している。

    2.2まででみられた、接続先のModemがhang upした場合に、
    経路情報が残ってしまう問題が解決されたような気がする。

  17. 実はこの問題は解決していませんでした。
    金原さん@凸版印刷 から、
    確実にこの現象を発生させる方法をご教示いただきました。

    2.2以前pppdでarpがおかしくなるという現象は,pppごしに ftp でファイ
    ルを転送している最中にモデムの電源を切るなどしてpppdを終了させてや
    る(pppdにSIGHUPを送る)と確実に再現できるようです。
    
    金原さん、ありがとうございました。
    残念ながら、pppd-2.3b2でもこの現象は再現されました。
    しかし、 対処法がわかりました。

[ Nob's Home | FreeBSD | ppp ]
nob@makioka.y-min.or.jp