亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? nrcmd.c

?? TCPIP協議包
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* net/rom user command processing
 */

#include <stdio.h>
#include <ctype.h>
#include "global.h"
#include "mbuf.h"
#include "ax25.h"
#include "mailbox.h"
#include "netrom.h"
#include "nr4.h"
#include "timer.h"
#include "iface.h"
#include "lapb.h"
#include "cmdparse.h"
#include "session.h"
#include "socket.h"
#include "commands.h"

uint8 Nr4user[AXALEN];

char *Nr4states[] = {
	"Disconn",
	"Conn Pend",
	"Connected",
	"Disc Pend",
	"Listening"
} ;

char *Nr4reasons[] = {
	"Normal",
	"By Peer",
	"Timeout",
	"Reset",
	"Refused"
} ;
static int dobcnodes(int argc,char *argv[],void *p);
static int dointerface(int argc,char *argv[],void *p);
static int donfadd(int argc,char *argv[],void *p);
static int donfdrop(int argc,char *argv[],void *p);
static int donfdump(void);
static int donfmode(int argc,char *argv[],void *p);
static int donodefilter(int argc,char *argv[],void *p);
static void donodetick(void);
static int donodetimer(int argc,char *argv[],void *p);
static int donracktime(int argc,char *argv[],void *p);
static int donrchoketime(int argc,char *argv[],void *p);
static int donrconnect(int argc,char *argv[],void *p);
static int donrirtt(int argc,char *argv[],void *p);
static int donrkick(int argc,char *argv[],void *p);
static int dorouteadd(int argc,char *argv[],void *p);
static int doroutedrop(int argc,char *argv[],void *p);
static int donrqlimit(int argc,char *argv[],void *p);
static int donrreset(int argc,char *argv[],void *p);
static int donrretries(int argc,char *argv[],void *p);
static int donrroute(int argc,char *argv[],void *p);
static int donrstatus(int argc,char *argv[],void *p);
static int donrttl(int argc,char *argv[],void *p);
static int donruser(int argc,char *argv[],void *p);
static int donrverbose(int argc,char *argv[],void *p);
static int donrwindow(int argc,char *argv[],void *p);
static void doobsotick(void);
static int doobsotimer(int argc,char *argv[],void *p);

static struct cmds Nrcmds[] = {
	"acktime",	donracktime,	0, 0,	NULL,
	"bcnodes",	dobcnodes,	0, 2,	"netrom bcnodes <interface>",
	"connect",	donrconnect, 1024, 2,	"netrom connect <node>",
	"choketime",	donrchoketime,	0, 0,	NULL,
	"interface",	dointerface,	0, 4,
		"netrom interface <interface> <alias> <quality>",
	"irtt",		donrirtt,	0, 0,	NULL,
	"kick",		donrkick,	0, 2,	"netrom kick <&nrcb>",
	"nodefilter",	donodefilter,	0, 0,	NULL,
	"nodetimer",	donodetimer,	0, 0,	NULL,
	"obsotimer",	doobsotimer,	0, 0,	NULL,
	"qlimit",	donrqlimit,	0, 0,	NULL,
	"reset",	donrreset,	0, 2,	"netrom reset <&nrcb>",
	"retries",	donrretries,	0, 0,	NULL,
	"route",	donrroute,	0, 0,	NULL,
	"status",	donrstatus,	0, 0,	NULL,
	"ttl",		donrttl,	0, 0,	NULL,
	"user",		donruser,	0, 0,	NULL,
	"verbose",	donrverbose,	0, 0,	NULL,
	"window",	donrwindow,	0, 0,	NULL,
	NULL,
} ;

static struct timer Nodetimer ;	/* timer for nodes broadcasts */
static struct timer Obsotimer ;	/* timer for aging routes */

static int keychar(int c);

/* Command multiplexer */
int
donetrom(argc,argv,p)
int argc ;
char *argv[] ;
void *p;
{
	return subcmd(Nrcmds,argc,argv,p) ;
}

static struct cmds Routecmds[] = {
	"add",	dorouteadd,	0, 6,
		"netrom route add <alias> <destination> <interface> <quality> <neighbor>",
	"drop",	doroutedrop, 0, 4,
		"netrom route drop <destination> <neighbor> <interface>",
	"info", dorouteinfo, 0, 2,
		"netrom route info <destination>",
	NULL,
} ;

/* Route command multiplexer */
static int
donrroute(argc, argv,p)
int argc ;
char *argv[] ;
void *p;
{
	if (argc < 2) {
		doroutedump() ;
		return 0 ;
	}
	return subcmd(Routecmds,argc,argv,p) ;
}

/* Dump a list of known routes */
int
doroutedump()
{
	register struct nrroute_tab *rp ;
	register int i, column ;
	char buf[16] ;
	char *cp ;
	
	column = 1 ;
	
	for (i = 0 ; i < NRNUMCHAINS ; i++)
		for (rp = Nrroute_tab[i] ; rp != NULL ; rp = rp->next) {
			strcpy(buf,rp->alias) ;
			/* remove trailing spaces */
			if ((cp = strchr(buf,' ')) == NULL)
				cp = &buf[strlen(buf)] ;
			if (cp != buf)		/* don't include colon for null alias */
				*cp++ = ':' ;
			pax25(cp,rp->call) ;
			printf("%-16s  ",buf) ;
			if (column++ == 4) {
				printf("\n");
				column = 1 ;
			}
		}

	if (column != 1)
		printf("\n") ;
		
	return 0 ;
}

/* print detailed information on an individual route */
int
dorouteinfo(argc,argv,p)
int argc ;
char *argv[] ;
void *p;
{
	register struct nrroute_tab *rp ;
	register struct nr_bind *bp ;
	register struct nrnbr_tab *np ;
	uint8 dest[AXALEN] ;
	char neighbor[AXBUF] ;

	if (setcall(dest,argv[1]) == -1) {
		printf ("bad destination name\n") ;
		return -1 ;
	}
		
	if ((rp = find_nrroute(dest)) == NULL) {
		printf("no such route\n") ;
		return -1 ;
	}

	for (bp = rp->routes ; bp != NULL ; bp = bp->next) {
		np = bp->via ;
		printf("%1s %3d  %3d  %-8s  %s\n",
		 (bp->flags & NRB_PERMANENT ? "P" :
		 bp->flags & NRB_RECORDED ? "R" : " "),
		 bp->quality,bp->obsocnt,
		 Nrifaces[np->iface].iface->name,
		 pax25(neighbor,np->call));
	}
	return 0 ;
}
		
/* convert a null-terminated alias name to a blank-filled, upcased */
/* version.  Return -1 on failure. */
int
putalias(to,from,complain)
register char *to, *from ;
int complain ;    
{
	int len, i ;
	
	if ((len = strlen(from)) > ALEN) {
		if (complain)
			printf ("alias too long - six characters max\n") ;
		return -1 ;
	}
	
	for (i = 0 ; i < ALEN ; i++) {
		if (i < len) {
			if (islower(*from))
				*to++ = toupper(*from++) ;
			else
				*to++ = *from++ ;
		}
		else
			*to++ = ' ' ;
	}
			
	*to = '\0' ;
	return 0 ;
}

/* Add a route */
static int
dorouteadd(argc, argv,p)
int argc ;
char *argv[] ;
void *p;
{
	char alias[AXALEN] ;
	uint8 dest[AXALEN] ;
	unsigned quality ;
	uint8 neighbor[AXALEN] ;
	register int i ;
	int naddr ;

	/* format alias (putalias prints error message if necessary) */
	if (putalias(alias,argv[1],1) == -1)
		return -1 ;

	/* format destination callsign */
	if (setcall(dest,argv[2]) == -1) {
		printf("bad destination callsign\n") ;
		return -1 ;
	}

	/* find interface */
	for (i = 0 ; i < Nr_numiface ; i++)
		if (!strcmp(Nrifaces[i].iface->name,argv[3]))
			break ;
	if (i == Nr_numiface) {
		printf("Interface \"%s\" not found\n",argv[3]) ;
		return -1 ;
	}
	
	/* get and check quality value */
	if ((quality = atoi(argv[4])) > 255) {
		printf("maximum route quality is 255\n") ;
		return -1 ;
	}

	/* Change from 871225 -- no digis in net/rom table */
	naddr = argc - 5 ;
	if (naddr > 1) {
		printf("Use the ax25 route command to specify digipeaters\n") ;
		return -1 ;
	}
	
	/* format neighbor address string */
	setcall(neighbor,argv[5]) ;

	return nr_routeadd(alias,dest,i,quality,neighbor,1,0) ;
}


/* drop a route */
static int
doroutedrop(argc,argv,p)
int argc ;
char *argv[] ;
void *p;
{
	uint8 dest[AXALEN], neighbor[AXALEN] ;
	register int i ;

	/* format destination and neighbor callsigns */
	if (setcall(dest,argv[1]) == -1) {
		printf("bad destination callsign\n") ;
		return -1 ;
	}
	if (setcall(neighbor,argv[2]) == -1) {
		printf("bad neighbor callsign\n") ;
		return -1 ;
	}

	/* find interface */
	for (i = 0 ; i < Nr_numiface ; i++)
		if (!strcmp(Nrifaces[i].iface->name,argv[3]))
			break ;
	if (i == Nr_numiface) {
		printf("Interface \"%s\" not found\n",argv[3]) ;
		return -1 ;
	}

	return nr_routedrop(dest,neighbor,i) ;
}
	
	
/* make an interface available to net/rom */
static int
dointerface(argc,argv,p)
int argc ;
char *argv[] ;
void *p;
{
	int i ;
	register struct iface *ifp ;

	if (Nr_iface == NULL) {
		printf("Attach netrom interface first\n") ;
		return 1 ;
	}
	
	if (Nr_numiface >= NRNUMIFACE) {
		printf("Only %d net/rom interfaces available\n",NRNUMIFACE) ;
		return 1 ;
	}
	
	if((ifp = if_lookup(argv[1])) == NULL){
		printf("Interface \"%s\" unknown\n",argv[1]);
		return 1;
	}
	for (i = 0 ; i < Nr_numiface ; i++)
		if (Nrifaces[i].iface == ifp) {
			printf("Interface \"%s\" is already registered\n",argv[1]) ;
			return 1 ;
		}
		
	Nrifaces[Nr_numiface].iface = ifp ;

	if (putalias(Nrifaces[Nr_numiface].alias,argv[2],1) == -1)
		return 1 ;
		
	if ((Nrifaces[Nr_numiface].quality = atoi(argv[3])) > 255) {
		printf("Quality cannot be greater than 255\n") ;
		return 1 ;
	}
		
	Nr_numiface++ ;			/* accept this interface */
	return 0 ;
}

/* Broadcast nodes list on named interface. */
static int
dobcnodes(argc,argv,p)
int argc ;
char *argv[] ;
void *p;
{
	register int i ;

	for (i = 0 ; i < Nr_numiface ; i++)
		if (!strcmp(Nrifaces[i].iface->name,argv[1]))
			break ;
	if (i == Nr_numiface) {
		printf("Interface \"%s\" not found\n",argv[1]) ;
		return 1 ;
	}
		
	nr_bcnodes(i) ;
	return 0;
}

/* Set outbound node broadcast interval */
static int
donodetimer(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	if(argc < 2){
		printf("Nodetimer %lu/%lu seconds\n",
			read_timer(&Nodetimer)/1000L,
			dur_timer(&Nodetimer)/1000L);
		return 0;
	}
	stop_timer(&Nodetimer) ;	/* in case it's already running */
	Nodetimer.func = (void (*)())donodetick;/* what to call on timeout */
	Nodetimer.arg = NULL;		/* dummy value */
	set_timer(&Nodetimer,atoi(argv[1])*1000L);/* set timer duration */
	start_timer(&Nodetimer);		/* and fire it up */
	return 0;
}

static void
donodetick()
{
	register int i ;

	for (i = 0 ; i < Nr_numiface ; i++)
		nr_bcnodes(i) ;

	/* Restart timer */
	start_timer(&Nodetimer) ;
}

/* Set timer for aging routes */
static int
doobsotimer(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	if(argc < 2){
		printf("Obsotimer %lu/%lu seconds\n",
			read_timer(&Obsotimer)/1000L,
			dur_timer(&Obsotimer)/1000L);
		return 0;
	}
	stop_timer(&Obsotimer) ;	/* just in case it's already running */
	Obsotimer.func = (void (*)())doobsotick;/* what to call on timeout */
	Obsotimer.arg = NULL;		/* dummy value */
	set_timer(&Obsotimer,atoi(argv[1])*1000L);	/* set timer duration */
	start_timer(&Obsotimer);		/* and fire it up */
	return 0;
}


/* Go through the routing table, reducing the obsolescence count of
 * non-permanent routes, and purging them if the count reaches 0
 */
static void
doobsotick()
{
	register struct nrnbr_tab *np ;
	register struct nrroute_tab *rp, *rpnext ;
	register struct nr_bind *bp, *bpnext ;
	int i ;

	for (i = 0 ; i < NRNUMCHAINS ; i++) {
		for (rp = Nrroute_tab[i] ; rp != NULL ; rp = rpnext) {
			rpnext = rp->next ; 	/* save in case we free this route */
			for (bp = rp->routes ; bp != NULL ; bp = bpnext) {
				bpnext = bp->next ;	/* in case we free this binding */
				if (bp->flags & NRB_PERMANENT)	/* don't age these */
					continue ;
				if (--bp->obsocnt == 0) {		/* time's up! */
					if (bp->next != NULL)
						bp->next->prev = bp->prev ;
					if (bp->prev != NULL)
						bp->prev->next = bp->next ;
					else
						rp->routes = bp->next ;
					rp->num_routes-- ;			/* one less binding */
					np = bp->via ;				/* find the neighbor */
					free(bp) ;				/* now we can free the bind */
					/* Check to see if we can free the neighbor */
					if (--np->refcnt == 0) {
						if (np->next != NULL)
							np->next->prev = np->prev ;
						if (np->prev != NULL)
							np->prev->next = np->next ;
						else {
							Nrnbr_tab[nrhash(np->call)] = np->next ;
						}
						free(np) ;	/* free the storage */
					}
				}
			}
			if (rp->num_routes == 0) {		/* did we free them all? */
				if (rp->next != NULL)
					rp->next->prev = rp->prev ;
				if (rp->prev != NULL)
					rp->prev->next = rp->next ;
				else
					Nrroute_tab[i] = rp->next ;

				free(rp) ;
			}
		}
	}

	start_timer(&Obsotimer) ;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
粉嫩久久99精品久久久久久夜 | 日韩国产在线观看| 国产精品伦一区| 久久精品网站免费观看| 久久综合久久综合久久| 欧美丰满嫩嫩电影| 日韩你懂的在线播放| 欧美精品一区二区在线播放| 精品欧美一区二区久久| 精品福利av导航| 欧美激情在线看| 亚洲色图丝袜美腿| 五月天网站亚洲| 久久99国产精品久久99| 国产精品原创巨作av| 99国产精品99久久久久久| 91久久精品一区二区三| 91.com在线观看| 欧美不卡在线视频| 日本一区二区电影| 亚洲愉拍自拍另类高清精品| 婷婷综合在线观看| 91激情五月电影| 这里只有精品99re| 国产欧美视频在线观看| 亚洲男人电影天堂| 免费成人av在线| 99久久精品费精品国产一区二区| 欧美三级在线播放| 国产精品污网站| 婷婷六月综合亚洲| 国产成人精品aa毛片| 精品视频一区三区九区| 久久久99精品免费观看不卡| 亚洲日本va在线观看| 精品一区二区三区蜜桃| 日本电影亚洲天堂一区| 久久精品一区二区| 日韩黄色免费网站| 色综合一区二区| 久久久91精品国产一区二区精品| 亚洲成av人片www| 风间由美性色一区二区三区| 欧美群妇大交群的观看方式| 国产精品色眯眯| 久久se这里有精品| 欧美视频三区在线播放| 亚洲欧美中日韩| 国模冰冰炮一区二区| 91精品国产综合久久久久| 自拍偷自拍亚洲精品播放| 久久精品av麻豆的观看方式| 欧美性大战久久| 亚洲丝袜自拍清纯另类| 国内不卡的二区三区中文字幕| 欧美日韩一区 二区 三区 久久精品| 欧美国产一区二区| 国产综合成人久久大片91| 91精品在线观看入口| 亚洲国产日韩一级| 色综合婷婷久久| 国产精品国产自产拍高清av王其 | 成人永久免费视频| 精品日韩欧美一区二区| 水蜜桃久久夜色精品一区的特点 | 中文字幕不卡三区| 国产伦精品一区二区三区在线观看| 欧美久久婷婷综合色| 亚洲小说欧美激情另类| 欧美影视一区在线| 亚洲成人午夜电影| 欧美日韩精品一区二区天天拍小说 | 裸体健美xxxx欧美裸体表演| 日韩一区二区电影| 黄色精品一二区| 久久婷婷色综合| 成人在线一区二区三区| 成人免费一区二区三区视频| 日本道精品一区二区三区| 亚洲激情校园春色| 欧美日韩精品一区二区三区四区| 亚洲成av人片www| 欧美一卡二卡三卡| 国产麻豆91精品| 中文字幕在线一区免费| 欧美亚洲高清一区| 日韩不卡一区二区| 久久综合色之久久综合| www.亚洲色图| 一区二区三区 在线观看视频| 欧美三级中文字| 精品一区二区三区av| 国产欧美日韩另类一区| 91九色最新地址| 日本中文字幕一区| 国产三级欧美三级| 在线免费视频一区二区| 蜜桃视频在线一区| 国产精品传媒在线| 欧美日韩一区国产| 国产一区二区看久久| 中文字幕在线观看不卡| 欧美丰满美乳xxx高潮www| 国产一区二区三区美女| 一区二区三区四区中文字幕| 欧美一级黄色录像| 99久久精品国产精品久久| 日韩电影在线观看一区| 亚洲成人福利片| 久久久激情视频| 欧美性欧美巨大黑白大战| 国产一区二区在线观看视频| 综合激情网...| 欧美成人女星排行榜| 91蜜桃网址入口| 久久国产精品色| 亚洲精品老司机| 久久久久99精品国产片| 欧美猛男男办公室激情| 91在线观看成人| 精品一区二区在线播放| 亚洲综合丁香婷婷六月香| 久久综合中文字幕| 欧美日韩二区三区| 色综合久久中文综合久久97| 韩国一区二区三区| 偷窥少妇高潮呻吟av久久免费| 中文av一区二区| 精品国产伦一区二区三区观看体验| 色婷婷久久99综合精品jk白丝| 国产真实乱偷精品视频免| 天堂午夜影视日韩欧美一区二区| 亚洲欧洲一区二区在线播放| 精品国产乱码久久久久久闺蜜| 欧美伊人久久大香线蕉综合69 | 日韩欧美一卡二卡| 欧美天堂一区二区三区| 成人av电影在线播放| 国产夫妻精品视频| 国产在线精品国自产拍免费| 麻豆成人久久精品二区三区红| 午夜久久久影院| 亚洲一区二区三区自拍| 亚洲欧美区自拍先锋| 中文字幕综合网| 亚洲婷婷在线视频| 亚洲少妇30p| 亚洲欧美日韩在线播放| 日韩毛片视频在线看| 国产精品久久久久9999吃药| 国产精品美女久久久久aⅴ国产馆| 久久久久久亚洲综合影院红桃| 精品国产亚洲在线| 精品粉嫩aⅴ一区二区三区四区| 欧美一区二区福利视频| 欧美r级电影在线观看| 日韩一区二区在线播放| 精品国产一区二区三区四区四| 日韩一级免费一区| 欧美精品一区视频| 国产欧美视频一区二区三区| 国产亚洲一区二区三区四区| 精品av久久707| 久久久久久久久蜜桃| 欧美国产日韩在线观看| 亚洲日本在线观看| 午夜精品国产更新| 韩国一区二区视频| 成人午夜视频在线| 欧美影院午夜播放| 精品国产电影一区二区| 欧美激情一区不卡| 亚洲伊人伊色伊影伊综合网| 日韩**一区毛片| 国产成人在线影院| k8久久久一区二区三区| 91福利社在线观看| 精品国产一区二区三区久久影院| 国产女同互慰高潮91漫画| 一区二区三区在线观看视频| 美女国产一区二区| jlzzjlzz亚洲女人18| 欧美福利视频导航| 中文字幕国产精品一区二区| 午夜日韩在线电影| 91免费国产在线| 欧美一级专区免费大片| 国产精品国产馆在线真实露脸 | 欧美日韩国产影片| 国产日韩欧美精品一区| 一区二区日韩电影| 国产精品资源在线| 91黄色免费版| 久久伊99综合婷婷久久伊| 亚洲欧美色综合| 国产伦精品一区二区三区在线观看| 色婷婷av一区二区三区大白胸| 欧美不卡视频一区| 亚洲一区中文在线| 91麻豆123|