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; };