source: svn/trunk/newcon3bcm2_21bu/toolchain/mips-linux-uclibc/include/linux/mroute.h

Last change on this file was 2, checked in by jglee, 11 years ago

first commit

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