# 2.11BSD#431 - /usr/src/sbin/routed/timer.c

##### Functions

    hup               X
    timer             X

##### Variables

    timeval           X

       1: /*
       2:  * Copyright (c) 1983 Regents of the University of California.
       3:  * All rights reserved.  The Berkeley software License Agreement
       4:  * specifies the terms and conditions for redistribution.
       5:  */
       6:
       7: #ifndef lint
       8: static char sccsid[] = "@(#)timer.c	5.3 (Berkeley) 11/20/85";
       9: #endif not lint
      10:
      11: /*
      12:  * Routing Table Management Daemon
      13:  */
      14: #include "defs.h"
      15:
      16: long    timeval = -TIMER_RATE;
      17:
      18: /*
      19:  * Timer routine.  Performs routing information supply
      20:  * duties and manages timers on routing table entries.
      21:  */
      22: timer()
      23: {
      24:     register struct rthash *rh;
      25:     register struct rt_entry *rt;
      26:     struct rthash *base = hosthash;
      27:     int doinghost = 1, timetobroadcast;
      28:     extern int externalinterfaces;
      29:
      30:     timeval += TIMER_RATE;
      31:     if (lookforinterfaces && (timeval % CHECK_INTERVAL) == 0)
      32:         ifinit();
      33:     timetobroadcast = supplier && (timeval % SUPPLY_INTERVAL) == 0;
      34: again:
      35:     for (rh = base; rh < &base[ROUTEHASHSIZ]; rh++) {
      36:         rt = rh->rt_forw;
      37:         for (; rt != (struct rt_entry *)rh; rt = rt->rt_forw) {
      38:             /*
      39: 			 * We don't advance time on a routing entry for
      40: 			 * a passive gateway, or any interface if we're
      41: 			 * not acting as supplier.
      42: 			 */
      43:             if (!(rt->rt_state & RTS_PASSIVE) &&
      44:                 (supplier || !(rt->rt_state & RTS_INTERFACE)))
      45:                 rt->rt_timer += TIMER_RATE;
      46:             if (rt->rt_timer >= EXPIRE_TIME)
      47:                 rt->rt_metric = HOPCNT_INFINITY;
      48:             if (rt->rt_timer >= GARBAGE_TIME) {
      49:                 rt = rt->rt_back;
      50:                 rtdelete(rt->rt_forw);
      51:                 continue;
      52:             }
      53:             if (rt->rt_state & RTS_CHANGED) {
      54:                 rt->rt_state &= ~RTS_CHANGED;
      55:                 /* don't send extraneous packets */
      56:                 if (!supplier || timetobroadcast)
      57:                     continue;
      58:                 msg->rip_cmd = RIPCMD_RESPONSE;
      59:                 msg->rip_vers = RIPVERSION;
      60:                 msg->rip_nets[0].rip_dst = rt->rt_dst;
      61:                 msg->rip_nets[0].rip_dst.sa_family =
      62:                    htons(msg->rip_nets[0].rip_dst.sa_family);
      63:                 msg->rip_nets[0].rip_metric =
      64:                    htonl(min(rt->rt_metric+1L,HOPCNT_INFINITY));
      65:                 toall(sendmsg);
      66:             }
      67:         }
      68:     }
      69:     if (doinghost) {
      70:         doinghost = 0;
      71:         base = nethash;
      72:         goto again;
      73:     }
      74:     if (timetobroadcast)
      75:         toall(supply);
      76:     alarm(TIMER_RATE);
      77: }
      78:
      79: /*
      80:  * On hangup, let everyone know we're going away.
      81:  */
      82: hup()
      83: {
      84:     register struct rthash *rh;
      85:     register struct rt_entry *rt;
      86:     struct rthash *base = hosthash;
      87:     int doinghost = 1;
      88:
      89:     if (supplier) {
      90: again:
      91:         for (rh = base; rh < &base[ROUTEHASHSIZ]; rh++) {
      92:             rt = rh->rt_forw;
      93:             for (; rt != (struct rt_entry *)rh; rt = rt->rt_forw)
      94:                 rt->rt_metric = HOPCNT_INFINITY;
      95:         }
      96:         if (doinghost) {
      97:             doinghost = 0;
      98:             base = nethash;
      99:             goto again;
     100:         }
     101:         toall(supply);
     102:     }
     103:     exit(1);
     104: }

#### Defined functions

hup defined in line 82; used 3 times

- in /usr/src/sbin/routed/main.c line 34, 134-135(2)

timer defined in line 22; used 2 times

- in /usr/src/sbin/routed/defs.h line 65
- in /usr/src/sbin/routed/main.c line 136

#### Defined variables

sccsid defined in line 8; never used
timeval defined in line 16; used 3 times

- in line 30-33(3)

Last modified: 1988-09-06 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1227 |