• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/ap/gpl/timemachine/netatalk-2.2.0/etc/atalkd/

Lines Matching refs:rtmp

2  * $Id: rtmp.c,v 1.17 2009-12-08 03:21:16 didg Exp $
35 #include <atalk/rtmp.h>
39 #include "rtmp.h"
46 void rtmp_delzonemap(struct rtmptab *rtmp)
51 lz = rtmp->rt_zt;
56 if ( (struct rtmptab *)lr->l_data == rtmp ) {
92 rtmp->rt_zt = NULL;
159 * Delete rtmp from the per-interface in-use table, remove all
162 static void rtmp_delinuse(struct rtmptab *rtmp)
166 irt = rtmp->rt_gate->g_iface->i_rt;
167 if ( irt->rt_inext == rtmp ) { /* first */
168 if ( rtmp->rt_iprev == rtmp ) { /* only */
171 irt->rt_inext = rtmp->rt_inext;
172 rtmp->rt_inext->rt_iprev = rtmp->rt_iprev;
175 if ( rtmp->rt_inext == NULL ) { /* last */
176 rtmp->rt_iprev->rt_inext = NULL;
177 irt->rt_inext->rt_iprev = rtmp->rt_iprev;
179 rtmp->rt_iprev->rt_inext = rtmp->rt_inext;
180 rtmp->rt_inext->rt_iprev = rtmp->rt_iprev;
183 rtmp->rt_iprev = NULL;
184 rtmp->rt_inext = NULL;
187 rtmp_delzonemap(rtmp);
190 gateroute( RTMP_DEL, rtmp );
194 * Add rtmp to the per-interface in-use table. No verification is done...
196 static void rtmp_addinuse( struct rtmptab *rtmp)
200 gateroute( RTMP_ADD, rtmp );
202 irt = rtmp->rt_gate->g_iface->i_rt;
204 rtmp->rt_inext = NULL;
205 rtmp->rt_iprev = rtmp;
206 irt->rt_inext = rtmp;
208 rtmp->rt_inext = irt->rt_inext;
209 rtmp->rt_iprev = irt->rt_inext->rt_iprev;
210 irt->rt_inext->rt_iprev = rtmp;
211 irt->rt_inext = rtmp;
250 * Remove rtmp from the in-use table and the per-gate table.
253 void rtmp_free( struct rtmptab *rtmp)
257 LOG(log_info, logtype_atalkd, "rtmp_free: %u-%u", ntohs(rtmp->rt_firstnet),
258 ntohs(rtmp->rt_lastnet));
259 if ( rtmp->rt_iprev ) {
260 rtmp_delinuse( rtmp );
264 gate = rtmp->rt_gate;
265 if ( gate->g_rt == rtmp ) { /* first */
266 if ( rtmp->rt_prev == rtmp ) { /* only */
269 gate->g_rt = rtmp->rt_next;
270 rtmp->rt_next->rt_prev = rtmp->rt_prev;
273 if ( rtmp->rt_next == NULL ) { /* last */
274 rtmp->rt_prev->rt_next = NULL;
275 gate->g_rt->rt_prev = rtmp->rt_prev;
277 rtmp->rt_prev->rt_next = rtmp->rt_next;
278 rtmp->rt_next->rt_prev = rtmp->rt_prev;
282 free( rtmp );
294 struct rtmptab *rtmp, *found = NULL;
304 for ( rtmp = gate->g_rt; rtmp; rtmp = rtmp->rt_next ) {
305 if ( rtmp->rt_firstnet == replace->rt_firstnet &&
306 rtmp->rt_lastnet == replace->rt_lastnet ) {
307 if ( found == NULL || rtmp->rt_hops < found->rt_hops ) {
308 found = rtmp;
334 static int rtmp_new(struct rtmptab *rtmp)
346 if ((rtmp->rt_iface != i) &&
352 if (( ntohs( r->rt_firstnet ) <= ntohs( rtmp->rt_firstnet ) &&
353 ntohs( r->rt_lastnet ) >= ntohs( rtmp->rt_firstnet )) ||
354 ( ntohs( r->rt_firstnet ) <= ntohs( rtmp->rt_lastnet ) &&
355 ntohs( r->rt_lastnet ) >= ntohs( rtmp->rt_lastnet ))) {
368 if ( r->rt_firstnet != rtmp->rt_firstnet ||
369 r->rt_lastnet != rtmp->rt_lastnet ) {
372 ntohs( rtmp->rt_firstnet ), ntohs( rtmp->rt_lastnet ));
383 if ( r->rt_hops < rtmp->rt_hops ) {
387 if (rtmp_copyzones( rtmp, r ) < 0)
392 rtmp_addinuse( rtmp );
404 struct rtmptab *rtmp;
601 for ( rtmp = gate->g_rt; rtmp; rtmp = rtmp->rt_next ) {
602 if ( ntohs( rtmp->rt_firstnet ) <= ntohs( rt.rt_net ) &&
603 ntohs( rtmp->rt_lastnet ) >= ntohs( rt.rt_net )) {
607 ntohs( rtmp->rt_firstnet ) <= ntohs( xrt.rt_net ) &&
608 ntohs( rtmp->rt_lastnet ) >= ntohs( xrt.rt_net )) {
613 if ( rtmp ) { /* found it */
618 if ( rtmp->rt_firstnet != rt.rt_net ) {
620 ntohs( rtmp->rt_firstnet ), ntohs( rt.rt_net ));
624 if (( rtmp->rt_flags & RTMPTAB_EXTENDED ) == 0 ) {
626 ntohs( rtmp->rt_firstnet ));
629 if ( rtmp->rt_lastnet != xrt.rt_net ) {
631 ntohs( rtmp->rt_lastnet ), ntohs( xrt.rt_net ));
635 if ( rtmp->rt_flags & RTMPTAB_EXTENDED ) {
637 ntohs( rtmp->rt_firstnet ));
640 if ( rtmp->rt_lastnet != rt.rt_net ) {
642 ntohs( rtmp->rt_lastnet ), ntohs( rt.rt_net ));
647 rtmp->rt_state = RTMPTAB_GOOD;
653 if (( rtmp->rt_hops != ( rt.rt_dist & 0x7f ) + 1 ) &&
654 ( rtmp->rt_hops != RTMPHOPS_POISON ||
656 if ( rtmp->rt_iprev ) { /* route is in use */
657 if ( rtmp->rt_hops > ( rt.rt_dist & 0x7f ) + 1 ) {
662 if ( rtmp->rt_hops == RTMPHOPS_POISON ) {
663 gateroute( RTMP_ADD, rtmp );
665 rtmp->rt_hops = ( rt.rt_dist & 0x7f ) + 1;
674 rtmp->rt_hops = RTMPHOPS_POISON;
676 rtmp->rt_hops = ( rt.rt_dist & 0x7f ) + 1;
678 if (rtmp_replace( rtmp ) < 0) {
684 rtmp->rt_hops = ( rt.rt_dist & 0x7f ) + 1;
685 if ( rtmp->rt_hops > ( rt.rt_dist & 0x7f ) + 1 ) {
686 if (rtmp_new( rtmp ) < 0) {
699 if ( rtmp->rt_next != NULL ) {
701 gate->g_rt = rtmp->rt_next;
702 rtmp->rt_next = NULL;
709 if (( rtmp = newrt(iface)) == NULL ) {
713 rtmp->rt_firstnet = rt.rt_net;
715 rtmp->rt_lastnet = xrt.rt_net;
716 rtmp->rt_flags = RTMPTAB_EXTENDED;
718 rtmp->rt_lastnet = rt.rt_net;
720 rtmp->rt_hops = ( rt.rt_dist & 0x7f ) + 1;
721 rtmp->rt_state = RTMPTAB_GOOD;
722 rtmp->rt_gate = gate;
728 rtmp->rt_prev = rtmp;
729 gate->g_rt = rtmp;
731 rtmp->rt_prev = gate->g_rt->rt_prev;
732 gate->g_rt->rt_prev->rt_next = rtmp;
733 gate->g_rt->rt_prev = rtmp;
736 if (rtmp_new( rtmp ) < 0) {
834 LOG(log_error, logtype_atalkd, "rtmp_request can't find rtmp socket!" );
915 int gateroute(unsigned int command, struct rtmptab *rtmp)
920 if ( command == RTMP_DEL && ( rtmp->rt_flags & RTMPTAB_ROUTE ) == 0 ) {
923 if ( command == RTMP_ADD && ( rtmp->rt_flags & RTMPTAB_ROUTE )) {
927 net = ntohs( rtmp->rt_firstnet );
939 gate.sat_addr.s_net = rtmp->rt_gate->g_sat.sat_addr.s_net;
940 gate.sat_addr.s_node = rtmp->rt_gate->g_sat.sat_addr.s_node;
974 } while ( net++ < ntohs( rtmp->rt_lastnet ));
977 rtmp->rt_flags |= RTMPTAB_ROUTE;
980 rtmp->rt_flags &= ~RTMPTAB_ROUTE;
989 struct rtmptab *rtmp;
991 if (( rtmp = (struct rtmptab *)calloc(1, sizeof(struct rtmptab))) == NULL ) {
995 rtmp->rt_iface = iface;
996 return( rtmp );