Annotation of embedaddon/quagga/zebra/interface.h, revision 1.1

1.1     ! misho       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>