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

📄 nrhdr.c

📁 嵌入式TCP/IP协议栈。 C 源码
💻 C
字号:
/* Functions for level 3 net/rom support
 */
#include "global.h"
#include "mbuf.h"
#include "ax25.h"
#include "netrom.h"
#include "lapb.h"
#include <ctype.h>

/* Convert a net/rom network header to host format structure
 * Return -1 if error, 0 if OK
 */

int
ntohnr3(hdr,bpp)
register struct nr3hdr *hdr;	/* output structure */
struct mbuf **bpp;
{
	int ttl;
	
	if(pullup(bpp,hdr->source,AXALEN) < AXALEN)
		return -1;

	if(pullup(bpp,hdr->dest,AXALEN) < AXALEN)
		return -1;

	if((ttl = PULLCHAR(bpp)) == -1)
		return -1;

	hdr->ttl = ttl;

	return 0;
}

/* Convert a host-format net/rom level 3 header into an mbuf ready
 * for transmission.
 */

struct mbuf *
htonnr3(hdr)
register struct nr3hdr *hdr;
{
	struct mbuf *rbuf;
	register uint8 *cp;

	if(hdr == (struct nr3hdr *) NULL)
		return NULL;

	/* Allocate space for return buffer */
	if((rbuf = alloc_mbuf(NR3HLEN)) == NULL)
		return NULL;

	rbuf->cnt = NR3HLEN;

	/* Now convert */
	cp = rbuf->data;

	memcpy(cp,hdr->source,AXALEN);
	cp[ALEN] &= ~E;	/* source E-bit is always off */
	cp += AXALEN;
	memcpy(cp,hdr->dest,AXALEN);
	cp[ALEN] |= E;		/* destination E-bit always set */
	cp += AXALEN;
	*cp = hdr->ttl;

	return rbuf;
}

/* Convert a net/rom routing broadcast destination subpacket from
 * network format to a host format structure.  Return -1 if error,
 * 0 if OK.
 */
int
ntohnrdest(ds,bpp)
register struct nr3dest *ds;
struct mbuf **bpp;
{
	int quality;

	/* get destination callsign */
	if(pullup(bpp,ds->dest,AXALEN) < AXALEN)
		return -1;

	/* get destination alias */
	if(pullup(bpp,ds->alias,ALEN) < ALEN)
		return -1;
	ds->alias[ALEN] = '\0';

	/* get best neighbor callsign */
	if(pullup(bpp,ds->neighbor,AXALEN) < AXALEN)
		return -1;

	/* get route quality */
	if((quality = PULLCHAR(bpp)) == -1)
		return -1;
	ds->quality = quality;

	return 0;
}

/* Convert a host-format net/rom destination subpacket into an
 * mbuf ready for transmission as part of a route broadcast
 * packet.
 */
struct mbuf *
htonnrdest(ds)
register struct nr3dest *ds;
{
	struct mbuf *rbuf;
	register uint8 *cp;

	if(ds == (struct nr3dest *) NULL)
		return NULL;

	/* Allocate space for return buffer */
	if((rbuf = alloc_mbuf(NRRTDESTLEN)) == NULL)
		return NULL;

	rbuf->cnt = NRRTDESTLEN;

	cp = rbuf->data;

	memcpy(cp,ds->dest,AXALEN);
	cp += AXALEN;

	memcpy(cp,ds->alias,ALEN);
	cp += ALEN;

	memcpy(cp,ds->neighbor,AXALEN);
	cp += AXALEN;

	*cp = ds->quality;

	return rbuf;
}

⌨️ 快捷键说明

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