summaryrefslogtreecommitdiffstats
path: root/sys/netinet/ip_fil.c
diff options
context:
space:
mode:
authordarrenr <darrenr@FreeBSD.org>1997-04-03 10:39:35 +0000
committerdarrenr <darrenr@FreeBSD.org>1997-04-03 10:39:35 +0000
commit525015045eb68d4a74c33a475a65fbacb429ca5a (patch)
tree06c26c4b986f2caa85cf9dbc2e4a480bba2eeff0 /sys/netinet/ip_fil.c
parent240550ea53f52f303a284b0f926b489e88a88fed (diff)
downloadFreeBSD-src-525015045eb68d4a74c33a475a65fbacb429ca5a.zip
FreeBSD-src-525015045eb68d4a74c33a475a65fbacb429ca5a.tar.gz
Really import sys/netinet changes for IP Filter 3.2alpha4 this time.
Diffstat (limited to 'sys/netinet/ip_fil.c')
-rw-r--r--sys/netinet/ip_fil.c444
1 files changed, 328 insertions, 116 deletions
diff --git a/sys/netinet/ip_fil.c b/sys/netinet/ip_fil.c
index fec4846..a9c298a 100644
--- a/sys/netinet/ip_fil.c
+++ b/sys/netinet/ip_fil.c
@@ -7,17 +7,39 @@
*/
#if !defined(lint) && defined(LIBC_SCCS)
static char sccsid[] = "@(#)ip_fil.c 2.41 6/5/96 (C) 1993-1995 Darren Reed";
-static char rcsid[] = "$Id: ip_fil.c,v 2.0.1.7 1997/02/19 12:45:02 darrenr Exp $";
+static char rcsid[] = "$Id: ip_fil.c,v 1.1.1.3 1997/04/03 10:10:52 darrenr Exp $";
#endif
+#ifndef SOLARIS
+#define SOLARIS (defined(sun) && (defined(__svr4__) || defined(__SVR4)))
+#endif
+
+#ifdef __FreeBSD__
+#include <osreldate.h>
+#endif
+#ifndef _KERNEL
+#include <stdio.h>
+#include <string.h>
+#endif
#include <sys/errno.h>
#include <sys/types.h>
#include <sys/param.h>
#include <sys/file.h>
#include <sys/ioctl.h>
+#include <sys/time.h>
+#ifdef _KERNEL
#include <sys/systm.h>
+#endif
#include <sys/uio.h>
+#if !SOLARIS
+#include <sys/dir.h>
#include <sys/mbuf.h>
+#else
+#define bcmp memcmp
+#define bzero(a,b) memset(a,0,b)
+#define bcopy(a,b,c) memcpy(b,a,c)
+#include <sys/filio.h>
+#endif
#include <sys/protosw.h>
#include <sys/socket.h>
@@ -36,8 +58,8 @@ static char rcsid[] = "$Id: ip_fil.c,v 2.0.1.7 1997/02/19 12:45:02 darrenr Exp $
#include <netinet/tcpip.h>
#include <netinet/ip_icmp.h>
#include <syslog.h>
-#include "ip_fil.h"
#include "ip_compat.h"
+#include "ip_fil.h"
#include "ip_frag.h"
#include "ip_nat.h"
#include "ip_state.h"
@@ -47,45 +69,49 @@ static char rcsid[] = "$Id: ip_fil.c,v 2.0.1.7 1997/02/19 12:45:02 darrenr Exp $
extern fr_flags, fr_active;
extern struct protosw inetsw[];
-extern int (*fr_checkp)();
#if BSD < 199306
-extern int ipfr_slowtimer();
-static int (*fr_saveslowtimo)();
+static int (*fr_saveslowtimo) __P((void));
extern int tcp_ttl;
#else
-extern void ipfr_slowtimer();
-static void (*fr_saveslowtimo)();
+static void (*fr_saveslowtimo) __P((void));
#endif
int ipl_inited = 0;
int ipl_unreach = ICMP_UNREACH_FILTER;
-int send_reset();
+
+#ifndef _KERNEL
+#include "ipt.h"
+static struct ifnet **ifneta = NULL;
+static int nifs = 0;
+struct ifnet *get_unit __P((char *));
+#endif
#ifdef IPFILTER_LOG
-# define LOGSIZE 8192
-int ipllog();
-char iplbuf[LOGSIZE];
-caddr_t iplh = iplbuf, iplt = iplbuf;
-static int iplused = 0;
+char iplbuf[3][IPLLOGSIZE];
+caddr_t iplh[3], iplt[3];
+int iplused[3] = {0,0,0};
#endif /* IPFILTER_LOG */
-static void frflush();
-static int frrequest();
-static int (*fr_savep)() = NULL;
+static void frflush __P((caddr_t));
+static int frrequest __P((int, caddr_t, int));
+static void frzerostats __P((caddr_t));
+#ifdef _KERNEL
+static int (*fr_savep) __P((struct ip *, int, struct ifnet *,
+ int, struct mbuf **));
+#else
+void init_ifp __P((void));
+static int (*fr_savep) __P((struct ip *, int, struct ifnet *,
+ int, char *));
+static int no_output __P((struct ifnet *, struct mbuf *,
+ struct sockaddr *, struct rtentry *));
+static int write_output __P((struct ifnet *, struct mbuf *,
+ struct sockaddr *, struct rtentry *));
+#endif
+
-#if _BSDI_VERSION >= 199501
+#if (_BSDI_VERSION >= 199510) && defined(_KERNEL)
# include <sys/device.h>
# include <sys/conf.h>
-int iplioctl __P((dev_t, int, caddr_t, int, struct proc *));
-int iplopen __P((dev_t, int, int, struct proc *));
-int iplclose __P((dev_t, int, int, struct proc *));
-# ifdef IPFILTER_LOG
-int iplread __P((dev_t, struct uio *, int));
-# else
-# define iplread noread
-# endif
-int iplioctl __P((dev_t, int, caddr_t, int, struct proc *));
-
struct cfdriver iplcd = {
NULL, "ipl", NULL, NULL, DV_DULL, 0
};
@@ -96,9 +122,11 @@ struct devsw iplsw = {
nostrat, nodump, nopsize, 0,
nostop
};
-#endif /* _BSDI_VERSION >= 199501 */
+#endif /* _BSDI_VERSION >= 199510 && _KERNEL */
+
-#ifdef IPFILTER_LKM
+#ifdef _KERNEL
+# ifdef IPFILTER_LKM
int iplidentify(s)
char *s;
{
@@ -106,12 +134,12 @@ char *s;
return 1;
return 0;
}
-#endif /* IPFILTER_LKM */
+# endif /* IPFILTER_LKM */
int iplattach()
{
- int s;
+ int s, i;
SPLNET(s);
if (ipl_inited || (fr_checkp == fr_check)) {
@@ -125,6 +153,14 @@ int iplattach()
fr_checkp = fr_check;
fr_saveslowtimo = inetsw[0].pr_slowtimo;
inetsw[0].pr_slowtimo = ipfr_slowtimer;
+
+ /*
+ * Set log buffer pointers for each of the log buffers
+ */
+ for (i = 0; i <= 2; i++) {
+ iplh[i] = iplbuf[i];
+ iplt[i] = iplbuf[i];
+ }
SPLX(s);
return 0;
}
@@ -142,7 +178,9 @@ int ipldetach()
return EBUSY;
}
+#if defined(IPFILTER_LKM) || defined(IPFILTER)
fr_checkp = fr_savep;
+#endif
inetsw[0].pr_slowtimo = fr_saveslowtimo;
frflush((caddr_t)&i);
ipl_inited = 0;
@@ -154,6 +192,7 @@ int ipldetach()
SPLX(s);
return 0;
}
+#endif /* _KERNEL */
static void frzerostats(data)
@@ -219,7 +258,7 @@ caddr_t data;
* Filter ioctl interface.
*/
int iplioctl(dev, cmd, data, mode
-#if _BSDI_VERSION >= 199501
+#if ((_BSDI_VERSION >= 199510) || (BSD >= 199506)) && defined(_KERNEL)
, p)
struct proc *p;
#else
@@ -232,18 +271,20 @@ int mode;
{
int error = 0, s, unit;
+#ifdef _KERNEL
unit = minor(dev);
- if (unit != 0)
+ if ((2 < unit) || (unit < 0))
return ENXIO;
+#endif
SPLNET(s);
switch (cmd) {
case FIONREAD :
#ifdef IPFILTER_LOG
- *(int *)data = iplused;
+ *(int *)data = iplused[unit];
#endif
break;
-#ifndef IPFILTER_LKM
+#if !defined(IPFILTER_LKM) && defined(_KERNEL)
case SIOCFRENB :
{
u_int enable;
@@ -330,9 +371,9 @@ int mode;
if (!(mode & FWRITE))
error = EPERM;
else {
- *(int *)data = iplused;
- iplh = iplt = iplbuf;
- iplused = 0;
+ *(int *)data = iplused[unit];
+ iplh[unit] = iplt[unit] = iplbuf[unit];
+ iplused[unit] = 0;
}
break;
#endif /* IPFILTER_LOG */
@@ -365,16 +406,13 @@ caddr_t data;
{
register frentry_t *fp, *f, **fprev;
register frentry_t **ftail;
- frentry_t fr;
+ frentry_t frd;
frdest_t *fdp;
- struct frentry frd;
int error = 0, in;
- fp = &fr;
+ fp = &frd;
IRCOPY(data, (caddr_t)fp, sizeof(*fp));
- bzero((char *)frcache, sizeof(frcache[0]) * 2);
-
in = (fp->fr_flags & FR_INQUE) ? 0 : 1;
if (fp->fr_flags & FR_ACCOUNT) {
ftail = fprev = &ipacct[in][set];
@@ -383,8 +421,8 @@ caddr_t data;
else
return ESRCH;
- IRCOPY((char *)fp, (char *)&frd, sizeof(frd));
- fp = &frd;
+ bzero((char *)frcache, sizeof(frcache[0]) * 2);
+
if (*fp->fr_ifname) {
fp->fr_ifa = GETUNIT(fp->fr_ifname);
if (!fp->fr_ifa)
@@ -451,7 +489,8 @@ caddr_t data;
if (f)
error = EEXIST;
else {
- if ((f = (struct frentry *)KMALLOC(sizeof(*f)))) {
+ KMALLOC(f, frentry_t *, sizeof(*f));
+ if (f != NULL) {
bcopy((char *)fp, (char *)f, sizeof(*f));
f->fr_hits = 0;
f->fr_next = *ftail;
@@ -464,44 +503,48 @@ caddr_t data;
}
-#if !defined(linux)
+#ifdef _KERNEL
/*
* routines below for saving IP headers to buffer
*/
int iplopen(dev, flags
-#if _BSDI_VERSION >= 199501
+#if ((_BSDI_VERSION >= 199510) || (BSD >= 199506)) && defined(_KERNEL)
, devtype, p)
int devtype;
struct proc *p;
-#else
+# else
)
-#endif
+# endif
dev_t dev;
int flags;
{
u_int min = minor(dev);
- if (min)
+ if (2 < min)
min = ENXIO;
+ else
+ min = 0;
return min;
}
int iplclose(dev, flags
-#if _BSDI_VERSION >= 199501
+#if ((_BSDI_VERSION >= 199510) || (BSD >= 199506)) && defined(_KERNEL)
, devtype, p)
int devtype;
struct proc *p;
-#else
+# else
)
-#endif
+# endif
dev_t dev;
int flags;
{
u_int min = minor(dev);
- if (min)
+ if (2 < min)
min = ENXIO;
+ else
+ min = 0;
return min;
}
@@ -521,52 +564,57 @@ int iplread(dev, uio)
dev_t dev;
register struct uio *uio;
{
- register int ret, s;
+ register int ret, s, unit;
register size_t sz, sx;
int error;
+ unit = minor(dev);
+ if ((2 < unit) || (unit < 0))
+ return ENXIO;
+
if (!uio->uio_resid)
return 0;
- while (!iplused) {
- error = SLEEP(iplbuf, "ipl sleep");
+
+ while (!iplused[unit]) {
+ error = SLEEP(iplbuf[unit], "ipl sleep");
if (error)
return error;
}
SPLNET(s);
- sx = sz = MIN(uio->uio_resid, iplused);
- if (iplh < iplt)
- sz = MIN(sz, LOGSIZE - (iplt - iplbuf));
+ sx = sz = MIN(uio->uio_resid, iplused[unit]);
+ if (iplh[unit] < iplt[unit])
+ sz = MIN(sz, IPLLOGSIZE - (iplt[unit] - iplbuf[unit]));
sx -= sz;
# if BSD >= 199306 || defined(__FreeBSD__)
uio->uio_rw = UIO_READ;
# endif
- if (!(ret = UIOMOVE(iplt, sz, UIO_READ, uio))) {
- iplt += sz;
- iplused -= sz;
- if ((iplh < iplt) && (iplt == iplbuf + LOGSIZE))
- iplt = iplbuf;
-
- if (sx && !(ret = UIOMOVE(iplt, sx, UIO_READ, uio))) {
- iplt += sx;
- iplused -= sx;
- if ((iplh < iplt) && (iplt == iplbuf + LOGSIZE))
- iplt = iplbuf;
+ if (!(ret = UIOMOVE(iplt[unit], sz, UIO_READ, uio))) {
+ iplt[unit] += sz;
+ iplused[unit] -= sz;
+ if ((iplh[unit] < iplt[unit]) && (iplt[unit] == iplbuf[unit] + IPLLOGSIZE))
+ iplt[unit] = iplbuf[unit];
+
+ if (sx && !(ret = UIOMOVE(iplt[unit], sx, UIO_READ, uio))) {
+ iplt[unit] += sx;
+ iplused[unit] -= sx;
+ if ((iplh[unit] < iplt[unit]) && (iplt[unit] == iplbuf[unit] + IPLLOGSIZE))
+ iplt[unit] = iplbuf[unit];
}
- if (!iplused) /* minimise wrapping around the end */
- iplh = iplt = iplbuf;
+ if (!iplused[unit]) /* minimise wrapping around the end */
+ iplh[unit] = iplt[unit] = iplbuf[unit];
}
SPLX(s);
return ret;
}
# endif /* IPFILTER_LOG */
-#endif /* linux */
-#ifdef IPFILTER_LOG
-int ipllog(flags, ip, fin, m)
+# ifdef IPFILTER_LOG
+int ipllog(flags, dev, ip, fin, m)
u_int flags;
+int dev;
ip_t *ip;
register fr_info_t *fin;
struct mbuf *m;
@@ -597,16 +645,16 @@ struct mbuf *m;
mlen = (flags & FR_LOGBODY) ? MIN(ip->ip_len - hlen, 128) : 0;
len = hlen + sizeof(iplci) + mlen;
- if (iplused + len > LOGSIZE)
+ if (iplused[dev] + len > IPLLOGSIZE)
return 0;
- iplused += len;
+ iplused[dev] += len;
-# ifdef sun
+# ifdef sun
uniqtime(&iplci);
-# endif
-# if BSD >= 199306 || defined(__FreeBSD__)
+# endif
+# if BSD >= 199306 || defined(__FreeBSD__)
microtime((struct timeval *)&iplci);
-# endif
+# endif
iplci.flags = flags;
iplci.hlen = (u_char)hlen;
iplci.plen = (u_char)mlen;
@@ -619,22 +667,25 @@ struct mbuf *m;
if ((iplci.ifname[1] = ifp->if_name[1]))
if ((iplci.ifname[2] = ifp->if_name[2]))
iplci.ifname[3] = ifp->if_name[3];
-# endif
+# endif
+ if (iplh[dev] == iplbuf[dev] + IPLLOGSIZE)
+ iplh[dev] = iplbuf[dev];
+
/*
* Gauranteed to succeed from above
*/
- (void) fr_copytolog(&iplci, sizeof(iplci));
+ (void) fr_copytolog(dev, (char *)&iplci, sizeof(iplci));
for (len -= sizeof(iplci); m && len > 0; m = m->m_next, len -= hlen) {
hlen = MIN(len, m->m_len);
- if (fr_copytolog(mtod(m, char *), hlen))
+ if (fr_copytolog(dev, mtod(m, char *), hlen))
break;
}
- wakeup(iplbuf);
+ wakeup(iplbuf[dev]);
return 1;
}
-#endif /* IPFILTER_LOG */
+# endif /* IPFILTER_LOG */
/*
* send_reset - this could conceivably be a call to tcp_respond(), but that
@@ -651,22 +702,22 @@ struct tcpiphdr *ti;
if (ti->ti_flags & TH_RST)
return -1; /* feedback loop */
-#if BSD < 199306
+# if BSD < 199306
m = m_get(M_DONTWAIT, MT_HEADER);
-#else
+# else
m = m_gethdr(M_DONTWAIT, MT_HEADER);
m->m_data += max_linkhdr;
-#endif
+# endif
if (m == NULL)
return -1;
if (ti->ti_flags & TH_SYN)
tlen = 1;
m->m_len = sizeof (struct tcpiphdr);
-#if BSD >= 199306
+# if BSD >= 199306
m->m_pkthdr.len = sizeof (struct tcpiphdr);
m->m_pkthdr.rcvif = (struct ifnet *)0;
-#endif
+# endif
bzero(mtod(m, char *), sizeof(struct tcpiphdr));
ip = mtod(m, struct ip *);
tp = mtod(m, struct tcpiphdr *);
@@ -686,11 +737,11 @@ struct tcpiphdr *ti;
ip->ip_tos = ((struct ip *)ti)->ip_tos;
ip->ip_p = ((struct ip *)ti)->ip_p;
ip->ip_len = sizeof (struct tcpiphdr);
-#if BSD < 199306
+# if BSD < 199306
ip->ip_ttl = tcp_ttl;
-#else
+# else
ip->ip_ttl = ip_defttl;
-#endif
+# endif
/*
* extra 0 in case of multicast
@@ -700,13 +751,18 @@ struct tcpiphdr *ti;
}
-#ifndef IPFILTER_LKM
-void iplinit()
+# ifndef IPFILTER_LKM
+# if BSD < 199306
+int
+# else
+void
+# endif
+iplinit()
{
(void) iplattach();
ip_init();
}
-#endif
+# endif
void ipfr_fastroute(m0, fin, fdp)
@@ -738,12 +794,12 @@ frdest_t *fdp;
#if (BSD >= 199306) && !defined(__NetBSD__) && !defined(__bsdi__)
# ifdef RTF_CLONING
rtalloc_ign(ro, RTF_CLONING);
-# else
+# else
rtalloc_ign(ro, RTF_PRCLONING);
-# endif
-#else
+# endif
+# else
rtalloc(ro);
-#endif
+# endif
if (!ifp) {
if (!(fin->fin_fr->fr_flags & FR_FASTROUTE)) {
error = -2;
@@ -773,19 +829,19 @@ frdest_t *fdp;
* If small enough for interface, can just send directly.
*/
if (ip->ip_len <= ifp->if_mtu) {
-#ifndef sparc
+# ifndef sparc
ip->ip_id = htons(ip->ip_id);
ip->ip_len = htons(ip->ip_len);
ip->ip_off = htons(ip->ip_off);
-#endif
+# endif
if (!ip->ip_sum)
ip->ip_sum = in_cksum(m, hlen);
-#if BSD >= 199306
+# if BSD >= 199306
error = (*ifp->if_output)(ifp, m, (struct sockaddr *)dst,
ro->ro_rt);
-#else
+# else
error = (*ifp->if_output)(ifp, m, (struct sockaddr *)dst);
-#endif
+# endif
goto done;
}
/*
@@ -818,11 +874,11 @@ frdest_t *fdp;
error = ENOBUFS;
goto bad;
}
-#if BSD >= 199306
+# if BSD >= 199306
m->m_data += max_linkhdr;
-#else
+# else
m->m_off = MMAXOFF - hlen;
-#endif
+# endif
mhip = mtod(m, struct ip *);
bcopy((char *)ip, (char *)mhip, sizeof(*ip));
if (hlen > sizeof (struct ip)) {
@@ -843,9 +899,9 @@ frdest_t *fdp;
error = ENOBUFS; /* ??? */
goto sendorfree;
}
-#ifndef sparc
+# ifndef sparc
mhip->ip_off = htons((u_short)mhip->ip_off);
-#endif
+# endif
mhip->ip_sum = 0;
mhip->ip_sum = in_cksum(m, mhlen);
*mnext = m;
@@ -865,13 +921,13 @@ sendorfree:
m0 = m->m_act;
m->m_act = 0;
if (error == 0)
-#if BSD >= 199306
+# if BSD >= 199306
error = (*ifp->if_output)(ifp, m,
(struct sockaddr *)dst, ro->ro_rt);
-#else
+# else
error = (*ifp->if_output)(ifp, m,
(struct sockaddr *)dst);
-#endif
+# endif
else
m_freem(m);
}
@@ -885,3 +941,159 @@ bad:
m_freem(m);
goto done;
}
+#else /* #ifdef _KERNEL */
+
+
+static int no_output __P((struct ifnet *ifp, struct mbuf *m,
+ struct sockaddr *s, struct rtentry *rt))
+{
+ return 0;
+}
+
+
+# ifdef __STDC__
+static int write_output __P((struct ifnet *ifp, struct mbuf *m,
+ struct sockaddr *s, struct rtentry *rt))
+{
+ ip_t *ip = (ip_t *)m;
+# else
+static int write_output(ifp, ip)
+struct ifnet *ifp;
+ip_t *ip;
+{
+# endif
+ FILE *fp;
+ char fname[32];
+
+#if (defined(NetBSD) && (NetBSD <= 1991011) && (NetBSD >= 199606))
+ sprintf(fname, "/tmp/%s", ifp->if_xname);
+ if ((fp = fopen(fname, "a"))) {
+ fclose(fp);
+ }
+#else
+ sprintf(fname, "/tmp/%s%d", ifp->if_name, ifp->if_unit);
+ if ((fp = fopen(fname, "a"))) {
+ fwrite((char *)ip, ntohs(ip->ip_len), 1, fp);
+ fclose(fp);
+ }
+#endif
+}
+
+
+struct ifnet *get_unit(name)
+char *name;
+{
+ struct ifnet *ifp, **ifa;
+#if (defined(NetBSD) && (NetBSD <= 1991011) && (NetBSD >= 199606))
+ for (ifa = ifneta; ifa && (ifp = *ifa); ifa++) {
+ if (!strcmp(name, ifp->if_xname))
+ return ifp;
+ }
+#else
+ char ifname[32], *s;
+
+ for (ifa = ifneta; ifa && (ifp = *ifa); ifa++) {
+ (void) sprintf(ifname, "%s%d", ifp->if_name, ifp->if_unit);
+ if (!strcmp(name, ifname))
+ return ifp;
+ }
+#endif
+
+ if (!ifneta) {
+ ifneta = (struct ifnet **)malloc(sizeof(ifp) * 2);
+ ifneta[1] = NULL;
+ ifneta[0] = (struct ifnet *)calloc(1, sizeof(*ifp));
+ nifs = 1;
+ } else {
+ nifs++;
+ ifneta = (struct ifnet **)realloc(ifneta,
+ (nifs + 1) * sizeof(*ifa));
+ ifneta[nifs] = NULL;
+ ifneta[nifs - 1] = (struct ifnet *)malloc(sizeof(*ifp));
+ }
+ ifp = ifneta[nifs - 1];
+
+#if (defined(NetBSD) && (NetBSD <= 1991011) && (NetBSD >= 199606))
+ strncpy(ifp->if_xname, name, sizeof(ifp->if_xname));
+#else
+ for (s = name; *s && !isdigit(*s); s++)
+ ;
+ if (*s && isdigit(*s)) {
+ ifp->if_unit = atoi(s);
+ ifp->if_name = (char *)malloc(s - name + 1);
+ strncpy(ifp->if_name, name, s - name);
+ ifp->if_name[s - name] = '\0';
+ } else {
+ ifp->if_name = strdup(name);
+ ifp->if_unit = -1;
+ }
+#endif
+ ifp->if_output = no_output;
+ return ifp;
+}
+
+
+void init_ifp()
+{
+ FILE *fp;
+ struct ifnet *ifp, **ifa;
+ char fname[32];
+#if (defined(NetBSD) && (NetBSD <= 1991011) && (NetBSD >= 199606))
+ for (ifa = ifneta; ifa && (ifp = *ifa); ifa++) {
+ ifp->if_output = write_output;
+ sprintf(fname, "/tmp/%s", ifp->if_xname);
+ if ((fp = fopen(fname, "w")))
+ fclose(fp);
+ }
+#else
+
+ for (ifa = ifneta; ifa && (ifp = *ifa); ifa++) {
+ ifp->if_output = write_output;
+ sprintf(fname, "/tmp/%s%d", ifp->if_name, ifp->if_unit);
+ if ((fp = fopen(fname, "w")))
+ fclose(fp);
+ }
+#endif
+}
+
+
+void ipfr_fastroute(ip, fin, fdp)
+ip_t *ip;
+fr_info_t *fin;
+frdest_t *fdp;
+{
+ struct ifnet *ifp = fdp->fd_ifp;
+
+ if (!ifp)
+ return; /* no routing table out here */
+
+ ip->ip_len = htons((u_short)ip->ip_len);
+ ip->ip_off = htons((u_short)(ip->ip_off | IP_MF));
+ ip->ip_sum = 0;
+ (*ifp->if_output)(ifp, (void *)ip, NULL, 0);
+}
+
+
+void ipllog()
+{
+ verbose("l");
+}
+
+
+int send_reset(ip, ifp)
+ip_t *ip;
+struct ifnet *ifp;
+{
+ verbose("- TCP RST sent\n");
+ return 0;
+}
+
+
+int icmp_error(ip, ifp)
+ip_t *ip;
+struct ifnet *ifp;
+{
+ verbose("- TCP RST sent\n");
+ return 0;
+}
+#endif /* _KERNEL */
OpenPOWER on IntegriCloud