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