From owner-FreeBSD-users-jp@jp.freebsd.org  Wed Nov  6 12:43:13 1996
Received: by jaz.jp.freebsd.org (8.7.3+2.6Wbeta5/8.7.3) id MAA22278
	Wed, 6 Nov 1996 12:43:13 +0900 (JST)
Received: by jaz.jp.freebsd.org (8.7.3+2.6Wbeta5/8.7.3) with ESMTP id MAA22273
	for <FreeBSD-users-jp@jp.freebsd.org>; Wed, 6 Nov 1996 12:43:10 +0900 (JST)
Received: (from c4000do@localhost) by ubox.kyoto-inet.or.jp (8.7.5/3.4W-10/29/96) id MAA08129 for FreeBSD-users-jp@jp.freebsd.org; Wed, 6 Nov 1996 12:42:59 +0900
Received: from snake.c4000do.co.kyoto-inet.or.jp (snake.c4000do.co.kyoto-inet.or.jp [192.168.1.32]) by mbox.c4000do.co.kyoto-inet.or.jp (8.7.6/3.4W4-uucp) with SMTP id MAA17491 for <FreeBSD-users-jp@jp.freebsd.org>; Wed, 6 Nov 1996 12:35:05 +0900 (JST)
Message-Id: <9611060335.AA00550@snake.c4000do.co.kyoto-inet.or.jp>
From: zorac@c4000do.co.kyoto-inet.or.jp
Date: Wed, 06 Nov 1996 12:35:04 +0900
To: FreeBSD-users-jp@jp.freebsd.org
MIME-Version: 1.0
X-Mailer: AL-Mail 1.30
Content-Type: text/plain; charset=iso-2022-jp
Reply-To: FreeBSD-users-jp@jp.freebsd.org
X-Distribute: distribute [version 2.1 (Alpha) patchlevel=19]
X-Sequence: FreeBSD-users-jp 5985
Subject: [FreeBSD-users-jp 5985] iij-ppp patch to route.c
Errors-To: owner-FreeBSD-users-jp@jp.freebsd.org
Sender: owner-FreeBSD-users-jp@jp.freebsd.org

$B=i$a$^$7$F!#DXK\!w%7%;%sF2$H?=$7$^$9!#(J

# $B2?EYEj9F$7$F$bFO$+$J$$(J(;_;)
# $B:#2s$O%a!<%k%X%C%@$rJQ$($F$_$^$7$?!#FO$/$+$J(J?

iij-ppp$B$N%k!<%F%#%s%0%F!<%V%kA`:n<~$j$N=$@5%Q%C%A$r:n@.$7$^$7$?!#(J
$B!&%k!<%F%#%s%0>pJs$N:o=|$,@5>o$K9T$($k!#(J
$B!&(Jshow route $B%3%^%s%I$N%M%C%H%^%9%/$,@5$7$/I=<($5$l$k!#(J

$BK\Ev$O(Jroute(4)$B$K9g$o$;$F@5$7$/=$@5$7$?J}$,NI$$$N$G$7$g$&$,!"(J
route.c$B$NH>J,6a$/=q$-D>$91)L\$K$J$j$=$&$J$N$G;_$a$^$7$?!#(J^_^;
$B%Q%C%A$O(J2.1.5-release$B$KBP$9$k$b$N$G$9!#(J

-----------v--------------$B$3$3$+$i(J------------v---------------
*** route.c.orig	Sat Nov  2 12:06:16 1996
--- route.c	Sat Nov  2 12:07:46 1996
***************
*** 72,78 ****
    rtmes.m_rtm.rtm_version = RTM_VERSION;
    rtmes.m_rtm.rtm_type = cmd;
    rtmes.m_rtm.rtm_addrs = RTA_DST | RTA_NETMASK;
!   if (cmd == RTM_ADD) rtmes.m_rtm.rtm_addrs |= RTA_GATEWAY;
    rtmes.m_rtm.rtm_seq = ++seqno;
    rtmes.m_rtm.rtm_pid = getpid();
    rtmes.m_rtm.rtm_flags = RTF_UP | RTF_GATEWAY;
--- 72,78 ----
    rtmes.m_rtm.rtm_version = RTM_VERSION;
    rtmes.m_rtm.rtm_type = cmd;
    rtmes.m_rtm.rtm_addrs = RTA_DST | RTA_NETMASK;
!   if (gateway.s_addr) rtmes.m_rtm.rtm_addrs |= RTA_GATEWAY;
    rtmes.m_rtm.rtm_seq = ++seqno;
    rtmes.m_rtm.rtm_pid = getpid();
    rtmes.m_rtm.rtm_flags = RTF_UP | RTF_GATEWAY;
***************
*** 99,105 ****
  
    if (mask.s_addr) {
      *lp++ = 8;
!     cp += sizeof(int);
      *lp = mask.s_addr;
    } else
      *lp = 0;
--- 99,105 ----
  
    if (mask.s_addr) {
      *lp++ = 8;
!     cp += sizeof(u_long);
      *lp = mask.s_addr;
    } else
      *lp = 0;
***************
*** 211,217 ****
      sa = (struct sockaddr *)(rtm + 1);
      mask = 0xffffffff;
      if (rtm->rtm_addrs == RTA_DST)
!       p_sockaddr(sa, 36);
      else {
        wp = (u_char *)cp + rtm->rtm_msglen;
        p_sockaddr(sa, 16);
--- 211,217 ----
      sa = (struct sockaddr *)(rtm + 1);
      mask = 0xffffffff;
      if (rtm->rtm_addrs == RTA_DST)
!       p_sockaddr(sa, 35);
      else {
        wp = (u_char *)cp + rtm->rtm_msglen;
        p_sockaddr(sa, 16);
***************
*** 220,236 ****
        sa = (struct sockaddr *)(sa->sa_len + (char *)sa);
        p_sockaddr(sa, 18);
        lp = (int *)(sa->sa_len + (char *)sa);
!       if ((char *)lp < (char *)wp && *lp) {
  #ifdef DEBUG
! 	logprintf(" flag = %x, rest = %d", rtm->rtm_flags, *lp);
  #endif
  	wp = (u_char *)(lp + 1);
  	mask = 0;
! 	for (nb = *lp; nb > 4; nb--) {
  	  mask <<= 8;
  	  mask |= *wp++;
  	}
! 	for (nb = 8 - *lp; nb > 0; nb--)
  	  mask <<= 8;
        }
      }
--- 220,236 ----
        sa = (struct sockaddr *)(sa->sa_len + (char *)sa);
        p_sockaddr(sa, 18);
        lp = (int *)(sa->sa_len + (char *)sa);
!       if ((char *)lp < (char *)wp && *(u_char*)lp) {
  #ifdef DEBUG
! 	logprintf(" flag = %x, rest = %d", rtm->rtm_flags, *(u_char*)lp);
  #endif
  	wp = (u_char *)(lp + 1);
  	mask = 0;
! 	for (nb = *(u_char*)lp; nb > 4; nb--) {
  	  mask <<= 8;
  	  mask |= *wp++;
  	}
! 	for (nb = 8 - *(u_char*)lp; nb > 0; nb--)
  	  mask <<= 8;
        }
      }
***************
*** 251,257 ****
  {
    struct rt_msghdr *rtm;
    struct sockaddr *sa;
!   struct in_addr dstnet, gateway;
    int needed;
    char *sp, *cp, *ep;
    u_long mask;
--- 251,257 ----
  {
    struct rt_msghdr *rtm;
    struct sockaddr *sa;
!   struct in_addr dstnet, gateway, maddr;
    int needed;
    char *sp, *cp, *ep;
    u_long mask;
***************
*** 319,334 ****
        gateway = ((struct sockaddr_in *)sa)->sin_addr;
        lp = (int *)(sa->sa_len + (char *)sa);
        mask = 0;
!       if ((char *)lp < (char *)wp && *lp) {
  #ifdef DEBUG
! 	printf(" flag = %x, rest = %d", rtm->rtm_flags, *lp);
  #endif
  	wp = (u_char *)(lp + 1);
! 	for (nb = *lp; nb > 4; nb--) {
  	  mask <<= 8;
  	  mask |= *wp++;
  	}
! 	for (nb = 8 - *lp; nb > 0; nb--)
  	  mask <<= 8;
        }
  #ifdef DEBUG
--- 319,334 ----
        gateway = ((struct sockaddr_in *)sa)->sin_addr;
        lp = (int *)(sa->sa_len + (char *)sa);
        mask = 0;
!       if ((char *)lp < (char *)wp && *(u_char*)lp) {
  #ifdef DEBUG
! 	printf(" flag = %x, rest = %d", rtm->rtm_flags, *(u_char*)lp);
  #endif
  	wp = (u_char *)(lp + 1);
! 	for (nb = *(u_char*)lp; nb > 4; nb--) {
  	  mask <<= 8;
  	  mask |= *wp++;
  	}
! 	for (nb = 8 - *(u_char*)lp; nb > 0; nb--)
  	  mask <<= 8;
        }
  #ifdef DEBUG
***************
*** 339,345 ****
          gateway.s_addr = INADDR_ANY;
          mask = INADDR_ANY;
        }
!       OsSetRoute(RTM_DELETE, dstnet, gateway, htonl(mask));
      }
  #ifdef DEBUG
      else if (rtm->rtm_index == IfIndex) {
--- 339,346 ----
          gateway.s_addr = INADDR_ANY;
          mask = INADDR_ANY;
        }
!       maddr.s_addr = htonl(mask);
!       OsSetRoute(RTM_DELETE, dstnet, gateway, maddr);
      }
  #ifdef DEBUG
      else if (rtm->rtm_index == IfIndex) {
***************
*** 369,374 ****
--- 370,376 ----
    ifconfs.ifc_buf = (caddr_t)reqbuf;
    if (ioctl(s, SIOCGIFCONF, &ifconfs) < 0) {
      perror("IFCONF");
+     close(s);
      return(-1);
    }
  
***************
*** 384,389 ****
--- 386,392 ----
  #endif
        if (strcmp(ifrp->ifr_name, name) == 0) {
          IfIndex = index;
+ 	close(s);
          return(index);
        }
        index++;
-----------^--------------$B$3$3$^$G(J------------^---------------

=======================================================
$BDXK\(J $B9@Li(J (H.Tsubakimoto) <zorac@mbox.kyoto-inet.or.jp>
$BM-8B2q<R%7%;%sF2(J    <zorac@c4000do.co.kyoto-inet.or.jp>
