* @(#)table.h 8.1 (Berkeley) 6/5/93
*
* $FreeBSD: src/usr.sbin/IPXrouted/table.h,v 1.6 1999/08/28 01:15:05 peter Exp $
- * $DragonFly: src/usr.sbin/IPXrouted/table.h,v 1.2 2003/06/17 04:29:52 dillon Exp $
*/
/*
struct rt_entry *rt_back;
};
-#ifdef RTM_ADD
-#define rtentry ortentry
-#endif
-
struct rt_entry {
struct rt_entry *rt_forw;
struct rt_entry *rt_back;
rtchange(struct rt_entry *rt, struct sockaddr *gate, short metric, short ticks)
{
int doioctl = 0, metricchanged = 0;
- struct rtuentry oldroute;
FIXLEN(gate);
/*
metricchanged++;
if (doioctl || metricchanged) {
TRACE_ACTION("CHANGE FROM", rt);
- if (doioctl) {
- oldroute = rt->rt_rt;
+ if (doioctl)
rt->rt_router = *gate;
- }
rt->rt_metric = metric;
rt->rt_ticks = ticks;
if ((rt->rt_state & RTS_INTERFACE) && metric) {
TRACE_ACTION("CHANGE TO", rt);
}
if (doioctl && install) {
-#ifndef RTM_ADD
- if (rtioctl(ADD, &rt->rt_rt) < 0)
- syslog(LOG_ERR, "rtioctl ADD dst %s, gw %s: %m",
- ipx_ntoa(&((struct sockaddr_ipx *)&rt->rt_dst)->sipx_addr),
- ipx_ntoa(&((struct sockaddr_ipx *)&rt->rt_router)->sipx_addr));
- if (delete && rtioctl(DELETE, &oldroute) < 0)
- perror("rtioctl DELETE");
-#else
if (delete == 0) {
if (rtioctl(ADD, &rt->rt_rt) >= 0)
return;
syslog(LOG_ERR, "rtioctl ADD dst %s, gw %s: %m",
ipxdp_ntoa(&((struct sockaddr_ipx *)&rt->rt_dst)->sipx_addr),
ipxdp_ntoa(&((struct sockaddr_ipx *)&rt->rt_router)->sipx_addr));
-#endif
}
}
int
rtioctl(int action, struct rtuentry *ort)
{
-#ifndef RTM_ADD
- if (install == 0)
- return (errno = 0);
-
- ort->rtu_rtflags = ort->rtu_flags;
-
- switch (action) {
-
- case ADD:
- return (ioctl(s, SIOCADDRT, (char *)ort));
-
- case DELETE:
- return (ioctl(s, SIOCDELRT, (char *)ort));
-
- default:
- return (-1);
- }
-#else /* RTM_ADD */
struct {
struct rt_msghdr w_rtm;
struct sockaddr w_dst;
}
errno = 0;
return write(r, (char *)&w, rtm.rtm_msglen);
-#endif /* RTM_ADD */
}