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