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

📄 esis_design.nr

📁 早期freebsd实现
💻 NR
字号:
.NC "The Design of the ARGO Network Layer".sh 1 "End System to Intermediate System Routing Protocol".ppThe following sections describe the design of the End System to IntermediateSystem (ES-IS) Routing Exchange Protocol..sh 2 "Overview".nf- protocol involves sending/receiving hello pdus.- timers determine	- when to send information	- when to discard information- want to keep as much of the work outside of kernel- only put functions and tables in kernel when necessary.sh 2 "Supported Features (brief overview of each)"- report configuration (both ES and IS)- record configuration (both ES and IS)- flush configuration (both ES and IS)- query configuration (ES only)- configuration response (ES only)- request redirect (IS only)- record redirect (ES only)- flush old redirect (ES only)- multicast vs. broadcast (using broadcast only).sh 2 "Kernel Resident Features".sh 3 "Support for PDU Transmission"- need mechanism to send/receive PDUs- utilize ES-IS socket (like raw socket)- socket(AF_ISO, SOCK_DGRAM, ISOPROTO_ESIS).sh 4 "Sending PDUs"- sendmsg() used for transmitting PDUS- data will be pre-formed ES-IS PDU- no checks will be made on the pdu format- addr_snpa is the destination (to)- before sending, socket must be associated with a particular interface	this is done via setsockopt():		ESISOPT_SETIF - option		buffer is name of interface, ie. "un0".sh 4 "Receiving PDUs"- recvmsg() used for receiving PDUs- data will be:	#define	ESIS_PDU	#define ESIS_CONFIG_RESP	#define ESIS_REDIR_REQ	struct esis_indication {		short	ei_type;		/* type of indication */		union {			struct ? config_resp			struct ? redir_req			char	 pdu[0]		} ei_u;	}- no checks will be made on the pdu format- addr_snpa is the source (from).sh 4 "Addressing"- ES-IS PDUs are sent to SNPA.- addresses used are SN addresses, not NSAP addresses- format of msg_name (part of msghdr) struct sockaddr_iso	afi = 0	/* means special snpa address */	isoa_u is struct addr_snpa		struct addr_snpa {			char	sn_addr[7];	/* snpa addr */		}	isoa_len is number of bytes of sn_addr that are valid- sn_addr may be a unicast or multicast address- multicast addresses will be faked via broadcast addresses.sh 3 "NSAP to SNPA translation"- translation from NSAP to SNAP required for every CLNP PDU sent- function provided by iso_nsap_to_snpa	iso_nsap_to_snpa(ifp, m, nsap, snpa)	struct ifnet		*ifp;	/* outgoing interface */	struct mbuf			*m;		/* pkt */	struct sockaddr_iso	*nsap;	/* destination address */	char				*snpa;	/* RESULT: snpa address */	{		if (nsap.afi == AFI_SNPAADDR) {			copy snpa addr from nsap into snpa			return SUCCESS		} else {			scan RIB for (RIB.nsap == nsap)			if (found) {				copy RIB.snpa into snpa				return SUCCESS			}			scan RIB for (RIB.type == IS) && (RIB.ifp = ifp)			if (found) {				copy RIB.snpa into snpa				return SUCCESS			}			if (ifp allows multicast) {				/* invoke query configuration function */				copy ifp.ifaddr.ifa_all_es into snpa				return SUCCESS			}			return FAILURE		}	}- NSAP to SNPA table resides in kernel so CLNP has quick access- entries added/timed-out of table via user level ES-IS daemon.sh 3 "Query Configuration Functon"- invoked when iso_nsap_to_snpa	- requires snpa, but	- does not find a match for dest nsap, and	- does not find a match for Any IS.- clnp packet is sent to address "all ES" as specified in ifnet structure	(for now, this is just the broadcast address).sh 3 "Configuration Response Function"- invoked by clnp_input(), after determining that the packet received is	destined for one of its NSAPs- checks if sn_dst == "all ES" (for now, this is all hex ffs)- if true, a copy of packet is made, and passed up to esis_input()

⌨️ 快捷键说明

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