if_output now called with pointer to rtentry.
authorKeith Sklower <sklower@ucbvax.Berkeley.EDU>
Fri, 6 Apr 1990 02:15:46 +0000 (18:15 -0800)
committerKeith Sklower <sklower@ucbvax.Berkeley.EDU>
Fri, 6 Apr 1990 02:15:46 +0000 (18:15 -0800)
SCCS-vsn: sys/netiso/clnp.h 7.6
SCCS-vsn: sys/netiso/clnp_frag.c 7.8
SCCS-vsn: sys/netiso/clnp_subr.c 7.8

usr/src/sys/netiso/clnp.h
usr/src/sys/netiso/clnp_frag.c
usr/src/sys/netiso/clnp_subr.c

index 38113fa..5709886 100644 (file)
@@ -27,7 +27,7 @@ SOFTWARE.
  */
 /* $Header: /var/src/sys/netiso/RCS/clnp.h,v 5.1 89/02/09 16:17:22 hagens Exp $ */
 /* $Source: /var/src/sys/netiso/RCS/clnp.h,v $ */
  */
 /* $Header: /var/src/sys/netiso/RCS/clnp.h,v 5.1 89/02/09 16:17:22 hagens Exp $ */
 /* $Source: /var/src/sys/netiso/RCS/clnp.h,v $ */
-/*     @(#)clnp.h      7.5 (Berkeley) %G% */
+/*     @(#)clnp.h      7.6 (Berkeley) %G% */
 
 #ifndef BYTE_ORDER
 /*
 
 #ifndef BYTE_ORDER
 /*
@@ -364,7 +364,7 @@ struct troll {
 };
 
 #define        SN_OUTPUT(clcp, m)\
 };
 
 #define        SN_OUTPUT(clcp, m)\
-       troll_output(clcp->clc_ifa->ia_ifp, m, clcp->clc_firsthop)
+       troll_output(clcp->clc_ifa->ia_ifp, m, clcp->clc_firsthop, clcp->clc_rt)
 
 #define        SN_MTU(ifp)\
        (ifp->if_mtu - trollctl.tr_mtu_adj)
 
 #define        SN_MTU(ifp)\
        (ifp->if_mtu - trollctl.tr_mtu_adj)
@@ -376,7 +376,7 @@ extern float troll_random;
 #else  /* NO TROLL */
 
 #define        SN_OUTPUT(clcp, m)\
 #else  /* NO TROLL */
 
 #define        SN_OUTPUT(clcp, m)\
-       (*clcp->clc_ifa->ia_ifp->if_output)(clcp->clc_ifa->ia_ifp, m, clcp->clc_firsthop)
+       (*clcp->clc_ifa->ia_ifp->if_output)(clcp->clc_ifa->ia_ifp, m, clcp->clc_firsthop, clcp->clc_rt)
 
 #define        SN_MTU(ifp)\
        (ifp->if_mtu)
 
 #define        SN_MTU(ifp)\
        (ifp->if_mtu)
@@ -425,6 +425,8 @@ struct clnp_cache {
                                                                                        the route structure) */
        struct iso_ifaddr       *clc_ifa;               /* ptr to interface (points into
                                                                                        the route structure) */
                                                                                        the route structure) */
        struct iso_ifaddr       *clc_ifa;               /* ptr to interface (points into
                                                                                        the route structure) */
+       struct rtentry          *clc_rt;                /* ptr to rtentry (points into
+                                                                                       the route structure) */
        struct mbuf             *clc_hdr;               /* cached pkt hdr (finally)! */
 };
 
        struct mbuf             *clc_hdr;               /* cached pkt hdr (finally)! */
 };
 
index b201f7c..94ce404 100644 (file)
@@ -26,7 +26,7 @@ SOFTWARE.
  */
 /* $Header: /var/src/sys/netiso/RCS/clnp_frag.c,v 5.1 89/02/09 16:20:26 hagens Exp $ */
 /* $Source: /var/src/sys/netiso/RCS/clnp_frag.c,v $ */
  */
 /* $Header: /var/src/sys/netiso/RCS/clnp_frag.c,v 5.1 89/02/09 16:20:26 hagens Exp $ */
 /* $Source: /var/src/sys/netiso/RCS/clnp_frag.c,v $ */
-/*     @(#)clnp_frag.c 7.7 (Berkeley) %G% */
+/*     @(#)clnp_frag.c 7.8 (Berkeley) %G% */
 
 #ifndef lint
 static char *rcsid = "$Header: /var/src/sys/netiso/RCS/clnp_frag.c,v 5.1 89/02/09 16:20:26 hagens Exp $";
 
 #ifndef lint
 static char *rcsid = "$Header: /var/src/sys/netiso/RCS/clnp_frag.c,v 5.1 89/02/09 16:20:26 hagens Exp $";
@@ -74,13 +74,14 @@ struct mbuf *clnp_comp_pdu();
  *                                     the packet was fragmented during forwarding. In this
  *                                     case, we ought to send an ER back.
  */
  *                                     the packet was fragmented during forwarding. In this
  *                                     case, we ought to send an ER back.
  */
-clnp_fragment(ifp, m, first_hop, total_len, segoff, flags)
+clnp_fragment(ifp, m, first_hop, total_len, segoff, flags, rt)
 struct ifnet   *ifp;           /* ptr to outgoing interface */
 struct mbuf            *m;                     /* ptr to packet */
 struct sockaddr        *first_hop;     /* ptr to first hop */
 int                            total_len;      /* length of datagram */
 int                            segoff;         /* offset of segpart in hdr */
 int                            flags;          /* flags passed to clnp_output */
 struct ifnet   *ifp;           /* ptr to outgoing interface */
 struct mbuf            *m;                     /* ptr to packet */
 struct sockaddr        *first_hop;     /* ptr to first hop */
 int                            total_len;      /* length of datagram */
 int                            segoff;         /* offset of segpart in hdr */
 int                            flags;          /* flags passed to clnp_output */
+struct rtentry *rt;                    /* route if direct ether */
 {
        struct clnp_fixed               *clnp = mtod(m, struct clnp_fixed *);
        int                                             hdr_len = (int)clnp->cnf_hdr_len;
 {
        struct clnp_fixed               *clnp = mtod(m, struct clnp_fixed *);
        int                                             hdr_len = (int)clnp->cnf_hdr_len;
@@ -215,9 +216,9 @@ int                         flags;          /* flags passed to clnp_output */
                        ENDDEBUG
 
 #ifdef TROLL
                        ENDDEBUG
 
 #ifdef TROLL
-                       error = troll_output(ifp, frag_hdr, first_hop);
+                       error = troll_output(ifp, frag_hdr, first_hop, rt);
 #else
 #else
-                       error = (*ifp->if_output)(ifp, frag_hdr, first_hop);
+                       error = (*ifp->if_output)(ifp, frag_hdr, first_hop, rt);
 #endif TROLL
 
                        /*
 #endif TROLL
 
                        /*
@@ -787,10 +788,11 @@ float troll_random()
  * NOTES:                      The operation of this procedure is regulated by the
  *                                     troll control structure (Troll).
  */
  * NOTES:                      The operation of this procedure is regulated by the
  *                                     troll control structure (Troll).
  */
-troll_output(ifp, m, dst)
+troll_output(ifp, m, dst, rt)
 struct ifnet   *ifp;
 struct mbuf            *m;
 struct sockaddr        *dst;
 struct ifnet   *ifp;
 struct mbuf            *m;
 struct sockaddr        *dst;
+struct rtentry *rt;
 {
        int     err = 0;
        troll_cnt++;
 {
        int     err = 0;
        troll_cnt++;
@@ -805,19 +807,19 @@ struct sockaddr   *dst;
                if (i_freq == f_freq) {
                        struct mbuf *dup = m_copy(m, 0, (int)M_COPYALL);
                        if (dup != NULL)
                if (i_freq == f_freq) {
                        struct mbuf *dup = m_copy(m, 0, (int)M_COPYALL);
                        if (dup != NULL)
-                               err = (*ifp->if_output)(ifp, dup, dst);
+                               err = (*ifp->if_output)(ifp, dup, dst, rt);
                }
                if (!err)
                }
                if (!err)
-                       err = (*ifp->if_output)(ifp, m, dst);
+                       err = (*ifp->if_output)(ifp, m, dst, rt);
                return(err);
        } else if (trollctl.tr_ops & TR_DROPPKT) {
        } else if (trollctl.tr_ops & TR_CHANGE) {
                struct clnp_fixed *clnp = mtod(m, struct clnp_fixed *);
                clnp->cnf_cksum_msb = 0;
                return(err);
        } else if (trollctl.tr_ops & TR_DROPPKT) {
        } else if (trollctl.tr_ops & TR_CHANGE) {
                struct clnp_fixed *clnp = mtod(m, struct clnp_fixed *);
                clnp->cnf_cksum_msb = 0;
-               err = (*ifp->if_output)(ifp, m, dst);
+               err = (*ifp->if_output)(ifp, m, dst, rt);
                return(err);
        } else {
                return(err);
        } else {
-               err = (*ifp->if_output)(ifp, m, dst);
+               err = (*ifp->if_output)(ifp, m, dst, rt);
                return(err);
        }
 }
                return(err);
        }
 }
index 6be7850..c25c402 100644 (file)
@@ -26,7 +26,7 @@ SOFTWARE.
  */
 /* $Header: /var/src/sys/netiso/RCS/clnp_subr.c,v 5.1 89/02/09 16:20:46 hagens Exp $ */
 /* $Source: /var/src/sys/netiso/RCS/clnp_subr.c,v $ */
  */
 /* $Header: /var/src/sys/netiso/RCS/clnp_subr.c,v 5.1 89/02/09 16:20:46 hagens Exp $ */
 /* $Source: /var/src/sys/netiso/RCS/clnp_subr.c,v $ */
-/*     @(#)clnp_subr.c 7.7 (Berkeley) %G% */
+/*     @(#)clnp_subr.c 7.8 (Berkeley) %G% */
 
 #ifndef lint
 static char *rcsid = "$Header: /var/src/sys/netiso/RCS/clnp_subr.c,v 5.1 89/02/09 16:20:46 hagens Exp $";
 
 #ifndef lint
 static char *rcsid = "$Header: /var/src/sys/netiso/RCS/clnp_subr.c,v 5.1 89/02/09 16:20:46 hagens Exp $";
@@ -341,9 +341,9 @@ struct snpa_hdr             *inbound_shp;   /* subnetwork header of inbound packet */
         */
        if (len <= SN_MTU(ifp)) {
                iso_gen_csum(m, CLNP_CKSUM_OFF, (int)clnp->cnf_hdr_len);
         */
        if (len <= SN_MTU(ifp)) {
                iso_gen_csum(m, CLNP_CKSUM_OFF, (int)clnp->cnf_hdr_len);
-               (void) (*ifp->if_output)(ifp, m, next_hop);
+               (void) (*ifp->if_output)(ifp, m, next_hop, route.ro_rt);
        } else {
        } else {
-               (void) clnp_fragment(ifp, m, next_hop, len, seg_off, /* flags */0);
+               (void) clnp_fragment(ifp, m, next_hop, len, seg_off, /* flags */0, route.ro_rt);
        }
        
 done:
        }
        
 done:
@@ -475,7 +475,7 @@ clnp_route(dst, ro, flags, first_hop, ifa)
                if ((*ifa = (struct iso_ifaddr *)ro->ro_rt->rt_ifa) == 0)
                        panic("clnp_route");
        if (first_hop) {
                if ((*ifa = (struct iso_ifaddr *)ro->ro_rt->rt_ifa) == 0)
                        panic("clnp_route");
        if (first_hop) {
-               if (ro->ro_rt->rt_flags & (RTF_GATEWAY|RTF_HOST))
+               if (ro->ro_rt->rt_flags & RTF_GATEWAY)
                        *first_hop = ro->ro_rt->rt_gateway;
                else
                        *first_hop = (struct sockaddr *)&ro->ro_dst;
                        *first_hop = ro->ro_rt->rt_gateway;
                else
                        *first_hop = (struct sockaddr *)&ro->ro_dst;