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

📄 net.h

📁 UCOS-ii对于网络的支持代码
💻 H
📖 第 1 页 / 共 2 页
字号:


#define GETSHORT(s, cp) { \
	(s) = *(cp)++ << 8; \
	(s) |= *(cp)++; \
}
#define PUTSHORT(s, cp) { \
	*(cp)++ = (u_char) ((s) >> 8); \
	*(cp)++ = (u_char) (s); \
}

#define GETLONG(l, cp) { \
	(l) = *(cp)++ << 8; \
	(l) |= *(cp)++; (l) <<= 8; \
	(l) |= *(cp)++; (l) <<= 8; \
	(l) |= *(cp)++; \
}
#define PUTLONG(l, cp) { \
	*(cp)++ = (u_char) ((l) >> 24); \
	*(cp)++ = (u_char) ((l) >> 16); \
	*(cp)++ = (u_char) ((l) >> 8); \
	*(cp)++ = (u_char) (l); \
}


#define INCPTR(n, cp)	((cp) += (n))
#define DECPTR(n, cp)	((cp) -= (n))

#define BCMP(s0, s1, l)		memcmp((u_char *)(s0), (u_char *)(s1), (l))
#define BCOPY(s, d, l)		memcpy((d), (s), (l))
#define bcopy(s, d, l)		memcpy((d), (s), (l))
#define BZERO(s, n)			memset(s, 0, n)
#define bzero(s, n)			memset(s, 0, n)
#define EXIT(u)				panic("Net");

#define PRINTMSG(m, l)	{ m[l] = '\0'; trace(LOG_INFO, "Remote message: %Z", m); }

/*
 * MAKEHEADER - Add PPP Header fields to a packet.
 */
#define MAKEHEADER(p, t) { \
    PUTCHAR(PPP_ALLSTATIONS, p); \
    PUTCHAR(PPP_UI, p); \
    PUTSHORT(t, p); }

/*
 * Definitions of bits in internet address integers.
 * On subnets, the decomposition of addresses to host and net parts
 * is done according to subnet mask, not the masks here.
 */
#define	IN_CLASSA(i)		(((long)(i) & 0x80000000) == 0)
#define	IN_CLASSA_NET		0xff000000
#define	IN_CLASSA_NSHIFT	24
#define	IN_CLASSA_HOST		0x00ffffff
#define	IN_CLASSA_MAX		128

#define	IN_CLASSB(i)		(((long)(i) & 0xc0000000) == 0x80000000)
#define	IN_CLASSB_NET		0xffff0000
#define	IN_CLASSB_NSHIFT	16
#define	IN_CLASSB_HOST		0x0000ffff
#define	IN_CLASSB_MAX		65536

#define	IN_CLASSC(i)		(((long)(i) & 0xe0000000) == 0xc0000000)
#define	IN_CLASSC_NET		0xffffff00
#define	IN_CLASSC_NSHIFT	8
#define	IN_CLASSC_HOST		0x000000ff

#define	IN_CLASSD(i)		(((long)(i) & 0xf0000000) == 0xe0000000)
#define	IN_CLASSD_NET		0xf0000000	/* These ones aren't really */
#define	IN_CLASSD_NSHIFT	28		/* net and host fields, but */
#define	IN_CLASSD_HOST		0x0fffffff	/* routing needn't know.    */
#define	IN_MULTICAST(i)		IN_CLASSD(i)

#define	IN_EXPERIMENTAL(i)	(((long)(i) & 0xf0000000) == 0xf0000000)
#define	IN_BADCLASS(i)		(((long)(i) & 0xf0000000) == 0xf0000000)

#define	INADDR_ANY		(u_long)0x00000000
#define	INADDR_BROADCAST	(u_long)0xffffffff	/* must be masked */
#ifndef KERNEL
#define	INADDR_NONE		0xffffffff		/* -1 return */
#endif

#define	INADDR_UNSPEC_GROUP	(u_long)0xe0000000	/* 224.0.0.0 */
#define	INADDR_ALLHOSTS_GROUP	(u_long)0xe0000001	/* 224.0.0.1 */
#define	INADDR_MAX_LOCAL_GROUP	(u_long)0xe00000ff	/* 224.0.0.255 */

#define	IN_LOOPBACKNET		127			/* official! */

/*
 * Error return codes from gethostbyname() and gethostbyaddr()
 * (left in extern int h_errno).
 */

#define	HOST_NOT_FOUND	1 /* Authoritative Answer Host not found */
#define	TRY_AGAIN	2 /* Non-Authoritive Host not found, or SERVERFAIL */
#define	NO_RECOVERY	3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
#define	NO_DATA		4 /* Valid name, no data record of requested type */
#define	NO_ADDRESS	NO_DATA		/* no address, look for MX record *//*

/*
 * Definitions for IP type of service (ip_tos)
 */
#define	IPTOS_LOWDELAY		0x10
#define	IPTOS_THROUGHPUT	0x08
#define	IPTOS_RELIABILITY	0x04


/************************
*** PUBLIC DATA TYPES ***
************************/
/*
 * Structure used to store most network protocol addresses.
 */
typedef struct sockaddr {
	UCHAR	na_len;				/* total length */
	UCHAR	na_family;			/* address family */
	char	na_data[14];		/* actually longer; address value */
} NetAddr;

/*
 * Internet address (a structure for historical reasons)
 */
struct in_addr {
	u_long s_addr;
};

/*
 * Socket address, internet style.
 */
struct sockaddr_in {
	u_char	sin_len;
	u_char	sin_family;
	u_short	sin_port;
	struct	in_addr sin_addr;
	char	sin_zero[8];
};
#define ipAddr sin_addr.s_addr

/* TCP/IP Connection structure. */
typedef struct {
	struct sockaddr_in local;
	struct sockaddr_in remote;
} Connection;
#define localIPAddr local.sin_addr.s_addr
#define localPort local.sin_port
#define remoteIPAddr remote.sin_addr.s_addr
#define remotePort remote.sin_port


/*
 * The following struct gives the addresses of procedures to call
 * for a particular protocol.
 */
struct protent {
    u_short protocol;		/* PPP protocol number */
    /* Initialization procedure */
    void (*init) __P((int unit));
    /* Process a received packet */
    void (*input) __P((int unit, u_char *pkt, int len));
    /* Process a received protocol-reject */
    void (*protrej) __P((int unit));
    /* Lower layer has come up */
    void (*lowerup) __P((int unit));
    /* Lower layer has gone down */
    void (*lowerdown) __P((int unit));
    /* Open the protocol */
    void (*open) __P((int unit));
    /* Close the protocol */
    void (*close) __P((int unit, char *reason));
    /* Print a packet in readable form */
    int  (*printpkt) __P((u_char *pkt, int len,
			  void (*printer) __P((void *, char *, ...)),
			  void *arg));
    /* Process a received data packet */
    void (*datainput) __P((int unit, u_char *pkt, int len));
    int  enabled_flag;		/* 0 iff protocol is disabled */
    char *name;			/* Text name of protocol */
    /* Check requested options, assign defaults */
    void (*check_options) __P((void));
    /* Configure interface for demand-dial */
    int  (*demand_conf) __P((int unit));
    /* Say whether to bring up link for this pkt */
    int  (*active_pkt) __P((u_char *pkt, int len));
};

#ifdef XXX
/* All network communication buffers must use this structure. */
typedef struct NetBuffer_s {
	UINT		nBufSize;		/* Size of the buffer area (max count). */
	UINT		nBufCount;		/* Count of bytes in buffer. */
	char		nBufLock;		/* Buffer being read or written when true. */
	Proto		*nBufDestProto;	/* Destination protocol. */
	Proto		*nBufSrcProto;	/* Source protocol. */
	char		nBufData[1];	/* Start of the buffer data. */
} NetBuffer;
#endif

/*
 * The following structure records the time in seconds since
 * the last NP packet was sent or received.
 */
struct ppp_idle {
    u_short xmit_idle;		/* seconds since last NP packet sent */
    u_short recv_idle;		/* seconds since last NP packet received */
};

/*
 * Structures returned by network
 * data base library.  All addresses
 * are supplied in host order, and
 * returned in network order (suitable
 * for use in system calls).
 */
struct	hostent {
	char	*h_name;		/* official name of host */
	char	**h_aliases;	/* alias list */
	int		h_addrtype;		/* host address type */
	int		h_length;		/* length of address */
	char	**h_addr_list;	/* list of addresses from name server */
#define	h_addr	h_addr_list[0]	/* address, for backward compatiblity */
};

/*
 * Assumption here is that a network number
 * fits in 32 bits -- probably a poor one.
 */
struct	netent {
	char	*n_name;		/* official name of net */
	char	**n_aliases;	/* alias list */
	int		n_addrtype;		/* net address type */
	u_long	n_net;			/* network # */
};

struct	servent {
	char	*s_name;		/* official service name */
	char	**s_aliases;	/* alias list */
	int		s_port;			/* port # */
	char	*s_proto;		/* protocol to use */
};

struct	protoent {
	char	*p_name;		/* official protocol name */
	char	**p_aliases;	/* alias list */
	int		p_proto;	/* protocol # */
};

/*
 * Modified struct hostent from <netdb.h>
 *
 * "Structures returned by network data base library.  All addresses
 * are supplied in host order, and returned in network order (suitable
 * for use in system calls)."
 */

typedef struct	{
	char	*name;		/* official name of host */
	char	**domains;	/* domains it serves */
	char	**addrList;	/* list of addresses from name server */
} ServerInfo;

typedef struct	{
	char	*name;		/* official name of host */
	char	**aliases;	/* alias list */
	char	**addrList;	/* list of addresses from name server */
	int		addrType;	/* host address type */
	int		addrLen;	/* length of address */
	ServerInfo **servers;
} HostInfo;

typedef	char *		caddr_t;	/* core address */


/*****************************
*** PUBLIC DATA STRUCTURES ***
*****************************/
extern int	auth_required;		/* Peer is required to authenticate */
extern u_short idle_time_limit;	/* Shut down link if idle for this long */
extern int	maxconnect;			/* Maximum connect time (seconds) */
extern int	refuse_pap;			/* Don't wanna auth. ourselves with PAP */
extern int	refuse_chap;		/* Don't wanna auth. ourselves with CHAP */

extern char user[];				/* Username for PAP */
extern char	passwd[];			/* Password for PAP */
extern char	our_name[];			/* Our name for authentication purposes */
extern char	hostname[];			/* Our hostname */
extern char	remote_name[];		/* Peer's name for authentication */
extern int	explicit_remote;	/* remote_name specified with remotename opt */
extern int	usehostname;		/* Use hostname for our_name */

extern u_int32_t	netMask;	/* IP netmask to set on interface */
extern u_int32_t	localHost;	/* Our IP address in */

extern struct protent *protocols[];/* Table of pointers to supported protocols */


/***********************
*** PUBLIC FUNCTIONS ***
************************/
/*
 * netInit - Initialize the network communications subsystem.
 */
void netInit(void);

/*
 * Set the login user name and password for login and authentication
 *	purposes.  Using globals this way is rather hokey but until we
 *	fix some other things (like implementing a 2 step PPP open),
 *	this will do for now.
 */
void netSetLogin(const char *luser, const char *lpassword);

/*
 * inChkSum - Compute the internet ones complement 16 bit checksum for a given
 * length of a network buffer chain starting at offset off0.
 * Return the complement of the checksum in network byte order.
 */
u_short inChkSum(NBuf *nb, int len, int off0);

/* Convert a host long to a network long.  */
#define HTONL(n) (n = htonl(n))
extern u_long htonl (u_long __arg);

/* Convert a host short to a network short.  */
#define HTONS(n) (n = htons(n))
extern u_short htons (u_short __arg);

/* Convert a network long to a host long.  */
#define NTOHL(n) (n = ntohl(n))
extern u_long ntohl (u_long __arg);

/* Convert a network short to a host short.  */
#define NTOHS(n) (n = ntohs(n))
extern u_short ntohs (u_short __arg);

/*
 * print_string - print a readable representation of a string using
 * printer.
 */
void print_string(
	char *p,
	int len,
	void (*printer) __P((void *, char *, ...)),
	void *arg
);

void			endhostent __P((void));
void			endnetent __P((void));
void			endprotoent __P((void));
void			endservent __P((void));
struct hostent	*gethostbyaddr __P((const char *, int, int));
struct hostent	*gethostbyname __P((const char *));
struct hostent	*gethostent __P((void));
struct netent	*getnetbyaddr __P((long, int)); /* u_long? */
struct netent	*getnetbyname __P((const char *));
struct netent	*getnetent __P((void));
struct protoent	*getprotobyname __P((const char *));
struct protoent	*getprotobynumber __P((int));
struct protoent	*getprotoent __P((void));
struct servent	*getservbyname __P((const char *, const char *));
struct servent	*getservbyport __P((int, const char *));
struct servent	*getservent __P((void));
void			herror __P((const char *));
char			*hstrerror __P((int));
void			sethostent __P((int));
/* void			sethostfile __P((const char *)); */
void			setnetent __P((int));
void			setprotoent __P((int));
void			setservent __P((int));

u_int32_t GetMask __P((u_int32_t)); /* Get appropriate netmask for address */

/* in_canforward() - Dummy always succeeds. */
#define in_canforward(d) !0


#endif

⌨️ 快捷键说明

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