File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / zebra / interface.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:26:11 2012 UTC (12 years, 4 months ago) by misho
Branches: quagga, MAIN
CVS tags: v0_99_20_1, v0_99_20, HEAD
quagga

    1: /* Interface function header.
    2:  * Copyright (C) 1999 Kunihiro Ishiguro
    3:  *
    4:  * This file is part of GNU Zebra.
    5:  *
    6:  * GNU Zebra is free software; you can redistribute it and/or modify it
    7:  * under the terms of the GNU General Public License as published by the
    8:  * Free Software Foundation; either version 2, or (at your option) any
    9:  * later version.
   10:  *
   11:  * GNU Zebra is distributed in the hope that it will be useful, but
   12:  * WITHOUT ANY WARRANTY; without even the implied warranty of
   13:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   14:  * General Public License for more details.
   15:  *
   16:  * You should have received a copy of the GNU General Public License
   17:  * along with GNU Zebra; see the file COPYING.  If not, write to the Free
   18:  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
   19:  * 02111-1307, USA.  
   20:  */
   21: 
   22: #ifndef _ZEBRA_INTERFACE_H
   23: #define _ZEBRA_INTERFACE_H
   24: 
   25: #include "redistribute.h"
   26: 
   27: #ifdef HAVE_IRDP
   28: #include "zebra/irdp.h"
   29: #endif
   30: 
   31: /* For interface multicast configuration. */
   32: #define IF_ZEBRA_MULTICAST_UNSPEC 0
   33: #define IF_ZEBRA_MULTICAST_ON     1
   34: #define IF_ZEBRA_MULTICAST_OFF    2
   35: 
   36: /* For interface shutdown configuration. */
   37: #define IF_ZEBRA_SHUTDOWN_UNSPEC 0
   38: #define IF_ZEBRA_SHUTDOWN_ON     1
   39: #define IF_ZEBRA_SHUTDOWN_OFF    2
   40: 
   41: /* Router advertisement feature. */
   42: #if (defined(LINUX_IPV6) && (defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1)) || defined(KAME)
   43:   #ifdef HAVE_RTADV
   44:     #define RTADV
   45:   #endif
   46: #endif
   47: 
   48: #ifdef RTADV
   49: /* Router advertisement parameter.  From RFC2461, RFC3775 and RFC4191. */
   50: struct rtadvconf
   51: {
   52:   /* A flag indicating whether or not the router sends periodic Router
   53:      Advertisements and responds to Router Solicitations.
   54:      Default: FALSE */
   55:   int AdvSendAdvertisements;
   56: 
   57:   /* The maximum time allowed between sending unsolicited multicast
   58:      Router Advertisements from the interface, in milliseconds.
   59:      MUST be no less than 70 ms (RFC3775, section 7.4) and no greater 
   60:      than 1800000 ms (See RFC2461).
   61: 
   62:      Default: 600000 milliseconds */
   63:   int MaxRtrAdvInterval;
   64: #define RTADV_MAX_RTR_ADV_INTERVAL 600000
   65: 
   66:   /* The minimum time allowed between sending unsolicited multicast
   67:      Router Advertisements from the interface, in milliseconds.
   68:      MUST be no less than 30 ms (See RFC3775, section 7.4). 
   69:      MUST be no greater than .75 * MaxRtrAdvInterval.
   70: 
   71:      Default: 0.33 * MaxRtrAdvInterval */
   72:   int MinRtrAdvInterval;
   73: #define RTADV_MIN_RTR_ADV_INTERVAL (0.33 * RTADV_MAX_RTR_ADV_INTERVAL)
   74: 
   75:   /* Unsolicited Router Advertisements' interval timer. */
   76:   int AdvIntervalTimer;
   77: 
   78:   /* The TRUE/FALSE value to be placed in the "Managed address
   79:      configuration" flag field in the Router Advertisement.  See
   80:      [ADDRCONF].
   81:  
   82:      Default: FALSE */
   83:   int AdvManagedFlag;
   84: 
   85: 
   86:   /* The TRUE/FALSE value to be placed in the "Other stateful
   87:      configuration" flag field in the Router Advertisement.  See
   88:      [ADDRCONF].
   89: 
   90:      Default: FALSE */
   91:   int AdvOtherConfigFlag;
   92: 
   93:   /* The value to be placed in MTU options sent by the router.  A
   94:      value of zero indicates that no MTU options are sent.
   95: 
   96:      Default: 0 */
   97:   int AdvLinkMTU;
   98: 
   99: 
  100:   /* The value to be placed in the Reachable Time field in the Router
  101:      Advertisement messages sent by the router.  The value zero means
  102:      unspecified (by this router).  MUST be no greater than 3,600,000
  103:      milliseconds (1 hour).
  104: 
  105:      Default: 0 */
  106:   u_int32_t AdvReachableTime;
  107: #define RTADV_MAX_REACHABLE_TIME 3600000
  108: 
  109: 
  110:   /* The value to be placed in the Retrans Timer field in the Router
  111:      Advertisement messages sent by the router.  The value zero means
  112:      unspecified (by this router).
  113: 
  114:      Default: 0 */
  115:   int AdvRetransTimer;
  116: 
  117:   /* The default value to be placed in the Cur Hop Limit field in the
  118:      Router Advertisement messages sent by the router.  The value
  119:      should be set to that current diameter of the Internet.  The
  120:      value zero means unspecified (by this router).
  121: 
  122:      Default: The value specified in the "Assigned Numbers" RFC
  123:      [ASSIGNED] that was in effect at the time of implementation. */
  124:   int AdvCurHopLimit;
  125: 
  126:   /* The value to be placed in the Router Lifetime field of Router
  127:      Advertisements sent from the interface, in seconds.  MUST be
  128:      either zero or between MaxRtrAdvInterval and 9000 seconds.  A
  129:      value of zero indicates that the router is not to be used as a
  130:      default router.
  131: 
  132:      Default: 3 * MaxRtrAdvInterval */
  133:   int AdvDefaultLifetime;
  134: #define RTADV_ADV_DEFAULT_LIFETIME (3 * RTADV_MAX_RTR_ADV_INTERVAL)
  135: 
  136: 
  137:   /* A list of prefixes to be placed in Prefix Information options in
  138:      Router Advertisement messages sent from the interface.
  139: 
  140:      Default: all prefixes that the router advertises via routing
  141:      protocols as being on-link for the interface from which the
  142:      advertisement is sent. The link-local prefix SHOULD NOT be
  143:      included in the list of advertised prefixes. */
  144:   struct list *AdvPrefixList;
  145: 
  146:   /* The TRUE/FALSE value to be placed in the "Home agent"
  147:      flag field in the Router Advertisement.  See [RFC3775 7.1].
  148: 
  149:      Default: FALSE */
  150:   int AdvHomeAgentFlag;
  151: #ifndef ND_RA_FLAG_HOME_AGENT
  152: #define ND_RA_FLAG_HOME_AGENT 	0x20
  153: #endif
  154: 
  155:   /* The value to be placed in Home Agent Information option if Home 
  156:      Flag is set.
  157:      Default: 0 */
  158:   int HomeAgentPreference;
  159: 
  160:   /* The value to be placed in Home Agent Information option if Home 
  161:      Flag is set. Lifetime (seconds) MUST not be greater than 18.2 
  162:      hours. 
  163:      The value 0 has special meaning: use of AdvDefaultLifetime value.
  164:      
  165:      Default: 0 */
  166:   int HomeAgentLifetime;
  167: #define RTADV_MAX_HALIFETIME 65520 /* 18.2 hours */
  168: 
  169:   /* The TRUE/FALSE value to insert or not an Advertisement Interval
  170:      option. See [RFC 3775 7.3]
  171: 
  172:      Default: FALSE */
  173:   int AdvIntervalOption;
  174: 
  175:   /* The value to be placed in the Default Router Preference field of
  176:      a router advertisement. See [RFC 4191 2.1 & 2.2]
  177: 
  178:      Default: 0 (medium) */
  179:   int DefaultPreference;
  180: #define RTADV_PREF_MEDIUM 0x0 /* Per RFC4191. */
  181: };
  182: 
  183: #endif /* RTADV */
  184: 
  185: /* `zebra' daemon local interface structure. */
  186: struct zebra_if
  187: {
  188:   /* Shutdown configuration. */
  189:   u_char shutdown;
  190: 
  191:   /* Multicast configuration. */
  192:   u_char multicast;
  193: 
  194:   /* Router advertise configuration. */
  195:   u_char rtadv_enable;
  196: 
  197:   /* Installed addresses chains tree. */
  198:   struct route_table *ipv4_subnets;
  199: 
  200: #ifdef RTADV
  201:   struct rtadvconf rtadv;
  202: #endif /* RTADV */
  203: 
  204: #ifdef HAVE_IRDP
  205:   struct irdp_interface irdp;
  206: #endif
  207: 
  208: #ifdef SUNOS_5
  209:   /* the real IFF_UP state of the primary interface.
  210:    * need this to differentiate between all interfaces being
  211:    * down (but primary still plumbed) and primary having gone
  212:    * ~IFF_UP, and all addresses gone.
  213:    */
  214:   u_char primary_state;
  215: #endif /* SUNOS_5 */
  216: };
  217: 
  218: extern void if_delete_update (struct interface *ifp);
  219: extern void if_add_update (struct interface *ifp);
  220: extern void if_up (struct interface *);
  221: extern void if_down (struct interface *);
  222: extern void if_refresh (struct interface *);
  223: extern void if_flags_update (struct interface *, uint64_t);
  224: extern int if_subnet_add (struct interface *, struct connected *);
  225: extern int if_subnet_delete (struct interface *, struct connected *);
  226: 
  227: #ifdef HAVE_PROC_NET_DEV
  228: extern void ifstat_update_proc (void);
  229: #endif /* HAVE_PROC_NET_DEV */
  230: #ifdef HAVE_NET_RT_IFLIST
  231: extern void ifstat_update_sysctl (void);
  232: 
  233: #endif /* HAVE_NET_RT_IFLIST */
  234: #ifdef HAVE_PROC_NET_DEV
  235: extern int interface_list_proc (void);
  236: #endif /* HAVE_PROC_NET_DEV */
  237: #ifdef HAVE_PROC_NET_IF_INET6
  238: extern int ifaddr_proc_ipv6 (void);
  239: #endif /* HAVE_PROC_NET_IF_INET6 */
  240: 
  241: #ifdef BSDI
  242: extern int if_kvm_get_mtu (struct interface *);
  243: #endif /* BSDI */
  244: 
  245: #endif /* _ZEBRA_INTERFACE_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>