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