⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inet.cc

📁 南京航空航天大学开发的一个类Unix和Linux的操作系统,好不好看看就知道了,
💻 CC
字号:
#include <lib/root.h> #include <lib/printf.h>#include "inet.h"int inetequal(u32_t me, u32_t him){	u32_t mask = 0xffffffff;	if (me == him)		return 1;	for (int i = 4; i--; me >>= 8, him >>= 8, mask >>= 8) {		if ((me & 0xff) == (him & 0xff))			continue;		if ((me == 0) || (me == mask))			return 1;		return 0;	}	return 1;}/* printf("%s %s", inet_ntoa(src), inet_ntoa(dst)); will be ok now */char * inetntoa(u32_t net32){	static char bufs[4][16];	static uint index = 0;	char * buf = bufs[index++ & 3];	u8_t * p = (u8_t *) &net32;	sprintf(buf, "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);	return buf;}u32_t inetaton(char * c){	u8_t tmp[4];	for (int i = 0; i < 4; i++) {		tmp[i] = 0;		while ((*c >= '0') && (*c <='9')) {			tmp[i] *= 10;			tmp[i] += *c - '0';			c++;		}		c++;	}	u32_t host32 = (tmp[0] << 24) | (tmp[1] << 16) | (tmp[2] << 8) | tmp[3];	return htonl(host32);} /* sums up all 16 bit words in a memory portion. also include any odd byte */static u32_t sumup(void *v, int n8){	u16_t * u16 = (u16_t *) v;	u32_t sum = 0;	for (int n16 = n8 >> 1; n16--; u16++)		sum += *u16;	if (n8 & 1)		sum += *(u8_t*)u16;        return sum;}static inline u16_t convert(u32_t sum){	sum = (sum >> 16) + (sum & 0xffff);	sum += sum >> 16;	return ~(sum & 0xffff);} u16_t ipchksum(void *v, int n8){        u32_t sum = sumup(v, n8);        return convert(sum); }/* struct pseudo {          u32_t saddr;          u32_t daddr;          u8_t zero;          u8_t proto;          u16_t datalen; *//* saddr, daddr is in network-byte-order */u16_t ipchksumpseudo(u32_t saddr, u32_t daddr, u8_t proto, u16_t datalen, void *data){        u32_t sum = 0;        sum += saddr & 0xffff;        sum += saddr >> 16;        sum += daddr & 0xffff;        sum += daddr >> 16;        sum += htons(datalen);        sum += htons((u16_t)(proto));         sum += sumup(data, datalen);        return convert(sum);}u16_t udpchksum(u32_t saddr, u32_t daddr, u16_t datalen, void *data){	return ipchksumpseudo(saddr, daddr, IPPROTOUDP, datalen, data);}u16_t tcpchksum(u32_t saddr, u32_t daddr, u16_t datalen, void *data){	return ipchksumpseudo(saddr, daddr, IPPROTOTCP, datalen, data);}u32_t inetmask(u32_t ipaddr){        ipaddr = ntohl(ipaddr);        if (INCLASSA(ipaddr))                return htonl(INCLASSANET);        if (INCLASSB(ipaddr))                return htonl(INCLASSBNET);        return htonl(INCLASSCNET);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -