1/* 2 * $Id: rtmp.h,v 1.5 2009-10-13 22:55:37 didg Exp $ 3 * Copyright (c) 1990,1993 Regents of The University of Michigan. 4 * All Rights Reserved. See COPYRIGHT. 5 * 6 * We have an rtmptab circular linked list for each gateway. Entries 7 * are inserted in the order we get them. The expectation is that 8 * we will get a complexity of N for the stable case. If we have N 9 * existing entries, and M new entries, we'll have on the order of 10 * N + ( M * N ) complexity (really it will be something more than 11 * that, maybe N + ( M * ( N + 1/2 M )). Note that having a list to 12 * search is superior to a hash table if you are expecting bad data: 13 * you have the opportunity to range-check the incoming data. 14 * 15 * We keep several ZIP related flags and counters here. For ZIP Extended 16 * Replies, we must keep a flag indicating that the zone is up or down. 17 * This flag is necessary for ZIP Extended Replies which cross packet 18 * boundaries: even tho the rtmptab entry has data, it is not yet 19 * complete. For ZIP in general, we keep a flag indicating that we've 20 * asked for a ZIP (E)Reply. If this flag is not set, we won't process 21 * ZIP Reply data for given rtmptab entries. Lastly, we keep a count of 22 * the number of times we've asked for ZIP Reply data. When this value 23 * reaches some value (3?), we can optionally stop asking. 24 */ 25 26#ifndef ATALKD_RTMP_H 27#define ATALKD_RTMP_H 1 28 29#include <sys/cdefs.h> 30 31struct rtmptab { 32 struct rtmptab *rt_next, 33 *rt_prev; 34 struct rtmptab *rt_inext, 35 *rt_iprev; 36 u_short rt_firstnet, rt_lastnet; 37 u_char rt_hops; 38 u_char rt_state; 39 u_char rt_flags; 40 u_char rt_nzq; /* number of zip queries issued */ 41 struct gate *rt_gate; /* gate is NULL for interfaces */ 42 struct list *rt_zt; 43 const struct interface *rt_iface; 44}; 45 46struct rtmp_head { 47 u_short rh_net; 48 u_char rh_nodelen; 49 u_char rh_node; 50}; 51 52struct rtmp_tuple { 53 u_short rt_net; 54 u_char rt_dist; 55}; 56#define SZ_RTMPTUPLE 3 57 58#define RTMPTAB_PERM 0 59#define RTMPTAB_GOOD 1 60#define RTMPTAB_SUSP1 2 61#define RTMPTAB_SUSP2 3 62#define RTMPTAB_BAD 4 63 64#define RTMPTAB_ZIPQUERY 0x01 65#define RTMPTAB_HASZONES 0x02 66#define RTMPTAB_EXTENDED 0x04 67#define RTMPTAB_ROUTE 0x08 68 69#ifndef BSD4_4 70#define RTMP_ADD SIOCADDRT 71#define RTMP_DEL SIOCDELRT 72#else /* BSD4_4 */ 73#define RTMP_ADD RTM_ADD 74#define RTMP_DEL RTM_DELETE 75#endif /* BSD4_4 */ 76 77#define STARTUP_FIRSTNET 0xff00 78#define STARTUP_LASTNET 0xfffe 79 80extern int rtfd; 81struct rtmptab *newrt (const struct interface *); 82void rtmp_delzonemap (struct rtmptab *); 83 84int rtmp_request ( struct interface * ); 85void rtmp_free ( struct rtmptab * ); 86int rtmp_replace ( struct rtmptab * ); 87int looproute ( struct interface *, unsigned int ); 88int gateroute ( unsigned int, struct rtmptab * ); 89 90struct atport; 91 92int rtmp_packet(struct atport *ap, struct sockaddr_at *from, char *data, int len); 93 94#endif /* atalkd/rtmp.h */ 95