From 109d3225907352e17c670a7512611d11dc5b2e4b Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Sat, 9 May 1998 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1998-05-09 --- ip/devip.c | 6 ++++++ ip/icmp.c | 17 +++++++++++++++-- ip/ip.h | 1 + ip/udp.c | 9 +++------ pc/vgamga2164w.c | 4 ++-- 5 files changed, 27 insertions(+), 10 deletions(-) diff --git a/ip/devip.c b/ip/devip.c index 28e970489a7741ac644d8bb743e5d0622808ef95..0a748ead8a1c8dd63416f546c6cf3c195a9c1ae7 100644 --- a/ip/devip.c +++ b/ip/devip.c @@ -1099,6 +1099,12 @@ Fsrcvpcol(Fs* f, uchar proto) return f->t2p[proto]; } +Proto* +Fsrcvpcolx(Fs *f, uchar proto) +{ + return f->t2p[proto]; +} + Conv* Fsnewcall(Conv *c, uchar *raddr, ushort rport, uchar *laddr, ushort lport) { diff --git a/ip/icmp.c b/ip/icmp.c index 4fa21dd6edf420537349c2d344b21f5d8ba9e4b7..bcf6e6cea1b77cd57432c7f45286f8cd0d443b40 100644 --- a/ip/icmp.c +++ b/ip/icmp.c @@ -141,8 +141,21 @@ icmpnoconv(Fs *f, Block *bp) { Block *nbp; Icmp *p, *np; + int i; + uchar addr[IPaddrlen]; p = (Icmp *)bp->rp; + + /* only do this for unicast sources and destinations */ + v4tov6(addr, p->dst); + i = ipforme(f, addr); + if((i&Runi) == 0) + return; + v4tov6(addr, p->src); + i = ipforme(f, addr); + if((i&Runi) == 0) + return; + netlog(f, Logicmp, "sending icmpnoconv -> %V\n", p->src); nbp = allocb(ICMP_IPSIZE + ICMP_HDRSIZE + ICMP_IPSIZE + 8); nbp->wp += ICMP_IPSIZE + ICMP_HDRSIZE + ICMP_IPSIZE + 8; @@ -263,7 +276,7 @@ icmpiput(Proto *icmp, uchar*, Block *bp) goto raise; } p = (Icmp *)bp->rp; - pr = Fsrcvpcol(icmp->f, p->proto); + pr = Fsrcvpcolx(icmp->f, p->proto); if(pr != nil && pr->advise != nil) { (*pr->advise)(pr, bp, msg); return; @@ -282,7 +295,7 @@ icmpiput(Proto *icmp, uchar*, Block *bp) goto raise; } p = (Icmp *)bp->rp; - pr = Fsrcvpcol(icmp->f, p->proto); + pr = Fsrcvpcolx(icmp->f, p->proto); if(pr != nil && pr->advise != nil) { (*pr->advise)(pr, bp, m2); return; diff --git a/ip/ip.h b/ip/ip.h index c4ce94c3417b9bf9c2b7460069589613fd3b354f..20a0642832ad0823d23d42aabdce8171b66c1f74 100644 --- a/ip/ip.h +++ b/ip/ip.h @@ -264,6 +264,7 @@ int Fsproto(Fs*, Proto*); int Fsbuiltinproto(Fs*, uchar); Conv* Fsprotoclone(Proto*, char*); Proto* Fsrcvpcol(Fs*, uchar); +Proto* Fsrcvpcolx(Fs*, uchar); char* Fsstdconnect(Conv*, char**, int); char* Fsstdannounce(Conv*, char**, int); char* Fsstdbind(Conv*, char**, int); diff --git a/ip/udp.c b/ip/udp.c index 7ef6a3757c8ad7f316b8e54dc231e24a13694c39..436349381762f21d67d545a4bb34196970501837 100644 --- a/ip/udp.c +++ b/ip/udp.c @@ -284,12 +284,9 @@ udpiput(Proto *udp, uchar *ia, Block *bp) upriv->ustats.udpNoPorts++; netlog(f, Logudp, "udp: no conv %I!%d -> %I!%d\n", raddr, rport, laddr, lport); - /* don't complain about broadcasts... */ - if(ipforme(f, raddr) == 0){ - uh->Unused = ottl; - hnputs(uh->udpplen, olen); - icmpnoconv(f, bp); - } + uh->Unused = ottl; + hnputs(uh->udpplen, olen); + icmpnoconv(f, bp); freeblist(bp); return; } diff --git a/pc/vgamga2164w.c b/pc/vgamga2164w.c index da9bdeaff3603e59e3099ab449d2e11161400030..0239dde7b764ccb1f45cb7d520bf7d553346a668 100644 --- a/pc/vgamga2164w.c +++ b/pc/vgamga2164w.c @@ -54,7 +54,7 @@ mga2164wlinear(VGAscr* scr, int* size, int* align) if(p = mgapcimatch()){ aperture = p->mem[p->did==MGA2064? 1 : 0].bar & ~0x0F; - *size = 16*1024*1024; + *size = (p->did==MGA2064? 8 :16)*1024*1024; } else aperture = 0; @@ -117,7 +117,7 @@ mga2164wenable(VGAscr* scr) scr->io = (ulong)KADDR(scr->io); /* need to map frame buffer here too, so vga can find memory size */ - size = 16*1024*1024; + size = (p->did==MGA2064? 8 :16)*1024*1024; align = 0; aperture = mga2164wlinear(scr, &size, &align); if(aperture) {