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

##### Functions

    if_iflookup       X
    if_ifwithaddr     X
    if_ifwithdstaddr  X
    if_ifwithnet      X

##### Macros

    same              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[] = "@(#)if.c	5.3 (Berkeley) 4/20/86";
       9: #endif not lint
      10:
      11: /*
      12:  * Routing Table Management Daemon
      13:  */
      14: #include "defs.h"
      15:
      16: extern  struct interface *ifnet;
      17:
      18: /*
      19:  * Find the interface with address addr.
      20:  */
      21: struct interface *
      22: if_ifwithaddr(addr)
      23:     struct sockaddr *addr;
      24: {
      25:     register struct interface *ifp;
      26:
      27: #define same(a1, a2) \
      28:     (bcmp((caddr_t)((a1)->sa_data), (caddr_t)((a2)->sa_data), 14) == 0)
      29:     for (ifp = ifnet; ifp; ifp = ifp->int_next) {
      30:         if (ifp->int_flags & IFF_REMOTE)
      31:             continue;
      32:         if (ifp->int_addr.sa_family != addr->sa_family)
      33:             continue;
      34:         if (same(&ifp->int_addr, addr))
      35:             break;
      36:         if ((ifp->int_flags & IFF_BROADCAST) &&
      37:             same(&ifp->int_broadaddr, addr))
      38:             break;
      39:     }
      40:     return (ifp);
      41: }
      42:
      43: /*
      44:  * Find the point-to-point interface with destination address addr.
      45:  */
      46: struct interface *
      47: if_ifwithdstaddr(addr)
      48:     struct sockaddr *addr;
      49: {
      50:     register struct interface *ifp;
      51:
      52:     for (ifp = ifnet; ifp; ifp = ifp->int_next) {
      53:         if ((ifp->int_flags & IFF_POINTOPOINT) == 0)
      54:             continue;
      55:         if (same(&ifp->int_dstaddr, addr))
      56:             break;
      57:     }
      58:     return (ifp);
      59: }
      60:
      61: /*
      62:  * Find the interface on the network
      63:  * of the specified address.
      64:  */
      65: struct interface *
      66: if_ifwithnet(addr)
      67:     register struct sockaddr *addr;
      68: {
      69:     register struct interface *ifp;
      70:     register int af = addr->sa_family;
      71:     register int (*netmatch)();
      72:
      73:     if (af >= af_max)
      74:         return (0);
      75:     netmatch = afswitch[af].af_netmatch;
      76:     for (ifp = ifnet; ifp; ifp = ifp->int_next) {
      77:         if (ifp->int_flags & IFF_REMOTE)
      78:             continue;
      79:         if (af != ifp->int_addr.sa_family)
      80:             continue;
      81:         if ((*netmatch)(addr, &ifp->int_addr))
      82:             break;
      83:     }
      84:     return (ifp);
      85: }
      86:
      87: /*
      88:  * Find an interface from which the specified address
      89:  * should have come from.  Used for figuring out which
      90:  * interface a packet came in on -- for tracing.
      91:  */
      92: struct interface *
      93: if_iflookup(addr)
      94:     struct sockaddr *addr;
      95: {
      96:     register struct interface *ifp, *maybe;
      97:     register int af = addr->sa_family;
      98:     register int (*netmatch)();
      99:
     100:     if (af >= af_max)
     101:         return (0);
     102:     maybe = 0;
     103:     netmatch = afswitch[af].af_netmatch;
     104:     for (ifp = ifnet; ifp; ifp = ifp->int_next) {
     105:         if (ifp->int_addr.sa_family != af)
     106:             continue;
     107:         if (same(&ifp->int_addr, addr))
     108:             break;
     109:         if ((ifp->int_flags & IFF_BROADCAST) &&
     110:             same(&ifp->int_broadaddr, addr))
     111:             break;
     112:         if ((ifp->int_flags & IFF_POINTOPOINT) &&
     113:             same(&ifp->int_dstaddr, addr))
     114:             break;
     115:         if (maybe == 0 && (*netmatch)(addr, &ifp->int_addr))
     116:             maybe = ifp;
     117:     }
     118:     if (ifp == 0)
     119:         ifp = maybe;
     120:     return (ifp);
     121: }

#### Defined functions

if_iflookup defined in line 92; used 4 times

- in /usr/src/sbin/routed/input.c line 95, 132
- in /usr/src/sbin/routed/interface.h line 63
- in /usr/src/sbin/routed/trace.h line 50

if_ifwithaddr defined in line 21; used 4 times

- in /usr/src/sbin/routed/input.c line 113
- in /usr/src/sbin/routed/interface.h line 60
- in /usr/src/sbin/routed/startup.c line 70, 124

if_ifwithdstaddr defined in line 46; used 5 times

- in /usr/src/sbin/routed/input.c line 27, 130
- in /usr/src/sbin/routed/interface.h line 61
- in /usr/src/sbin/routed/tables.c line 144, 190

if_ifwithnet defined in line 65; used 3 times

- in /usr/src/sbin/routed/interface.h line 62
- in /usr/src/sbin/routed/tables.c line 146, 192

#### Defined variables

sccsid defined in line 8; never used

#### Defined macros

same defined in line 27; used 6 times

- in line 34-37(2), 55, 107-113(3)

Last modified: 1987-07-21 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1181 |