1 /* 2 * The mrouted program is covered by the license in the accompanying file 3 * named "LICENSE". Use of the mrouted program represents acceptance of 4 * the terms and conditions listed in that file. 5 * 6 * The mrouted program is COPYRIGHT 1989 by The Board of Trustees of 7 * Leland Stanford Junior University. 8 * 9 * 10 * $Id: defs.h,v 1.4 1995/06/01 02:25:51 mycroft Exp $ 11 */ 12 13 14 #include <sys/param.h> 15 #include <sys/types.h> 16 #include <sys/socket.h> 17 #include <sys/ioctl.h> 18 #include <sys/time.h> 19 #include <net/if.h> 20 #include <netinet/in.h> 21 #include <netinet/in_systm.h> 22 #include <netinet/ip.h> 23 #include <netinet/igmp.h> 24 #include <netinet/ip_mroute.h> 25 #include <ctype.h> 26 #include <errno.h> 27 #include <stdio.h> 28 #include <syslog.h> 29 #include <signal.h> 30 #ifdef RSRR 31 #include <sys/un.h> 32 #endif /* RSRR */ 33 34 #include "dvmrp.h" 35 #include "vif.h" 36 #include "route.h" 37 #include "prune.h" 38 #include "pathnames.h" 39 #ifdef RSRR 40 #include "rsrr.h" 41 #endif /* RSRR */ 42 43 /* 44 * Miscellaneous constants and macros. 45 */ 46 #define FALSE 0 47 #define TRUE 1 48 49 #define EQUAL(s1, s2) (strcmp((s1), (s2)) == 0) 50 51 #define TIMER_INTERVAL ROUTE_MAX_REPORT_DELAY 52 53 #define PROTOCOL_VERSION 3 /* increment when packet format/content changes */ 54 55 #define MROUTED_VERSION 5 /* increment on local changes or bug fixes, */ 56 /* reset to 0 whever PROTOCOL_VERSION increments */ 57 58 #define MROUTED_LEVEL ( (MROUTED_VERSION << 8) | PROTOCOL_VERSION | \ 59 ((NF_PRUNE | NF_GENID | NF_MTRACE) << 16)) 60 /* for IGMP 'group' field of DVMRP messages */ 61 62 #define LEAF_FLAGS (( vifs_with_neighbors == 1 ) ? 0x010000 : 0) 63 /* more for IGMP 'group' field of DVMRP messages */ 64 #define DEL_RTE_GROUP 0 65 #define DEL_ALL_ROUTES 1 66 /* for Deleting kernel table entries */ 67 68 /* obnoxious gcc gives an extraneous warning about this constant... */ 69 #if defined(__STDC__) || defined(__GNUC__) 70 #define JAN_1970 2208988800UL /* 1970 - 1900 in seconds */ 71 #else 72 #define JAN_1970 2208988800L /* 1970 - 1900 in seconds */ 73 #endif 74 75 #ifdef RSRR 76 #define BIT_ZERO(X) ((X) = 0) 77 #define BIT_SET(X,n) ((X) |= 1 << (n)) 78 #define BIT_CLR(X,n) ((X) &= ~(1 << (n))) 79 #define BIT_TST(X,n) ((X) & 1 << (n)) 80 #endif /* RSRR */ 81 82 /* 83 * External declarations for global variables and functions. 84 */ 85 #define RECV_BUF_SIZE MAX_IP_PACKET_LEN 86 extern char *recv_buf; 87 extern char *send_buf; 88 extern int igmp_socket; 89 #ifdef RSRR 90 extern int rsrr_socket; 91 #endif /* RSRR */ 92 extern u_int32_t allhosts_group; 93 extern u_int32_t allrtrs_group; 94 extern u_int32_t dvmrp_group; 95 extern u_int32_t dvmrp_genid; 96 97 #define DEFAULT_DEBUG 2 /* default if "-d" given without value */ 98 99 extern int debug; 100 extern u_char pruning; 101 102 extern int routes_changed; 103 extern int delay_change_reports; 104 extern unsigned nroutes; 105 106 extern struct uvif uvifs[MAXVIFS]; 107 extern vifi_t numvifs; 108 extern int vifs_down; 109 extern int udp_socket; 110 extern int vifs_with_neighbors; 111 112 extern char s1[]; 113 extern char s2[]; 114 extern char s3[]; 115 extern char s4[]; 116 117 extern void log(); 118 119 extern void init_igmp(); 120 extern void accept_igmp(); 121 extern void send_igmp(); 122 123 extern void init_routes(); 124 extern void start_route_updates(); 125 extern void update_route(); 126 extern void age_routes(); 127 extern void expire_all_routes(); 128 extern void free_all_routes(); 129 130 extern void accept_probe(); 131 extern void accept_report(); 132 extern void report(); 133 extern void report_to_all_neighbors(); 134 extern int report_next_chunk(); 135 extern void add_vif_to_routes(); 136 extern void delete_vif_from_routes(); 137 extern void delete_neighbor_from_routes(); 138 extern void dump_routes(); 139 140 extern void init_vifs(); 141 extern void check_vif_state(); 142 extern vifi_t find_vif(); 143 extern void age_vifs(); 144 extern void dump_vifs(); 145 extern void stop_all_vifs(); 146 extern struct listaddr *neighbor_info(); 147 148 extern void accept_group_report(); 149 extern void query_groups(); 150 extern void probe_for_neighbors(); 151 extern int update_neighbor(); 152 extern void accept_neighbor_request(); 153 extern void accept_neighbor_request2(); 154 extern void accept_neighbors(); 155 extern void accept_neighbors2(); 156 157 extern void config_vifs_from_kernel(); 158 extern void config_vifs_from_file(); 159 160 extern int inet_valid_host(); 161 extern int inet_valid_subnet(); 162 extern char * inet_fmt(); 163 extern char * inet_fmts(); 164 extern u_int32_t inet_parse(); 165 extern int inet_cksum(); 166 167 extern struct rtentry * determine_route(); 168 169 extern void init_ktable(); 170 extern void add_table_entry(); 171 extern void del_table_entry(); 172 extern void update_table_entry(); 173 extern void update_lclgrp(); 174 extern void delete_lclgrp(); 175 176 extern unsigned kroutes; 177 extern void accept_prune(); 178 extern int no_entry_exists(); 179 extern int rtr_cnt(); 180 extern void free_all_prunes(); 181 extern void age_table_entry(); 182 extern void dump_cache(); 183 184 #ifdef SNMP 185 extern struct rtentry * snmp_find_route(); 186 extern struct gtable * find_grp(); 187 extern struct stable * find_grp_src(); 188 #endif 189 190 extern void chkgrp_graft(); 191 extern void accept_graft(); 192 extern void accept_g_ack(); 193 extern void accept_mtrace(); 194 extern void accept_leave_message(); 195 extern void accept_membership_query(); 196 #ifdef RSRR 197 extern struct gtable *kernel_table; 198 extern struct gtable *gtp; 199 extern int find_src_grp(); 200 extern int grplst_mem(); 201 extern int scoped_addr(); 202 #endif /* RSRR */ 203 204 extern void k_set_rcvbuf(); 205 extern void k_hdr_include(); 206 extern void k_set_ttl(); 207 extern void k_set_loop(); 208 extern void k_set_if(); 209 extern void k_join(); 210 extern void k_leave(); 211 extern void k_init_dvmrp(); 212 extern void k_stop_dvmrp(); 213 extern void k_add_vif(); 214 extern void k_del_vif(); 215 extern void k_add_rg(); 216 extern int k_del_rg(); 217 extern int k_get_version(); 218 219 extern char * malloc(); 220 extern char * fgets(); 221 extern FILE * fopen(); 222 223 #if !defined(htonl) && !defined(__osf__) 224 extern u_long htonl(); 225 extern u_long ntohl(); 226 #endif 227 228 #ifdef RSRR 229 extern void rsrr_init(); 230 extern void rsrr_read(); 231 #endif /* RSRR */ 232