This is if.h in view mode; [Download] [Up]
/*
* $Header: /disk/d/src/devel/gated/dist/src/RCS/if.h,v 2.1 92/02/24 14:12:38 jch Exp $
*/
/*%Copyright%*/
/************************************************************************
* *
* GateD, Release 2 *
* *
* Copyright (c) 1990,1991,1992 by Cornell University *
* All rights reserved. *
* *
* THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY *
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT *
* LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY *
* AND FITNESS FOR A PARTICULAR PURPOSE. *
* *
* Royalty-free licenses to redistribute GateD Release *
* 2 in whole or in part may be obtained by writing to: *
* *
* GateDaemon Project *
* Information Technologies/Network Resources *
* 143 Caldwell Hall *
* Cornell University *
* Ithaca, NY 14853-2602 *
* *
* GateD is based on Kirton's EGP, UC Berkeley's routing *
* daemon (routed), and DCN's HELLO routing Protocol. *
* Development of Release 2 has been supported by the *
* National Science Foundation. *
* *
* Please forward bug fixes, enhancements and questions to the *
* gated mailing list: gated-people@gated.cornell.edu. *
* *
* Authors: *
* *
* Jeffrey C Honig <jch@gated.cornell.edu> *
* Scott W Brim <swb@gated.cornell.edu> *
* *
*************************************************************************
* *
* Portions of this software may fall under the following *
* copyrights: *
* *
* Copyright (c) 1988 Regents of the University of California. *
* All rights reserved. *
* *
* Redistribution and use in source and binary forms are *
* permitted provided that the above copyright notice and *
* this paragraph are duplicated in all such forms and that *
* any documentation, advertising materials, and other *
* materials related to such distribution and use *
* acknowledge that the software was developed by the *
* University of California, Berkeley. The name of the *
* University may not be used to endorse or promote *
* products derived from this software without specific *
* prior written permission. THIS SOFTWARE IS PROVIDED *
* ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, *
* INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF *
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. *
* *
************************************************************************/
/*
* Interface data definitions.
*
* Modified from Routing Table Management Daemon, routed/interface.h
*
* Structure interface stores information about a directly attached interface,
* such as name, internet address, and bound sockets. The interface structures
* are in a singly linked list pointed to by external variable "ifnet".
*/
typedef struct _if_entry {
struct _if_entry *int_next;
sockaddr_un int_addr; /* Interface address */
sockaddr_un int_dstaddr; /* Destination address */
#define int_broadaddr int_dstaddr
sockaddr_un int_net; /* network # */
sockaddr_un int_netmask; /* net mask for addr */
sockaddr_un int_subnet; /* subnet # */
sockaddr_un int_subnetmask; /* subnet mask for addr */
int int_metric; /* init's routing entry */
flag_t int_state; /* see below */
int int_ipackets; /* input packets received */
int int_opackets; /* output packets sent */
char int_name[IFNAMSIZ]; /* from kernel if structure */
u_short int_transitions; /* times gone up-down */
int int_index; /* Index into the kernel's interface table for SNMP */
pref_t int_preference; /* Preference for this interface */
} if_entry;
/* Interface flags. Renamed to IFS_ to avoid conflicts with kernel interface flags */
#define IFS_UP 0x01 /* interface is up */
#define IFS_BROADCAST 0x02 /* broadcast address valid */
#define IFS_POINTOPOINT 0x04 /* interface is point-to-point link */
#define IFS_REMOTE 0x08 /* interface isn't on this machine */
#define IFS_LOOPBACK 0x10 /* This is a loopback interface */
#define IFS_INTERFACE 0x20 /* hardware interface */
#define IFS_SUBNET 0x40 /* is this a subnet interface? */
#define IFS_NOAGE 0x80 /* don't time out/age this interface */
#define IFS_NORIPOUT 0x0100 /* Talk RIP on this interface? */
#define IFS_NORIPIN 0x0200 /* Listen to RIP on this interface? */
#define IFS_NOHELLOOUT 0x0400 /* Talk HELLO on this interface? */
#define IFS_NOHELLOIN 0x0800 /* Listen to HELLO on this interface? */
#define IFS_NOICMPIN 0x1000 /* Listen to ICMP on this interface */
#define IFS_METRICSET 0x2000 /* Set if metric specified in config file */
#define IFS_MULTICAST 0x4000 /* Multicast possible on this interface */
#define IFS_SIMPLEX 0x8000 /* Can't hear my own packets */
/* Flags to maintain during an if_check() */
#define IFS_KEEPMASK (IFS_METRICSET | IFS_NOICMPIN |\
IFS_NOHELLOIN | IFS_NOHELLOOUT |\
IFS_NORIPIN | IFS_NORIPOUT |\
IFS_NOAGE | IFS_LOOPBACK |\
IFS_INTERFACE)
/*
* When we find any interfaces marked down we rescan the
* kernel every CHECK_INTERVAL seconds to see if they've
* come up.
*/
#define IF_CHECK_INTERVAL (1*60)
#define IF_LIST(ifp) for (ifp = ifnet; ifp; ifp = ifp->int_next)
#define IF_LISTEND(ifp)
/* To get the correct address for an interface */
#define IF_ADDR(ifp) ((ifp)->int_state & IFS_POINTOPOINT ? &(ifp)->int_dstaddr : &(ifp)->int_addr)
extern int n_interfaces; /* # internet interfaces */
extern int int_index_max; /* Maximum if_index seen */
extern if_entry *ifnet; /* direct internet interface list */
#ifdef USE_PROTOTYPES
extern void if_init(void);
extern if_entry *if_withdst(sockaddr_un * dstaddr);
extern if_entry *if_withaddr(sockaddr_un * dstaddr);
extern if_entry *if_withname(char *name);
extern u_long if_subnetmask(struct in_addr addr); /* Subnet mask of an address if known */
extern void if_check(timer * tip, time_t interval);
extern void if_display(const char *name, if_entry * ifp);
extern void if_rtupdate(if_entry * ifp);
extern void if_rtup(if_entry * ifp);
extern void if_rtdown(if_entry * ifp);
extern void if_rtinit(void);
#else /* USE_PROTOTYPES */
extern void if_init();
extern if_entry *if_withdst();
extern if_entry *if_withaddr();
extern if_entry *if_withname();
extern u_long if_subnetmask(); /* Subnet mask of an address if known */
extern void if_check();
extern void if_display();
extern void if_rtupdate();
extern void if_rtup();
extern void if_rtdown();
extern void if_rtinit();
#endif /* USE_PROTOTYPES */
extern bits if_flag_bits[]; /* Interface flag bits */
extern int if_rtactive; /* True if a broadcast interface is supplying */
extern task *if_task; /* If check task pointer */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.