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

📄 llc_var.h

📁 早期freebsd实现
💻 H
📖 第 1 页 / 共 2 页
字号:
#define llcl_frmr_pdu1          llcl_frmrinfo.rej_pdu_1#define llcl_frmr_control       llcl_frmrinfo.frmr_control#define llcl_frmr_control_ext   llcl_frmrinfo.frmr_control_ext#define llcl_frmr_cause         llcl_frmrinfo.frmr_cause#define	LQNEXT(l)	(struct llc_linkcb *)((l)->llcl_q.q_forw)#define	LQEMPTY		(llccb_q.q_forw == &llccb_q)#define	LQFIRST		(struct llc_linkcb *)(llccb_q.q_forw)#define LQVALID(l)	(!((struct llccb_q *)(l) == &llccb_q))#define LLC_ENQUEUE(l, m) if ((l)->llcl_writeqh == NULL) { \				(l)->llcl_writeqh = (m); \				(l)->llcl_writeqt = (m); \			} else { \				(l)->llcl_writeqt->m_nextpkt = (m); \				(l)->llcl_writeqt = (m); \			}#define LLC_DEQUEUE(l, m) if ((l)->llcl_writeqh == NULL) \                                (m) = NULL; \                          else { \				(m) = (l)->llcl_writeqh; \				(l)->llcl_writeqh = (l)->llcl_writeqh->m_nextpkt; \			}#define LLC_SETFRAME(l, m) { \			        if ((l)->llcl_slotsfree > 0) { \				        (l)->llcl_slotsfree--; \					(l)->llcl_output_buffers[(l)->llcl_freeslot] = (m); \					(l)->llcl_freeslot = ((l)->llcl_freeslot+1) % (l)->llcl_window; \					LLC_INC((l)->llcl_projvs); \				} \		           }/* * handling of sockaddr_dl's */#define LLADDRLEN(s) 	((s)->sdl_alen + (s)->sdl_nlen)#define	LLSAPADDR(s) 	((s)->sdl_data[LLADDRLEN(s)-1] & 0xff)#define LLSAPLOC(s, if) ((s)->sdl_nlen + (if)->if_addrlen)struct sdl_hdr {	struct sockaddr_dl sdlhdr_dst;	struct sockaddr_dl sdlhdr_src;	long sdlhdr_len;};#define LLC_GETHDR(f,m) { \				struct mbuf *_m = (struct mbuf *) (m); \				if (_m) { \					M_PREPEND(_m, LLC_ISFRAMELEN, M_DONTWAIT); \					bzero(mtod(_m, caddr_t), LLC_ISFRAMELEN); \				} else { \					MGETHDR (_m, M_DONTWAIT, MT_HEADER); \					if (_m != NULL) { \						_m->m_pkthdr.len = _m->m_len = LLC_UFRAMELEN; \						_m->m_next = _m->m_act = NULL; \						bzero(mtod(_m, caddr_t), LLC_UFRAMELEN); \					} else return; \				} \				(m) = _m; \				(f) = mtod(m, struct llc *); \		      }#define LLC_NEWSTATE(l, LLCstate) (l)->llcl_statehandler = llc_state_##LLCstate#define LLC_STATEEQ(l, LLCstate) ((l)->llcl_statehandler == llc_state_##LLCstate ? 1 : 0)#define LLC_ACK_SHIFT      0#define LLC_P_SHIFT        1#define LLC_BUSY_SHIFT     2#define LLC_REJ_SHIFT      3#define LLC_AGE_SHIFT      4#define LLC_DACTION_SHIFT  5#define LLC_TIMER_NOTRUNNING    0#define LLC_TIMER_RUNNING       1#define LLC_TIMER_EXPIRED       2#define LLC_STARTTIMER(l, LLCtimer) { \				 (l)->llcl_timers[LLC_##LLCtimer##_SHIFT] = llc_##LLCtimer##_timer; \				 (l)->llcl_timerflags |= (1<<LLC_##LLCtimer##_SHIFT); \				 }#define LLC_STOPTIMER(l, LLCtimer) { \				 (l)->llcl_timers[LLC_##LLCtimer##_SHIFT] = 0; \				 (l)->llcl_timerflags &= ~(1<<LLC_##LLCtimer##_SHIFT); \				 }#define LLC_AGETIMER(l, LLCtimer) if ((l)->llcl_timers[LLC_##LLCtimer##_SHIFT] > 0) \	                                  (l)->llcl_timers[LLC_##LLCtimer##_SHIFT]--;#define LLC_TIMERXPIRED(l, LLCtimer) \	(((l)->llcl_timerflags & (1<<LLC_##LLCtimer##_SHIFT)) ? \	 (((l)->llcl_timers[LLC_##LLCtimer##_SHIFT] == 0 ) ? \	  LLC_TIMER_EXPIRED : LLC_TIMER_RUNNING) : LLC_TIMER_NOTRUNNING)#define FOR_ALL_LLC_TIMERS(t) for ((t) = LLC_ACK_SHIFT; (t) < LLC_AGE_SHIFT; (t)++)#define LLC_SETFLAG(l, LLCflag, v) (l)->llcl_##LLCflag##_flag = (v)#define LLC_GETFLAG(l, LLCflag) (l)->llcl_##LLCflag##_flag#define LLC_RESETCOUNTER(l) { \				      (l)->llcl_vs = (l)->llcl_vr = (l)->llcl_retry = 0; \				      llc_resetwindow((l)); \			      }/* * LLC2 macro definitions */				    #define LLC_START_ACK_TIMER(l) LLC_STARTTIMER((l), ACK)#define LLC_STOP_ACK_TIMER(l) LLC_STOPTIMER((l), ACK)#define LLC_START_REJ_TIMER(l) LLC_STARTTIMER((l), REJ)#define LLC_STOP_REJ_TIMER(l) LLC_STOPTIMER((l), REJ)#define LLC_START_P_TIMER(l) { \				      LLC_STARTTIMER((l), P); \				      if (LLC_GETFLAG((l), P) == 0) \					      (l)->llcl_retry = 0; \				      LLC_SETFLAG((l), P, 1); \			     }#define LLC_STOP_P_TIMER(l) { \				      LLC_STOPTIMER((l), P); \				      LLC_SETFLAG((l), P, 0); \			    }#define LLC_STOP_ALL_TIMERS(l) { \				      LLC_STOPTIMER((l), ACK); \				      LLC_STOPTIMER((l), REJ); \				      LLC_STOPTIMER((l), BUSY); \				      LLC_STOPTIMER((l), P); \			    }#define LLC_INC(i) (i) = ((i)+1) % LLC_MAX_SEQUENCE#define LLC_NR_VALID(l, nr)     ((l)->llcl_vs < (l)->llcl_nr_received ? \	                             (((nr) >= (l)->llcl_nr_received) || \	                              ((nr) <= (l)->llcl_vs) ? 1 : 0) : \	                             (((nr) <= (l)->llcl_vs) && \	                              ((nr) >= (l)->llcl_nr_received) ? 1 : 0))#define LLC_UPDATE_P_FLAG(l, cr, pf) { \			   if ((cr) == LLC_RSP && (pf) == 1) { \			           LLC_SETFLAG((l), P, 0); \				   LLC_STOPTIMER((l), P); \			    } \			    }#define LLC_UPDATE_NR_RECEIVED(l, nr) { \			    while ((l)->llcl_nr_received != (nr)) { \				    struct mbuf *_m; \				    register short seq; \				    if (_m = (l)->llcl_output_buffers[seq = llc_seq2slot((l), (l)->llcl_nr_received)]) \					    m_freem(_m); \				    (l)->llcl_output_buffers[seq] = NULL; \				    LLC_INC((l)->llcl_nr_received); \				    (l)->llcl_slotsfree++; \			    } \			    (l)->llcl_retry = 0; \			    if ((l)->llcl_slotsfree < (l)->llcl_window) { \				    LLC_START_ACK_TIMER(l); \			    } else LLC_STOP_ACK_TIMER(l); \			    LLC_STARTTIMER((l), DACTION); \			    }#define LLC_SET_REMOTE_BUSY(l,a) { \			    if (LLC_GETFLAG((l), REMOTE_BUSY) == 0) { \				    LLC_SETFLAG((l), REMOTE_BUSY, 1); \				    LLC_STARTTIMER((l), BUSY); \				    (a) = LLC_REMOTE_BUSY; \			    } else { \				    (a) = 0; \			    } \			    }#define LLC_CLEAR_REMOTE_BUSY(l,a) { \			    if (LLC_GETFLAG((l), REMOTE_BUSY) == 1) { \				    LLC_SETFLAG((l), REMOTE_BUSY, 1); \				    LLC_STOPTIMER((l), BUSY); \				    if (LLC_STATEEQ((l), NORMAL) || \					LLC_STATEEQ((l), REJECT) || \					LLC_STATEEQ((l), BUSY)) \						llc_resend((l), LLC_CMD, 0); \				    (a) = LLC_REMOTE_NOT_BUSY; \			    } else { \				    (a) = 0; \			    } \			    }#define LLC_DACKCMD      0x1#define LLC_DACKCMDPOLL  0x2#define LLC_DACKRSP      0x3#define LLC_DACKRSPFINAL 0x4#define LLC_SENDACKNOWLEDGE(l, cmd, pf) { \			   if ((cmd) == LLC_CMD) { \				   LLC_SETFLAG((l), DACTION, ((pf) == 0 ? LLC_DACKCMD : LLC_DACKCMDPOLL)); \			   } else { \				   LLC_SETFLAG((l), DACTION, ((pf) == 0 ? LLC_DACKRSP : LLC_DACKRSPFINAL)); \			   } \		   }#define LLC_FRMR_W     (1<<0)#define LLC_FRMR_X     (1<<1)#define LLC_FRMR_Y     (1<<2)#define LLC_FRMR_Z     (1<<3)#define LLC_FRMR_V     (1<<4)#define LLC_SETFRMR(l, f, cr, c) { \			   if ((f)->llc_control & 0x3) { \				   (l)->llcl_frmr_pdu0 = (f)->llc_control; \				   (l)->llcl_frmr_pdu1 = 0; \			   } else { \				   (l)->llcl_frmr_pdu0 = (f)->llc_control; \				   (l)->llcl_frmr_pdu1 = (f)->llc_control_ext; \			   } \			   LLCCSBITS((l)->llcl_frmr_control, f_vs, (l)->llcl_vs); \			   LLCCSBITS((l)->llcl_frmr_control_ext, f_cr, (cr)); \			   LLCSBITS((l)->llcl_frmr_control_ext, f_vr, (l)->llcl_vr); \			   LLCCSBITS((l)->llcl_frmr_cause, f_wxyzv, (c)); \			}/* * LLC tracing levels: *     LLCTR_INTERESTING        interesting event, we might care to know about *                              it, but then again, we might not ... *     LLCTR_SHOULDKNOW         we probably should know about this event *     LLCTR_URGENT             something has gone utterly wrong ... */#define LLCTR_INTERESTING       1#define LLCTR_SHOULDKNOW        2#define LLCTR_URGENT            3#ifdef LLCDEBUG#define LLC_TRACE(lp, l, msg) llc_trace((lp), (l), (msg))#else /* LLCDEBUG */#define LLC_TRACE(lp, l, msg) /* NOOP */#endif /* LLCDEBUG */				      #define LLC_N2_VALUE	  15              /* up to 15 retries */#define LLC_ACK_TIMER     10              /*  5 secs */#define LLC_P_TIMER        4              /*  2 secs */#define LLC_BUSY_TIMER    12              /*  6 secs */#define LLC_REJ_TIMER     12              /*  6 secs */#define LLC_AGE_TIMER     40              /* 20 secs */#define LLC_DACTION_TIMER  2              /*  1 secs */#if defined (KERNEL) && defined(LLC)extern int llc_n2;extern int llc_ACK_timer;extern int llc_P_timer;extern int llc_REJ_timer;extern int llc_BUSY_timer;extern int llc_AGE_timer;extern int llc_DACTION_timer;extern int af_link_rts_init_done;#define USES_AF_LINK_RTS { \	if (!af_link_rts_init_done) { \	       rn_inithead((void **)&rt_tables[AF_LINK], 32); \	       af_link_rts_init_done++; \	       } \	 }struct ifqueue llcintrq;extern struct llccb_q llccb_q;extern char *frame_names[];/*  * Function prototypes */int sdl_cmp __P((struct sockaddr_dl *, struct sockaddr_dl *));int sdl_copy __P((struct sockaddr_dl *, struct sockaddr_dl *));int sdl_swapaddr __P((struct sockaddr_dl *, struct sockaddr_dl *));int sdl_checkaddrif __P((struct ifnet *, struct sockaddr_dl *));int sdl_setaddrif __P((struct ifnet *, u_char *, u_char, u_char, 		      struct sockaddr_dl *));int sdl_sethdrif __P((struct ifnet *, u_char *, u_char, u_char *, u_char, u_char, 		      struct sdl_hdr *));struct npaidbentry *llc_setsapinfo __P((struct ifnet *, u_char, u_char,					struct dllconfig *));struct npaidbentry *llc_getsapinfo __P((u_char, struct ifnet *));struct rtentry *npaidb_enrich __P((short, caddr_t, struct sockaddr_dl *));int npaidb_destroy __P((struct rtentry *));short llc_seq2slot __P((struct llc_linkcb *, short));int llc_state_ADM __P((struct llc_linkcb *, struct llc *, int, int, int));int llc_state_CONN __P((struct llc_linkcb *, struct llc *, int, int, int));int llc_state_RESET_WAIT __P((struct llc_linkcb *, struct llc *, 			      int, int, int));int llc_state_RESET_CHECK __P((struct llc_linkcb *, struct llc *, 			       int, int, int));int llc_state_SETUP __P((struct llc_linkcb *, struct llc *, int, int, int));int llc_state_RESET __P((struct llc_linkcb *, struct llc *, int, int, int));int llc_state_D_CONN __P((struct llc_linkcb *, struct llc *, int, int, int));int llc_state_ERROR __P((struct llc_linkcb *, struct llc *, int, int, int));int llc_state_NBRAcore __P((struct llc_linkcb *, struct llc *, int, int, int));int llc_state_NORMAL __P((struct llc_linkcb *, struct llc *, int, int, int));int llc_state_BUSY __P((struct llc_linkcb *, struct llc *, int, int, int));int llc_state_REJECT __P((struct llc_linkcb *, struct llc *, int, int, int));int llc_state_AWAIT __P((struct llc_linkcb *, struct llc *, int, int, int));int llc_state_AWAIT_BUSY __P((struct llc_linkcb *, struct llc *, int, int, int));int llc_state_AWAIT_REJECT __P((struct llc_linkcb *, struct llc *, int, int, int));int llc_statehandler __P((struct llc_linkcb *, struct llc *, int, int, int));int llc_init __P((void));struct llc_linkcb *llc_newlink __P((struct sockaddr_dl *, struct ifnet *, 				    struct rtentry *, caddr_t, struct rtentry *));int llc_dellink __P((struct llc_linkcb *));int llc_anytimersup __P((struct llc_linkcb *));char * llc_getstatename __P((struct llc_linkcb *));void llc_link_dump __P((struct llc_linkcb *, const char *));void llc_trace __P((struct llc_linkcb *, int, const char *));void llc_resetwindow __P((struct llc_linkcb *));int llc_decode __P((struct llc *, struct llc_linkcb *));void llc_timer __P((void));void llcintr __P((void));int llc_input __P((struct llc_linkcb *, struct mbuf *, u_char));caddr_t llc_ctlinput __P((int, struct sockaddr *, caddr_t));int llc_output __P((struct llc_linkcb *, struct mbuf *));void llc_start __P((struct llc_linkcb *));int llc_send __P((struct llc_linkcb *, int, int, int));int llc_resend __P((struct llc_linkcb *, int, int));int llc_rawsend __P((struct llc_linkcb *, struct mbuf *, struct llc *, int, int,		    int, int));int cons_rtrequest __P((int, struct rtentry *, struct sockaddr *));int x25_llcglue __P((int, struct sockaddr *));#endif

⌨️ 快捷键说明

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