Listing 1. The vif_device and mfc_cache structures used by the multicast
routing code.

struct vif_device
{
	/* Device we are using */
	struct net_device 	*dev;
	
	/* Statistics 			*/
	unsigned long	bytes_in,bytes_out;
	unsigned long	pkt_in,pkt_out;		
	
	/* Traffic shaping (NI) 	*/
	unsigned long	rate_limit;		
	
	/* TTL threshold 		*/
	unsigned char	threshold;
	
	/* Control flags 		*/		
	unsigned short	flags;
	
	/* Addresses(remote for tunnels)*/
	__u32		local,remote;
	
	/* Physical interface index	*/
	int		link;		
};

struct mfc_cache 
{
	/* Next entry on cache line 	*/
	struct mfc_cache *next;

	/* Group the entry belongs to 	*/
	__u32 mfc_mcastgrp;			
	
	/* Source of packet 		*/
	__u32 mfc_origin;			
	
	/* Source interface		*/
	vifi_t mfc_parent;			
	
	/* Flags on line		*/
	int mfc_flags;

	union {
		struct {
			unsigned long expires;
			/* Unresolved buffers	*/
			struct sk_buff_head unresolved;	
		} unres;
		struct {
			unsigned long last_assert;
			int minvif;
			int maxvif;
			unsigned long bytes;
			unsigned long pkt;
			unsigned long wrong_if;
			/* TTL thresholds */
			unsigned char ttls[MAXVIFS];
		} res;
	} mfc_un;
};

