diff options
| -rw-r--r-- | include/net.h | 6 | ||||
| -rw-r--r-- | net/net.c | 6 | 
2 files changed, 9 insertions, 3 deletions
| diff --git a/include/net.h b/include/net.h index a5a256bcd..d2d394f0d 100644 --- a/include/net.h +++ b/include/net.h @@ -200,6 +200,12 @@ typedef struct {  	ushort		udp_xsum;	/* Checksum			*/  } IP_t; +#define IP_OFFS		0x1fff /* ip offset *= 8 */ +#define IP_FLAGS	0xe000 /* first 3 bits */ +#define IP_FLAGS_RES	0x8000 /* reserved */ +#define IP_FLAGS_DFRAG	0x4000 /* don't fragments */ +#define IP_FLAGS_MFRAG	0x2000 /* more fragments */ +  #define IP_HDR_SIZE_NO_UDP	(sizeof (IP_t) - 8)  #define IP_HDR_SIZE		(sizeof (IP_t)) @@ -735,7 +735,7 @@ int PingSend(void)  	ip->ip_tos   = 0;  	ip->ip_len   = htons(IP_HDR_SIZE_NO_UDP + 8);  	ip->ip_id    = htons(NetIPID++); -	ip->ip_off   = htons(0x4000);	/* No fragmentation */ +	ip->ip_off   = htons(IP_FLAGS_DFRAG);	/* Don't fragment */  	ip->ip_ttl   = 255;  	ip->ip_p     = 0x01;		/* ICMP */  	ip->ip_sum   = 0; @@ -1399,7 +1399,7 @@ NetReceive(volatile uchar * inpkt, int len)  		if ((ip->ip_hl_v & 0xf0) != 0x40) {  			return;  		} -		if (ip->ip_off & htons(0x1fff)) { /* Can't deal w/ fragments */ +		if (ip->ip_off & htons(IP_OFFS)) { /* Can't deal w/ fragments */  			return;  		}  		/* can't deal with headers > 20 bytes */ @@ -1698,7 +1698,7 @@ NetSetIP(volatile uchar * xip, IPaddr_t dest, int dport, int sport, int len)  	ip->ip_tos   = 0;  	ip->ip_len   = htons(IP_HDR_SIZE + len);  	ip->ip_id    = htons(NetIPID++); -	ip->ip_off   = htons(0x4000);	/* No fragmentation */ +	ip->ip_off   = htons(IP_FLAGS_DFRAG);	/* Don't fragment */  	ip->ip_ttl   = 255;  	ip->ip_p     = 17;		/* UDP */  	ip->ip_sum   = 0; |