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