Annotation of embedaddon/pimd/include/linux/netinet/mroute.h, revision 1.1

1.1     ! misho       1: #ifndef __LINUX_MROUTE_H
        !             2: #define __LINUX_MROUTE_H
        !             3: 
        !             4: #include <linux/sockios.h>
        !             5: #include <netinet/in-my.h>
        !             6: 
        !             7: 
        !             8: /*
        !             9:  *     Based on the MROUTING 3.5 defines primarily to keep
        !            10:  *     source compatibility with BSD.
        !            11:  *
        !            12:  *     See the mrouted code for the original history.
        !            13:  *
        !            14:  *      Protocol Independent Multicast (PIM) data structures included
        !            15:  *      Carlos Picoto (cap@di.fc.ul.pt)
        !            16:  *
        !            17:  */
        !            18: 
        !            19: #define MRT_BASE       200
        !            20: #define MRT_INIT       (MRT_BASE)      /* Activate the kernel mroute code      */
        !            21: #define MRT_DONE       (MRT_BASE+1)    /* Shutdown the kernel mroute           */
        !            22: #define MRT_ADD_VIF    (MRT_BASE+2)    /* Add a virtual interface              */
        !            23: #define MRT_DEL_VIF    (MRT_BASE+3)    /* Delete a virtual interface           */
        !            24: #define MRT_ADD_MFC    (MRT_BASE+4)    /* Add a multicast forwarding entry     */
        !            25: #define MRT_DEL_MFC    (MRT_BASE+5)    /* Delete a multicast forwarding entry  */
        !            26: #define MRT_VERSION    (MRT_BASE+6)    /* Get the kernel multicast version     */
        !            27: #define MRT_ASSERT     (MRT_BASE+7)    /* Activate PIM assert mode             */
        !            28: #define MRT_PIM                (MRT_BASE+8)    /* enable PIM code      */
        !            29: 
        !            30: #define SIOCGETVIFCNT  SIOCPROTOPRIVATE        /* IP protocol privates */
        !            31: #define SIOCGETSGCNT   (SIOCPROTOPRIVATE+1)
        !            32: #define SIOCGETRPF     (SIOCPROTOPRIVATE+2)
        !            33: 
        !            34: #ifdef CUSTOM_MAX_VIFS
        !            35: #define MAXVIFS                CUSTOM_MAX_VIFS /* MUST match kernel MAXVIFS! */
        !            36: #else
        !            37: #define MAXVIFS                32      
        !            38: #endif
        !            39: typedef unsigned long vifbitmap_t;     /* User mode code depends on this lot */
        !            40: typedef unsigned short vifi_t;
        !            41: #define ALL_VIFS       ((vifi_t)(-1))
        !            42: 
        !            43: /*
        !            44:  *     Same idea as select
        !            45:  */
        !            46:  
        !            47: #define VIFM_SET(n,m)  ((m)|=(1<<(n)))
        !            48: #define VIFM_CLR(n,m)  ((m)&=~(1<<(n)))
        !            49: #define VIFM_ISSET(n,m)        ((m)&(1<<(n)))
        !            50: #define VIFM_CLRALL(m) ((m)=0)
        !            51: #define VIFM_COPY(mfrom,mto)   ((mto)=(mfrom))
        !            52: #define VIFM_SAME(m1,m2)       ((m1)==(m2))
        !            53: 
        !            54: /*
        !            55:  *     Passed by mrouted for an MRT_ADD_VIF - again we use the
        !            56:  *     mrouted 3.6 structures for compatibility
        !            57:  */
        !            58:  
        !            59: struct vifctl {
        !            60:        vifi_t  vifc_vifi;              /* Index of VIF */
        !            61:        unsigned char vifc_flags;       /* VIFF_ flags */
        !            62:        unsigned char vifc_threshold;   /* ttl limit */
        !            63:        unsigned int vifc_rate_limit;   /* Rate limiter values (NI) */
        !            64:        struct in_addr vifc_lcl_addr;   /* Our address */
        !            65:        struct in_addr vifc_rmt_addr;   /* IPIP tunnel addr */
        !            66: };
        !            67: 
        !            68: #define VIFF_TUNNEL    0x1     /* IPIP tunnel */
        !            69: #define VIFF_SRCRT     0x2     /* NI */
        !            70: #define VIFF_REGISTER  0x4     /* register vif */
        !            71: 
        !            72: /*
        !            73:  *     Cache manipulation structures for mrouted and PIMd
        !            74:  */
        !            75:  
        !            76: struct mfcctl
        !            77: {
        !            78:        struct in_addr mfcc_origin;             /* Origin of mcast      */
        !            79:        struct in_addr mfcc_mcastgrp;           /* Group in question    */
        !            80:        vifi_t  mfcc_parent;                    /* Where it arrived     */
        !            81:        unsigned char mfcc_ttls[MAXVIFS];       /* Where it is going    */
        !            82:        unsigned int mfcc_pkt_cnt;              /* pkt count for src-grp */
        !            83:        unsigned int mfcc_byte_cnt;
        !            84:        unsigned int mfcc_wrong_if;
        !            85:        int          mfcc_expire;
        !            86: };
        !            87: 
        !            88: /* 
        !            89:  *     Group count retrieval for mrouted
        !            90:  */
        !            91:  
        !            92: struct sioc_sg_req
        !            93: {
        !            94:        struct in_addr src;
        !            95:        struct in_addr grp;
        !            96:        unsigned long pktcnt;
        !            97:        unsigned long bytecnt;
        !            98:        unsigned long wrong_if;
        !            99: };
        !           100: 
        !           101: /*
        !           102:  *     To get vif packet counts
        !           103:  */
        !           104: 
        !           105: struct sioc_vif_req
        !           106: {
        !           107:        vifi_t  vifi;           /* Which iface */
        !           108:        unsigned long icount;   /* In packets */
        !           109:        unsigned long ocount;   /* Out packets */
        !           110:        unsigned long ibytes;   /* In bytes */
        !           111:        unsigned long obytes;   /* Out bytes */
        !           112: };
        !           113: 
        !           114: /*
        !           115:  *     This is the format the mroute daemon expects to see IGMP control
        !           116:  *     data. Magically happens to be like an IP packet as per the original
        !           117:  */
        !           118:  
        !           119: struct igmpmsg
        !           120: {
        !           121:        uint32_t unused1,unused2;
        !           122:        unsigned char im_msgtype;               /* What is this */
        !           123:        unsigned char im_mbz;                   /* Must be zero */
        !           124:        unsigned char im_vif;                   /* Interface (this ought to be a vifi_t!) */
        !           125:        unsigned char unused3;
        !           126:        struct in_addr im_src,im_dst;
        !           127: };
        !           128: 
        !           129: /*
        !           130:  *     That's all usermode folks
        !           131:  */
        !           132: 
        !           133: 
        !           134: 
        !           135: #define MFC_ASSERT_THRESH (3*HZ)               /* Maximal freq. of asserts */
        !           136: 
        !           137: /*
        !           138:  *     Pseudo messages used by mrouted
        !           139:  */
        !           140: 
        !           141: #define IGMPMSG_NOCACHE                1               /* Kern cache fill request to mrouted */
        !           142: #define IGMPMSG_WRONGVIF       2               /* For PIM assert processing (unused) */
        !           143: #define IGMPMSG_WHOLEPKT       3               /* For PIM Register processing */
        !           144: 
        !           145: 
        !           146: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>