shithub: riscv

Download patch

ref: 94333d83ab5df8bd51b148a69a33aa6b335c6fc6
parent: 90b4fe9cf65bb24b55472ce2e32a7dbc3c5e7f97
author: cinap_lenrek <[email protected]>
date: Tue Jun 9 06:04:04 EDT 2015

ip: fix wrong radix for iphash() (thanks yoann padioleau)

yoann padioleaus report on 9fans:

> I think I’ve found a bug in the network stack.
> in 9/ip/ip.h there is
> struct Ipht
> {
> 	Lock;
> 	Iphash	*tab[Nipht];
> };
>
> where Night is 521,
>
> but then in 9/ip/ipaux.c there is
>
> ulong
> iphash(uchar *sa, ushort sp, uchar *da, ushort dp)
> {
> 	return ((sa[IPaddrlen-1]<<24) ^ (sp << 16) ^ (da[IPaddrlen-1]<<8) ^ dp ) % Nhash;
> }
>
> where Nhash is just 64,

--- a/sys/src/9/ip/ip.h
+++ b/sys/src/9/ip/ip.h
@@ -37,7 +37,6 @@
 {
 	Addrlen=	64,
 	Maxproto=	20,
-	Nhash=		64,
 	Maxincall=	10,
 	Nchans=		1024,
 	MAClen=		16,		/* longest mac address */
--- a/sys/src/9/ip/ipaux.c
+++ b/sys/src/9/ip/ipaux.c
@@ -238,7 +238,7 @@
 ulong
 iphash(uchar *sa, ushort sp, uchar *da, ushort dp)
 {
-	return ((sa[IPaddrlen-1]<<24) ^ (sp << 16) ^ (da[IPaddrlen-1]<<8) ^ dp ) % Nhash;
+	return ((sa[IPaddrlen-1]<<24) ^ (sp << 16) ^ (da[IPaddrlen-1]<<8) ^ dp ) % Nipht;
 }
 
 void