if_var.h

来自「eCos操作系统源码」· C头文件 代码 · 共 461 行 · 第 1/2 页

H
461
字号
#define	IF_DEQUEUE(ifq, m) { \	(m) = (ifq)->ifq_head; \	if (m) { \		if (((ifq)->ifq_head = (m)->m_nextpkt) == 0) \			(ifq)->ifq_tail = 0; \		(m)->m_nextpkt = 0; \		(ifq)->ifq_len--; \	} \}#define	IF_POLL(ifq, m)		((m) = (ifq)->ifq_head)#define	IF_PURGE(ifq)							\while (1) {								\	struct mbuf *m0;						\	IF_DEQUEUE((ifq), m0);						\	if (m0 == NULL)							\		break;							\	else								\		m_freem(m0);						\}#define	IF_IS_EMPTY(ifq)	((ifq)->ifq_len == 0)#ifdef _KERNEL#define	IF_ENQ_DROP(ifq, m)	if_enq_drop(ifq, m)#if defined(__GNUC__) && defined(MT_HEADER)static __inline intif_queue_drop(struct ifqueue *ifq, struct mbuf *m){	IF_DROP(ifq);	return 0;}static __inline intif_enq_drop(struct ifqueue *ifq, struct mbuf *m){	if (IF_QFULL(ifq) &&	    !if_queue_drop(ifq, m))		return 0;	IF_ENQUEUE(ifq, m);	return 1;}#else#ifdef MT_HEADERint	if_enq_drop __P((struct ifqueue *, struct mbuf *));#endif#endif/* * 72 was chosen below because it is the size of a TCP/IP * header (40) + the minimum mss (32). */#define	IF_MINMTU	72#define	IF_MAXMTU	65535#endif /* _KERNEL */#ifdef _KERNEL#define	IFQ_ENQUEUE(ifq, m, err)					\do {									\	if (IF_QFULL((ifq))) {						\		m_freem((m));						\		(err) = ENOBUFS;					\	} else {							\		IF_ENQUEUE((ifq), (m));					\		(err) = 0;						\	}								\	if ((err))							\		(ifq)->ifq_drops++;					\} while (0)#define	IFQ_DEQUEUE(ifq, m)	IF_DEQUEUE((ifq), (m))#define	IFQ_POLL(ifq, m)	IF_POLL((ifq), (m))#define	IFQ_PURGE(ifq)							\while (1) {								\	struct mbuf *m0;						\	IF_DEQUEUE((ifq), m0);						\	if (m0 == NULL)							\		break;							\	else								\		m_freem(m0);						\}#define	IFQ_SET_READY(ifq)		((void)0)#define	IFQ_CLASSIFY(ifq, m, af, pa)	((void)0)#define	IFQ_IS_EMPTY(ifq)		((ifq)->ifq_len == 0)#define	IFQ_INC_LEN(ifq)		((ifq)->ifq_len++)#define	IFQ_DEC_LEN(ifq)		(--(ifq)->ifq_len)#define	IFQ_INC_DROPS(ifq)		((ifq)->ifq_drops++)#define	IFQ_SET_MAXLEN(ifq, len)	((ifq)->ifq_maxlen = (len))#endif /* _KERNEL *//* * The ifaddr structure contains information about one address * of an interface.  They are maintained by the different address families, * are allocated and attached when an address is set, and are linked * together so all addresses for an interface can be located. */struct ifaddr {	struct	sockaddr *ifa_addr;	/* address of interface */	struct	sockaddr *ifa_dstaddr;	/* other end of p-to-p link */#define	ifa_broadaddr	ifa_dstaddr	/* broadcast address interface */	struct	sockaddr *ifa_netmask;	/* used to determine subnet */	struct	if_data if_data;	/* not all members are meaningful */	struct	ifnet *ifa_ifp;		/* back-pointer to interface */	TAILQ_ENTRY(ifaddr) ifa_link;	/* queue macro glue */	void	(*ifa_rtrequest)	/* check or clean routes (+ or -)'d */		__P((int, struct rtentry *, struct sockaddr *));	u_short	ifa_flags;		/* mostly rt_flags for cloning */	u_int	ifa_refcnt;		/* references to this structure */	int	ifa_metric;		/* cost of going out this interface */#ifdef notdef	struct	rtentry *ifa_rt;	/* XXXX for ROUTETOIF ????? */#endif	int (*ifa_claim_addr)		/* check if an addr goes to this if */		__P((struct ifaddr *, struct sockaddr *));};#define	IFA_ROUTE	RTF_UP		/* route installed */#define IFAREF(ifa)     do { ++(ifa)->ifa_refcnt; } while (0)/* for compatibility with other BSDs */#define	ifa_list	ifa_link/* * The prefix structure contains information about one prefix * of an interface.  They are maintained by the different address families, * are allocated and attached when an prefix or an address is set, * and are linked together so all prefixes for an interface can be located. */struct ifprefix {	struct	sockaddr *ifpr_prefix;	/* prefix of interface */	struct	ifnet *ifpr_ifp;	/* back-pointer to interface */	TAILQ_ENTRY(ifprefix) ifpr_list; /* queue macro glue */	u_char	ifpr_plen;		/* prefix length in bits */	u_char	ifpr_type;		/* protocol dependent prefix type */};/* * Multicast address structure.  This is analogous to the ifaddr * structure except that it keeps track of multicast addresses. * Also, the reference count here is a count of requests for this * address, not a count of pointers to this structure. */struct ifmultiaddr {	LIST_ENTRY(ifmultiaddr) ifma_link; /* queue macro glue */	struct	sockaddr *ifma_addr; 	/* address this membership is for */	struct	sockaddr *ifma_lladdr;	/* link-layer translation, if any */	struct	ifnet *ifma_ifp;	/* back-pointer to interface */	u_int	ifma_refcount;		/* reference count */	void	*ifma_protospec;	/* protocol-specific state, if any */};#ifdef _KERNEL#define	IFAFREE(ifa) \	do { \		if ((ifa)->ifa_refcnt <= 0) \			ifafree(ifa); \		else \			(ifa)->ifa_refcnt--; \	} while (0)extern	struct ifnethead ifnet;extern  struct ifnet	**ifindex2ifnet;extern	int ifqmaxlen;extern	struct ifnet loif[];extern	int if_index;extern	struct ifaddr **ifnet_addrs;void	ether_ifattach __P((struct ifnet *, int));void	ether_ifdetach __P((struct ifnet *, int));void	ether_input __P((struct ifnet *, struct ether_header *, struct mbuf *));void	ether_demux __P((struct ifnet *, struct ether_header *, struct mbuf *));int	ether_output __P((struct ifnet *,	   struct mbuf *, struct sockaddr *, struct rtentry *));int	ether_output_frame __P((struct ifnet *, struct mbuf *));int	ether_ioctl __P((struct ifnet *, int, caddr_t));int	if_addmulti __P((struct ifnet *, struct sockaddr *,			 struct ifmultiaddr **));int	if_allmulti __P((struct ifnet *, int));void	if_attach __P((struct ifnet *));int	if_delmulti __P((struct ifnet *, struct sockaddr *));void	if_detach __P((struct ifnet *));void	if_down __P((struct ifnet *));void	if_route __P((struct ifnet *, int flag, int fam));int	if_setlladdr __P((struct ifnet *, const u_char *, int));void	if_unroute __P((struct ifnet *, int flag, int fam));void	if_up __P((struct ifnet *));/*void	ifinit __P((void));*/ /* declared in systm.h for main() */int	ifioctl __P((struct socket *, u_long, caddr_t, struct proc *));int	ifpromisc __P((struct ifnet *, int));struct	ifnet *ifunit __P((const char *));struct	ifnet *if_withname __P((struct sockaddr *));int	if_poll_recv_slow __P((struct ifnet *ifp, int *quotap));void	if_poll_xmit_slow __P((struct ifnet *ifp, int *quotap));void	if_poll_throttle __P((void));void	if_poll_unthrottle __P((void *));void	if_poll_init __P((void));void	if_poll __P((void));struct	ifaddr *ifa_ifwithaddr __P((struct sockaddr *));struct	ifaddr *ifa_ifwithdstaddr __P((struct sockaddr *));struct	ifaddr *ifa_ifwithnet __P((struct sockaddr *));struct	ifaddr *ifa_ifwithroute __P((int, struct sockaddr *,					struct sockaddr *));struct	ifaddr *ifaof_ifpforaddr __P((struct sockaddr *, struct ifnet *));void	ifafree __P((struct ifaddr *));struct	ifmultiaddr *ifmaof_ifpforaddr __P((struct sockaddr *,					    struct ifnet *));int	if_simloop __P((struct ifnet *ifp, struct mbuf *m, int af, int hlen));void	if_clone_attach __P((struct if_clone *));void	if_clone_detach __P((struct if_clone *));int	if_clone_create __P((char *, int));int	if_clone_destroy __P((const char *));#endif /* _KERNEL */#endif /* !_NET_IF_VAR_H_ */

⌨️ 快捷键说明

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