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>