Date: Sat, 29 Jun 1996 17:13:44 +0200 (MET DST) From: Juergen Lock <nox@jelal.hb.north.de> To: alex@fa.tdktca.com (Alex Nash) Cc: davidg@Root.COM, jhay@mikom.csir.co.za, nasim!FreeBSD.org!stable@jelal.hb.north.de Subject: Re: ipfw (was: Re: lockups.) Message-ID: <199606291513.RAA00434@saturn.hb.north.de> In-Reply-To: <31D446BA.9BDE134@fa.tdktca.com> from Alex Nash at "Jun 28, 96 03:55:22 pm"
next in thread | previous in thread | raw e-mail | index | archive | help
Alex Nash writes:
> > > Nifty trick, I like it. I just wanted to point out one thing: this
> > > is only necessary if you plan to boot kernels supped before Feb 23,
> > > not 0696.
> >
> > Umm you are thinking of -current maybe? :) or my -stable must have
> > had an, errm, interesting problem for quite a while now...
> >
> > actually no (thanks cvs :), looks like current is also affected:
>
> You mean -stable. Yes, as of Monday this week, -current and -stable
> are in sync.
Actually i was talking about the (date of the) struct ip_fw change,
but nevermind.
> As far as accepting both versions: getting the new kernel to accept
> the old struct would be fairly easy, the new ip_fw struct has some
> extensions and two new flags, all easily defaulted.
like... below? :)
>
> Alex
ATB,
Juergen
Index: /www/usr/home/cvs/src/src/sys/netinet/ip_fw.c
===================================================================
RCS file: /home/cvs/cvs/src/sys/netinet/ip_fw.c,v
retrieving revision 1.14.4.9
diff -u -r1.14.4.9 ip_fw.c
--- ip_fw.c 1996/06/25 03:16:41 1.14.4.9
+++ ip_fw.c 1996/06/29 14:58:29
@@ -600,14 +600,31 @@
{
struct ip_fw *frwl;
- if (m->m_len != sizeof(struct ip_fw)) {
- dprintf(("ip_fw_ctl: len=%d, want %d\n", m->m_len,
- sizeof(struct ip_fw)));
- return (NULL);
+ static struct ip_fw ftmp64;
+ static int warned;
+ int f_mask = ~IP_FW_F_MASK;
+
+ /* backward compatibility hack for older ipfw(8)... */
+ if (m->m_len == 64 && sizeof(struct ip_fw) == 100) {
+ frwl = mtod(m, struct ip_fw *);
+ bcopy(frwl, &ftmp64, (size_t)64);
+ frwl = &ftmp64;
+ /* old IP_FW_F_MASK */
+ f_mask = ~0xfff;
+ if (!warned) {
+ dprintf(("ip_fw_ctl: old format ip_fw struct (converted), need to update ipfw(8)?\n"));
+ ++warned;
+ }
+ } else {
+ if (m->m_len != sizeof(struct ip_fw)) {
+ dprintf(("ip_fw_ctl: len=%d, want %d\n", m->m_len,
+ sizeof(struct ip_fw)));
+ return (NULL);
+ }
+ frwl = mtod(m, struct ip_fw *);
}
- frwl = mtod(m, struct ip_fw *);
- if ((frwl->fw_flg & ~IP_FW_F_MASK) != 0) {
+ if ((frwl->fw_flg & f_mask) != 0) {
dprintf(("ip_fw_ctl: undefined flag bits set (flags=%x)\n",
frwl->fw_flg));
return (NULL);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199606291513.RAA00434>
