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