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
*/
/* $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% */
};
#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)
#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)
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)! */
};
*/
/* $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 $";
* 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;
- error = troll_output(ifp, frag_hdr, first_hop);
+ error = troll_output(ifp, frag_hdr, first_hop, rt);
- error = (*ifp->if_output)(ifp, frag_hdr, first_hop);
+ error = (*ifp->if_output)(ifp, frag_hdr, first_hop, rt);
* 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;
{
int err = 0;
troll_cnt++;
{
int err = 0;
troll_cnt++;
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);
- 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);
- err = (*ifp->if_output)(ifp, m, dst);
+ err = (*ifp->if_output)(ifp, m, dst, rt);
*/
/* $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 $";
*/
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);
- (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);
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;